MachineInstrBuilder.h revision 9696a90ee66e1c6c818c8de3d9ffc32732d9d82f
1f0136b376e2ff9b816ab4cbd4ac82df87b5c52b4Chris Lattner//===-- CodeGen/MachineInstBuilder.h - Simplify creation of MIs -*- C++ -*-===// 26fbcc26f1460eaee4e0eb8b426fc1ff0c7af11beJohn Criswell// 36fbcc26f1460eaee4e0eb8b426fc1ff0c7af11beJohn Criswell// The LLVM Compiler Infrastructure 46fbcc26f1460eaee4e0eb8b426fc1ff0c7af11beJohn Criswell// 56fbcc26f1460eaee4e0eb8b426fc1ff0c7af11beJohn Criswell// This file was developed by the LLVM research group and is distributed under 66fbcc26f1460eaee4e0eb8b426fc1ff0c7af11beJohn Criswell// the University of Illinois Open Source License. See LICENSE.TXT for details. 76fbcc26f1460eaee4e0eb8b426fc1ff0c7af11beJohn Criswell// 86fbcc26f1460eaee4e0eb8b426fc1ff0c7af11beJohn Criswell//===----------------------------------------------------------------------===// 9f0136b376e2ff9b816ab4cbd4ac82df87b5c52b4Chris Lattner// 10f0136b376e2ff9b816ab4cbd4ac82df87b5c52b4Chris Lattner// This file exposes a function named BuildMI, which is useful for dramatically 11f0136b376e2ff9b816ab4cbd4ac82df87b5c52b4Chris Lattner// simplifying how MachineInstr's are created. Instead of using code like this: 12f0136b376e2ff9b816ab4cbd4ac82df87b5c52b4Chris Lattner// 1391ad59d75e46eafbea63fe7d4807cc1d22fac565Brian Gaeke// M = new MachineInstr(X86::ADDrr8); 14f0136b376e2ff9b816ab4cbd4ac82df87b5c52b4Chris Lattner// M->SetMachineOperandVal(0, MachineOperand::MO_VirtualRegister, argVal1); 15f0136b376e2ff9b816ab4cbd4ac82df87b5c52b4Chris Lattner// M->SetMachineOperandVal(1, MachineOperand::MO_VirtualRegister, argVal2); 16f0136b376e2ff9b816ab4cbd4ac82df87b5c52b4Chris Lattner// 17f0136b376e2ff9b816ab4cbd4ac82df87b5c52b4Chris Lattner// we can now use code like this: 18f0136b376e2ff9b816ab4cbd4ac82df87b5c52b4Chris Lattner// 199ed63ee0fcaa6730eb1df8c1ddbf5f46d8c81329Chris Lattner// M = BuildMI(X86::ADDrr8, 2).addReg(argVal1).addReg(argVal2); 20f0136b376e2ff9b816ab4cbd4ac82df87b5c52b4Chris Lattner// 21f0136b376e2ff9b816ab4cbd4ac82df87b5c52b4Chris Lattner//===----------------------------------------------------------------------===// 22f0136b376e2ff9b816ab4cbd4ac82df87b5c52b4Chris Lattner 23f0136b376e2ff9b816ab4cbd4ac82df87b5c52b4Chris Lattner#ifndef LLVM_CODEGEN_MACHINEINSTRBUILDER_H 24f0136b376e2ff9b816ab4cbd4ac82df87b5c52b4Chris Lattner#define LLVM_CODEGEN_MACHINEINSTRBUILDER_H 25f0136b376e2ff9b816ab4cbd4ac82df87b5c52b4Chris Lattner 26c3c106ca59e44032041414c72ce584451f1d885fChris Lattner#include "llvm/CodeGen/MachineBasicBlock.h" 27f0136b376e2ff9b816ab4cbd4ac82df87b5c52b4Chris Lattner 28d0fde30ce850b78371fd1386338350591f9ff494Brian Gaekenamespace llvm { 29d0fde30ce850b78371fd1386338350591f9ff494Brian Gaeke 309d4f9b990222ed46959cd0a1aef07c0923d346e6Chris Lattnerclass MachineInstrBuilder { 31f0136b376e2ff9b816ab4cbd4ac82df87b5c52b4Chris Lattner MachineInstr *MI; 329d4f9b990222ed46959cd0a1aef07c0923d346e6Chris Lattnerpublic: 33f0136b376e2ff9b816ab4cbd4ac82df87b5c52b4Chris Lattner MachineInstrBuilder(MachineInstr *mi) : MI(mi) {} 34f0136b376e2ff9b816ab4cbd4ac82df87b5c52b4Chris Lattner 35f0136b376e2ff9b816ab4cbd4ac82df87b5c52b4Chris Lattner /// Allow automatic conversion to the machine instruction we are working on. 36f0136b376e2ff9b816ab4cbd4ac82df87b5c52b4Chris Lattner /// 37f0136b376e2ff9b816ab4cbd4ac82df87b5c52b4Chris Lattner operator MachineInstr*() const { return MI; } 38024e91f6f6b9c65d767efe507df213c5c53744c7Chris Lattner operator MachineBasicBlock::iterator() const { return MI; } 39f0136b376e2ff9b816ab4cbd4ac82df87b5c52b4Chris Lattner 409ed63ee0fcaa6730eb1df8c1ddbf5f46d8c81329Chris Lattner /// addReg - Add a new virtual register operand... 41f0136b376e2ff9b816ab4cbd4ac82df87b5c52b4Chris Lattner /// 42890f92328d5478e050d2eba8f4de24737a04a812Alkis Evlogimenos const MachineInstrBuilder &addReg( 43890f92328d5478e050d2eba8f4de24737a04a812Alkis Evlogimenos int RegNo, 44890f92328d5478e050d2eba8f4de24737a04a812Alkis Evlogimenos MachineOperand::UseType Ty = MachineOperand::Use) const { 4532f3d08cdebd8941f2149a8f32acd45bd224ca8dChris Lattner MI->addRegOperand(RegNo, Ty); 46f0136b376e2ff9b816ab4cbd4ac82df87b5c52b4Chris Lattner return *this; 47f0136b376e2ff9b816ab4cbd4ac82df87b5c52b4Chris Lattner } 48f0136b376e2ff9b816ab4cbd4ac82df87b5c52b4Chris Lattner 496559bb96a9901af21c6037675f9508373773bd35Brian Gaeke /// addReg - Add an LLVM value that is to be used as a register... 509ed63ee0fcaa6730eb1df8c1ddbf5f46d8c81329Chris Lattner /// 51890f92328d5478e050d2eba8f4de24737a04a812Alkis Evlogimenos const MachineInstrBuilder &addReg( 52890f92328d5478e050d2eba8f4de24737a04a812Alkis Evlogimenos Value *V, 53890f92328d5478e050d2eba8f4de24737a04a812Alkis Evlogimenos MachineOperand::UseType Ty = MachineOperand::Use) const { 5432f3d08cdebd8941f2149a8f32acd45bd224ca8dChris Lattner MI->addRegOperand(V, Ty); 55f0136b376e2ff9b816ab4cbd4ac82df87b5c52b4Chris Lattner return *this; 56f0136b376e2ff9b816ab4cbd4ac82df87b5c52b4Chris Lattner } 57f0136b376e2ff9b816ab4cbd4ac82df87b5c52b4Chris Lattner 5883435fbaf98a89cc5d6f13a68bab7e52e8fb6cb3Chris Lattner /// addReg - Add an LLVM value that is to be used as a register... 5983435fbaf98a89cc5d6f13a68bab7e52e8fb6cb3Chris Lattner /// 60890f92328d5478e050d2eba8f4de24737a04a812Alkis Evlogimenos const MachineInstrBuilder &addCCReg( 61890f92328d5478e050d2eba8f4de24737a04a812Alkis Evlogimenos Value *V, 62890f92328d5478e050d2eba8f4de24737a04a812Alkis Evlogimenos MachineOperand::UseType Ty = MachineOperand::Use) const { 6383435fbaf98a89cc5d6f13a68bab7e52e8fb6cb3Chris Lattner MI->addCCRegOperand(V, Ty); 6483435fbaf98a89cc5d6f13a68bab7e52e8fb6cb3Chris Lattner return *this; 6583435fbaf98a89cc5d6f13a68bab7e52e8fb6cb3Chris Lattner } 6683435fbaf98a89cc5d6f13a68bab7e52e8fb6cb3Chris Lattner 67e387de30841a5e106015379b6c47c568cde8b06eChris Lattner /// addRegDef - Add an LLVM value that is to be defined as a register... this 68890f92328d5478e050d2eba8f4de24737a04a812Alkis Evlogimenos /// is the same as addReg(V, MachineOperand::Def). 696559bb96a9901af21c6037675f9508373773bd35Brian Gaeke /// 70e387de30841a5e106015379b6c47c568cde8b06eChris Lattner const MachineInstrBuilder &addRegDef(Value *V) const { 71890f92328d5478e050d2eba8f4de24737a04a812Alkis Evlogimenos return addReg(V, MachineOperand::Def); 726559bb96a9901af21c6037675f9508373773bd35Brian Gaeke } 736559bb96a9901af21c6037675f9508373773bd35Brian Gaeke 749ed63ee0fcaa6730eb1df8c1ddbf5f46d8c81329Chris Lattner /// addPCDisp - Add an LLVM value to be treated as a PC relative 759ed63ee0fcaa6730eb1df8c1ddbf5f46d8c81329Chris Lattner /// displacement... 769ed63ee0fcaa6730eb1df8c1ddbf5f46d8c81329Chris Lattner /// 775494c7ed9dd8f5a3dbaf42d2b9ddb9cd3a85aa34Chris Lattner const MachineInstrBuilder &addPCDisp(Value *V) const { 78f0136b376e2ff9b816ab4cbd4ac82df87b5c52b4Chris Lattner MI->addPCDispOperand(V); 79f0136b376e2ff9b816ab4cbd4ac82df87b5c52b4Chris Lattner return *this; 80f0136b376e2ff9b816ab4cbd4ac82df87b5c52b4Chris Lattner } 81f0136b376e2ff9b816ab4cbd4ac82df87b5c52b4Chris Lattner 829ed63ee0fcaa6730eb1df8c1ddbf5f46d8c81329Chris Lattner /// addMReg - Add a machine register operand... 839ed63ee0fcaa6730eb1df8c1ddbf5f46d8c81329Chris Lattner /// 846a8a9b4413cd595c8322e7ebb7d42cbb04ca6933Chris Lattner const MachineInstrBuilder &addMReg(int Reg, MachineOperand::UseType Ty 856a8a9b4413cd595c8322e7ebb7d42cbb04ca6933Chris Lattner = MachineOperand::Use) const { 8632f3d08cdebd8941f2149a8f32acd45bd224ca8dChris Lattner MI->addMachineRegOperand(Reg, Ty); 87f0136b376e2ff9b816ab4cbd4ac82df87b5c52b4Chris Lattner return *this; 88f0136b376e2ff9b816ab4cbd4ac82df87b5c52b4Chris Lattner } 896a8a9b4413cd595c8322e7ebb7d42cbb04ca6933Chris Lattner 906a8a9b4413cd595c8322e7ebb7d42cbb04ca6933Chris Lattner /// addImm - Add a new immediate operand. 916a8a9b4413cd595c8322e7ebb7d42cbb04ca6933Chris Lattner /// 926a8a9b4413cd595c8322e7ebb7d42cbb04ca6933Chris Lattner const MachineInstrBuilder &addImm(int Val) const { 936a8a9b4413cd595c8322e7ebb7d42cbb04ca6933Chris Lattner MI->addZeroExtImmOperand(Val); 946a8a9b4413cd595c8322e7ebb7d42cbb04ca6933Chris Lattner return *this; 956a8a9b4413cd595c8322e7ebb7d42cbb04ca6933Chris Lattner } 96f0136b376e2ff9b816ab4cbd4ac82df87b5c52b4Chris Lattner 97f0136b376e2ff9b816ab4cbd4ac82df87b5c52b4Chris Lattner /// addSImm - Add a new sign extended immediate operand... 98f0136b376e2ff9b816ab4cbd4ac82df87b5c52b4Chris Lattner /// 996a8a9b4413cd595c8322e7ebb7d42cbb04ca6933Chris Lattner const MachineInstrBuilder &addSImm(int val) const { 100f0136b376e2ff9b816ab4cbd4ac82df87b5c52b4Chris Lattner MI->addSignExtImmOperand(val); 101f0136b376e2ff9b816ab4cbd4ac82df87b5c52b4Chris Lattner return *this; 102f0136b376e2ff9b816ab4cbd4ac82df87b5c52b4Chris Lattner } 103f0136b376e2ff9b816ab4cbd4ac82df87b5c52b4Chris Lattner 104f0136b376e2ff9b816ab4cbd4ac82df87b5c52b4Chris Lattner /// addZImm - Add a new zero extended immediate operand... 105f0136b376e2ff9b816ab4cbd4ac82df87b5c52b4Chris Lattner /// 1066a8a9b4413cd595c8322e7ebb7d42cbb04ca6933Chris Lattner const MachineInstrBuilder &addZImm(unsigned Val) const { 107f0136b376e2ff9b816ab4cbd4ac82df87b5c52b4Chris Lattner MI->addZeroExtImmOperand(Val); 108f0136b376e2ff9b816ab4cbd4ac82df87b5c52b4Chris Lattner return *this; 109f0136b376e2ff9b816ab4cbd4ac82df87b5c52b4Chris Lattner } 1108cbfc75d17ee1c274116dc1aca3bc8e8ed2326c9Chris Lattner 1119696a90ee66e1c6c818c8de3d9ffc32732d9d82fDuraid Madina /// addU64Imm - Add a new 64-bit immediate operand... 1129696a90ee66e1c6c818c8de3d9ffc32732d9d82fDuraid Madina /// 1139696a90ee66e1c6c818c8de3d9ffc32732d9d82fDuraid Madina const MachineInstrBuilder &addU64Imm(uint64_t Val) const { 1149696a90ee66e1c6c818c8de3d9ffc32732d9d82fDuraid Madina MI->addZeroExtImm64Operand(Val); 1159696a90ee66e1c6c818c8de3d9ffc32732d9d82fDuraid Madina return *this; 1169696a90ee66e1c6c818c8de3d9ffc32732d9d82fDuraid Madina } 1179696a90ee66e1c6c818c8de3d9ffc32732d9d82fDuraid Madina 1188cbfc75d17ee1c274116dc1aca3bc8e8ed2326c9Chris Lattner const MachineInstrBuilder &addMBB(MachineBasicBlock *MBB) const { 1198cbfc75d17ee1c274116dc1aca3bc8e8ed2326c9Chris Lattner MI->addMachineBasicBlockOperand(MBB); 1208cbfc75d17ee1c274116dc1aca3bc8e8ed2326c9Chris Lattner return *this; 1218cbfc75d17ee1c274116dc1aca3bc8e8ed2326c9Chris Lattner } 122aa0e277f310fab67df6a8bd8dfb45b6f2730c17eChris Lattner 123aa0e277f310fab67df6a8bd8dfb45b6f2730c17eChris Lattner const MachineInstrBuilder &addFrameIndex(unsigned Idx) const { 124aa0e277f310fab67df6a8bd8dfb45b6f2730c17eChris Lattner MI->addFrameIndexOperand(Idx); 125aa0e277f310fab67df6a8bd8dfb45b6f2730c17eChris Lattner return *this; 126aa0e277f310fab67df6a8bd8dfb45b6f2730c17eChris Lattner } 1279d4f9b990222ed46959cd0a1aef07c0923d346e6Chris Lattner 1289d4f9b990222ed46959cd0a1aef07c0923d346e6Chris Lattner const MachineInstrBuilder &addConstantPoolIndex(unsigned Idx) const { 1299d4f9b990222ed46959cd0a1aef07c0923d346e6Chris Lattner MI->addConstantPoolIndexOperand(Idx); 1309d4f9b990222ed46959cd0a1aef07c0923d346e6Chris Lattner return *this; 1319d4f9b990222ed46959cd0a1aef07c0923d346e6Chris Lattner } 1329d4f9b990222ed46959cd0a1aef07c0923d346e6Chris Lattner 1339d4f9b990222ed46959cd0a1aef07c0923d346e6Chris Lattner const MachineInstrBuilder &addGlobalAddress(GlobalValue *GV, 134ca4f6ebefc4dc55d13a0182a0be5b02e92fc63eaChris Lattner bool isPCRelative = false, int Offset = 0) const { 135ca4f6ebefc4dc55d13a0182a0be5b02e92fc63eaChris Lattner MI->addGlobalAddressOperand(GV, isPCRelative, Offset); 1369d4f9b990222ed46959cd0a1aef07c0923d346e6Chris Lattner return *this; 1379d4f9b990222ed46959cd0a1aef07c0923d346e6Chris Lattner } 1389d4f9b990222ed46959cd0a1aef07c0923d346e6Chris Lattner 1397b55d4fce2c2b8eebbb1fc654400c7d46fd6bfbaChris Lattner const MachineInstrBuilder &addExternalSymbol(const char *FnName, 140ee3d2c8bc801bfd977fb8b0d1212bdbe59340159Misha Brukman bool isPCRelative = false) const{ 1417b55d4fce2c2b8eebbb1fc654400c7d46fd6bfbaChris Lattner MI->addExternalSymbolOperand(FnName, isPCRelative); 1429d4f9b990222ed46959cd0a1aef07c0923d346e6Chris Lattner return *this; 1439d4f9b990222ed46959cd0a1aef07c0923d346e6Chris Lattner } 144f0136b376e2ff9b816ab4cbd4ac82df87b5c52b4Chris Lattner}; 145f0136b376e2ff9b816ab4cbd4ac82df87b5c52b4Chris Lattner 146f0136b376e2ff9b816ab4cbd4ac82df87b5c52b4Chris Lattner/// BuildMI - Builder interface. Specify how to create the initial instruction 1479cc361579b6a0aad9a71dc617eedd4d909d48acfChris Lattner/// itself. NumOperands is the number of operands to the machine instruction to 1489cc361579b6a0aad9a71dc617eedd4d909d48acfChris Lattner/// allow for memory efficient representation of machine instructions. 149f0136b376e2ff9b816ab4cbd4ac82df87b5c52b4Chris Lattner/// 1504052cf998f826db723e783bc1550c09e69402b29Chris Lattnerinline MachineInstrBuilder BuildMI(int Opcode, unsigned NumOperands) { 151f0136b376e2ff9b816ab4cbd4ac82df87b5c52b4Chris Lattner return MachineInstrBuilder(new MachineInstr(Opcode, NumOperands, true, true)); 152f0136b376e2ff9b816ab4cbd4ac82df87b5c52b4Chris Lattner} 153f0136b376e2ff9b816ab4cbd4ac82df87b5c52b4Chris Lattner 15491ad59d75e46eafbea63fe7d4807cc1d22fac565Brian Gaeke/// BuildMI - This version of the builder sets up the first operand as a 155367ccab06e77247eb38b0e666425913e39b82cf0Chris Lattner/// destination virtual register. NumOperands is the number of additional add* 15691ad59d75e46eafbea63fe7d4807cc1d22fac565Brian Gaeke/// calls that are expected, not including the destination register. 157367ccab06e77247eb38b0e666425913e39b82cf0Chris Lattner/// 158890f92328d5478e050d2eba8f4de24737a04a812Alkis Evlogimenosinline MachineInstrBuilder BuildMI( 159890f92328d5478e050d2eba8f4de24737a04a812Alkis Evlogimenos int Opcode, unsigned NumOperands, 160890f92328d5478e050d2eba8f4de24737a04a812Alkis Evlogimenos unsigned DestReg, 161890f92328d5478e050d2eba8f4de24737a04a812Alkis Evlogimenos MachineOperand::UseType useType = MachineOperand::Def) { 162367ccab06e77247eb38b0e666425913e39b82cf0Chris Lattner return MachineInstrBuilder(new MachineInstr(Opcode, NumOperands+1, 16314be64018fb38d1fa535b9cd12d11371f4eba3b5Alkis Evlogimenos true, true)).addReg(DestReg, useType); 164367ccab06e77247eb38b0e666425913e39b82cf0Chris Lattner} 165367ccab06e77247eb38b0e666425913e39b82cf0Chris Lattner 16691ad59d75e46eafbea63fe7d4807cc1d22fac565Brian Gaeke/// BuildMI - This version of the builder inserts the newly-built 16791ad59d75e46eafbea63fe7d4807cc1d22fac565Brian Gaeke/// instruction before the given position in the given MachineBasicBlock, and 16891ad59d75e46eafbea63fe7d4807cc1d22fac565Brian Gaeke/// sets up the first operand as a destination virtual register. 16991ad59d75e46eafbea63fe7d4807cc1d22fac565Brian Gaeke/// NumOperands is the number of additional add* calls that are expected, 17091ad59d75e46eafbea63fe7d4807cc1d22fac565Brian Gaeke/// not including the destination register. 17191ad59d75e46eafbea63fe7d4807cc1d22fac565Brian Gaeke/// 172c3c106ca59e44032041414c72ce584451f1d885fChris Lattnerinline MachineInstrBuilder BuildMI(MachineBasicBlock &BB, 173c3c106ca59e44032041414c72ce584451f1d885fChris Lattner MachineBasicBlock::iterator I, 174c3c106ca59e44032041414c72ce584451f1d885fChris Lattner int Opcode, unsigned NumOperands, 175c3c106ca59e44032041414c72ce584451f1d885fChris Lattner unsigned DestReg) { 176c3c106ca59e44032041414c72ce584451f1d885fChris Lattner MachineInstr *MI = new MachineInstr(Opcode, NumOperands+1, true, true); 177c3c106ca59e44032041414c72ce584451f1d885fChris Lattner BB.insert(I, MI); 178c3c106ca59e44032041414c72ce584451f1d885fChris Lattner return MachineInstrBuilder(MI).addReg(DestReg, MachineOperand::Def); 179c3c106ca59e44032041414c72ce584451f1d885fChris Lattner} 180c3c106ca59e44032041414c72ce584451f1d885fChris Lattner 18191ad59d75e46eafbea63fe7d4807cc1d22fac565Brian Gaeke/// BuildMI - This version of the builder inserts the newly-built 18291ad59d75e46eafbea63fe7d4807cc1d22fac565Brian Gaeke/// instruction before the given position in the given MachineBasicBlock, and 18391ad59d75e46eafbea63fe7d4807cc1d22fac565Brian Gaeke/// does NOT take a destination register. 18491ad59d75e46eafbea63fe7d4807cc1d22fac565Brian Gaeke/// 185c3c106ca59e44032041414c72ce584451f1d885fChris Lattnerinline MachineInstrBuilder BuildMI(MachineBasicBlock &BB, 186c3c106ca59e44032041414c72ce584451f1d885fChris Lattner MachineBasicBlock::iterator I, 187c3c106ca59e44032041414c72ce584451f1d885fChris Lattner int Opcode, unsigned NumOperands) { 188c3c106ca59e44032041414c72ce584451f1d885fChris Lattner MachineInstr *MI = new MachineInstr(Opcode, NumOperands, true, true); 189c3c106ca59e44032041414c72ce584451f1d885fChris Lattner BB.insert(I, MI); 190c3c106ca59e44032041414c72ce584451f1d885fChris Lattner return MachineInstrBuilder(MI); 191c3c106ca59e44032041414c72ce584451f1d885fChris Lattner} 192c3c106ca59e44032041414c72ce584451f1d885fChris Lattner 19391ad59d75e46eafbea63fe7d4807cc1d22fac565Brian Gaeke/// BuildMI - This version of the builder inserts the newly-built 19491ad59d75e46eafbea63fe7d4807cc1d22fac565Brian Gaeke/// instruction at the end of the given MachineBasicBlock, and does NOT take a 19591ad59d75e46eafbea63fe7d4807cc1d22fac565Brian Gaeke/// destination register. 1969cc361579b6a0aad9a71dc617eedd4d909d48acfChris Lattner/// 1974052cf998f826db723e783bc1550c09e69402b29Chris Lattnerinline MachineInstrBuilder BuildMI(MachineBasicBlock *BB, int Opcode, 1987db458fb0768059f050d3a0f1a26818fa8e22712Chris Lattner unsigned NumOperands) { 199c3c106ca59e44032041414c72ce584451f1d885fChris Lattner return BuildMI(*BB, BB->end(), Opcode, NumOperands); 200f0136b376e2ff9b816ab4cbd4ac82df87b5c52b4Chris Lattner} 2017db458fb0768059f050d3a0f1a26818fa8e22712Chris Lattner 20291ad59d75e46eafbea63fe7d4807cc1d22fac565Brian Gaeke/// BuildMI - This version of the builder inserts the newly-built 20391ad59d75e46eafbea63fe7d4807cc1d22fac565Brian Gaeke/// instruction at the end of the given MachineBasicBlock, and sets up the first 20491ad59d75e46eafbea63fe7d4807cc1d22fac565Brian Gaeke/// operand as a destination virtual register. NumOperands is the number of 20591ad59d75e46eafbea63fe7d4807cc1d22fac565Brian Gaeke/// additional add* calls that are expected, not including the destination 20691ad59d75e46eafbea63fe7d4807cc1d22fac565Brian Gaeke/// register. 2079cc361579b6a0aad9a71dc617eedd4d909d48acfChris Lattner/// 2084052cf998f826db723e783bc1550c09e69402b29Chris Lattnerinline MachineInstrBuilder BuildMI(MachineBasicBlock *BB, int Opcode, 2099cc361579b6a0aad9a71dc617eedd4d909d48acfChris Lattner unsigned NumOperands, unsigned DestReg) { 210c3c106ca59e44032041414c72ce584451f1d885fChris Lattner return BuildMI(*BB, BB->end(), Opcode, NumOperands, DestReg); 2119cc361579b6a0aad9a71dc617eedd4d909d48acfChris Lattner} 2129cc361579b6a0aad9a71dc617eedd4d909d48acfChris Lattner 213d0fde30ce850b78371fd1386338350591f9ff494Brian Gaeke} // End llvm namespace 214d0fde30ce850b78371fd1386338350591f9ff494Brian Gaeke 215f0136b376e2ff9b816ab4cbd4ac82df87b5c52b4Chris Lattner#endif 216