[PATCH] D47139: [NaryReassociate] Detect deleted instr with WeakTrackingVH
Phabricator via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Wed May 23 23:14:13 PDT 2018
This revision was automatically updated to reflect the committed changes.
Closed by commit rL333155: [NaryReassociate] Detect deleted instr with WeakVH (authored by karka, committed by ).
Repository:
rL LLVM
https://reviews.llvm.org/D47139
Files:
llvm/trunk/lib/Transforms/Scalar/NaryReassociate.cpp
llvm/trunk/test/Transforms/NaryReassociate/pr37539.ll
Index: llvm/trunk/lib/Transforms/Scalar/NaryReassociate.cpp
===================================================================
--- llvm/trunk/lib/Transforms/Scalar/NaryReassociate.cpp
+++ llvm/trunk/lib/Transforms/Scalar/NaryReassociate.cpp
@@ -240,10 +240,17 @@
Changed = true;
SE->forgetValue(&*I);
I->replaceAllUsesWith(NewI);
- // If SeenExprs constains I's WeakTrackingVH, that entry will be
- // replaced with
- // nullptr.
+ WeakVH NewIExist = NewI;
+ // If SeenExprs/NewIExist contains I's WeakTrackingVH/WeakVH, that
+ // entry will be replaced with nullptr if deleted.
RecursivelyDeleteTriviallyDeadInstructions(&*I, TLI);
+ if (!NewIExist) {
+ // Rare occation where the new instruction (NewI) have been removed,
+ // probably due to parts of the input code was dead from the
+ // beginning, reset the iterator and start over from the beginning
+ I = BB->begin();
+ continue;
+ }
I = NewI->getIterator();
}
// Add the rewritten instruction to SeenExprs; the original instruction
Index: llvm/trunk/test/Transforms/NaryReassociate/pr37539.ll
===================================================================
--- llvm/trunk/test/Transforms/NaryReassociate/pr37539.ll
+++ llvm/trunk/test/Transforms/NaryReassociate/pr37539.ll
@@ -0,0 +1,29 @@
+; RUN: opt < %s -nary-reassociate -S -o - | FileCheck %s
+
+; The test check that compilation does not segv (see pr37539).
+
+define void @f1() {
+; CHECK-LABEL: @f1(
+; CHECK-NEXT: br label %[[BB1:.*]]
+; CHECK: [[BB1]]
+; CHECK-NEXT: [[P1:%.*]] = phi i16 [ 0, [[TMP0:%.*]] ], [ [[A1:%.*]], %[[BB1]] ]
+; CHECK-NEXT: [[SCEVGEP_OFFS:%.*]] = add i16 2, 0
+; CHECK-NEXT: [[A1]] = add i16 [[P1]], [[SCEVGEP_OFFS]]
+; CHECK-NEXT: br i1 false, label %[[BB1]], label %[[BB7:.*]]
+; CHECK: [[BB7]]
+; CHECK-NEXT: ret void
+;
+ br label %bb1
+
+bb1:
+ %p1 = phi i16 [ 0, %0 ], [ %a1, %bb1 ]
+ %p2 = phi i16 [ 0, %0 ], [ %a2, %bb1 ]
+ %scevgep.offs = add i16 2, 0
+ %a1 = add i16 %p1, %scevgep.offs
+ %scevgep.offs5 = add i16 2, 0
+ %a2 = add i16 %p2, %scevgep.offs5
+ br i1 false, label %bb1, label %bb7
+
+bb7:
+ ret void
+}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D47139.148338.patch
Type: text/x-patch
Size: 2315 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180524/57f16417/attachment.bin>
More information about the llvm-commits
mailing list