diff options
author | Max Kazantsev <max.kazantsev@azul.com> | 2019-02-12 09:59:44 +0000 |
---|---|---|
committer | Max Kazantsev <max.kazantsev@azul.com> | 2019-02-12 09:59:44 +0000 |
commit | 2a184af221854262d713b82ea014cfbcc0004b48 (patch) | |
tree | 88028514210cfe57745f13b702090e9b28d32af3 /llvm/test/Transforms/IndVarSimplify | |
parent | 8e0d5ac715a86766966d298a411f67aeba414312 (diff) | |
download | bcm5719-llvm-2a184af221854262d713b82ea014cfbcc0004b48.tar.gz bcm5719-llvm-2a184af221854262d713b82ea014cfbcc0004b48.zip |
[IndVars] Fix corner case with unreachable Phi inputs. PR40454
Logic in `getInsertPointForUses` doesn't account for a corner case when `Def`
only comes to a Phi user from unreachable blocks. In this case, the incoming
value may be arbitrary (and not even available in the input block) and break
the loop-related invariants that are asserted below.
In fact, if we encounter this situation, no IR modification is needed. This
Phi will be simplified away with nearest cleanup.
Differential Revision: https://reviews.llvm.org/D58045
Reviewed By: spatel
llvm-svn: 353816
Diffstat (limited to 'llvm/test/Transforms/IndVarSimplify')
-rw-r--r-- | llvm/test/Transforms/IndVarSimplify/pr40454.ll | 27 |
1 files changed, 24 insertions, 3 deletions
diff --git a/llvm/test/Transforms/IndVarSimplify/pr40454.ll b/llvm/test/Transforms/IndVarSimplify/pr40454.ll index a2c569d5901..c0ad01e4a7f 100644 --- a/llvm/test/Transforms/IndVarSimplify/pr40454.ll +++ b/llvm/test/Transforms/IndVarSimplify/pr40454.ll @@ -1,11 +1,32 @@ +; NOTE: Assertions have been autogenerated by utils/update_test_checks.py ; RUN: opt -S -indvars < %s | FileCheck %s -; REQUIRES: asserts -; XFAIL: * target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" define void @test() { -; CHECK-LABEL: @test +; CHECK-LABEL: @test( +; CHECK-NEXT: bb: +; CHECK-NEXT: br label [[BB2:%.*]] +; CHECK: bb1: +; CHECK-NEXT: br label [[BB2]] +; CHECK: bb2: +; CHECK-NEXT: [[TMP:%.*]] = phi i32 [ -9, [[BB:%.*]] ], [ [[TMP6:%.*]], [[BB1:%.*]] ] +; CHECK-NEXT: br label [[BB3:%.*]] +; CHECK: bb3: +; CHECK-NEXT: [[TMP4:%.*]] = phi i32 [ -9, [[BB2]] ], [ [[TMP6]], [[BB10:%.*]] ] +; CHECK-NEXT: br i1 false, label [[BB5:%.*]], label [[BB12:%.*]] +; CHECK: bb5: +; CHECK-NEXT: [[TMP6]] = add nsw i32 [[TMP4]], -1 +; CHECK-NEXT: br i1 undef, label [[BB8:%.*]], label [[BB9:%.*]] +; CHECK: bb8: +; CHECK-NEXT: br label [[BB10]] +; CHECK: bb9: +; CHECK-NEXT: br label [[BB10]] +; CHECK: bb10: +; CHECK-NEXT: br label [[BB3]] +; CHECK: bb12: +; CHECK-NEXT: ret void +; bb: br label %bb2 |