diff options
| -rw-r--r-- | llvm/docs/CodeGenerator.rst | 27 | ||||
| -rw-r--r-- | llvm/include/llvm/CodeGen/MachineInstrBuilder.h | 4 | 
2 files changed, 14 insertions, 17 deletions
diff --git a/llvm/docs/CodeGenerator.rst b/llvm/docs/CodeGenerator.rst index fc537a7f6c0..6a54343dfba 100644 --- a/llvm/docs/CodeGenerator.rst +++ b/llvm/docs/CodeGenerator.rst @@ -386,32 +386,27 @@ functions make it easy to build arbitrary machine instructions.  Usage of the  .. code-block:: c++    // Create a 'DestReg = mov 42' (rendered in X86 assembly as 'mov DestReg, 42') -  // instruction.  The '1' specifies how many operands will be added. -  MachineInstr *MI = BuildMI(X86::MOV32ri, 1, DestReg).addImm(42); - -  // Create the same instr, but insert it at the end of a basic block. +  // instruction and insert it at the end of the given MachineBasicBlock. +  const TargetInstrInfo &TII = ...    MachineBasicBlock &MBB = ... -  BuildMI(MBB, X86::MOV32ri, 1, DestReg).addImm(42); +  DebugLoc DL; +  MachineInstr *MI = BuildMI(MBB, DL, TII.get(X86::MOV32ri), DestReg).addImm(42);    // Create the same instr, but insert it before a specified iterator point.    MachineBasicBlock::iterator MBBI = ... -  BuildMI(MBB, MBBI, X86::MOV32ri, 1, DestReg).addImm(42); +  BuildMI(MBB, MBBI, DL, TII.get(X86::MOV32ri), DestReg).addImm(42);    // Create a 'cmp Reg, 0' instruction, no destination reg. -  MI = BuildMI(X86::CMP32ri, 2).addReg(Reg).addImm(0); +  MI = BuildMI(MBB, DL, TII.get(X86::CMP32ri8)).addReg(Reg).addImm(42);    // Create an 'sahf' instruction which takes no operands and stores nothing. -  MI = BuildMI(X86::SAHF, 0); +  MI = BuildMI(MBB, DL, TII.get(X86::SAHF));    // Create a self looping branch instruction. -  BuildMI(MBB, X86::JNE, 1).addMBB(&MBB); - -The key thing to remember with the ``BuildMI`` functions is that you have to -specify the number of operands that the machine instruction will take.  This -allows for efficient memory allocation.  You also need to specify if operands -default to be uses of values, not definitions.  If you need to add a definition -operand (other than the optional destination register), you must explicitly mark -it as such: +  BuildMI(MBB, DL, TII.get(X86::JNE)).addMBB(&MBB); + +If you need to add a definition operand (other than the optional destination +register), you must explicitly mark it as such:  .. code-block:: c++ diff --git a/llvm/include/llvm/CodeGen/MachineInstrBuilder.h b/llvm/include/llvm/CodeGen/MachineInstrBuilder.h index 741327a42c7..233472bcda9 100644 --- a/llvm/include/llvm/CodeGen/MachineInstrBuilder.h +++ b/llvm/include/llvm/CodeGen/MachineInstrBuilder.h @@ -10,7 +10,9 @@  // This file exposes a function named BuildMI, which is useful for dramatically  // simplifying how MachineInstr's are created.  It allows use of code like this:  // -//   M = BuildMI(X86::ADDrr8, 2).addReg(argVal1).addReg(argVal2); +//   M = BuildMI(MBB, MI, DL, TII.get(X86::ADD8rr), Dst) +//           .addReg(argVal1) +//           .addReg(argVal2);  //  //===----------------------------------------------------------------------===//  | 

