You missed one client, the indirect usage by llvm2cpp, which _generates_ calls to CallInst, but doesn't make them directly. It is currently generating calls to the old API, and causes test/Feature/llvm2cpp to fail.
-Chandler David Greene wrote: > Author: greened > Date: Tue Jul 31 22:43:44 2007 > New Revision: 40660 > > URL: http://llvm.org/viewvc/llvm-project?rev=40660&view=rev > Log: > > New CallInst interface to address GLIBCXX_DEBUG errors caused by > indexing an empty std::vector. > > Updates to all clients. > > 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/CodeGen/IntrinsicLowering.cpp > llvm/trunk/lib/ExecutionEngine/JIT/JIT.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/IPO/PruneEH.cpp > llvm/trunk/lib/Transforms/IPO/SimplifyLibCalls.cpp > llvm/trunk/lib/Transforms/Instrumentation/ProfilingUtils.cpp > llvm/trunk/lib/Transforms/Scalar/ADCE.cpp > llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp > llvm/trunk/lib/Transforms/Scalar/LowerGC.cpp > llvm/trunk/lib/Transforms/Scalar/ScalarReplAggregates.cpp > llvm/trunk/lib/Transforms/Utils/CodeExtractor.cpp > llvm/trunk/lib/Transforms/Utils/LowerInvoke.cpp > llvm/trunk/lib/Transforms/Utils/SimplifyCFG.cpp > llvm/trunk/lib/VMCore/Instructions.cpp > llvm/trunk/tools/bugpoint/Miscompilation.cpp > llvm/trunk/tools/llvm-upgrade/UpgradeParser.y > > Modified: llvm/trunk/include/llvm/Instructions.h > URL: > http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Instructions.h?rev=40660&r1=40659&r2=40660&view=diff > > ============================================================================== > --- llvm/trunk/include/llvm/Instructions.h (original) > +++ llvm/trunk/include/llvm/Instructions.h Tue Jul 31 22:43:44 2007 > @@ -16,7 +16,10 @@ > #ifndef LLVM_INSTRUCTIONS_H > #define LLVM_INSTRUCTIONS_H > > +#include <iterator> > + > #include "llvm/InstrTypes.h" > +#include "llvm/DerivedTypes.h" > > namespace llvm { > > @@ -735,12 +738,12 @@ > > //===----------------------------------------------------------------------===// > // CallInst Class > > //===----------------------------------------------------------------------===// > - > /// CallInst - This class represents a function call, abstracting a target > /// machine's calling convention. This class uses low bit of the > SubClassData > /// field to indicate whether or not this is a tail call. The rest of the > bits > /// hold the calling convention of the call. > /// > + > class CallInst : public Instruction { > ParamAttrsList *ParamAttrs; ///< parameter attributes for call > CallInst(const CallInst &CI); > @@ -749,18 +752,73 @@ > void init(Value *Func, Value *Actual); > void init(Value *Func); > > + template<typename InputIterator> > + void init(Value *Func, 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, &*ArgBegin, NumArgs); > + } > + else { > + init(Func, 0, NumArgs); > + } > + > + setName(Name); > + } > + > public: > + /// Construct a CallInst 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 a CallInst from a range of arguments > + template<typename InputIterator> > + CallInst(Value *Func, InputIterator ArgBegin, InputIterator ArgEnd, > + const std::string &Name = "", Instruction *InsertBefore = 0) > + : Instruction(cast<FunctionType>(cast<PointerType>(Func->getType()) > + ->getElementType())->getReturnType(), > + Instruction::Call, 0, 0, InsertBefore) { > + init(Func, ArgBegin, ArgEnd, Name, > + typename std::iterator_traits<InputIterator>::iterator_category()); > + } > + > + /// Construct a CallInst 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 a CallInst from a range of arguments > + template<typename InputIterator> > + CallInst(Value *Func, InputIterator ArgBegin, InputIterator ArgEnd, > + const std::string &Name, BasicBlock *InsertAtEnd) > + : Instruction(cast<FunctionType>(cast<PointerType>(Func->getType()) > + ->getElementType())->getReturnType(), > + Instruction::Call, 0, 0, InsertAtEnd) { > + init(Func, ArgBegin, ArgEnd, Name, > + typename std::iterator_traits<InputIterator>::iterator_category()); > + } > + > +#if 0 > + // Leave these here for llvm-gcc > CallInst(Value *F, Value* const *Args, unsigned NumArgs, > const std::string &Name = "", Instruction *InsertBefore = 0); > CallInst(Value *F, Value *const *Args, unsigned NumArgs, > const std::string &Name, BasicBlock *InsertAtEnd); > - > + > // Alternate CallInst ctors w/ two actuals, w/ one actual and no > // actuals, respectively. > CallInst(Value *F, Value *Actual1, Value *Actual2, > const std::string& Name = "", Instruction *InsertBefore = 0); > CallInst(Value *F, Value *Actual1, Value *Actual2, > const std::string& Name, BasicBlock *InsertAtEnd); > +#endif > CallInst(Value *F, Value *Actual, const std::string& Name = "", > Instruction *InsertBefore = 0); > CallInst(Value *F, Value *Actual, const std::string& Name, > > Modified: llvm/trunk/include/llvm/Support/LLVMBuilder.h > URL: > http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/LLVMBuilder.h?rev=40660&r1=40659&r2=40660&view=diff > > ============================================================================== > --- llvm/trunk/include/llvm/Support/LLVMBuilder.h (original) > +++ llvm/trunk/include/llvm/Support/LLVMBuilder.h Tue Jul 31 22:43:44 2007 > @@ -380,22 +380,31 @@ > } > > CallInst *CreateCall(Value *Callee, const char *Name = "") { > - return Insert(new CallInst(Callee, (Value**)0, 0, Name)); > + return Insert(new CallInst(Callee, Name)); > } > CallInst *CreateCall(Value *Callee, Value *Arg, const char *Name = "") { > - return Insert(new CallInst(Callee, &Arg, 1, Name)); > + return Insert(new CallInst(Callee, Arg, Name)); > } > - CallInst *CreateCall(Value *Callee, Value *Arg0, Value *Arg1, > + > + template<typename InputIterator> > + CallInst *CreateCall(Value *Callee, InputIterator ArgBegin, InputIterator > ArgEnd, > const char *Name = "") { > - Value *Args[] = { Arg0, Arg1 }; > - return Insert(new CallInst(Callee, Args, 2, Name)); > + return(Insert(new CallInst(Callee, ArgBegin, ArgEnd, Name))); > } > > - > +#if 0 > + CallInst *CreateCall(Value *Callee, Value *Arg0, Value *Arg1, > + const char *Name = "") { > + Value *Args[] = { Arg0, Arg1 }; > + return Insert(new CallInst(Callee, Args, Args+2, Name)); > + } > + > + // Leave this here for llvm-gcc > CallInst *CreateCall(Value *Callee, Value* const *Args, unsigned NumArgs, > const char *Name = "") { > - return Insert(new CallInst(Callee, Args, NumArgs, Name)); > + return Insert(new CallInst(Callee, Args, Args+NumArgs, Name)); > } > +#endif > > SelectInst *CreateSelect(Value *C, Value *True, Value *False, > const char *Name = "") { > > Modified: llvm/trunk/lib/AsmParser/llvmAsmParser.y > URL: > http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/AsmParser/llvmAsmParser.y?rev=40660&r1=40659&r2=40660&view=diff > > ============================================================================== > --- llvm/trunk/lib/AsmParser/llvmAsmParser.y (original) > +++ llvm/trunk/lib/AsmParser/llvmAsmParser.y Tue Jul 31 22:43:44 2007 > @@ -2958,7 +2958,7 @@ > GEN_ERROR("Invalid number of parameters detected"); > } > // Create the call node > - CallInst *CI = new CallInst(V, &Args[0], Args.size()); > + CallInst *CI = new CallInst(V, Args.begin(), Args.end()); > CI->setTailCall($1); > CI->setCallingConv($2); > $$ = CI; > > Modified: llvm/trunk/lib/Bitcode/Reader/BitcodeReader.cpp > URL: > http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Bitcode/Reader/BitcodeReader.cpp?rev=40660&r1=40659&r2=40660&view=diff > > ============================================================================== > --- llvm/trunk/lib/Bitcode/Reader/BitcodeReader.cpp (original) > +++ llvm/trunk/lib/Bitcode/Reader/BitcodeReader.cpp Tue Jul 31 22:43:44 2007 > @@ -1499,7 +1499,7 @@ > } > } > > - I = new CallInst(Callee, &Args[0], Args.size()); > + I = new CallInst(Callee, Args.begin(), Args.end()); > cast<CallInst>(I)->setCallingConv(CCInfo>>1); > cast<CallInst>(I)->setTailCall(CCInfo & 1); > break; > > Modified: llvm/trunk/lib/CodeGen/IntrinsicLowering.cpp > URL: > http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/IntrinsicLowering.cpp?rev=40660&r1=40659&r2=40660&view=diff > > ============================================================================== > --- llvm/trunk/lib/CodeGen/IntrinsicLowering.cpp (original) > +++ llvm/trunk/lib/CodeGen/IntrinsicLowering.cpp Tue Jul 31 22:43:44 2007 > @@ -53,8 +53,8 @@ > FunctionType::get(RetTy, ParamTys, > false)); > } > > - SmallVector<Value*, 8> Operands(ArgBegin, ArgEnd); > - CallInst *NewCI = new CallInst(FCache, &Operands[0], Operands.size(), > + SmallVector<Value *, 8> Args(ArgBegin, ArgEnd); > + CallInst *NewCI = new CallInst(FCache, Args.begin(), Args.end(), > CI->getName(), CI); > if (!CI->use_empty()) > CI->replaceAllUsesWith(NewCI); > @@ -421,7 +421,7 @@ > CI->getOperand(2), > CI->getOperand(3) > }; > - return new CallInst(F, Args, sizeof(Args)/sizeof(Args[0]), CI->getName(), > CI); > + return new CallInst(F, Args, Args+sizeof(Args)/sizeof(Args[0]), > CI->getName(), CI); > } > > /// Convert the llvm.part.set.iX.iY.iZ intrinsic. This intrinsic takes > @@ -587,7 +587,7 @@ > CI->getOperand(3), > CI->getOperand(4) > }; > - return new CallInst(F, Args, sizeof(Args)/sizeof(Args[0]), CI->getName(), > CI); > + return new CallInst(F, Args, Args+sizeof(Args)/sizeof(Args[0]), > CI->getName(), CI); > } > > > > Modified: llvm/trunk/lib/ExecutionEngine/JIT/JIT.cpp > URL: > http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ExecutionEngine/JIT/JIT.cpp?rev=40660&r1=40659&r2=40660&view=diff > > ============================================================================== > --- llvm/trunk/lib/ExecutionEngine/JIT/JIT.cpp (original) > +++ llvm/trunk/lib/ExecutionEngine/JIT/JIT.cpp Tue Jul 31 22:43:44 2007 > @@ -224,7 +224,7 @@ > Args.push_back(C); > } > > - CallInst *TheCall = new CallInst(F, &Args[0], Args.size(), "", StubBB); > + CallInst *TheCall = new CallInst(F, Args.begin(), Args.end(), "", StubBB); > TheCall->setTailCall(); > if (TheCall->getType() != Type::VoidTy) > new ReturnInst(TheCall, StubBB); // Return result of the > call. > > Modified: llvm/trunk/lib/Transforms/IPO/ArgumentPromotion.cpp > URL: > http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/IPO/ArgumentPromotion.cpp?rev=40660&r1=40659&r2=40660&view=diff > > ============================================================================== > --- llvm/trunk/lib/Transforms/IPO/ArgumentPromotion.cpp (original) > +++ llvm/trunk/lib/Transforms/IPO/ArgumentPromotion.cpp Tue Jul 31 22:43:44 > 2007 > @@ -450,7 +450,7 @@ > &Args[0], Args.size(), "", Call); > cast<InvokeInst>(New)->setCallingConv(CS.getCallingConv()); > } else { > - New = new CallInst(NF, &Args[0], Args.size(), "", Call); > + New = new CallInst(NF, Args.begin(), Args.end(), "", Call); > cast<CallInst>(New)->setCallingConv(CS.getCallingConv()); > if (cast<CallInst>(Call)->isTailCall()) > cast<CallInst>(New)->setTailCall(); > > Modified: llvm/trunk/lib/Transforms/IPO/DeadArgumentElimination.cpp > URL: > http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/IPO/DeadArgumentElimination.cpp?rev=40660&r1=40659&r2=40660&view=diff > > ============================================================================== > --- llvm/trunk/lib/Transforms/IPO/DeadArgumentElimination.cpp (original) > +++ llvm/trunk/lib/Transforms/IPO/DeadArgumentElimination.cpp Tue Jul 31 > 22:43:44 2007 > @@ -177,7 +177,7 @@ > &Args[0], Args.size(), "", Call); > cast<InvokeInst>(New)->setCallingConv(CS.getCallingConv()); > } else { > - New = new CallInst(NF, &Args[0], Args.size(), "", Call); > + New = new CallInst(NF, Args.begin(), Args.end(), "", Call); > cast<CallInst>(New)->setCallingConv(CS.getCallingConv()); > if (cast<CallInst>(Call)->isTailCall()) > cast<CallInst>(New)->setTailCall(); > @@ -543,7 +543,7 @@ > &Args[0], Args.size(), "", Call); > cast<InvokeInst>(New)->setCallingConv(CS.getCallingConv()); > } else { > - New = new CallInst(NF, &Args[0], Args.size(), "", Call); > + New = new CallInst(NF, Args.begin(), Args.end(), "", Call); > cast<CallInst>(New)->setCallingConv(CS.getCallingConv()); > if (cast<CallInst>(Call)->isTailCall()) > cast<CallInst>(New)->setTailCall(); > > Modified: llvm/trunk/lib/Transforms/IPO/LowerSetJmp.cpp > URL: > http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/IPO/LowerSetJmp.cpp?rev=40660&r1=40659&r2=40660&view=diff > > ============================================================================== > --- llvm/trunk/lib/Transforms/IPO/LowerSetJmp.cpp (original) > +++ llvm/trunk/lib/Transforms/IPO/LowerSetJmp.cpp Tue Jul 31 22:43:44 2007 > @@ -49,6 +49,7 @@ > #include "llvm/ADT/Statistic.h" > #include "llvm/ADT/StringExtras.h" > #include "llvm/ADT/VectorExtras.h" > +#include "llvm/ADT/SmallVector.h" > using namespace llvm; > > STATISTIC(LongJmpsTransformed, "Number of longjmps transformed"); > @@ -263,7 +264,10 @@ > // Inst's uses and doesn't get a name. > CastInst* CI = > new BitCastInst(Inst->getOperand(1), SBPTy, "LJBuf", Inst); > - new CallInst(ThrowLongJmp, CI, Inst->getOperand(2), "", Inst); > + SmallVector<Value *, 2> Args; > + Args.push_back(CI); > + Args.push_back(Inst->getOperand(2)); > + new CallInst(ThrowLongJmp, Args.begin(), Args.end(), "", Inst); > > SwitchValuePair& SVP = SwitchValMap[Inst->getParent()->getParent()]; > > @@ -381,7 +385,7 @@ > make_vector<Value*>(GetSetJmpMap(Func), BufPtr, > ConstantInt::get(Type::Int32Ty, > SetJmpIDMap[Func]++), 0); > - new CallInst(AddSJToMap, &Args[0], Args.size(), "", Inst); > + new CallInst(AddSJToMap, Args.begin(), Args.end(), "", Inst); > > // We are guaranteed that there are no values live across basic blocks > // (because we are "not in SSA form" yet), but there can still be values > live > > Modified: llvm/trunk/lib/Transforms/IPO/PruneEH.cpp > URL: > http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/IPO/PruneEH.cpp?rev=40660&r1=40659&r2=40660&view=diff > > ============================================================================== > --- llvm/trunk/lib/Transforms/IPO/PruneEH.cpp (original) > +++ llvm/trunk/lib/Transforms/IPO/PruneEH.cpp Tue Jul 31 22:43:44 2007 > @@ -153,7 +153,7 @@ > SmallVector<Value*, 8> Args(II->op_begin()+3, II->op_end()); > // Insert a call instruction before the invoke. > CallInst *Call = new CallInst(II->getCalledValue(), > - &Args[0], Args.size(), "", II); > + Args.begin(), Args.end(), "", II); > Call->takeName(II); > Call->setCallingConv(II->getCallingConv()); > > > Modified: llvm/trunk/lib/Transforms/IPO/SimplifyLibCalls.cpp > URL: > http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/IPO/SimplifyLibCalls.cpp?rev=40660&r1=40659&r2=40660&view=diff > > ============================================================================== > --- llvm/trunk/lib/Transforms/IPO/SimplifyLibCalls.cpp (original) > +++ llvm/trunk/lib/Transforms/IPO/SimplifyLibCalls.cpp Tue Jul 31 22:43:44 > 2007 > @@ -509,7 +509,7 @@ > ConstantInt::get(SLC.getIntPtrType(), SrcStr.size()+1), // copy nul > byte. > ConstantInt::get(Type::Int32Ty, 1) // alignment > }; > - new CallInst(SLC.get_memcpy(), Vals, 4, "", CI); > + new CallInst(SLC.get_memcpy(), Vals, Vals + 4, "", CI); > > return ReplaceCallWith(CI, Dst); > } > @@ -549,7 +549,7 @@ > CI->getOperand(2), > ConstantInt::get(SLC.getIntPtrType(), Str.size()+1) > }; > - return ReplaceCallWith(CI, new CallInst(SLC.get_memchr(), Args, 3, > + return ReplaceCallWith(CI, new CallInst(SLC.get_memchr(), Args, Args + > 3, > CI->getName(), CI)); > } > > @@ -752,7 +752,7 @@ > ConstantInt::get(SLC.getIntPtrType(), SrcStr.size()+1), > ConstantInt::get(Type::Int32Ty, 1) // alignment > }; > - new CallInst(SLC.get_memcpy(), MemcpyOps, 4, "", CI); > + new CallInst(SLC.get_memcpy(), MemcpyOps, MemcpyOps + 4, "", CI); > > return ReplaceCallWith(CI, Dst); > } > @@ -1294,7 +1294,7 @@ > ConstantInt::get(SLC.getIntPtrType(), 1), > CI->getOperand(1) > }; > - new CallInst(SLC.get_fwrite(FILEty), FWriteArgs, 4, CI->getName(), CI); > + new CallInst(SLC.get_fwrite(FILEty), FWriteArgs, FWriteArgs + 4, > CI->getName(), CI); > return ReplaceCallWith(CI, ConstantInt::get(CI->getType(), > FormatStr.size())); > } > @@ -1311,7 +1311,10 @@ > const Type *FILETy = CI->getOperand(1)->getType(); > Value *C = CastInst::createZExtOrBitCast(CI->getOperand(3), > Type::Int32Ty, > CI->getName()+".int", CI); > - new CallInst(SLC.get_fputc(FILETy), C, CI->getOperand(1), "", CI); > + SmallVector<Value *, 2> Args; > + Args.push_back(C); > + Args.push_back(CI->getOperand(1)); > + new CallInst(SLC.get_fputc(FILETy), Args.begin(), Args.end(), "", CI); > return ReplaceCallWith(CI, ConstantInt::get(CI->getType(), 1)); > } > case 's': { > @@ -1323,8 +1326,11 @@ > return false; > > // fprintf(file,"%s",str) -> fputs(str,file) > - new CallInst(SLC.get_fputs(FILETy), CastToCStr(CI->getOperand(3), CI), > - CI->getOperand(1), CI->getName(), CI); > + SmallVector<Value *, 2> Args; > + Args.push_back(CastToCStr(CI->getOperand(3), CI)); > + Args.push_back(CI->getOperand(1)); > + new CallInst(SLC.get_fputs(FILETy), Args.begin(), > + Args.end(), CI->getName(), CI); > return ReplaceCallWith(CI, 0); > } > default: > @@ -1375,7 +1381,7 @@ > FormatStr.size()+1), // Copy the nul byte. > ConstantInt::get(Type::Int32Ty, 1) > }; > - new CallInst(SLC.get_memcpy(), MemCpyArgs, 4, "", CI); > + new CallInst(SLC.get_memcpy(), MemCpyArgs, MemCpyArgs + 4, "", CI); > return ReplaceCallWith(CI, ConstantInt::get(CI->getType(), > FormatStr.size())); > } > @@ -1412,7 +1418,7 @@ > Len, > ConstantInt::get(Type::Int32Ty, 1) > }; > - new CallInst(SLC.get_memcpy(), MemcpyArgs, 4, "", CI); > + new CallInst(SLC.get_memcpy(), MemcpyArgs, MemcpyArgs + 4, "", CI); > > // The strlen result is the unincremented number of bytes in the > string. > if (!CI->use_empty()) { > @@ -1464,7 +1470,7 @@ > ConstantInt::get(SLC.getIntPtrType(), 1), > CI->getOperand(2) > }; > - new CallInst(SLC.get_fwrite(FILETy), FWriteParms, 4, "", CI); > + new CallInst(SLC.get_fwrite(FILETy), FWriteParms, FWriteParms + 4, "", > CI); > return ReplaceCallWith(CI, 0); // Known to have no uses (see above). > } > } FPutsOptimizer; > @@ -1505,12 +1511,14 @@ > > // If this is writing one byte, turn it into fputc. > if (EltSize == 1 && EltCount == 1) { > + SmallVector<Value *, 2> Args; > // fwrite(s,1,1,F) -> fputc(s[0],F) > Value *Ptr = CI->getOperand(1); > Value *Val = new LoadInst(Ptr, Ptr->getName()+".byte", CI); > - Val = new ZExtInst(Val, Type::Int32Ty, Val->getName()+".int", CI); > + Args.push_back(new ZExtInst(Val, Type::Int32Ty, Val->getName()+".int", > CI)); > + Args.push_back(CI->getOperand(4)); > const Type *FILETy = CI->getOperand(4)->getType(); > - new CallInst(SLC.get_fputc(FILETy), Val, CI->getOperand(4), "", CI); > + new CallInst(SLC.get_fputc(FILETy), Args.begin(), Args.end(), "", CI); > return ReplaceCallWith(CI, ConstantInt::get(CI->getType(), 1)); > } > return false; > > Modified: llvm/trunk/lib/Transforms/Instrumentation/ProfilingUtils.cpp > URL: > http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Instrumentation/ProfilingUtils.cpp?rev=40660&r1=40659&r2=40660&view=diff > > ============================================================================== > --- llvm/trunk/lib/Transforms/Instrumentation/ProfilingUtils.cpp (original) > +++ llvm/trunk/lib/Transforms/Instrumentation/ProfilingUtils.cpp Tue Jul 31 > 22:43:44 2007 > @@ -54,7 +54,7 @@ > } > Args[3] = ConstantInt::get(Type::Int32Ty, NumElements); > > - Instruction *InitCall = new CallInst(InitFn, &Args[0], Args.size(), > + Instruction *InitCall = new CallInst(InitFn, Args.begin(), Args.end(), > "newargc", InsertPos); > > // If argc or argv are not available in main, just pass null values in. > > Modified: llvm/trunk/lib/Transforms/Scalar/ADCE.cpp > URL: > http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/ADCE.cpp?rev=40660&r1=40659&r2=40660&view=diff > > ============================================================================== > --- llvm/trunk/lib/Transforms/Scalar/ADCE.cpp (original) > +++ llvm/trunk/lib/Transforms/Scalar/ADCE.cpp Tue Jul 31 22:43:44 2007 > @@ -194,7 +194,7 @@ > // The function cannot unwind. Convert it to a call with a branch > // after it to the normal destination. > SmallVector<Value*, 8> Args(II->op_begin()+3, II->op_end()); > - CallInst *NewCall = new CallInst(F, &Args[0], Args.size(), "", II); > + CallInst *NewCall = new CallInst(F, Args.begin(), Args.end(), "", > II); > NewCall->takeName(II); > NewCall->setCallingConv(II->getCallingConv()); > II->replaceAllUsesWith(NewCall); > > Modified: llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp > URL: > http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp?rev=40660&r1=40659&r2=40660&view=diff > > ============================================================================== > --- llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp (original) > +++ llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp Tue Jul 31 > 22:43:44 2007 > @@ -7978,7 +7978,7 @@ > &Args[0], Args.size(), Caller->getName(), Caller); > cast<InvokeInst>(NC)->setCallingConv(II->getCallingConv()); > } else { > - NC = new CallInst(Callee, &Args[0], Args.size(), Caller->getName(), > Caller); > + NC = new CallInst(Callee, Args.begin(), Args.end(), Caller->getName(), > Caller); > if (cast<CallInst>(Caller)->isTailCall()) > cast<CallInst>(NC)->setTailCall(); > > cast<CallInst>(NC)->setCallingConv(cast<CallInst>(Caller)->getCallingConv()); > > Modified: llvm/trunk/lib/Transforms/Scalar/LowerGC.cpp > URL: > http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/LowerGC.cpp?rev=40660&r1=40659&r2=40660&view=diff > > ============================================================================== > --- llvm/trunk/lib/Transforms/Scalar/LowerGC.cpp (original) > +++ llvm/trunk/lib/Transforms/Scalar/LowerGC.cpp Tue Jul 31 22:43:44 2007 > @@ -27,6 +27,7 @@ > #include "llvm/Module.h" > #include "llvm/Pass.h" > #include "llvm/Support/Compiler.h" > +#include "llvm/ADT/SmallVector.h" > using namespace llvm; > > namespace { > @@ -197,8 +198,18 @@ > CI->setOperand(0, GCRead); > } else { > // Create a whole new call to replace the old one. > - CallInst *NC = new CallInst(GCRead, CI->getOperand(1), > - CI->getOperand(2), > + > + // It sure would be nice to pass op_begin()+1, > + // op_begin()+2 but it runs into trouble with > + // CallInst::init's &*ierator, which requires a > + // conversion from Use* to Value*. The conversion > + // from Use to Value * is not useful because the > + // memory for Value * won't be contiguous. > + SmallVector<Value *, 2> Args; > + Args.push_back(CI->getOperand(1)); > + Args.push_back(CI->getOperand(2)); > + CallInst *NC = new CallInst(GCRead, Args.begin(), > + Args.end(), > CI->getName(), CI); > // These functions only deal with ptr type results so BitCast > // is the correct kind of cast (no-op cast). > > Modified: llvm/trunk/lib/Transforms/Scalar/ScalarReplAggregates.cpp > URL: > http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/ScalarReplAggregates.cpp?rev=40660&r1=40659&r2=40660&view=diff > > ============================================================================== > --- llvm/trunk/lib/Transforms/Scalar/ScalarReplAggregates.cpp (original) > +++ llvm/trunk/lib/Transforms/Scalar/ScalarReplAggregates.cpp Tue Jul 31 > 22:43:44 2007 > @@ -709,7 +709,7 @@ > ConstantInt::get(MI->getOperand(3)->getType(), EltSize), // Size > Zero // Align > }; > - new CallInst(TheFn, Ops, 4, "", MI); > + new CallInst(TheFn, Ops, Ops + 4, "", MI); > } else { > assert(isa<MemSetInst>(MI)); > Value *Ops[] = { > @@ -717,7 +717,7 @@ > ConstantInt::get(MI->getOperand(3)->getType(), EltSize), // Size > Zero // Align > }; > - new CallInst(TheFn, Ops, 4, "", MI); > + new CallInst(TheFn, Ops, Ops + 4, "", MI); > } > } > > > Modified: llvm/trunk/lib/Transforms/Utils/CodeExtractor.cpp > URL: > http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Utils/CodeExtractor.cpp?rev=40660&r1=40659&r2=40660&view=diff > > ============================================================================== > --- llvm/trunk/lib/Transforms/Utils/CodeExtractor.cpp (original) > +++ llvm/trunk/lib/Transforms/Utils/CodeExtractor.cpp Tue Jul 31 22:43:44 2007 > @@ -393,7 +393,7 @@ > } > > // Emit the call to the function > - CallInst *call = new CallInst(newFunction, ¶ms[0], params.size(), > + CallInst *call = new CallInst(newFunction, params.begin(), params.end(), > NumExitBlocks > 1 ? "targetBlock" : ""); > codeReplacer->getInstList().push_back(call); > > > Modified: llvm/trunk/lib/Transforms/Utils/LowerInvoke.cpp > URL: > http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Utils/LowerInvoke.cpp?rev=40660&r1=40659&r2=40660&view=diff > > ============================================================================== > --- llvm/trunk/lib/Transforms/Utils/LowerInvoke.cpp (original) > +++ llvm/trunk/lib/Transforms/Utils/LowerInvoke.cpp Tue Jul 31 22:43:44 2007 > @@ -212,7 +212,7 @@ > std::vector<Value*> CallArgs(II->op_begin()+3, II->op_end()); > // Insert a normal call instruction... > CallInst *NewCall = new CallInst(II->getCalledValue(), > - &CallArgs[0], CallArgs.size(), "", > II); > + CallArgs.begin(), CallArgs.end(), "", > II); > NewCall->takeName(II); > NewCall->setCallingConv(II->getCallingConv()); > II->replaceAllUsesWith(NewCall); > @@ -269,7 +269,7 @@ > // Insert a normal call instruction. > std::vector<Value*> CallArgs(II->op_begin()+3, II->op_end()); > CallInst *NewCall = new CallInst(II->getCalledValue(), > - &CallArgs[0], CallArgs.size(), "", > + CallArgs.begin(), CallArgs.end(), "", > II); > NewCall->takeName(II); > NewCall->setCallingConv(II->getCallingConv()); > @@ -542,7 +542,7 @@ > Idx.push_back(ConstantInt::get(Type::Int32Ty, 0)); > Idx[0] = new GetElementPtrInst(BufPtr, &Idx[0], 2, "JmpBuf", UnwindBlock); > Idx[1] = ConstantInt::get(Type::Int32Ty, 1); > - new CallInst(LongJmpFn, &Idx[0], Idx.size(), "", UnwindBlock); > + new CallInst(LongJmpFn, Idx.begin(), Idx.end(), "", UnwindBlock); > new UnreachableInst(UnwindBlock); > > // Set up the term block ("throw without a catch"). > > Modified: llvm/trunk/lib/Transforms/Utils/SimplifyCFG.cpp > URL: > http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Utils/SimplifyCFG.cpp?rev=40660&r1=40659&r2=40660&view=diff > > ============================================================================== > --- llvm/trunk/lib/Transforms/Utils/SimplifyCFG.cpp (original) > +++ llvm/trunk/lib/Transforms/Utils/SimplifyCFG.cpp Tue Jul 31 22:43:44 2007 > @@ -1374,7 +1374,7 @@ > // Insert the call now... > SmallVector<Value*,8> Args(II->op_begin()+3, II->op_end()); > CallInst *CI = new CallInst(II->getCalledValue(), > - &Args[0], Args.size(), II->getName(), > BI); > + Args.begin(), Args.end(), > II->getName(), BI); > CI->setCallingConv(II->getCallingConv()); > // If the invoke produced a value, the Call now does instead > II->replaceAllUsesWith(CI); > @@ -1748,7 +1748,7 @@ > // Insert the call now... > SmallVector<Value*, 8> Args(II->op_begin()+3, II->op_end()); > CallInst *CI = new CallInst(II->getCalledValue(), > - &Args[0], Args.size(), > + Args.begin(), Args.end(), > II->getName(), BI); > CI->setCallingConv(II->getCallingConv()); > // If the invoke produced a value, the Call does now instead. > > Modified: llvm/trunk/lib/VMCore/Instructions.cpp > URL: > http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/VMCore/Instructions.cpp?rev=40660&r1=40659&r2=40660&view=diff > > ============================================================================== > --- llvm/trunk/lib/VMCore/Instructions.cpp (original) > +++ llvm/trunk/lib/VMCore/Instructions.cpp Tue Jul 31 22:43:44 2007 > @@ -267,19 +267,21 @@ > assert(FTy->getNumParams() == 0 && "Calling a function with bad > signature"); > } > > +#if 0 > +// Leave for llvm-gcc > CallInst::CallInst(Value *Func, Value* const *Args, unsigned NumArgs, > const std::string &Name, BasicBlock *InsertAtEnd) > : Instruction(cast<FunctionType>(cast<PointerType>(Func->getType()) > - ->getElementType())->getReturnType(), > + ->getElementType())->getReturnType(), > Instruction::Call, 0, 0, InsertAtEnd) { > init(Func, Args, NumArgs); > setName(Name); > } > CallInst::CallInst(Value *Func, Value* const *Args, unsigned NumArgs, > const std::string &Name, Instruction *InsertBefore) > -: Instruction(cast<FunctionType>(cast<PointerType>(Func->getType()) > - ->getElementType())->getReturnType(), > - Instruction::Call, 0, 0, InsertBefore) { > + : Instruction(cast<FunctionType>(cast<PointerType>(Func->getType()) > + ->getElementType())->getReturnType(), > + Instruction::Call, 0, 0, InsertBefore) { > init(Func, Args, NumArgs); > setName(Name); > } > @@ -301,7 +303,7 @@ > init(Func, Actual1, Actual2); > setName(Name); > } > - > +#endif > CallInst::CallInst(Value *Func, Value* Actual, const std::string &Name, > Instruction *InsertBefore) > : Instruction(cast<FunctionType>(cast<PointerType>(Func->getType()) > @@ -319,7 +321,6 @@ > init(Func, Actual); > setName(Name); > } > - > CallInst::CallInst(Value *Func, const std::string &Name, > Instruction *InsertBefore) > : Instruction(cast<FunctionType>(cast<PointerType>(Func->getType()) > > Modified: llvm/trunk/tools/bugpoint/Miscompilation.cpp > URL: > http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/bugpoint/Miscompilation.cpp?rev=40660&r1=40659&r2=40660&view=diff > > ============================================================================== > --- llvm/trunk/tools/bugpoint/Miscompilation.cpp (original) > +++ llvm/trunk/tools/bugpoint/Miscompilation.cpp Tue Jul 31 22:43:44 2007 > @@ -663,7 +663,7 @@ > > // Call the old main function and return its result > BasicBlock *BB = new BasicBlock("entry", newMain); > - CallInst *call = new CallInst(oldMainProto, &args[0], args.size(), > + CallInst *call = new CallInst(oldMainProto, args.begin(), args.end(), > "", BB); > > // If the type of old function wasn't void, return value of call > @@ -734,8 +734,8 @@ > // Resolve the call to function F via the JIT API: > // > // call resolver(GetElementPtr...) > - CallInst *Resolver = new CallInst(resolverFunc, &ResolverArgs[0], > - ResolverArgs.size(), > + CallInst *Resolver = new CallInst(resolverFunc, > ResolverArgs.begin(), > + ResolverArgs.end(), > "resolver", LookupBB); > // cast the result from the resolver to correctly-typed function > CastInst *CastedResolver = new BitCastInst(Resolver, > @@ -757,10 +757,10 @@ > > // Pass on the arguments to the real function, return its result > if (F->getReturnType() == Type::VoidTy) { > - new CallInst(FuncPtr, &Args[0], Args.size(), "", DoCallBB); > + new CallInst(FuncPtr, Args.begin(), Args.end(), "", DoCallBB); > new ReturnInst(DoCallBB); > } else { > - CallInst *Call = new CallInst(FuncPtr, &Args[0], Args.size(), > + CallInst *Call = new CallInst(FuncPtr, Args.begin(), Args.end(), > "retval", DoCallBB); > new ReturnInst(Call, DoCallBB); > } > > Modified: llvm/trunk/tools/llvm-upgrade/UpgradeParser.y > URL: > http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-upgrade/UpgradeParser.y?rev=40660&r1=40659&r2=40660&view=diff > > ============================================================================== > --- llvm/trunk/tools/llvm-upgrade/UpgradeParser.y (original) > +++ llvm/trunk/tools/llvm-upgrade/UpgradeParser.y Tue Jul 31 22:43:44 2007 > @@ -1513,7 +1513,7 @@ > const PointerType *PFTy = PointerType::get(FTy); > Value* Func = getVal(PFTy, ID); > Args[0] = new BitCastInst(Args[0], PtrTy, makeNameUnique("va"), > CurBB); > - return new CallInst(Func, &Args[0], Args.size()); > + return new CallInst(Func, Args.begin(), Args.end()); > } else if (Name == "llvm.va_copy") { > if (Args.size() != 2) > error("Invalid prototype for " + Name + " prototype"); > @@ -1527,7 +1527,7 @@ > std::string InstName1(makeNameUnique("va1")); > Args[0] = new BitCastInst(Args[0], PtrTy, InstName0, CurBB); > Args[1] = new BitCastInst(Args[1], PtrTy, InstName1, CurBB); > - return new CallInst(Func, &Args[0], Args.size()); > + return new CallInst(Func, Args.begin(), Args.end()); > } > } > } > @@ -1751,11 +1751,12 @@ > > while (!F->use_empty()) { > CallInst* CI = cast<CallInst>(F->use_back()); > - AllocaInst* a = new AllocaInst(ArgTy, 0, "vacopy.fix.1", CI); > - AllocaInst* b = new AllocaInst(ArgTy, 0, "vacopy.fix.2", CI); > - new StoreInst(CI->getOperand(1), b, CI); > - new CallInst(NF, a, b, "", CI); > - Value* foo = new LoadInst(a, "vacopy.fix.3", CI); > + SmallVector<Value *, 2> Args; > + Args.push_back(new AllocaInst(ArgTy, 0, "vacopy.fix.1", CI)); > + Args.push_back(new AllocaInst(ArgTy, 0, "vacopy.fix.2", CI)); > + new StoreInst(CI->getOperand(1), Args[1], CI); > + new CallInst(NF, Args.begin(), Args.end(), "", CI); > + Value* foo = new LoadInst(Args[0], "vacopy.fix.3", CI); > CI->replaceAllUsesWith(foo); > CI->getParent()->getInstList().erase(CI); > } > @@ -3806,7 +3807,7 @@ > } > > // Create the call instruction > - CallInst *CI = new CallInst(V, &Args[0], Args.size()); > + CallInst *CI = new CallInst(V, Args.begin(), Args.end()); > CI->setTailCall($1); > CI->setCallingConv(upgradeCallingConv($2)); > $$.I = CI; > > > _______________________________________________ > llvm-commits mailing list > llvm-commits@cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits