diff options
| author | Serguei Katkov <serguei.katkov@azul.com> | 2018-03-19 06:35:30 +0000 |
|---|---|---|
| committer | Serguei Katkov <serguei.katkov@azul.com> | 2018-03-19 06:35:30 +0000 |
| commit | 529f42331e425aa812a48ab385dd00a67be9ea37 (patch) | |
| tree | f5ab4652eab74223f7ff7d3e863a7e5fe68be94b /llvm/test/Transforms | |
| parent | e18fbab988e3f64424fddafdfbe9672cba710a69 (diff) | |
| download | bcm5719-llvm-529f42331e425aa812a48ab385dd00a67be9ea37.tar.gz bcm5719-llvm-529f42331e425aa812a48ab385dd00a67be9ea37.zip | |
[SCEV] Re-land: Fix isKnownPredicate
This is re-land of https://reviews.llvm.org/rL327362 with a fix
and regression test.
The crash was due to it is possible that for found MDL loop,
LHS or RHS may contain an invariant unknown SCEV which
does not dominate the MDL. Please see regression
test for an example.
Reviewers: sanjoy, mkazantsev, reames
Reviewed By: mkazantsev
Subscribers: llvm-commits
Differential Revision: https://reviews.llvm.org/D44553
llvm-svn: 327822
Diffstat (limited to 'llvm/test/Transforms')
| -rw-r--r-- | llvm/test/Transforms/IndVarSimplify/inner-loop-by-latch-cond.ll | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/llvm/test/Transforms/IndVarSimplify/inner-loop-by-latch-cond.ll b/llvm/test/Transforms/IndVarSimplify/inner-loop-by-latch-cond.ll new file mode 100644 index 00000000000..1e0c0ddef85 --- /dev/null +++ b/llvm/test/Transforms/IndVarSimplify/inner-loop-by-latch-cond.ll @@ -0,0 +1,35 @@ +; RUN: opt < %s -indvars -S | FileCheck %s + +target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128-ni:1" +target triple = "x86_64-unknown-linux-gnu" + +declare void @foo(i64) + +; CHECK-LABEL: @test +define void @test(i64 %a) { +entry: + br label %outer_header + +outer_header: + %i = phi i64 [20, %entry], [%i.next, %outer_latch] + %i.next = add nuw nsw i64 %i, 1 + br label %inner_header + +inner_header: + %j = phi i64 [1, %outer_header], [%j.next, %inner_header] + %cmp = icmp ult i64 %j, %i.next +; CHECK-NOT: select + %s = select i1 %cmp, i64 %j, i64 %i +; CHECK: call void @foo(i64 %j) + call void @foo(i64 %s) + %j.next = add nuw nsw i64 %j, 1 + %cond = icmp ult i64 %j, %i + br i1 %cond, label %inner_header, label %outer_latch + +outer_latch: + %cond2 = icmp ne i64 %i.next, 40 + br i1 %cond2, label %outer_header, label %return + +return: + ret void +} |

