[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 21:53:35 PST 2009


Hi Tanya,

Please remove this from the 2.5 branch. It breaks minisat.

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
> 




More information about the llvm-commits mailing list