Skip to content

Commit 7c10e57

Browse files
committed
[LSR] Move test from Analysis/ScalarEvolution to Transforms, regen.
Move transform test to llvm/test/Transforms/LoopStrengthReduce/X86, clean up the names a bit and regenerate check lines.
1 parent 0c6f983 commit 7c10e57

File tree

2 files changed

+119
-81
lines changed

2 files changed

+119
-81
lines changed

llvm/test/Analysis/ScalarEvolution/zext-signed-addrec.ll

Lines changed: 0 additions & 81 deletions
This file was deleted.
Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5
2+
; RUN: opt -loop-reduce -S %s | FileCheck %s
3+
; PR18000
4+
5+
target datalayout = "e-i64:64-f80:128-s:64-n8:16:32:64-S128"
6+
target triple = "x86_64-unknown-linux-gnu"
7+
8+
@a = global i32 0, align 4
9+
@b = common global i32 0, align 4
10+
@e = common global i8 0, align 1
11+
@d = common global i32 0, align 4
12+
@c = common global i32 0, align 4
13+
@.str = private unnamed_addr constant [4 x i8] c"%d\0A\00", align 1
14+
15+
define i32 @foo() {
16+
; CHECK-LABEL: define i32 @foo() {
17+
; CHECK-NEXT: [[ENTRY:.*:]]
18+
; CHECK-NEXT: [[DOTPR:%.*]] = load i32, ptr @b, align 4
19+
; CHECK-NEXT: [[CMP10:%.*]] = icmp slt i32 [[DOTPR]], 1
20+
; CHECK-NEXT: br i1 [[CMP10]], label %[[OUTER_PH:.*]], label %[[ENTRY_ELSE:.*]]
21+
; CHECK: [[ENTRY_ELSE]]:
22+
; CHECK-NEXT: [[DOTPRE:%.*]] = load i32, ptr @c, align 4
23+
; CHECK-NEXT: br label %[[MERGE:.*]]
24+
; CHECK: [[OUTER_PH]]:
25+
; CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr @a, align 4
26+
; CHECK-NEXT: [[TOBOOL:%.*]] = icmp eq i32 [[TMP0]], 0
27+
; CHECK-NEXT: br i1 [[TOBOOL]], label %[[OUTER_HEADER_PREHEADER:.*]], label %[[P_ELSE:.*]]
28+
; CHECK: [[OUTER_HEADER_PREHEADER]]:
29+
; CHECK-NEXT: br label %[[OUTER_HEADER:.*]]
30+
; CHECK: [[OUTER_HEADER]]:
31+
; CHECK-NEXT: [[TMP1:%.*]] = phi i32 [ [[INC:%.*]], %[[OUTER_LATCH:.*]] ], [ [[DOTPR]], %[[OUTER_HEADER_PREHEADER]] ]
32+
; CHECK-NEXT: br label %[[INNER_LOOP:.*]]
33+
; CHECK: [[INNER_LOOP]]:
34+
; CHECK-NEXT: [[LSR_IV:%.*]] = phi i32 [ [[LSR_IV_NEXT:%.*]], %[[INNER_LOOP]] ], [ 258, %[[OUTER_HEADER]] ]
35+
; CHECK-NEXT: [[TMP2:%.*]] = phi i8 [ 1, %[[OUTER_HEADER]] ], [ [[DEC:%.*]], %[[INNER_LOOP]] ]
36+
; CHECK-NEXT: [[SHL:%.*]] = and i32 [[LSR_IV]], 510
37+
; CHECK-NEXT: store i32 [[SHL]], ptr @c, align 4
38+
; CHECK-NEXT: [[DEC]] = add i8 [[TMP2]], -1
39+
; CHECK-NEXT: [[LSR_IV_NEXT]] = add nsw i32 [[LSR_IV]], -258
40+
; CHECK-NEXT: [[CMP2:%.*]] = icmp sgt i8 [[DEC]], -1
41+
; CHECK-NEXT: br i1 [[CMP2]], label %[[INNER_LOOP]], label %[[OUTER_LATCH]]
42+
; CHECK: [[OUTER_LATCH]]:
43+
; CHECK-NEXT: store i32 0, ptr @d, align 4
44+
; CHECK-NEXT: [[INC]] = add nsw i32 [[TMP1]], 1
45+
; CHECK-NEXT: store i32 [[INC]], ptr @b, align 4
46+
; CHECK-NEXT: [[CMP:%.*]] = icmp slt i32 [[TMP1]], 0
47+
; CHECK-NEXT: br i1 [[CMP]], label %[[OUTER_HEADER]], label %[[OUTER_EXIT:.*]]
48+
; CHECK: [[OUTER_EXIT]]:
49+
; CHECK-NEXT: store i8 [[DEC]], ptr @e, align 1
50+
; CHECK-NEXT: br label %[[MERGE]]
51+
; CHECK: [[MERGE]]:
52+
; CHECK-NEXT: [[TMP3:%.*]] = phi i32 [ [[DOTPRE]], %[[ENTRY_ELSE]] ], [ [[SHL]], %[[OUTER_EXIT]] ]
53+
; CHECK-NEXT: [[CALL:%.*]] = tail call i32 @bar(i32 [[TMP3]])
54+
; CHECK-NEXT: br label %[[RETURN:.*]]
55+
; CHECK: [[P_ELSE]]:
56+
; CHECK-NEXT: store i8 1, ptr @e, align 1
57+
; CHECK-NEXT: store i32 0, ptr @d, align 4
58+
; CHECK-NEXT: br label %[[RETURN]]
59+
; CHECK: [[RETURN]]:
60+
; CHECK-NEXT: [[RETVAL_0:%.*]] = phi i32 [ 0, %[[MERGE]] ], [ 1, %[[P_ELSE]] ]
61+
; CHECK-NEXT: ret i32 [[RETVAL_0]]
62+
;
63+
entry:
64+
%.pr = load i32, ptr @b, align 4
65+
%cmp10 = icmp slt i32 %.pr, 1
66+
br i1 %cmp10, label %outer.ph, label %entry.else
67+
68+
entry.else:
69+
%.pre = load i32, ptr @c, align 4
70+
br label %merge
71+
72+
outer.ph:
73+
%0 = load i32, ptr @a, align 4
74+
%tobool = icmp eq i32 %0, 0
75+
br i1 %tobool, label %outer.header, label %p.else
76+
77+
outer.header:
78+
%1 = phi i32 [ %.pr, %outer.ph ], [ %inc, %outer.latch ]
79+
br label %inner.loop
80+
81+
inner.loop:
82+
%iv = phi i32 [ 1, %outer.header ], [ %iv.next, %inner.loop ]
83+
%2 = phi i8 [ 1, %outer.header ], [ %dec, %inner.loop ]
84+
%conv7 = mul i32 %iv, 258
85+
%shl = and i32 %conv7, 510
86+
store i32 %shl, ptr @c, align 4
87+
%dec = add i8 %2, -1
88+
%cmp2 = icmp sgt i8 %dec, -1
89+
%iv.next = add i32 %iv, -1
90+
br i1 %cmp2, label %inner.loop, label %outer.latch
91+
92+
outer.latch:
93+
store i32 0, ptr @d, align 4
94+
%inc = add nsw i32 %1, 1
95+
store i32 %inc, ptr @b, align 4
96+
%cmp = icmp slt i32 %1, 0
97+
br i1 %cmp, label %outer.header, label %outer.exit
98+
99+
outer.exit:
100+
store i8 %dec, ptr @e, align 1
101+
br label %merge
102+
103+
merge:
104+
%3 = phi i32 [ %.pre, %entry.else ], [ %shl, %outer.exit ]
105+
%call = tail call i32 @bar(i32 %3)
106+
br label %return
107+
108+
p.else:
109+
store i8 1, ptr @e, align 1
110+
store i32 0, ptr @d, align 4
111+
br label %return
112+
113+
return:
114+
%retval.0 = phi i32 [ 0, %merge ], [ 1, %p.else ]
115+
ret i32 %retval.0
116+
}
117+
118+
declare i32 @bar(i32)
119+

0 commit comments

Comments
 (0)