diff options
Diffstat (limited to 'llvm/test/Transforms/IndVarSimplify/inner-loop-by-latch-cond.ll')
| -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 +} |

