CGSCC should not treat intrinsic calls like function calls (PR21403)
[oota-llvm.git] / lib / Analysis / IPA / CallGraphSCCPass.cpp
index c27edbfa2ff58067119e468c2f35846255067a6e..665aa7f046eeec29b8b6862a521447fc8afa98c1 100644 (file)
@@ -243,7 +243,14 @@ bool CGPassManager::RefreshCallGraph(CallGraphSCC &CurSCC,
       
       assert(!CallSites.count(I->first) &&
              "Call site occurs in node multiple times");
-      CallSites.insert(std::make_pair(I->first, I->second));
+      
+      CallSite CS(I->first);
+      if (CS) {
+        Function *Callee = CS.getCalledFunction();
+        // Ignore intrinsics because they're not really function calls.
+        if (!Callee || !(Callee->isIntrinsic()))
+          CallSites.insert(std::make_pair(I->first, I->second));
+      }
       ++I;
     }