[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