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

Nick Lewycky nicholas at mxc.ca
Mon Feb 2 22:30:50 PST 2009


Chris Lattner wrote:
> 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.

Done in r63618.

> -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
> 
> _______________________________________________
> 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