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