Index: llvm/lib/Analysis/CGSCCPassManager.cpp =================================================================== --- llvm/lib/Analysis/CGSCCPassManager.cpp +++ llvm/lib/Analysis/CGSCCPassManager.cpp @@ -19,6 +19,7 @@ #include "llvm/IR/Constant.h" #include "llvm/IR/InstIterator.h" #include "llvm/IR/Instruction.h" +#include "llvm/IR/IntrinsicInst.h" #include "llvm/IR/PassManager.h" #include "llvm/IR/PassManagerImpl.h" #include "llvm/IR/ValueHandle.h" @@ -392,6 +393,19 @@ .first->second; for (Instruction &I : instructions(N.getFunction())) if (auto *CB = dyn_cast<CallBase>(&I)) { + // Filter out the intrinsic functions that cannot be the + // indirect-call target, especially those DbgInfoInstrinsic. + // This avoids different compilation behavior for the same source + // with and without -g option. + if (auto *II = dyn_cast<IntrinsicInst>(&I)) { + if (II->isAssumeLikeIntrinsic()) { + continue; + } + Intrinsic::ID ID = II->getIntrinsicID(); + if (isDbgInfoIntrinsic(ID)) { + continue; + } + } if (CB->getCalledFunction()) { ++Count.Direct; } else {