[llvm-commits] [llvm] r63600 - in /llvm/trunk: lib/Transforms/Utils/InlineFunction.cpp test/Transforms/Inline/2009-02-02-InvokeUpdateCG.ll

Chris Lattner clattner at apple.com
Mon Feb 2 21:56:15 PST 2009


On Feb 2, 2009, at 9:53 PM, Nick Lewycky wrote:

> Hi Tanya,
>
> Please remove this from the 2.5 branch. It breaks minisat.

Please revert it from mainline first.

-Chris

>
>
> Nick Lewycky wrote:
>> Author: nicholas
>> Date: Mon Feb  2 22:34:40 2009
>> New Revision: 63600
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=63600&view=rev
>> Log:
>> Update the callgraph when replacing InvokeInst with CallInst when  
>> inlining.
>>
>> Added:
>>    llvm/trunk/test/Transforms/Inline/2009-02-02-InvokeUpdateCG.ll
>> Modified:
>>    llvm/trunk/lib/Transforms/Utils/InlineFunction.cpp
>>
>> Modified: llvm/trunk/lib/Transforms/Utils/InlineFunction.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Utils/InlineFunction.cpp?rev=63600&r1=63599&r2=63600&view=diff
>>
>> = 
>> = 
>> = 
>> = 
>> = 
>> = 
>> = 
>> = 
>> = 
>> =====================================================================
>> --- llvm/trunk/lib/Transforms/Utils/InlineFunction.cpp (original)
>> +++ llvm/trunk/lib/Transforms/Utils/InlineFunction.cpp Mon Feb  2  
>> 22:34:40 2009
>> @@ -37,11 +37,12 @@
>> /// in the body of the inlined function into invokes and turn unwind
>> /// instructions into branches to the invoke unwind dest.
>> ///
>> -/// II is the invoke instruction begin inlined.  FirstNewBlock is  
>> the first
>> +/// II is the invoke instruction being inlined.  FirstNewBlock is  
>> the first
>> /// block of the inlined code (the last block is the end of the  
>> function),
>> /// and InlineCodeInfo is information about the code that got  
>> inlined.
>> static void HandleInlinedInvoke(InvokeInst *II, BasicBlock  
>> *FirstNewBlock,
>> -                                ClonedCodeInfo &InlinedCodeInfo) {
>> +                                ClonedCodeInfo &InlinedCodeInfo,
>> +                                CallGraph *CG) {
>>   BasicBlock *InvokeDest = II->getUnwindDest();
>>   std::vector<Value*> InvokeDestPHIValues;
>>
>> @@ -93,6 +94,10 @@
>>           // Make sure that anything using the call now uses the  
>> invoke!
>>           CI->replaceAllUsesWith(II);
>>
>> +          // Update the callgraph.
>> +          if (CG)
>> +            (*CG)[Caller]->replaceCallSite(CI, II);
>> +
>>           // Delete the unconditional branch inserted by  
>> splitBasicBlock
>>           BB->getInstList().pop_back();
>>           Split->getInstList().pop_front();  // Delete the original  
>> call
>> @@ -433,7 +438,7 @@
>>   // any inlined 'unwind' instructions into branches to the invoke  
>> exception
>>   // destination, and call instructions into invoke instructions.
>>   if (InvokeInst *II = dyn_cast<InvokeInst>(TheCall))
>> -    HandleInlinedInvoke(II, FirstNewBlock, InlinedFunctionInfo);
>> +    HandleInlinedInvoke(II, FirstNewBlock, InlinedFunctionInfo, CG);
>>
>>   // If we cloned in _exactly one_ basic block, and if that block  
>> ends in a
>>   // return instruction, we splice the body of the inlined callee  
>> directly into
>>
>> Added: llvm/trunk/test/Transforms/Inline/2009-02-02-InvokeUpdateCG.ll
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/Inline/2009-02-02-InvokeUpdateCG.ll?rev=63600&view=auto
>>
>> = 
>> = 
>> = 
>> = 
>> = 
>> = 
>> = 
>> = 
>> = 
>> =====================================================================
>> --- llvm/trunk/test/Transforms/Inline/2009-02-02-InvokeUpdateCG.ll  
>> (added)
>> +++ llvm/trunk/test/Transforms/Inline/2009-02-02-InvokeUpdateCG.ll  
>> Mon Feb  2 22:34:40 2009
>> @@ -0,0 +1,32 @@
>> +; RUN: llvm-as < %s | opt -inline -prune-eh
>> +; PR3367
>> +
>> +define void @f2() {
>> +    invoke void @f6()
>> +        to label %ok1 unwind label %lpad1
>> +
>> +ok1:
>> +    ret void
>> +
>> +lpad1:
>> +    invoke void @f4()
>> +        to label %ok2 unwind label %lpad2
>> +
>> +ok2:
>> +    call void @f8()
>> +    unreachable
>> +
>> +lpad2:
>> +    unreachable
>> +}
>> +
>> +declare void @f3()
>> +
>> +define void @f4() {
>> +    call void @f3()
>> +    ret void
>> +}
>> +
>> +declare void @f6() nounwind
>> +
>> +declare void @f8()
>>
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits




More information about the llvm-commits mailing list