summaryrefslogtreecommitdiffstats
path: root/llvm/test/Transforms/IndVarSimplify
diff options
context:
space:
mode:
authorMax Kazantsev <max.kazantsev@azul.com>2019-02-12 09:59:44 +0000
committerMax Kazantsev <max.kazantsev@azul.com>2019-02-12 09:59:44 +0000
commit2a184af221854262d713b82ea014cfbcc0004b48 (patch)
tree88028514210cfe57745f13b702090e9b28d32af3 /llvm/test/Transforms/IndVarSimplify
parent8e0d5ac715a86766966d298a411f67aeba414312 (diff)
downloadbcm5719-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.ll27
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
OpenPOWER on IntegriCloud