Index: lib/Transforms/Scalar/NewGVN.cpp =================================================================== --- lib/Transforms/Scalar/NewGVN.cpp +++ lib/Transforms/Scalar/NewGVN.cpp @@ -3494,11 +3494,15 @@ // Delete all instructions marked for deletion. for (Instruction *ToErase : InstructionsToErase) { - if (!ToErase->use_empty()) + if (!ToErase->use_empty()) { ToErase->replaceAllUsesWith(UndefValue::get(ToErase->getType())); + Changed = true; + } - if (ToErase->getParent()) + if (ToErase->getParent()) { ToErase->eraseFromParent(); + Changed = true; + } } // Delete all unreachable blocks. Index: test/Transforms/NewGVN/eliminate-callsite-inline.ll =================================================================== --- /dev/null +++ test/Transforms/NewGVN/eliminate-callsite-inline.ll @@ -0,0 +1,18 @@ +; RUN: opt -inline -newgvn -S < %s | FileCheck %s + +; CHECK-LABEL: @f2() +; CHECK-NEXT: ret void +; CHECK-NOT: @f1 + +define void @f2() { + call void @f1() + call void @f1() + ret void +} + +define internal void @f1() #1 { +entry: + ret void +} + +attributes #1 = { noinline nounwind readnone }