From b7b850ccf12f9f9d2067e456d7ba84e3bf965aa3 Mon Sep 17 00:00:00 2001 From: Daniel Berlin Date: Mon, 26 Dec 2016 18:44:36 +0000 Subject: [PATCH] Don't use our own incorrect version of isTriviallyDeadInstruction in NewGVN. Fixes PR/31472 llvm-svn: 290549 --- lib/Transforms/Scalar/NewGVN.cpp | 5 ++--- test/Transforms/NewGVN/pr31472.ll | 34 +++++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+), 3 deletions(-) create mode 100644 test/Transforms/NewGVN/pr31472.ll diff --git a/lib/Transforms/Scalar/NewGVN.cpp b/lib/Transforms/Scalar/NewGVN.cpp index 48624a07d7c..714bc9db903 100644 --- a/lib/Transforms/Scalar/NewGVN.cpp +++ b/lib/Transforms/Scalar/NewGVN.cpp @@ -1344,10 +1344,9 @@ void NewGVN::valueNumberMemoryPhi(MemoryPhi *MP) { // congruence finding, and updating mappings. void NewGVN::valueNumberInstruction(Instruction *I) { DEBUG(dbgs() << "Processing instruction " << *I << "\n"); - if (I->use_empty() && !I->getType()->isVoidTy()) { + if (isInstructionTriviallyDead(I, TLI)) { DEBUG(dbgs() << "Skipping unused instruction\n"); - if (isInstructionTriviallyDead(I, TLI)) - markInstructionForDeletion(I); + markInstructionForDeletion(I); return; } if (!I->isTerminator()) { diff --git a/test/Transforms/NewGVN/pr31472.ll b/test/Transforms/NewGVN/pr31472.ll new file mode 100644 index 00000000000..db3ed29453c --- /dev/null +++ b/test/Transforms/NewGVN/pr31472.ll @@ -0,0 +1,34 @@ +; NOTE: Assertions have been autogenerated by utils/update_test_checks.py +; RUN: opt < %s -basicaa -newgvn -S | FileCheck %s +target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128" +target triple = "x86_64-apple-macosx10.12.0" + +;; Ensure the invoke does not accidentally get deleted as unused, just because the value is not used. + +; Function Attrs: norecurse ssp uwtable +define i32 @main() personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*){ +; CHECK-LABEL: @main( +; CHECK-NEXT: [[TMP1:%.*]] = invoke i32 @foo() +; CHECK-NEXT: to label %good unwind label %bad +; CHECK: good: +; CHECK-NEXT: ret i32 5 +; CHECK: bad: +; CHECK-NEXT: [[TMP2:%.*]] = landingpad { i8*, i32 +; + %1 = invoke i32 @foo() + to label %good unwind label %bad + +good: +;