forked from OSchip/llvm-project
[Docs][CodeGenerator] Don't specify the number of operands in BuildMI
Patch by Visoiu Mistrih Francis. Differential Revision: http://reviews.llvm.org/D21819 llvm-svn: 274128
This commit is contained in:
parent
f9c5908ffd
commit
3da1078a9b
|
@ -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);
|
||||
BuildMI(MBB, DL, TII.get(X86::JNE)).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:
|
||||
If you need to add a definition operand (other than the optional destination
|
||||
register), you must explicitly mark it as such:
|
||||
|
||||
.. code-block:: c++
|
||||
|
||||
|
|
|
@ -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);
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
|
|
Loading…
Reference in New Issue