[llvm-commits] CVS: llvm/include/llvm/InstrTypes.h iTerminators.h

Chris Lattner lattner at cs.uiuc.edu
Thu Nov 20 11:45:01 PST 2003


Changes in directory llvm/include/llvm:

InstrTypes.h updated: 1.35 -> 1.36
iTerminators.h updated: 1.35 -> 1.36

---
Log message:

* Add new constructors to allow insertion of terminator instructions at the
  end of basic blocks.
* Document some confusing constructor combinations
* Move a ReturnInst method out-of-line, so that the vtable and type info don't
  need to be emitted to every translation unit that uses the class.


---
Diffs of the changes:  (+32 -6)

Index: llvm/include/llvm/InstrTypes.h
diff -u llvm/include/llvm/InstrTypes.h:1.35 llvm/include/llvm/InstrTypes.h:1.36
--- llvm/include/llvm/InstrTypes.h:1.35	Sun Nov 16 14:21:15 2003
+++ llvm/include/llvm/InstrTypes.h	Thu Nov 20 11:44:37 2003
@@ -34,6 +34,7 @@
                  const std::string &Name = "", Instruction *InsertBefore = 0)
     : Instruction(Ty, iType, Name, InsertBefore) {
   }
+  TerminatorInst(Instruction::TermOps iType, BasicBlock *InsertAtEnd);
 public:
 
   /// Terminators must implement the methods required by Instruction...


Index: llvm/include/llvm/iTerminators.h
diff -u llvm/include/llvm/iTerminators.h:1.35 llvm/include/llvm/iTerminators.h:1.36
--- llvm/include/llvm/iTerminators.h:1.35	Sun Nov 16 14:21:15 2003
+++ llvm/include/llvm/iTerminators.h	Thu Nov 20 11:44:37 2003
@@ -33,6 +33,13 @@
     }
   }
 public:
+  // ReturnInst constructors:
+  // ReturnInst()                  - 'ret void' instruction
+  // ReturnInst(Value* X)          - 'ret X'    instruction
+  // ReturnInst(    null, Inst *)  - 'ret void' instruction, insert before I
+  // ReturnInst(Value* X, Inst *I) - 'ret X'    instruction, insert before I
+  // ReturnInst(    null, BB *B)   - 'ret void' instruction, insert @ end of BB
+  // ReturnInst(Value* X, BB *B)   - 'ret X'    instruction, insert @ end of BB
   ReturnInst(Value *RetVal = 0, Instruction *InsertBefore = 0)
     : TerminatorInst(Instruction::Ret, InsertBefore) {
     if (RetVal) {
@@ -40,6 +47,13 @@
       Operands.push_back(Use(RetVal, this));
     }
   }
+  ReturnInst(Value *RetVal, BasicBlock *InsertAtEnd)
+    : TerminatorInst(Instruction::Ret, InsertAtEnd) {
+    if (RetVal) {
+      Operands.reserve(1);
+      Operands.push_back(Use(RetVal, this));
+    }
+  }
 
   virtual Instruction *clone() const { return new ReturnInst(*this); }
 
@@ -55,9 +69,7 @@
     abort();
     return 0;
   }
-  virtual void setSuccessor(unsigned idx, BasicBlock *NewSucc) {
-    assert(0 && "ReturnInst has no successors!");
-  }
+  virtual void setSuccessor(unsigned idx, BasicBlock *NewSucc);
   virtual unsigned getNumSuccessors() const { return 0; }
 
   // Methods for support type inquiry through isa, cast, and dyn_cast:
@@ -76,10 +88,19 @@
 class BranchInst : public TerminatorInst {
   BranchInst(const BranchInst &BI);
 public:
-  // If cond = null, then is an unconditional br...
-  BranchInst(BasicBlock *IfTrue, BasicBlock *IfFalse, Value *cond = 0,
-             Instruction *InsertBefore = 0);
+  // BranchInst constructors (where {B, T, F} are blocks, and C is a condition):
+  // BranchInst(BB *B)                           - 'br B'
+  // BranchInst(BB* T, BB *F, Value *C)          - 'br C, T, F'
+  // BranchInst(BB* B, Inst *I)                  - 'br B'        insert before I
+  // BranchInst(BB* T, BB *F, Value *C, Inst *I) - 'br C, T, F', insert before I
+  // BranchInst(BB* B, BB *I)                    - 'br B'        insert at end
+  // BranchInst(BB* T, BB *F, Value *C, BB *I)   - 'br C, T, F', insert at end
   BranchInst(BasicBlock *IfTrue, Instruction *InsertBefore = 0);
+  BranchInst(BasicBlock *IfTrue, BasicBlock *IfFalse, Value *cond,
+             Instruction *InsertBefore = 0);
+  BranchInst(BasicBlock *IfTrue, BasicBlock *InsertAtEnd);
+  BranchInst(BasicBlock *IfTrue, BasicBlock *IfFalse, Value *cond,
+             BasicBlock *InsertAtEnd);
 
   virtual Instruction *clone() const { return new BranchInst(*this); }
 
@@ -142,6 +163,7 @@
   SwitchInst(const SwitchInst &RI);
 public:
   SwitchInst(Value *Value, BasicBlock *Default, Instruction *InsertBefore = 0);
+  SwitchInst(Value *Value, BasicBlock *Default, BasicBlock  *InsertAtEnd);
 
   virtual Instruction *clone() const { return new SwitchInst(*this); }
 
@@ -212,6 +234,9 @@
   InvokeInst(Value *Fn, BasicBlock *IfNormal, BasicBlock *IfException,
 	     const std::vector<Value*> &Params, const std::string &Name = "",
              Instruction *InsertBefore = 0);
+  InvokeInst(Value *Fn, BasicBlock *IfNormal, BasicBlock *IfException,
+	     const std::vector<Value*> &Params, const std::string &Name,
+             BasicBlock *InsertAtEnd);
 
   virtual Instruction *clone() const { return new InvokeInst(*this); }
 





More information about the llvm-commits mailing list