diff options
author | Alkis Evlogimenos <alkis@evlogimenos.com> | 2004-05-26 21:41:09 +0000 |
---|---|---|
committer | Alkis Evlogimenos <alkis@evlogimenos.com> | 2004-05-26 21:41:09 +0000 |
commit | e5828f1fa7c2691f747f5060ce11b8e55cea03ab (patch) | |
tree | b9334e44ca7630cc55600d097c560d02bc72b3e2 /lib/VMCore/iCall.cpp | |
parent | 99c58f4910c898981f96f065065c3e47c94fec40 (diff) | |
download | external_llvm-e5828f1fa7c2691f747f5060ce11b8e55cea03ab.zip external_llvm-e5828f1fa7c2691f747f5060ce11b8e55cea03ab.tar.gz external_llvm-e5828f1fa7c2691f747f5060ce11b8e55cea03ab.tar.bz2 |
Refactor common initialization code in private init() functions.
This is a first step in supplying append to basic block constructors
for all instruction types.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13793 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/VMCore/iCall.cpp')
-rw-r--r-- | lib/VMCore/iCall.cpp | 59 |
1 files changed, 25 insertions, 34 deletions
diff --git a/lib/VMCore/iCall.cpp b/lib/VMCore/iCall.cpp index 37298f9..edd5593 100644 --- a/lib/VMCore/iCall.cpp +++ b/lib/VMCore/iCall.cpp @@ -99,51 +99,42 @@ Function *CallInst::getCalledFunction() { // InvokeInst Implementation //===----------------------------------------------------------------------===// -InvokeInst::InvokeInst(Value *Func, BasicBlock *IfNormal, - BasicBlock *IfException, - const std::vector<Value*> ¶ms, - const std::string &Name, Instruction *InsertBefore) - : TerminatorInst(cast<FunctionType>(cast<PointerType>(Func->getType()) - ->getElementType())->getReturnType(), - Instruction::Invoke, Name, InsertBefore) { - Operands.reserve(3+params.size()); - Operands.push_back(Use(Func, this)); +void InvokeInst::init(Value *Fn, BasicBlock *IfNormal, BasicBlock *IfException, + const std::vector<Value*> &Params) +{ + Operands.reserve(3+Params.size()); + Operands.push_back(Use(Fn, this)); Operands.push_back(Use((Value*)IfNormal, this)); Operands.push_back(Use((Value*)IfException, this)); const FunctionType *MTy = - cast<FunctionType>(cast<PointerType>(Func->getType())->getElementType()); + cast<FunctionType>(cast<PointerType>(Fn->getType())->getElementType()); - assert((params.size() == MTy->getNumParams()) || - (MTy->isVarArg() && params.size() > MTy->getNumParams()) && + assert((Params.size() == MTy->getNumParams()) || + (MTy->isVarArg() && Params.size() > MTy->getNumParams()) && "Calling a function with bad signature"); - for (unsigned i = 0; i < params.size(); i++) - Operands.push_back(Use(params[i], this)); + for (unsigned i = 0; i < Params.size(); i++) + Operands.push_back(Use(Params[i], this)); } -InvokeInst::InvokeInst(Value *Func, BasicBlock *IfNormal, +InvokeInst::InvokeInst(Value *Fn, BasicBlock *IfNormal, BasicBlock *IfException, - const std::vector<Value*> ¶ms, - const std::string &Name, BasicBlock *InsertAtEnd) - : TerminatorInst(cast<FunctionType>(cast<PointerType>(Func->getType()) + const std::vector<Value*> &Params, + const std::string &Name, Instruction *InsertBefore) + : TerminatorInst(cast<FunctionType>(cast<PointerType>(Fn->getType()) ->getElementType())->getReturnType(), - Instruction::Invoke, Name) { - Operands.reserve(3+params.size()); - Operands.push_back(Use(Func, this)); - Operands.push_back(Use((Value*)IfNormal, this)); - Operands.push_back(Use((Value*)IfException, this)); - const FunctionType *MTy = - cast<FunctionType>(cast<PointerType>(Func->getType())->getElementType()); - - assert((params.size() == MTy->getNumParams()) || - (MTy->isVarArg() && params.size() > MTy->getNumParams()) && - "Calling a function with bad signature"); - - for (unsigned i = 0; i < params.size(); i++) - Operands.push_back(Use(params[i], this)); + Instruction::Invoke, Name, InsertBefore) { + init(Fn, IfNormal, IfException, Params); +} - if (InsertAtEnd) - InsertAtEnd->getInstList().push_back(this); +InvokeInst::InvokeInst(Value *Fn, BasicBlock *IfNormal, + BasicBlock *IfException, + const std::vector<Value*> &Params, + const std::string &Name, BasicBlock *InsertAtEnd) + : TerminatorInst(cast<FunctionType>(cast<PointerType>(Fn->getType()) + ->getElementType())->getReturnType(), + Instruction::Invoke, Name, InsertAtEnd) { + init(Fn, IfNormal, IfException, Params); } InvokeInst::InvokeInst(const InvokeInst &CI) |