[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