[llvm] r263264 - [MachineIRBuilder] Rework buildInstr API to maximize code reuse.

Quentin Colombet via llvm-commits llvm-commits at lists.llvm.org
Fri Mar 11 09:27:58 PST 2016


Author: qcolombet
Date: Fri Mar 11 11:27:58 2016
New Revision: 263264

URL: http://llvm.org/viewvc/llvm-project?rev=263264&view=rev
Log:
[MachineIRBuilder] Rework buildInstr API to maximize code reuse.

Modified:
    llvm/trunk/include/llvm/CodeGen/GlobalISel/MachineIRBuilder.h
    llvm/trunk/lib/CodeGen/GlobalISel/MachineIRBuilder.cpp

Modified: llvm/trunk/include/llvm/CodeGen/GlobalISel/MachineIRBuilder.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/GlobalISel/MachineIRBuilder.h?rev=263264&r1=263263&r2=263264&view=diff
==============================================================================
--- llvm/trunk/include/llvm/CodeGen/GlobalISel/MachineIRBuilder.h (original)
+++ llvm/trunk/include/llvm/CodeGen/GlobalISel/MachineIRBuilder.h Fri Mar 11 11:27:58 2016
@@ -85,7 +85,7 @@ public:
   /// Set the debug location to \p DL for all the next build instructions.
   void setDebugLoc(const DebugLoc &DL) { this->DL = DL; }
 
-  /// Build and insert \p Res<def> = \p Opcode [\p Ty] \p Op0, \p Op1.
+  /// Build and insert <empty> = \p Opcode [\p Ty] <empty>.
   /// \p Ty is the type of the instruction if \p Opcode describes
   /// a generic machine instruction. \p Ty must be nullptr if \p Opcode
   /// does not describe a generic instruction.
@@ -96,6 +96,14 @@ public:
   /// \pre Ty == nullptr or isPreISelGenericOpcode(Opcode)
   ///
   /// \return The newly created instruction.
+  MachineInstr *buildInstr(unsigned Opcode, Type *Ty);
+
+  /// Build and insert \p Res<def> = \p Opcode [\p Ty] \p Op0, \p Op1.
+  ///
+  /// \pre setBasicBlock or setMI must have been called.
+  /// \pre Ty == nullptr or isPreISelGenericOpcode(Opcode)
+  ///
+  /// \return The newly created instruction.
   MachineInstr *buildInstr(unsigned Opcode, Type *Ty, unsigned Res,
                            unsigned Op0, unsigned Op1);
 
@@ -117,7 +125,7 @@ public:
   /// \return The newly created instruction.
   MachineInstr *buildInstr(unsigned Opcode, unsigned Res, unsigned Op0);
 
-  /// Build and insert = \p Opcode.
+  /// Build and insert <empty> = \p Opcode <empty>.
   ///
   /// \pre setBasicBlock or setMI must have been called.
   /// \pre not isPreISelGenericOpcode(\p Opcode)

Modified: llvm/trunk/lib/CodeGen/GlobalISel/MachineIRBuilder.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/GlobalISel/MachineIRBuilder.cpp?rev=263264&r1=263263&r2=263264&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/GlobalISel/MachineIRBuilder.cpp (original)
+++ llvm/trunk/lib/CodeGen/GlobalISel/MachineIRBuilder.cpp Fri Mar 11 11:27:58 2016
@@ -53,16 +53,11 @@ MachineBasicBlock::iterator MachineIRBui
   return Before ? getMBB().begin() : getMBB().end();
 }
 
-MachineInstr *MachineIRBuilder::buildInstr(unsigned Opcode, unsigned Res,
-                                           unsigned Op0, unsigned Op1) {
-  return buildInstr(Opcode, nullptr, Res, Op0, Op1);
-}
-
-MachineInstr *MachineIRBuilder::buildInstr(unsigned Opcode, Type *Ty,
-                                           unsigned Res, unsigned Op0,
-                                           unsigned Op1) {
-  MachineInstr *NewMI =
-      BuildMI(getMF(), DL, getTII().get(Opcode), Res).addReg(Op0).addReg(Op1);
+//------------------------------------------------------------------------------
+// Build instruction variants.
+//------------------------------------------------------------------------------
+MachineInstr *MachineIRBuilder::buildInstr(unsigned Opcode, Type *Ty) {
+  MachineInstr *NewMI = BuildMI(getMF(), DL, getTII().get(Opcode));
   if (Ty) {
     assert(isPreISelGenericOpcode(Opcode) &&
            "Only generic instruction can have a type");
@@ -75,21 +70,28 @@ MachineInstr *MachineIRBuilder::buildIns
 }
 
 MachineInstr *MachineIRBuilder::buildInstr(unsigned Opcode, unsigned Res,
-                                           unsigned Op0) {
-  assert(!isPreISelGenericOpcode(Opcode) &&
-         "Generic instruction must have a type");
+                                           unsigned Op0, unsigned Op1) {
+  return buildInstr(Opcode, nullptr, Res, Op0, Op1);
+}
 
-  MachineInstr *NewMI =
-      BuildMI(getMF(), DL, getTII().get(Opcode), Res).addReg(Op0);
-  getMBB().insert(getInsertPt(), NewMI);
+MachineInstr *MachineIRBuilder::buildInstr(unsigned Opcode, Type *Ty,
+                                           unsigned Res, unsigned Op0,
+                                           unsigned Op1) {
+  MachineInstr *NewMI = buildInstr(Opcode, Ty);
+  MachineInstrBuilder(getMF(), NewMI)
+      .addReg(Res, RegState::Define)
+      .addReg(Op0)
+      .addReg(Op1);
   return NewMI;
 }
 
-MachineInstr *MachineIRBuilder::buildInstr(unsigned Opcode) {
-  assert(!isPreISelGenericOpcode(Opcode) &&
-         "Generic instruction must have a type");
-
-  MachineInstr *NewMI = BuildMI(getMF(), DL, getTII().get(Opcode));
-  getMBB().insert(getInsertPt(), NewMI);
+MachineInstr *MachineIRBuilder::buildInstr(unsigned Opcode, unsigned Res,
+                                           unsigned Op0) {
+  MachineInstr *NewMI = buildInstr(Opcode, nullptr);
+  MachineInstrBuilder(getMF(), NewMI).addReg(Res, RegState::Define).addReg(Op0);
   return NewMI;
 }
+
+MachineInstr *MachineIRBuilder::buildInstr(unsigned Opcode) {
+  return buildInstr(Opcode, nullptr);
+}




More information about the llvm-commits mailing list