[llvm-commits] [llvm] r132797 - in /llvm/trunk: include/llvm/Analysis/CallGraph.h lib/Analysis/IPA/CallGraph.cpp lib/Analysis/IPA/CallGraphSCCPass.cpp lib/Transforms/Utils/InlineFunction.cpp

Nick Lewycky nicholas at mxc.ca
Thu Jun 9 21:13:08 PDT 2011


John McCall wrote:
> Author: rjmccall
> Date: Thu Jun  9 14:46:27 2011
> New Revision: 132797
>
> URL: http://llvm.org/viewvc/llvm-project?rev=132797&view=rev
> Log:
> Teach the CallGraph to ignore calls to intrinsics.

Why?

Nick

>
>
> Modified:
>      llvm/trunk/include/llvm/Analysis/CallGraph.h
>      llvm/trunk/lib/Analysis/IPA/CallGraph.cpp
>      llvm/trunk/lib/Analysis/IPA/CallGraphSCCPass.cpp
>      llvm/trunk/lib/Transforms/Utils/InlineFunction.cpp
>
> Modified: llvm/trunk/include/llvm/Analysis/CallGraph.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/CallGraph.h?rev=132797&r1=132796&r2=132797&view=diff
> ==============================================================================
> --- llvm/trunk/include/llvm/Analysis/CallGraph.h (original)
> +++ llvm/trunk/include/llvm/Analysis/CallGraph.h Thu Jun  9 14:46:27 2011
> @@ -259,6 +259,9 @@
>     /// addCalledFunction - Add a function to the list of functions called by this
>     /// one.
>     void addCalledFunction(CallSite CS, CallGraphNode *M) {
> +    assert(!CS.getInstruction() ||
> +           !CS.getCalledFunction() ||
> +           !CS.getCalledFunction()->isIntrinsic());
>       CalledFunctions.push_back(std::make_pair(CS.getInstruction(), M));
>       M->AddRef();
>     }
>
> Modified: llvm/trunk/lib/Analysis/IPA/CallGraph.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/IPA/CallGraph.cpp?rev=132797&r1=132796&r2=132797&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Analysis/IPA/CallGraph.cpp (original)
> +++ llvm/trunk/lib/Analysis/IPA/CallGraph.cpp Thu Jun  9 14:46:27 2011
> @@ -148,7 +148,7 @@
>         for (BasicBlock::iterator II = BB->begin(), IE = BB->end();
>              II != IE; ++II) {
>           CallSite CS(cast<Value>(II));
> -        if (CS&&  !isa<DbgInfoIntrinsic>(II)) {
> +        if (CS&&  !isa<IntrinsicInst>(II)) {
>             const Function *Callee = CS.getCalledFunction();
>             if (Callee)
>               Node->addCalledFunction(CS, getOrInsertFunction(Callee));
>
> Modified: llvm/trunk/lib/Analysis/IPA/CallGraphSCCPass.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/IPA/CallGraphSCCPass.cpp?rev=132797&r1=132796&r2=132797&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Analysis/IPA/CallGraphSCCPass.cpp (original)
> +++ llvm/trunk/lib/Analysis/IPA/CallGraphSCCPass.cpp Thu Jun  9 14:46:27 2011
> @@ -245,8 +245,8 @@
>
>       for (Function::iterator BB = F->begin(), E = F->end(); BB != E; ++BB)
>         for (BasicBlock::iterator I = BB->begin(), E = BB->end(); I != E; ++I) {
> -          CallSite CS(cast<Value>(I));
> -        if (!CS || isa<DbgInfoIntrinsic>(I)) continue;
> +        CallSite CS(cast<Value>(I));
> +        if (!CS || isa<IntrinsicInst>(I)) continue;
>
>           // If this call site already existed in the callgraph, just verify it
>           // matches up to expectations and remove it from CallSites.
>
> Modified: llvm/trunk/lib/Transforms/Utils/InlineFunction.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Utils/InlineFunction.cpp?rev=132797&r1=132796&r2=132797&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Transforms/Utils/InlineFunction.cpp (original)
> +++ llvm/trunk/lib/Transforms/Utils/InlineFunction.cpp Thu Jun  9 14:46:27 2011
> @@ -132,18 +132,6 @@
>     };
>   }
>
> -/// Replace all the instruction uses of a value with a different value.
> -/// This has the advantage of not screwing up the CallGraph.
> -static void replaceAllInsnUsesWith(Instruction *insn, Value *replacement) {
> -  for (Value::use_iterator i = insn->use_begin(), e = insn->use_end();
> -       i != e; ) {
> -    Use&use = i.getUse();
> -    ++i;
> -    if (isa<Instruction>(use.getUser()))
> -      use.set(replacement);
> -  }
> -}
> -
>   /// Get or create a target for the branch out of rewritten calls to
>   /// llvm.eh.resume.
>   BasicBlock *InvokeInliningInfo::getInnerUnwindDest() {
> @@ -196,14 +184,14 @@
>     // Create a phi for the exception value...
>     InnerExceptionPHI = PHINode::Create(exn->getType(), phiCapacity,
>                                         "exn.lpad-body", insertPoint);
> -  replaceAllInsnUsesWith(exn, InnerExceptionPHI);
> +  exn->replaceAllUsesWith(InnerExceptionPHI);
>     selector->setArgOperand(0, exn); // restore this use
>     InnerExceptionPHI->addIncoming(exn, OuterUnwindDest);
>
>     // ...and the selector.
>     InnerSelectorPHI = PHINode::Create(selector->getType(), phiCapacity,
>                                        "selector.lpad-body", insertPoint);
> -  replaceAllInsnUsesWith(selector, InnerSelectorPHI);
> +  selector->replaceAllUsesWith(InnerSelectorPHI);
>     InnerSelectorPHI->addIncoming(selector, OuterUnwindDest);
>
>     // All done.
> @@ -547,15 +535,7 @@
>       ConstantInt::get(Type::getInt32Ty(Context), 1),
>       ConstantInt::getFalse(Context) // isVolatile
>     };
> -  CallInst *TheMemCpy =
> -    CallInst::Create(MemCpyFn, CallArgs, CallArgs+5, "", TheCall);
> -
> -  // If we have a call graph, update it.
> -  if (CallGraph *CG = IFI.CG) {
> -    CallGraphNode *MemCpyCGN = CG->getOrInsertFunction(MemCpyFn);
> -    CallGraphNode *CallerNode = (*CG)[Caller];
> -    CallerNode->addCalledFunction(TheMemCpy, MemCpyCGN);
> -  }
> +  CallInst::Create(MemCpyFn, CallArgs, CallArgs+5, "", TheCall);
>
>     // Uses of the argument in the function should use our new alloca
>     // instead.
> @@ -767,12 +747,10 @@
>         if (hasLifetimeMarkers(AI))
>           continue;
>
> -      CallInst *StartCall = builder.CreateLifetimeStart(AI);
> -      if (IFI.CG) CallerNode->addCalledFunction(StartCall, StartCGN);
> +      builder.CreateLifetimeStart(AI);
>         for (unsigned ri = 0, re = Returns.size(); ri != re; ++ri) {
>           IRBuilder<>  builder(Returns[ri]);
> -        CallInst *EndCall = builder.CreateLifetimeEnd(AI);
> -        if (IFI.CG) CallerNode->addCalledFunction(EndCall, EndCGN);
> +        builder.CreateLifetimeEnd(AI);
>         }
>       }
>     }
> @@ -785,25 +763,14 @@
>       Function *StackSave = Intrinsic::getDeclaration(M, Intrinsic::stacksave);
>       Function *StackRestore=Intrinsic::getDeclaration(M,Intrinsic::stackrestore);
>
> -    // If we are preserving the callgraph, add edges to the stacksave/restore
> -    // functions for the calls we insert.
> -    CallGraphNode *StackSaveCGN = 0, *StackRestoreCGN = 0, *CallerNode = 0;
> -    if (CallGraph *CG = IFI.CG) {
> -      StackSaveCGN    = CG->getOrInsertFunction(StackSave);
> -      StackRestoreCGN = CG->getOrInsertFunction(StackRestore);
> -      CallerNode = (*CG)[Caller];
> -    }
> -
>       // Insert the llvm.stacksave.
>       CallInst *SavedPtr = CallInst::Create(StackSave, "savedstack",
>                                             FirstNewBlock->begin());
> -    if (IFI.CG) CallerNode->addCalledFunction(SavedPtr, StackSaveCGN);
>
>       // Insert a call to llvm.stackrestore before any return instructions in the
>       // inlined function.
>       for (unsigned i = 0, e = Returns.size(); i != e; ++i) {
> -      CallInst *CI = CallInst::Create(StackRestore, SavedPtr, "", Returns[i]);
> -      if (IFI.CG) CallerNode->addCalledFunction(CI, StackRestoreCGN);
> +      CallInst::Create(StackRestore, SavedPtr, "", Returns[i]);
>       }
>
>       // Count the number of StackRestore calls we insert.
> @@ -815,8 +782,7 @@
>         for (Function::iterator BB = FirstNewBlock, E = Caller->end();
>              BB != E; ++BB)
>           if (UnwindInst *UI = dyn_cast<UnwindInst>(BB->getTerminator())) {
> -          CallInst *CI = CallInst::Create(StackRestore, SavedPtr, "", UI);
> -          if (IFI.CG) CallerNode->addCalledFunction(CI, StackRestoreCGN);
> +          CallInst::Create(StackRestore, SavedPtr, "", UI);
>             ++NumStackRestores;
>           }
>       }
>
>
> _______________________________________________
> 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