[llvm-commits] [llvm] r41506 - in /llvm/trunk: include/llvm/Instructions.h include/llvm/Support/LLVMBuilder.h lib/AsmParser/llvmAsmParser.y lib/Bitcode/Reader/BitcodeReader.cpp lib/Transforms/IPO/ArgumentPromotion.cpp lib/Transforms/IPO/DeadArgumentElimination.cpp lib/Transforms/IPO/LowerSetJmp.cpp lib/Transforms/Scalar/InstructionCombining.cpp lib/Transforms/Scalar/LowerGC.cpp lib/Transforms/Utils/InlineFunction.cpp lib/VMCore/Instructions.cpp tools/llvm-upgrade/UpgradeParser.y tools/llvm2cpp/CppWriter.cpp
David Greene
greened at obbligato.org
Mon Aug 27 12:04:21 PDT 2007
Author: greened
Date: Mon Aug 27 14:04:21 2007
New Revision: 41506
URL: http://llvm.org/viewvc/llvm-project?rev=41506&view=rev
Log:
Update InvokeInst to work like CallInst
Modified:
llvm/trunk/include/llvm/Instructions.h
llvm/trunk/include/llvm/Support/LLVMBuilder.h
llvm/trunk/lib/AsmParser/llvmAsmParser.y
llvm/trunk/lib/Bitcode/Reader/BitcodeReader.cpp
llvm/trunk/lib/Transforms/IPO/ArgumentPromotion.cpp
llvm/trunk/lib/Transforms/IPO/DeadArgumentElimination.cpp
llvm/trunk/lib/Transforms/IPO/LowerSetJmp.cpp
llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp
llvm/trunk/lib/Transforms/Scalar/LowerGC.cpp
llvm/trunk/lib/Transforms/Utils/InlineFunction.cpp
llvm/trunk/lib/VMCore/Instructions.cpp
llvm/trunk/tools/llvm-upgrade/UpgradeParser.y
llvm/trunk/tools/llvm2cpp/CppWriter.cpp
Modified: llvm/trunk/include/llvm/Instructions.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Instructions.h?rev=41506&r1=41505&r2=41506&view=diff
==============================================================================
--- llvm/trunk/include/llvm/Instructions.h (original)
+++ llvm/trunk/include/llvm/Instructions.h Mon Aug 27 14:04:21 2007
@@ -1544,13 +1544,65 @@
InvokeInst(const InvokeInst &BI);
void init(Value *Fn, BasicBlock *IfNormal, BasicBlock *IfException,
Value* const *Args, unsigned NumArgs);
+
+ template<typename InputIterator>
+ void init(Value *Func, BasicBlock *IfNormal, BasicBlock *IfException,
+ InputIterator ArgBegin, InputIterator ArgEnd,
+ const std::string &Name,
+ // This argument ensures that we have an iterator we can
+ // do arithmetic on in constant time
+ std::random_access_iterator_tag) {
+ typename std::iterator_traits<InputIterator>::difference_type NumArgs =
+ std::distance(ArgBegin, ArgEnd);
+
+ if (NumArgs > 0) {
+ // This requires that the iterator points to contiguous memory.
+ init(Func, IfNormal, IfException, &*ArgBegin, NumArgs);
+ }
+ else {
+ init(Func, IfNormal, IfException, 0, NumArgs);
+ }
+
+ setName(Name);
+ }
+
public:
- InvokeInst(Value *Fn, BasicBlock *IfNormal, BasicBlock *IfException,
- Value* const* Args, unsigned NumArgs, const std::string &Name = "",
- Instruction *InsertBefore = 0);
- InvokeInst(Value *Fn, BasicBlock *IfNormal, BasicBlock *IfException,
- Value* const* Args, unsigned NumArgs, const std::string &Name,
- BasicBlock *InsertAtEnd);
+ /// Construct an InvokeInst given a range of arguments.
+ /// InputIterator must be a random-access iterator pointing to
+ /// contiguous storage (e.g. a std::vector<>::iterator). Checks are
+ /// made for random-accessness but not for contiguous storage as
+ /// that would incur runtime overhead.
+ ///
+ /// @brief Construct an InvokeInst from a range of arguments
+ template<typename InputIterator>
+ InvokeInst(Value *Func, BasicBlock *IfNormal, BasicBlock *IfException,
+ InputIterator ArgBegin, InputIterator ArgEnd,
+ const std::string &Name = "", Instruction *InsertBefore = 0)
+ : TerminatorInst(cast<FunctionType>(cast<PointerType>(Func->getType())
+ ->getElementType())->getReturnType(),
+ Instruction::Invoke, 0, 0, InsertBefore) {
+ init(Func, IfNormal, IfException, ArgBegin, ArgEnd, Name,
+ typename std::iterator_traits<InputIterator>::iterator_category());
+ }
+
+ /// Construct an InvokeInst given a range of arguments.
+ /// InputIterator must be a random-access iterator pointing to
+ /// contiguous storage (e.g. a std::vector<>::iterator). Checks are
+ /// made for random-accessness but not for contiguous storage as
+ /// that would incur runtime overhead.
+ ///
+ /// @brief Construct an InvokeInst from a range of arguments
+ template<typename InputIterator>
+ InvokeInst(Value *Func, BasicBlock *IfNormal, BasicBlock *IfException,
+ InputIterator ArgBegin, InputIterator ArgEnd,
+ const std::string &Name, BasicBlock *InsertAtEnd)
+ : TerminatorInst(cast<FunctionType>(cast<PointerType>(Func->getType())
+ ->getElementType())->getReturnType(),
+ Instruction::Invoke, 0, 0, InsertAtEnd) {
+ init(Func, IfNormal, IfException, ArgBegin, ArgEnd, Name,
+ typename std::iterator_traits<InputIterator>::iterator_category());
+ }
+
~InvokeInst();
virtual InvokeInst *clone() const;
Modified: llvm/trunk/include/llvm/Support/LLVMBuilder.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/LLVMBuilder.h?rev=41506&r1=41505&r2=41506&view=diff
==============================================================================
--- llvm/trunk/include/llvm/Support/LLVMBuilder.h (original)
+++ llvm/trunk/include/llvm/Support/LLVMBuilder.h Mon Aug 27 14:04:21 2007
@@ -115,12 +115,12 @@
}
/// CreateInvoke - Create an invoke instruction.
+ template<typename InputIterator>
InvokeInst *CreateInvoke(Value *Callee, BasicBlock *NormalDest,
- BasicBlock *UnwindDest,
- Value *const* Args, unsigned NumArgs,
- const char *Name = "") {
- return Insert(new InvokeInst(Callee, NormalDest, UnwindDest, Args, NumArgs,
- Name));
+ BasicBlock *UnwindDest, InputIterator ArgBegin,
+ InputIterator ArgEnd, const char *Name = "") {
+ return(Insert(new InvokeInst(Callee, NormalDest, UnwindDest,
+ ArgBegin, ArgEnd, Name)));
}
UnwindInst *CreateUnwind() {
Modified: llvm/trunk/lib/AsmParser/llvmAsmParser.y
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/AsmParser/llvmAsmParser.y?rev=41506&r1=41505&r2=41506&view=diff
==============================================================================
--- llvm/trunk/lib/AsmParser/llvmAsmParser.y (original)
+++ llvm/trunk/lib/AsmParser/llvmAsmParser.y Mon Aug 27 14:04:21 2007
@@ -2652,7 +2652,7 @@
}
// Create the InvokeInst
- InvokeInst *II = new InvokeInst(V, Normal, Except, &Args[0], Args.size());
+ InvokeInst *II = new InvokeInst(V, Normal, Except, Args.begin(), Args.end());
II->setCallingConv($2);
$$ = II;
delete $6;
Modified: llvm/trunk/lib/Bitcode/Reader/BitcodeReader.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Bitcode/Reader/BitcodeReader.cpp?rev=41506&r1=41505&r2=41506&view=diff
==============================================================================
--- llvm/trunk/lib/Bitcode/Reader/BitcodeReader.cpp (original)
+++ llvm/trunk/lib/Bitcode/Reader/BitcodeReader.cpp Mon Aug 27 14:04:21 2007
@@ -1400,7 +1400,7 @@
}
}
- I = new InvokeInst(Callee, NormalBB, UnwindBB, &Ops[0], Ops.size());
+ I = new InvokeInst(Callee, NormalBB, UnwindBB, Ops.begin(), Ops.end());
cast<InvokeInst>(I)->setCallingConv(CCInfo);
break;
}
Modified: llvm/trunk/lib/Transforms/IPO/ArgumentPromotion.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/IPO/ArgumentPromotion.cpp?rev=41506&r1=41505&r2=41506&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/IPO/ArgumentPromotion.cpp (original)
+++ llvm/trunk/lib/Transforms/IPO/ArgumentPromotion.cpp Mon Aug 27 14:04:21 2007
@@ -447,7 +447,7 @@
Instruction *New;
if (InvokeInst *II = dyn_cast<InvokeInst>(Call)) {
New = new InvokeInst(NF, II->getNormalDest(), II->getUnwindDest(),
- &Args[0], Args.size(), "", Call);
+ Args.begin(), Args.end(), "", Call);
cast<InvokeInst>(New)->setCallingConv(CS.getCallingConv());
} else {
New = new CallInst(NF, Args.begin(), Args.end(), "", Call);
Modified: llvm/trunk/lib/Transforms/IPO/DeadArgumentElimination.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/IPO/DeadArgumentElimination.cpp?rev=41506&r1=41505&r2=41506&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/IPO/DeadArgumentElimination.cpp (original)
+++ llvm/trunk/lib/Transforms/IPO/DeadArgumentElimination.cpp Mon Aug 27 14:04:21 2007
@@ -174,7 +174,7 @@
Instruction *New;
if (InvokeInst *II = dyn_cast<InvokeInst>(Call)) {
New = new InvokeInst(NF, II->getNormalDest(), II->getUnwindDest(),
- &Args[0], Args.size(), "", Call);
+ Args.begin(), Args.end(), "", Call);
cast<InvokeInst>(New)->setCallingConv(CS.getCallingConv());
} else {
New = new CallInst(NF, Args.begin(), Args.end(), "", Call);
@@ -540,7 +540,7 @@
Instruction *New;
if (InvokeInst *II = dyn_cast<InvokeInst>(Call)) {
New = new InvokeInst(NF, II->getNormalDest(), II->getUnwindDest(),
- &Args[0], Args.size(), "", Call);
+ Args.begin(), Args.end(), "", Call);
cast<InvokeInst>(New)->setCallingConv(CS.getCallingConv());
} else {
New = new CallInst(NF, Args.begin(), Args.end(), "", Call);
Modified: llvm/trunk/lib/Transforms/IPO/LowerSetJmp.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/IPO/LowerSetJmp.cpp?rev=41506&r1=41505&r2=41506&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/IPO/LowerSetJmp.cpp (original)
+++ llvm/trunk/lib/Transforms/IPO/LowerSetJmp.cpp Mon Aug 27 14:04:21 2007
@@ -475,7 +475,7 @@
std::vector<Value*> Params(CI.op_begin() + 1, CI.op_end());
InvokeInst* II = new
InvokeInst(CI.getCalledValue(), NewBB, PrelimBBMap[Func],
- &Params[0], Params.size(), CI.getName(), Term);
+ Params.begin(), Params.end(), CI.getName(), Term);
// Replace the old call inst with the invoke inst and remove the call.
CI.replaceAllUsesWith(II);
Modified: llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp?rev=41506&r1=41505&r2=41506&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp (original)
+++ llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp Mon Aug 27 14:04:21 2007
@@ -8006,7 +8006,7 @@
Instruction *NC;
if (InvokeInst *II = dyn_cast<InvokeInst>(Caller)) {
NC = new InvokeInst(Callee, II->getNormalDest(), II->getUnwindDest(),
- &Args[0], Args.size(), Caller->getName(), Caller);
+ Args.begin(), Args.end(), Caller->getName(), Caller);
cast<InvokeInst>(NC)->setCallingConv(II->getCallingConv());
} else {
NC = new CallInst(Callee, Args.begin(), Args.end(),
Modified: llvm/trunk/lib/Transforms/Scalar/LowerGC.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/LowerGC.cpp?rev=41506&r1=41505&r2=41506&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/Scalar/LowerGC.cpp (original)
+++ llvm/trunk/lib/Transforms/Scalar/LowerGC.cpp Mon Aug 27 14:04:21 2007
@@ -331,7 +331,7 @@
std::vector<Value*> Args(CI->op_begin()+1, CI->op_end());
Value *II = new InvokeInst(CI->getCalledValue(), NewBB, Cleanup,
- &Args[0], Args.size(), CI->getName(), CBB);
+ Args.begin(), Args.end(), CI->getName(), CBB);
CI->replaceAllUsesWith(II);
delete CI;
}
Modified: llvm/trunk/lib/Transforms/Utils/InlineFunction.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Utils/InlineFunction.cpp?rev=41506&r1=41505&r2=41506&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/Utils/InlineFunction.cpp (original)
+++ llvm/trunk/lib/Transforms/Utils/InlineFunction.cpp Mon Aug 27 14:04:21 2007
@@ -85,7 +85,7 @@
SmallVector<Value*, 8> InvokeArgs(CI->op_begin()+1, CI->op_end());
InvokeInst *II =
new InvokeInst(CI->getCalledValue(), Split, InvokeDest,
- &InvokeArgs[0], InvokeArgs.size(),
+ InvokeArgs.begin(), InvokeArgs.end(),
CI->getName(), BB->getTerminator());
II->setCallingConv(CI->getCallingConv());
Modified: llvm/trunk/lib/VMCore/Instructions.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/VMCore/Instructions.cpp?rev=41506&r1=41505&r2=41506&view=diff
==============================================================================
--- llvm/trunk/lib/VMCore/Instructions.cpp (original)
+++ llvm/trunk/lib/VMCore/Instructions.cpp Mon Aug 27 14:04:21 2007
@@ -395,28 +395,6 @@
}
}
-InvokeInst::InvokeInst(Value *Fn, BasicBlock *IfNormal,
- BasicBlock *IfException,
- Value* const *Args, unsigned NumArgs,
- const std::string &Name, Instruction *InsertBefore)
- : TerminatorInst(cast<FunctionType>(cast<PointerType>(Fn->getType())
- ->getElementType())->getReturnType(),
- Instruction::Invoke, 0, 0, InsertBefore) {
- init(Fn, IfNormal, IfException, Args, NumArgs);
- setName(Name);
-}
-
-InvokeInst::InvokeInst(Value *Fn, BasicBlock *IfNormal,
- BasicBlock *IfException,
- Value* const *Args, unsigned NumArgs,
- const std::string &Name, BasicBlock *InsertAtEnd)
- : TerminatorInst(cast<FunctionType>(cast<PointerType>(Fn->getType())
- ->getElementType())->getReturnType(),
- Instruction::Invoke, 0, 0, InsertAtEnd) {
- init(Fn, IfNormal, IfException, Args, NumArgs);
- setName(Name);
-}
-
InvokeInst::InvokeInst(const InvokeInst &II)
: TerminatorInst(II.getType(), Instruction::Invoke,
new Use[II.getNumOperands()], II.getNumOperands()) {
Modified: llvm/trunk/tools/llvm-upgrade/UpgradeParser.y
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-upgrade/UpgradeParser.y?rev=41506&r1=41505&r2=41506&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-upgrade/UpgradeParser.y (original)
+++ llvm/trunk/tools/llvm-upgrade/UpgradeParser.y Mon Aug 27 14:04:21 2007
@@ -3342,7 +3342,8 @@
// Create the call node...
if (!$6) { // Has no arguments?
- $$.TI = new InvokeInst(V, Normal, Except, 0, 0);
+ std::vector<Value*> Args;
+ $$.TI = new InvokeInst(V, Normal, Except, Args.begin(), Args.end());
} else { // Has arguments?
// Loop through FunctionType's arguments and ensure they are specified
// correctly!
@@ -3362,7 +3363,7 @@
if (I != E || (ArgI != ArgE && !Ty->isVarArg()))
error("Invalid number of parameters detected");
- $$.TI = new InvokeInst(V, Normal, Except, &Args[0], Args.size());
+ $$.TI = new InvokeInst(V, Normal, Except, Args.begin(), Args.end());
}
cast<InvokeInst>($$.TI)->setCallingConv(upgradeCallingConv($2));
delete $3.PAT;
Modified: llvm/trunk/tools/llvm2cpp/CppWriter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm2cpp/CppWriter.cpp?rev=41506&r1=41505&r2=41506&view=diff
==============================================================================
--- llvm/trunk/tools/llvm2cpp/CppWriter.cpp (original)
+++ llvm/trunk/tools/llvm2cpp/CppWriter.cpp Mon Aug 27 14:04:21 2007
@@ -1083,8 +1083,7 @@
<< opNames[0] << ", "
<< opNames[1] << ", "
<< opNames[2] << ", "
- << "&" << iName << "_params[0], " << inv->getNumOperands() - 3
- << ", \"";
+ << iName << "_params.begin(), " << iName << "_params.end(), \"";
printEscapedString(inv->getName());
Out << "\", " << bbname << ");";
nl(Out) << iName << "->setCallingConv(";
More information about the llvm-commits
mailing list