Skip to content

Commit f358422

Browse files
committed
[Attributor] Add nofpclass test for phi+select recurrences. NFC
1 parent 9c8dab0 commit f358422

File tree

1 file changed

+176
-0
lines changed

1 file changed

+176
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,176 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 2
2+
; RUN: opt -aa-pipeline=basic-aa -passes=attributor -attributor-manifest-internal -S < %s | FileCheck %s
3+
4+
define float @phi_select(i1 %c, float nofpclass(inf) %base, float nofpclass(inf) %arg) {
5+
; CHECK-LABEL: define float @phi_select
6+
; CHECK-SAME: (i1 [[C:%.*]], float nofpclass(inf) [[BASE:%.*]], float nofpclass(inf) [[ARG:%.*]]) #[[ATTR0:[0-9]+]] {
7+
; CHECK-NEXT: entry:
8+
; CHECK-NEXT: br label [[LOOP:%.*]]
9+
; CHECK: loop:
10+
; CHECK-NEXT: [[PHI:%.*]] = phi float [ [[BASE]], [[ENTRY:%.*]] ], [ [[SELECT:%.*]], [[LOOP]] ]
11+
; CHECK-NEXT: [[SELECT]] = select i1 [[C]], float [[PHI]], float [[ARG]]
12+
; CHECK-NEXT: br i1 [[C]], label [[LOOP]], label [[EXIT:%.*]]
13+
; CHECK: exit:
14+
; CHECK-NEXT: ret float [[SELECT]]
15+
;
16+
entry:
17+
br label %loop
18+
19+
loop:
20+
%phi = phi float [ %base, %entry ], [ %select, %loop ]
21+
%select = select i1 %c, float %phi, float %arg
22+
br i1 %c, label %loop, label %exit
23+
24+
exit:
25+
ret float %select
26+
}
27+
28+
define float @phi_select_onlybase(i1 %c, float nofpclass(inf) %base, float %arg) {
29+
; CHECK-LABEL: define float @phi_select_onlybase
30+
; CHECK-SAME: (i1 [[C:%.*]], float nofpclass(inf) [[BASE:%.*]], float [[ARG:%.*]]) #[[ATTR0]] {
31+
; CHECK-NEXT: entry:
32+
; CHECK-NEXT: br label [[LOOP:%.*]]
33+
; CHECK: loop:
34+
; CHECK-NEXT: [[PHI:%.*]] = phi float [ [[BASE]], [[ENTRY:%.*]] ], [ [[SELECT:%.*]], [[LOOP]] ]
35+
; CHECK-NEXT: [[SELECT]] = select i1 [[C]], float [[PHI]], float [[ARG]]
36+
; CHECK-NEXT: br i1 [[C]], label [[LOOP]], label [[EXIT:%.*]]
37+
; CHECK: exit:
38+
; CHECK-NEXT: ret float [[SELECT]]
39+
;
40+
entry:
41+
br label %loop
42+
43+
loop:
44+
%phi = phi float [ %base, %entry ], [ %select, %loop ]
45+
%select = select i1 %c, float %phi, float %arg
46+
br i1 %c, label %loop, label %exit
47+
48+
exit:
49+
ret float %select
50+
}
51+
52+
define float @phi_select_onlyarg(i1 %c, float %base, float nofpclass(inf) %arg) {
53+
; CHECK-LABEL: define float @phi_select_onlyarg
54+
; CHECK-SAME: (i1 [[C:%.*]], float [[BASE:%.*]], float nofpclass(inf) [[ARG:%.*]]) #[[ATTR0]] {
55+
; CHECK-NEXT: entry:
56+
; CHECK-NEXT: br label [[LOOP:%.*]]
57+
; CHECK: loop:
58+
; CHECK-NEXT: [[PHI:%.*]] = phi float [ [[BASE]], [[ENTRY:%.*]] ], [ [[SELECT:%.*]], [[LOOP]] ]
59+
; CHECK-NEXT: [[SELECT]] = select i1 [[C]], float [[PHI]], float [[ARG]]
60+
; CHECK-NEXT: br i1 [[C]], label [[LOOP]], label [[EXIT:%.*]]
61+
; CHECK: exit:
62+
; CHECK-NEXT: ret float [[SELECT]]
63+
;
64+
entry:
65+
br label %loop
66+
67+
loop:
68+
%phi = phi float [ %base, %entry ], [ %select, %loop ]
69+
%select = select i1 %c, float %phi, float %arg
70+
br i1 %c, label %loop, label %exit
71+
72+
exit:
73+
ret float %select
74+
}
75+
76+
define float @phi_phi(i1 %c, float nofpclass(inf) %base, float nofpclass(inf) %arg) {
77+
; CHECK-LABEL: define float @phi_phi
78+
; CHECK-SAME: (i1 [[C:%.*]], float nofpclass(inf) [[BASE:%.*]], float nofpclass(inf) [[ARG:%.*]]) #[[ATTR0]] {
79+
; CHECK-NEXT: entry:
80+
; CHECK-NEXT: br label [[LOOP:%.*]]
81+
; CHECK: loop:
82+
; CHECK-NEXT: [[PHI:%.*]] = phi float [ [[BASE]], [[ENTRY:%.*]] ], [ [[PHI2:%.*]], [[EXIT1:%.*]] ]
83+
; CHECK-NEXT: br label [[INNER:%.*]]
84+
; CHECK: inner:
85+
; CHECK-NEXT: [[PHI2]] = phi float [ [[PHI]], [[LOOP]] ], [ [[ARG]], [[INNER]] ]
86+
; CHECK-NEXT: br i1 [[C]], label [[INNER]], label [[EXIT1]]
87+
; CHECK: exit1:
88+
; CHECK-NEXT: br i1 [[C]], label [[LOOP]], label [[EXIT:%.*]]
89+
; CHECK: exit:
90+
; CHECK-NEXT: ret float [[PHI2]]
91+
;
92+
entry:
93+
br label %loop
94+
95+
loop:
96+
%phi = phi float [ %base, %entry ], [ %phi2, %exit1 ]
97+
br label %inner
98+
99+
inner:
100+
%phi2 = phi float [ %phi, %loop ], [ %arg, %inner ]
101+
br i1 %c, label %inner, label %exit1
102+
103+
exit1:
104+
br i1 %c, label %loop, label %exit
105+
106+
exit:
107+
ret float %phi2
108+
}
109+
110+
define float @phi_phi_onlybase(i1 %c, float nofpclass(inf) %base, float %arg) {
111+
; CHECK-LABEL: define float @phi_phi_onlybase
112+
; CHECK-SAME: (i1 [[C:%.*]], float nofpclass(inf) [[BASE:%.*]], float [[ARG:%.*]]) #[[ATTR0]] {
113+
; CHECK-NEXT: entry:
114+
; CHECK-NEXT: br label [[LOOP:%.*]]
115+
; CHECK: loop:
116+
; CHECK-NEXT: [[PHI:%.*]] = phi float [ [[BASE]], [[ENTRY:%.*]] ], [ [[PHI2:%.*]], [[EXIT1:%.*]] ]
117+
; CHECK-NEXT: br label [[INNER:%.*]]
118+
; CHECK: inner:
119+
; CHECK-NEXT: [[PHI2]] = phi float [ [[PHI]], [[LOOP]] ], [ [[ARG]], [[INNER]] ]
120+
; CHECK-NEXT: br i1 [[C]], label [[INNER]], label [[EXIT1]]
121+
; CHECK: exit1:
122+
; CHECK-NEXT: br i1 [[C]], label [[LOOP]], label [[EXIT:%.*]]
123+
; CHECK: exit:
124+
; CHECK-NEXT: ret float [[PHI2]]
125+
;
126+
entry:
127+
br label %loop
128+
129+
loop:
130+
%phi = phi float [ %base, %entry ], [ %phi2, %exit1 ]
131+
br label %inner
132+
133+
inner:
134+
%phi2 = phi float [ %phi, %loop ], [ %arg, %inner ]
135+
br i1 %c, label %inner, label %exit1
136+
137+
exit1:
138+
br i1 %c, label %loop, label %exit
139+
140+
exit:
141+
ret float %phi2
142+
}
143+
144+
define float @phi_phi_onlyarg(i1 %c, float %base, float nofpclass(inf) %arg) {
145+
; CHECK-LABEL: define float @phi_phi_onlyarg
146+
; CHECK-SAME: (i1 [[C:%.*]], float [[BASE:%.*]], float nofpclass(inf) [[ARG:%.*]]) #[[ATTR0]] {
147+
; CHECK-NEXT: entry:
148+
; CHECK-NEXT: br label [[LOOP:%.*]]
149+
; CHECK: loop:
150+
; CHECK-NEXT: [[PHI:%.*]] = phi float [ [[BASE]], [[ENTRY:%.*]] ], [ [[PHI2:%.*]], [[EXIT1:%.*]] ]
151+
; CHECK-NEXT: br label [[INNER:%.*]]
152+
; CHECK: inner:
153+
; CHECK-NEXT: [[PHI2]] = phi float [ [[PHI]], [[LOOP]] ], [ [[ARG]], [[INNER]] ]
154+
; CHECK-NEXT: br i1 [[C]], label [[INNER]], label [[EXIT1]]
155+
; CHECK: exit1:
156+
; CHECK-NEXT: br i1 [[C]], label [[LOOP]], label [[EXIT:%.*]]
157+
; CHECK: exit:
158+
; CHECK-NEXT: ret float [[PHI2]]
159+
;
160+
entry:
161+
br label %loop
162+
163+
loop:
164+
%phi = phi float [ %base, %entry ], [ %phi2, %exit1 ]
165+
br label %inner
166+
167+
inner:
168+
%phi2 = phi float [ %phi, %loop ], [ %arg, %inner ]
169+
br i1 %c, label %inner, label %exit1
170+
171+
exit1:
172+
br i1 %c, label %loop, label %exit
173+
174+
exit:
175+
ret float %phi2
176+
}

0 commit comments

Comments
 (0)