[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