@@ -18,30 +18,45 @@ define i32 @readlane_31(i32 %arg) #0 {
18
18
}
19
19
20
20
define i32 @readlane_32 (i32 %arg ) #0 {
21
- ; CHECK-LABEL: define i32 @readlane_32(
22
- ; CHECK-SAME: i32 [[ARG:%.*]]) #[[ATTR0]] {
23
- ; CHECK-NEXT: [[RES:%.*]] = call i32 @llvm.amdgcn.readlane.i32(i32 [[ARG]], i32 32)
24
- ; CHECK-NEXT: ret i32 [[RES]]
21
+ ; WAVE64-LABEL: define i32 @readlane_32(
22
+ ; WAVE64-SAME: i32 [[ARG:%.*]]) #[[ATTR0]] {
23
+ ; WAVE64-NEXT: [[RES:%.*]] = call i32 @llvm.amdgcn.readlane.i32(i32 [[ARG]], i32 32)
24
+ ; WAVE64-NEXT: ret i32 [[RES]]
25
+ ;
26
+ ; WAVE32-LABEL: define i32 @readlane_32(
27
+ ; WAVE32-SAME: i32 [[ARG:%.*]]) #[[ATTR0]] {
28
+ ; WAVE32-NEXT: [[RES:%.*]] = call i32 @llvm.amdgcn.readlane.i32(i32 [[ARG]], i32 0)
29
+ ; WAVE32-NEXT: ret i32 [[RES]]
25
30
;
26
31
%res = call i32 @llvm.amdgcn.readlane.i32 (i32 %arg , i32 32 )
27
32
ret i32 %res
28
33
}
29
34
30
35
define i32 @readlane_33 (i32 %arg ) #0 {
31
- ; CHECK-LABEL: define i32 @readlane_33(
32
- ; CHECK-SAME: i32 [[ARG:%.*]]) #[[ATTR0]] {
33
- ; CHECK-NEXT: [[RES:%.*]] = call i32 @llvm.amdgcn.readlane.i32(i32 [[ARG]], i32 33)
34
- ; CHECK-NEXT: ret i32 [[RES]]
36
+ ; WAVE64-LABEL: define i32 @readlane_33(
37
+ ; WAVE64-SAME: i32 [[ARG:%.*]]) #[[ATTR0]] {
38
+ ; WAVE64-NEXT: [[RES:%.*]] = call i32 @llvm.amdgcn.readlane.i32(i32 [[ARG]], i32 33)
39
+ ; WAVE64-NEXT: ret i32 [[RES]]
40
+ ;
41
+ ; WAVE32-LABEL: define i32 @readlane_33(
42
+ ; WAVE32-SAME: i32 [[ARG:%.*]]) #[[ATTR0]] {
43
+ ; WAVE32-NEXT: [[RES:%.*]] = call i32 @llvm.amdgcn.readlane.i32(i32 [[ARG]], i32 1)
44
+ ; WAVE32-NEXT: ret i32 [[RES]]
35
45
;
36
46
%res = call i32 @llvm.amdgcn.readlane.i32 (i32 %arg , i32 33 )
37
47
ret i32 %res
38
48
}
39
49
40
50
define i32 @readlane_63 (i32 %arg ) #0 {
41
- ; CHECK-LABEL: define i32 @readlane_63(
42
- ; CHECK-SAME: i32 [[ARG:%.*]]) #[[ATTR0]] {
43
- ; CHECK-NEXT: [[RES:%.*]] = call i32 @llvm.amdgcn.readlane.i32(i32 [[ARG]], i32 63)
44
- ; CHECK-NEXT: ret i32 [[RES]]
51
+ ; WAVE64-LABEL: define i32 @readlane_63(
52
+ ; WAVE64-SAME: i32 [[ARG:%.*]]) #[[ATTR0]] {
53
+ ; WAVE64-NEXT: [[RES:%.*]] = call i32 @llvm.amdgcn.readlane.i32(i32 [[ARG]], i32 63)
54
+ ; WAVE64-NEXT: ret i32 [[RES]]
55
+ ;
56
+ ; WAVE32-LABEL: define i32 @readlane_63(
57
+ ; WAVE32-SAME: i32 [[ARG:%.*]]) #[[ATTR0]] {
58
+ ; WAVE32-NEXT: [[RES:%.*]] = call i32 @llvm.amdgcn.readlane.i32(i32 [[ARG]], i32 31)
59
+ ; WAVE32-NEXT: ret i32 [[RES]]
45
60
;
46
61
%res = call i32 @llvm.amdgcn.readlane.i32 (i32 %arg , i32 63 )
47
62
ret i32 %res
@@ -50,19 +65,24 @@ define i32 @readlane_63(i32 %arg) #0 {
50
65
define i32 @readlane_64 (i32 %arg ) #0 {
51
66
; CHECK-LABEL: define i32 @readlane_64(
52
67
; CHECK-SAME: i32 [[ARG:%.*]]) #[[ATTR0]] {
53
- ; CHECK-NEXT: [[RES:%.*]] = call i32 @llvm.amdgcn.readlane.i32(i32 [[ARG]], i32 64 )
68
+ ; CHECK-NEXT: [[RES:%.*]] = call i32 @llvm.amdgcn.readlane.i32(i32 [[ARG]], i32 0 )
54
69
; CHECK-NEXT: ret i32 [[RES]]
55
70
;
56
71
%res = call i32 @llvm.amdgcn.readlane.i32 (i32 %arg , i32 64 )
57
72
ret i32 %res
58
73
}
59
74
60
75
define i32 @readlane_and_31 (i32 %arg , i32 %idx ) #0 {
61
- ; CHECK-LABEL: define i32 @readlane_and_31(
62
- ; CHECK-SAME: i32 [[ARG:%.*]], i32 [[IDX:%.*]]) #[[ATTR0]] {
63
- ; CHECK-NEXT: [[IDX_CLAMP:%.*]] = and i32 [[IDX]], 31
64
- ; CHECK-NEXT: [[RES:%.*]] = call i32 @llvm.amdgcn.readlane.i32(i32 [[ARG]], i32 [[IDX_CLAMP]])
65
- ; CHECK-NEXT: ret i32 [[RES]]
76
+ ; WAVE64-LABEL: define i32 @readlane_and_31(
77
+ ; WAVE64-SAME: i32 [[ARG:%.*]], i32 [[IDX:%.*]]) #[[ATTR0]] {
78
+ ; WAVE64-NEXT: [[IDX_CLAMP:%.*]] = and i32 [[IDX]], 31
79
+ ; WAVE64-NEXT: [[RES:%.*]] = call i32 @llvm.amdgcn.readlane.i32(i32 [[ARG]], i32 [[IDX_CLAMP]])
80
+ ; WAVE64-NEXT: ret i32 [[RES]]
81
+ ;
82
+ ; WAVE32-LABEL: define i32 @readlane_and_31(
83
+ ; WAVE32-SAME: i32 [[ARG:%.*]], i32 [[IDX:%.*]]) #[[ATTR0]] {
84
+ ; WAVE32-NEXT: [[RES:%.*]] = call i32 @llvm.amdgcn.readlane.i32(i32 [[ARG]], i32 [[IDX]])
85
+ ; WAVE32-NEXT: ret i32 [[RES]]
66
86
;
67
87
%idx.clamp = and i32 %idx , 31
68
88
%res = call i32 @llvm.amdgcn.readlane.i32 (i32 %arg , i32 %idx.clamp )
@@ -72,8 +92,7 @@ define i32 @readlane_and_31(i32 %arg, i32 %idx) #0 {
72
92
define i32 @readlane_and_63 (i32 %arg , i32 %idx ) #0 {
73
93
; CHECK-LABEL: define i32 @readlane_and_63(
74
94
; CHECK-SAME: i32 [[ARG:%.*]], i32 [[IDX:%.*]]) #[[ATTR0]] {
75
- ; CHECK-NEXT: [[IDX_CLAMP:%.*]] = and i32 [[IDX]], 63
76
- ; CHECK-NEXT: [[RES:%.*]] = call i32 @llvm.amdgcn.readlane.i32(i32 [[ARG]], i32 [[IDX_CLAMP]])
95
+ ; CHECK-NEXT: [[RES:%.*]] = call i32 @llvm.amdgcn.readlane.i32(i32 [[ARG]], i32 [[IDX]])
77
96
; CHECK-NEXT: ret i32 [[RES]]
78
97
;
79
98
%idx.clamp = and i32 %idx , 63
@@ -92,10 +111,15 @@ define i32 @readlane_poison(i32 %arg) #0 {
92
111
}
93
112
94
113
define float @readlane_f32_63 (float %arg ) #0 {
95
- ; CHECK-LABEL: define float @readlane_f32_63(
96
- ; CHECK-SAME: float [[ARG:%.*]]) #[[ATTR0]] {
97
- ; CHECK-NEXT: [[RES:%.*]] = call float @llvm.amdgcn.readlane.f32(float [[ARG]], i32 63)
98
- ; CHECK-NEXT: ret float [[RES]]
114
+ ; WAVE64-LABEL: define float @readlane_f32_63(
115
+ ; WAVE64-SAME: float [[ARG:%.*]]) #[[ATTR0]] {
116
+ ; WAVE64-NEXT: [[RES:%.*]] = call float @llvm.amdgcn.readlane.f32(float [[ARG]], i32 63)
117
+ ; WAVE64-NEXT: ret float [[RES]]
118
+ ;
119
+ ; WAVE32-LABEL: define float @readlane_f32_63(
120
+ ; WAVE32-SAME: float [[ARG:%.*]]) #[[ATTR0]] {
121
+ ; WAVE32-NEXT: [[RES:%.*]] = call float @llvm.amdgcn.readlane.f32(float [[ARG]], i32 31)
122
+ ; WAVE32-NEXT: ret float [[RES]]
99
123
;
100
124
%res = call float @llvm.amdgcn.readlane.f32 (float %arg , i32 63 )
101
125
ret float %res
@@ -116,30 +140,45 @@ define i32 @writelane_31(i32 %arg0, i32 %arg1) #0 {
116
140
}
117
141
118
142
define i32 @writelane_32 (i32 %arg0 , i32 %arg1 ) #0 {
119
- ; CHECK-LABEL: define i32 @writelane_32(
120
- ; CHECK-SAME: i32 [[ARG0:%.*]], i32 [[ARG1:%.*]]) #[[ATTR0]] {
121
- ; CHECK-NEXT: [[RES:%.*]] = call i32 @llvm.amdgcn.writelane.i32(i32 [[ARG0]], i32 32, i32 [[ARG1]])
122
- ; CHECK-NEXT: ret i32 [[RES]]
143
+ ; WAVE64-LABEL: define i32 @writelane_32(
144
+ ; WAVE64-SAME: i32 [[ARG0:%.*]], i32 [[ARG1:%.*]]) #[[ATTR0]] {
145
+ ; WAVE64-NEXT: [[RES:%.*]] = call i32 @llvm.amdgcn.writelane.i32(i32 [[ARG0]], i32 32, i32 [[ARG1]])
146
+ ; WAVE64-NEXT: ret i32 [[RES]]
147
+ ;
148
+ ; WAVE32-LABEL: define i32 @writelane_32(
149
+ ; WAVE32-SAME: i32 [[ARG0:%.*]], i32 [[ARG1:%.*]]) #[[ATTR0]] {
150
+ ; WAVE32-NEXT: [[RES:%.*]] = call i32 @llvm.amdgcn.writelane.i32(i32 [[ARG0]], i32 0, i32 [[ARG1]])
151
+ ; WAVE32-NEXT: ret i32 [[RES]]
123
152
;
124
153
%res = call i32 @llvm.amdgcn.writelane.i32 (i32 %arg0 , i32 32 , i32 %arg1 )
125
154
ret i32 %res
126
155
}
127
156
128
157
define i32 @writelane_33 (i32 %arg0 , i32 %arg1 ) #0 {
129
- ; CHECK-LABEL: define i32 @writelane_33(
130
- ; CHECK-SAME: i32 [[ARG0:%.*]], i32 [[ARG1:%.*]]) #[[ATTR0]] {
131
- ; CHECK-NEXT: [[RES:%.*]] = call i32 @llvm.amdgcn.writelane.i32(i32 [[ARG0]], i32 33, i32 [[ARG1]])
132
- ; CHECK-NEXT: ret i32 [[RES]]
158
+ ; WAVE64-LABEL: define i32 @writelane_33(
159
+ ; WAVE64-SAME: i32 [[ARG0:%.*]], i32 [[ARG1:%.*]]) #[[ATTR0]] {
160
+ ; WAVE64-NEXT: [[RES:%.*]] = call i32 @llvm.amdgcn.writelane.i32(i32 [[ARG0]], i32 33, i32 [[ARG1]])
161
+ ; WAVE64-NEXT: ret i32 [[RES]]
162
+ ;
163
+ ; WAVE32-LABEL: define i32 @writelane_33(
164
+ ; WAVE32-SAME: i32 [[ARG0:%.*]], i32 [[ARG1:%.*]]) #[[ATTR0]] {
165
+ ; WAVE32-NEXT: [[RES:%.*]] = call i32 @llvm.amdgcn.writelane.i32(i32 [[ARG0]], i32 1, i32 [[ARG1]])
166
+ ; WAVE32-NEXT: ret i32 [[RES]]
133
167
;
134
168
%res = call i32 @llvm.amdgcn.writelane.i32 (i32 %arg0 , i32 33 , i32 %arg1 )
135
169
ret i32 %res
136
170
}
137
171
138
172
define i32 @writelane_63 (i32 %arg0 , i32 %arg1 ) #0 {
139
- ; CHECK-LABEL: define i32 @writelane_63(
140
- ; CHECK-SAME: i32 [[ARG0:%.*]], i32 [[ARG1:%.*]]) #[[ATTR0]] {
141
- ; CHECK-NEXT: [[RES:%.*]] = call i32 @llvm.amdgcn.writelane.i32(i32 [[ARG0]], i32 63, i32 [[ARG1]])
142
- ; CHECK-NEXT: ret i32 [[RES]]
173
+ ; WAVE64-LABEL: define i32 @writelane_63(
174
+ ; WAVE64-SAME: i32 [[ARG0:%.*]], i32 [[ARG1:%.*]]) #[[ATTR0]] {
175
+ ; WAVE64-NEXT: [[RES:%.*]] = call i32 @llvm.amdgcn.writelane.i32(i32 [[ARG0]], i32 63, i32 [[ARG1]])
176
+ ; WAVE64-NEXT: ret i32 [[RES]]
177
+ ;
178
+ ; WAVE32-LABEL: define i32 @writelane_63(
179
+ ; WAVE32-SAME: i32 [[ARG0:%.*]], i32 [[ARG1:%.*]]) #[[ATTR0]] {
180
+ ; WAVE32-NEXT: [[RES:%.*]] = call i32 @llvm.amdgcn.writelane.i32(i32 [[ARG0]], i32 31, i32 [[ARG1]])
181
+ ; WAVE32-NEXT: ret i32 [[RES]]
143
182
;
144
183
%res = call i32 @llvm.amdgcn.writelane.i32 (i32 %arg0 , i32 63 , i32 %arg1 )
145
184
ret i32 %res
@@ -148,19 +187,24 @@ define i32 @writelane_63(i32 %arg0, i32 %arg1) #0 {
148
187
define i32 @writelane_64 (i32 %arg0 , i32 %arg1 ) #0 {
149
188
; CHECK-LABEL: define i32 @writelane_64(
150
189
; CHECK-SAME: i32 [[ARG0:%.*]], i32 [[ARG1:%.*]]) #[[ATTR0]] {
151
- ; CHECK-NEXT: [[RES:%.*]] = call i32 @llvm.amdgcn.writelane.i32(i32 [[ARG0]], i32 64 , i32 [[ARG1]])
190
+ ; CHECK-NEXT: [[RES:%.*]] = call i32 @llvm.amdgcn.writelane.i32(i32 [[ARG0]], i32 0 , i32 [[ARG1]])
152
191
; CHECK-NEXT: ret i32 [[RES]]
153
192
;
154
193
%res = call i32 @llvm.amdgcn.writelane.i32 (i32 %arg0 , i32 64 , i32 %arg1 )
155
194
ret i32 %res
156
195
}
157
196
158
197
define i32 @writelane_and_31 (i32 %arg0 , i32 %arg1 , i32 %idx ) #0 {
159
- ; CHECK-LABEL: define i32 @writelane_and_31(
160
- ; CHECK-SAME: i32 [[ARG0:%.*]], i32 [[ARG1:%.*]], i32 [[IDX:%.*]]) #[[ATTR0]] {
161
- ; CHECK-NEXT: [[IDX_CLAMP:%.*]] = and i32 [[IDX]], 31
162
- ; CHECK-NEXT: [[RES:%.*]] = call i32 @llvm.amdgcn.writelane.i32(i32 [[ARG0]], i32 [[IDX_CLAMP]], i32 [[ARG1]])
163
- ; CHECK-NEXT: ret i32 [[RES]]
198
+ ; WAVE64-LABEL: define i32 @writelane_and_31(
199
+ ; WAVE64-SAME: i32 [[ARG0:%.*]], i32 [[ARG1:%.*]], i32 [[IDX:%.*]]) #[[ATTR0]] {
200
+ ; WAVE64-NEXT: [[IDX_CLAMP:%.*]] = and i32 [[IDX]], 31
201
+ ; WAVE64-NEXT: [[RES:%.*]] = call i32 @llvm.amdgcn.writelane.i32(i32 [[ARG0]], i32 [[IDX_CLAMP]], i32 [[ARG1]])
202
+ ; WAVE64-NEXT: ret i32 [[RES]]
203
+ ;
204
+ ; WAVE32-LABEL: define i32 @writelane_and_31(
205
+ ; WAVE32-SAME: i32 [[ARG0:%.*]], i32 [[ARG1:%.*]], i32 [[IDX:%.*]]) #[[ATTR0]] {
206
+ ; WAVE32-NEXT: [[RES:%.*]] = call i32 @llvm.amdgcn.writelane.i32(i32 [[ARG0]], i32 [[IDX]], i32 [[ARG1]])
207
+ ; WAVE32-NEXT: ret i32 [[RES]]
164
208
;
165
209
%idx.clamp = and i32 %idx , 31
166
210
%res = call i32 @llvm.amdgcn.writelane.i32 (i32 %arg0 , i32 %idx.clamp , i32 %arg1 )
@@ -170,8 +214,7 @@ define i32 @writelane_and_31(i32 %arg0, i32 %arg1, i32 %idx) #0 {
170
214
define i32 @writelane_and_63 (i32 %arg0 , i32 %arg1 , i32 %idx ) #0 {
171
215
; CHECK-LABEL: define i32 @writelane_and_63(
172
216
; CHECK-SAME: i32 [[ARG0:%.*]], i32 [[ARG1:%.*]], i32 [[IDX:%.*]]) #[[ATTR0]] {
173
- ; CHECK-NEXT: [[IDX_CLAMP:%.*]] = and i32 [[IDX]], 63
174
- ; CHECK-NEXT: [[RES:%.*]] = call i32 @llvm.amdgcn.writelane.i32(i32 [[ARG0]], i32 [[IDX_CLAMP]], i32 [[ARG1]])
217
+ ; CHECK-NEXT: [[RES:%.*]] = call i32 @llvm.amdgcn.writelane.i32(i32 [[ARG0]], i32 [[IDX]], i32 [[ARG1]])
175
218
; CHECK-NEXT: ret i32 [[RES]]
176
219
;
177
220
%idx.clamp = and i32 %idx , 63
@@ -190,16 +233,18 @@ define i32 @writelane_poison(i32 %arg0, i32 %arg1) #0 {
190
233
}
191
234
192
235
define float @writelane_f32_63 (float %arg0 , float %arg1 ) #0 {
193
- ; CHECK-LABEL: define float @writelane_f32_63(
194
- ; CHECK-SAME: float [[ARG0:%.*]], float [[ARG1:%.*]]) #[[ATTR0]] {
195
- ; CHECK-NEXT: [[RES:%.*]] = call float @llvm.amdgcn.writelane.f32(float [[ARG0]], i32 63, float [[ARG1]])
196
- ; CHECK-NEXT: ret float [[RES]]
236
+ ; WAVE64-LABEL: define float @writelane_f32_63(
237
+ ; WAVE64-SAME: float [[ARG0:%.*]], float [[ARG1:%.*]]) #[[ATTR0]] {
238
+ ; WAVE64-NEXT: [[RES:%.*]] = call float @llvm.amdgcn.writelane.f32(float [[ARG0]], i32 63, float [[ARG1]])
239
+ ; WAVE64-NEXT: ret float [[RES]]
240
+ ;
241
+ ; WAVE32-LABEL: define float @writelane_f32_63(
242
+ ; WAVE32-SAME: float [[ARG0:%.*]], float [[ARG1:%.*]]) #[[ATTR0]] {
243
+ ; WAVE32-NEXT: [[RES:%.*]] = call float @llvm.amdgcn.writelane.f32(float [[ARG0]], i32 31, float [[ARG1]])
244
+ ; WAVE32-NEXT: ret float [[RES]]
197
245
;
198
246
%res = call float @llvm.amdgcn.writelane.f32 (float %arg0 , i32 63 , float %arg1 )
199
247
ret float %res
200
248
}
201
249
202
250
attributes #0 = { nounwind }
203
- ;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
204
- ; WAVE32: {{.*}}
205
- ; WAVE64: {{.*}}
0 commit comments