Skip to content

Commit

Permalink
Now that invoke of an intrinsic is possible (for the llvm.do.nothing …
Browse files Browse the repository at this point in the history
…intrinsic)

teach the callgraph logic to not create callgraph edges to intrinsics for invoke
instructions; it already skips this for call instructions.  Fixes PR13903.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@164707 91177308-0d34-0410-b5e6-96231b3b80d8
  • Loading branch information
CunningBaldrick committed Sep 26, 2012
1 parent 696e06e commit 44401b7
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 4 deletions.
9 changes: 5 additions & 4 deletions lib/Analysis/IPA/CallGraph.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -141,12 +141,13 @@ class BasicCallGraph : public ModulePass, public CallGraph {
for (BasicBlock::iterator II = BB->begin(), IE = BB->end();
II != IE; ++II) {
CallSite CS(cast<Value>(II));
if (CS && !isa<IntrinsicInst>(II)) {
if (CS) {
const Function *Callee = CS.getCalledFunction();
if (Callee)
Node->addCalledFunction(CS, getOrInsertFunction(Callee));
else
if (!Callee)
// Indirect calls of intrinsics are not allowed so no need to check.
Node->addCalledFunction(CS, CallsExternalNode);
else if (!Callee->isIntrinsic())
Node->addCalledFunction(CS, getOrInsertFunction(Callee));
}
}
}
Expand Down
13 changes: 13 additions & 0 deletions test/Analysis/CallGraph/do-nothing-intrinsic.ll
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
; RUN: opt < %s -basiccg
; PR13903

define void @main() {
invoke void @llvm.donothing()
to label %ret unwind label %unw
unw:
%tmp = landingpad i8 personality i8 0 cleanup
br label %ret
ret:
ret void
}
declare void @llvm.donothing() nounwind readnone

0 comments on commit 44401b7

Please sign in to comment.