mirror of
https://github.com/RPCSX/llvm.git
synced 2025-01-22 04:05:05 +00:00
[Docs][CodeGenerator] Don't specify the number of operands in BuildMI
Patch by Visoiu Mistrih Francis. Differential Revision: http://reviews.llvm.org/D21819 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@274128 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
38b2095b3e
commit
a40782d826
@ -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…
x
Reference in New Issue
Block a user