[llvm] r290549 - Don't use our own incorrect version of isTriviallyDeadInstruction in NewGVN. Fixes PR/31472

Daniel Berlin via llvm-commits llvm-commits at lists.llvm.org
Mon Dec 26 10:44:37 PST 2016


Author: dannyb
Date: Mon Dec 26 12:44:36 2016
New Revision: 290549

URL: http://llvm.org/viewvc/llvm-project?rev=290549&view=rev
Log:
Don't use our own incorrect version of isTriviallyDeadInstruction in NewGVN. Fixes PR/31472

Added:
    llvm/trunk/test/Transforms/NewGVN/pr31472.ll
Modified:
    llvm/trunk/lib/Transforms/Scalar/NewGVN.cpp

Modified: llvm/trunk/lib/Transforms/Scalar/NewGVN.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/NewGVN.cpp?rev=290549&r1=290548&r2=290549&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/Scalar/NewGVN.cpp (original)
+++ llvm/trunk/lib/Transforms/Scalar/NewGVN.cpp Mon Dec 26 12:44:36 2016
@@ -1344,10 +1344,9 @@ void NewGVN::valueNumberMemoryPhi(Memory
 // 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()) {

Added: llvm/trunk/test/Transforms/NewGVN/pr31472.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/NewGVN/pr31472.ll?rev=290549&view=auto
==============================================================================
--- llvm/trunk/test/Transforms/NewGVN/pr31472.ll (added)
+++ llvm/trunk/test/Transforms/NewGVN/pr31472.ll Mon Dec 26 12:44:36 2016
@@ -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:
+; <label>:15:                                     ; preds = %.preheader
+  ret i32 5
+
+
+bad:
+; <label>:20:                                     ; preds = %15, %.preheader
+  %2 = landingpad { i8*, i32 }
+  cleanup
+  resume { i8*, i32 } %2
+}
+
+declare i32 @foo()
+declare i32 @__gxx_personality_v0(...)




More information about the llvm-commits mailing list