diff options
Diffstat (limited to 'lib/Transforms/Scalar')
-rw-r--r-- | lib/Transforms/Scalar/ADCE.cpp | 2 | ||||
-rw-r--r-- | lib/Transforms/Scalar/InstructionCombining.cpp | 2 | ||||
-rw-r--r-- | lib/Transforms/Scalar/LowerGC.cpp | 15 | ||||
-rw-r--r-- | lib/Transforms/Scalar/ScalarReplAggregates.cpp | 4 |
4 files changed, 17 insertions, 6 deletions
diff --git a/lib/Transforms/Scalar/ADCE.cpp b/lib/Transforms/Scalar/ADCE.cpp index 4968fc9..d5201b8 100644 --- a/lib/Transforms/Scalar/ADCE.cpp +++ b/lib/Transforms/Scalar/ADCE.cpp @@ -194,7 +194,7 @@ bool ADCE::doADCE() { // 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); diff --git a/lib/Transforms/Scalar/InstructionCombining.cpp b/lib/Transforms/Scalar/InstructionCombining.cpp index a7e817a..8b706fd 100644 --- a/lib/Transforms/Scalar/InstructionCombining.cpp +++ b/lib/Transforms/Scalar/InstructionCombining.cpp @@ -7978,7 +7978,7 @@ bool InstCombiner::transformConstExprCastCall(CallSite CS) { &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()); diff --git a/lib/Transforms/Scalar/LowerGC.cpp b/lib/Transforms/Scalar/LowerGC.cpp index 27cccd5..a3c4a41 100644 --- a/lib/Transforms/Scalar/LowerGC.cpp +++ b/lib/Transforms/Scalar/LowerGC.cpp @@ -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 @@ bool LowerGC::runOnFunction(Function &F) { 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). diff --git a/lib/Transforms/Scalar/ScalarReplAggregates.cpp b/lib/Transforms/Scalar/ScalarReplAggregates.cpp index e303468..45bf562 100644 --- a/lib/Transforms/Scalar/ScalarReplAggregates.cpp +++ b/lib/Transforms/Scalar/ScalarReplAggregates.cpp @@ -709,7 +709,7 @@ void SROA::RewriteBitCastUserOfAlloca(Instruction *BCInst, AllocationInst *AI, 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 @@ void SROA::RewriteBitCastUserOfAlloca(Instruction *BCInst, AllocationInst *AI, ConstantInt::get(MI->getOperand(3)->getType(), EltSize), // Size Zero // Align }; - new CallInst(TheFn, Ops, 4, "", MI); + new CallInst(TheFn, Ops, Ops + 4, "", MI); } } |