summaryrefslogtreecommitdiffstats
path: root/llvm/test/Transforms/IndVarSimplify/rewrite-loop-exit-value.ll
diff options
context:
space:
mode:
authorPhilip Reames <listmail@philipreames.com>2019-05-14 16:37:29 +0000
committerPhilip Reames <listmail@philipreames.com>2019-05-14 16:37:29 +0000
commitbbe4ff10df2cf0e2bd35d84f403c35d27290d375 (patch)
treee82e450be5ca7b65f24d1b555c0b2e418feda86f /llvm/test/Transforms/IndVarSimplify/rewrite-loop-exit-value.ll
parent05791d90c9168c534da61aac6ad9ff5b0552c979 (diff)
downloadbcm5719-llvm-bbe4ff10df2cf0e2bd35d84f403c35d27290d375.tar.gz
bcm5719-llvm-bbe4ff10df2cf0e2bd35d84f403c35d27290d375.zip
[Test] Autogen a test for ease of later changing
llvm-svn: 360690
Diffstat (limited to 'llvm/test/Transforms/IndVarSimplify/rewrite-loop-exit-value.ll')
-rw-r--r--llvm/test/Transforms/IndVarSimplify/rewrite-loop-exit-value.ll89
1 files changed, 61 insertions, 28 deletions
diff --git a/llvm/test/Transforms/IndVarSimplify/rewrite-loop-exit-value.ll b/llvm/test/Transforms/IndVarSimplify/rewrite-loop-exit-value.ll
index 6993946b951..c8a0c5d3c73 100644
--- a/llvm/test/Transforms/IndVarSimplify/rewrite-loop-exit-value.ll
+++ b/llvm/test/Transforms/IndVarSimplify/rewrite-loop-exit-value.ll
@@ -1,63 +1,96 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
; RUN: opt -indvars -instcombine -S < %s | FileCheck %s
;; Test that loop's exit value is rewritten to its initial
;; value from loop preheader
define i32 @test1(i32* %var) {
-; CHECK-LABEL: @test1
+; CHECK-LABEL: @test1(
+; CHECK-NEXT: entry:
+; CHECK-NEXT: [[COND:%.*]] = icmp eq i32* [[VAR:%.*]], null
+; CHECK-NEXT: br label [[HEADER:%.*]]
+; CHECK: header:
+; CHECK-NEXT: br i1 [[COND]], label [[LOOP:%.*]], label [[EXIT:%.*]]
+; CHECK: loop:
+; CHECK-NEXT: br label [[HEADER]]
+; CHECK: exit:
+; CHECK-NEXT: ret i32 0
+;
entry:
- %cond = icmp eq i32* %var, null
- br label %header
+ %cond = icmp eq i32* %var, null
+ br label %header
header:
- %phi_indvar = phi i32 [0, %entry], [%indvar, %loop]
- br i1 %cond, label %loop, label %exit
+ %phi_indvar = phi i32 [0, %entry], [%indvar, %loop]
+ br i1 %cond, label %loop, label %exit
loop:
- %indvar = add i32 %phi_indvar, 1
- br label %header
+ %indvar = add i32 %phi_indvar, 1
+ br label %header
exit:
-; CHECK: ret i32 0
- ret i32 %phi_indvar
+ ret i32 %phi_indvar
}
;; Test that we can not rewrite loop exit value if it's not
;; a phi node (%indvar is an add instruction in this test).
define i32 @test2(i32* %var) {
-; CHECK-LABEL: @test2
+; CHECK-LABEL: @test2(
+; CHECK-NEXT: entry:
+; CHECK-NEXT: [[COND:%.*]] = icmp eq i32* [[VAR:%.*]], null
+; CHECK-NEXT: br label [[HEADER:%.*]]
+; CHECK: header:
+; CHECK-NEXT: [[PHI_INDVAR:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[INDVAR:%.*]], [[HEADER]] ]
+; CHECK-NEXT: [[INDVAR]] = add i32 [[PHI_INDVAR]], 1
+; CHECK-NEXT: br i1 [[COND]], label [[HEADER]], label [[EXIT:%.*]]
+; CHECK: exit:
+; CHECK-NEXT: ret i32 [[INDVAR]]
+;
entry:
- %cond = icmp eq i32* %var, null
- br label %header
+ %cond = icmp eq i32* %var, null
+ br label %header
header:
- %phi_indvar = phi i32 [0, %entry], [%indvar, %header]
- %indvar = add i32 %phi_indvar, 1
- br i1 %cond, label %header, label %exit
+ %phi_indvar = phi i32 [0, %entry], [%indvar, %header]
+ %indvar = add i32 %phi_indvar, 1
+ br i1 %cond, label %header, label %exit
exit:
-; CHECK: ret i32 %indvar
- ret i32 %indvar
+ ret i32 %indvar
}
;; Test that we can not rewrite loop exit value if the condition
;; is not in loop header.
define i32 @test3(i32* %var) {
-; CHECK-LABEL: @test3
+; CHECK-LABEL: @test3(
+; CHECK-NEXT: entry:
+; CHECK-NEXT: [[COND1:%.*]] = icmp eq i32* [[VAR:%.*]], null
+; CHECK-NEXT: br label [[HEADER:%.*]]
+; CHECK: header:
+; CHECK-NEXT: [[PHI_INDVAR:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[INDVAR:%.*]], [[HEADER_BACKEDGE:%.*]] ]
+; CHECK-NEXT: [[INDVAR]] = add i32 [[PHI_INDVAR]], 1
+; CHECK-NEXT: [[COND2:%.*]] = icmp eq i32 [[INDVAR]], 10
+; CHECK-NEXT: br i1 [[COND2]], label [[HEADER_BACKEDGE]], label [[BODY:%.*]]
+; CHECK: header.backedge:
+; CHECK-NEXT: br label [[HEADER]]
+; CHECK: body:
+; CHECK-NEXT: br i1 [[COND1]], label [[HEADER_BACKEDGE]], label [[EXIT:%.*]]
+; CHECK: exit:
+; CHECK-NEXT: ret i32 [[PHI_INDVAR]]
+;
entry:
- %cond1 = icmp eq i32* %var, null
- br label %header
+ %cond1 = icmp eq i32* %var, null
+ br label %header
header:
- %phi_indvar = phi i32 [0, %entry], [%indvar, %header], [%indvar, %body]
- %indvar = add i32 %phi_indvar, 1
- %cond2 = icmp eq i32 %indvar, 10
- br i1 %cond2, label %header, label %body
-
+ %phi_indvar = phi i32 [0, %entry], [%indvar, %header], [%indvar, %body]
+ %indvar = add i32 %phi_indvar, 1
+ %cond2 = icmp eq i32 %indvar, 10
+ br i1 %cond2, label %header, label %body
+
body:
- br i1 %cond1, label %header, label %exit
+ br i1 %cond1, label %header, label %exit
exit:
-; CHECK: ret i32 %phi_indvar
- ret i32 %phi_indvar
+ ret i32 %phi_indvar
}
OpenPOWER on IntegriCloud