@@ -9,15 +9,25 @@ define void @zext_v4i8_all_lanes_used(<4 x i8> %src) {
9
9
; CHECK-LABEL: define void @zext_v4i8_all_lanes_used(
10
10
; CHECK-SAME: <4 x i8> [[SRC:%.*]]) {
11
11
; CHECK-NEXT: [[ENTRY:.*:]]
12
+ ; CHECK-NEXT: [[TMP0:%.*]] = freeze <4 x i8> [[SRC]]
13
+ ; CHECK-NEXT: [[TMP1:%.*]] = bitcast <4 x i8> [[TMP0]] to i32
14
+ ; CHECK-NEXT: [[TMP2:%.*]] = lshr i32 [[TMP1]], 24
15
+ ; CHECK-NEXT: [[TMP3:%.*]] = and i32 [[TMP2]], 255
16
+ ; CHECK-NEXT: [[TMP4:%.*]] = lshr i32 [[TMP1]], 16
17
+ ; CHECK-NEXT: [[TMP5:%.*]] = and i32 [[TMP4]], 255
18
+ ; CHECK-NEXT: [[TMP6:%.*]] = lshr i32 [[TMP1]], 8
19
+ ; CHECK-NEXT: [[TMP7:%.*]] = and i32 [[TMP6]], 255
20
+ ; CHECK-NEXT: [[TMP8:%.*]] = lshr i32 [[TMP1]], 0
21
+ ; CHECK-NEXT: [[TMP9:%.*]] = and i32 [[TMP8]], 255
12
22
; CHECK-NEXT: [[EXT9:%.*]] = zext nneg <4 x i8> [[SRC]] to <4 x i32>
13
23
; CHECK-NEXT: [[EXT_0:%.*]] = extractelement <4 x i32> [[EXT9]], i64 0
14
24
; CHECK-NEXT: [[EXT_1:%.*]] = extractelement <4 x i32> [[EXT9]], i64 1
15
25
; CHECK-NEXT: [[EXT_2:%.*]] = extractelement <4 x i32> [[EXT9]], i64 2
16
26
; CHECK-NEXT: [[EXT_3:%.*]] = extractelement <4 x i32> [[EXT9]], i64 3
17
- ; CHECK-NEXT: call void @use.i32(i32 [[EXT_0 ]])
18
- ; CHECK-NEXT: call void @use.i32(i32 [[EXT_1 ]])
19
- ; CHECK-NEXT: call void @use.i32(i32 [[EXT_2 ]])
20
- ; CHECK-NEXT: call void @use.i32(i32 [[EXT_3 ]])
27
+ ; CHECK-NEXT: call void @use.i32(i32 [[TMP9 ]])
28
+ ; CHECK-NEXT: call void @use.i32(i32 [[TMP7 ]])
29
+ ; CHECK-NEXT: call void @use.i32(i32 [[TMP5 ]])
30
+ ; CHECK-NEXT: call void @use.i32(i32 [[TMP3 ]])
21
31
; CHECK-NEXT: ret void
22
32
;
23
33
entry:
@@ -68,13 +78,21 @@ define void @zext_v4i8_3_lanes_used_1(<4 x i8> %src) {
68
78
; CHECK-LABEL: define void @zext_v4i8_3_lanes_used_1(
69
79
; CHECK-SAME: <4 x i8> [[SRC:%.*]]) {
70
80
; CHECK-NEXT: [[ENTRY:.*:]]
81
+ ; CHECK-NEXT: [[TMP0:%.*]] = freeze <4 x i8> [[SRC]]
82
+ ; CHECK-NEXT: [[TMP1:%.*]] = bitcast <4 x i8> [[TMP0]] to i32
83
+ ; CHECK-NEXT: [[TMP2:%.*]] = lshr i32 [[TMP1]], 24
84
+ ; CHECK-NEXT: [[TMP3:%.*]] = and i32 [[TMP2]], 255
85
+ ; CHECK-NEXT: [[TMP4:%.*]] = lshr i32 [[TMP1]], 16
86
+ ; CHECK-NEXT: [[TMP5:%.*]] = and i32 [[TMP4]], 255
87
+ ; CHECK-NEXT: [[TMP6:%.*]] = lshr i32 [[TMP1]], 8
88
+ ; CHECK-NEXT: [[TMP7:%.*]] = and i32 [[TMP6]], 255
71
89
; CHECK-NEXT: [[EXT9:%.*]] = zext nneg <4 x i8> [[SRC]] to <4 x i32>
72
90
; CHECK-NEXT: [[EXT_1:%.*]] = extractelement <4 x i32> [[EXT9]], i64 1
73
91
; CHECK-NEXT: [[EXT_2:%.*]] = extractelement <4 x i32> [[EXT9]], i64 2
74
92
; CHECK-NEXT: [[EXT_3:%.*]] = extractelement <4 x i32> [[EXT9]], i64 3
75
- ; CHECK-NEXT: call void @use.i32(i32 [[EXT_1 ]])
76
- ; CHECK-NEXT: call void @use.i32(i32 [[EXT_2 ]])
77
- ; CHECK-NEXT: call void @use.i32(i32 [[EXT_3 ]])
93
+ ; CHECK-NEXT: call void @use.i32(i32 [[TMP7 ]])
94
+ ; CHECK-NEXT: call void @use.i32(i32 [[TMP5 ]])
95
+ ; CHECK-NEXT: call void @use.i32(i32 [[TMP3 ]])
78
96
; CHECK-NEXT: ret void
79
97
;
80
98
entry:
@@ -93,13 +111,21 @@ define void @zext_v4i8_3_lanes_used_2(<4 x i8> %src) {
93
111
; CHECK-LABEL: define void @zext_v4i8_3_lanes_used_2(
94
112
; CHECK-SAME: <4 x i8> [[SRC:%.*]]) {
95
113
; CHECK-NEXT: [[ENTRY:.*:]]
114
+ ; CHECK-NEXT: [[TMP0:%.*]] = freeze <4 x i8> [[SRC]]
115
+ ; CHECK-NEXT: [[TMP1:%.*]] = bitcast <4 x i8> [[TMP0]] to i32
116
+ ; CHECK-NEXT: [[TMP2:%.*]] = lshr i32 [[TMP1]], 24
117
+ ; CHECK-NEXT: [[TMP3:%.*]] = and i32 [[TMP2]], 255
118
+ ; CHECK-NEXT: [[TMP4:%.*]] = lshr i32 [[TMP1]], 8
119
+ ; CHECK-NEXT: [[TMP5:%.*]] = and i32 [[TMP4]], 255
120
+ ; CHECK-NEXT: [[TMP6:%.*]] = lshr i32 [[TMP1]], 0
121
+ ; CHECK-NEXT: [[TMP7:%.*]] = and i32 [[TMP6]], 255
96
122
; CHECK-NEXT: [[EXT9:%.*]] = zext nneg <4 x i8> [[SRC]] to <4 x i32>
97
123
; CHECK-NEXT: [[EXT_0:%.*]] = extractelement <4 x i32> [[EXT9]], i64 0
98
124
; CHECK-NEXT: [[EXT_1:%.*]] = extractelement <4 x i32> [[EXT9]], i64 1
99
125
; CHECK-NEXT: [[EXT_3:%.*]] = extractelement <4 x i32> [[EXT9]], i64 3
100
- ; CHECK-NEXT: call void @use.i32(i32 [[EXT_0 ]])
101
- ; CHECK-NEXT: call void @use.i32(i32 [[EXT_1 ]])
102
- ; CHECK-NEXT: call void @use.i32(i32 [[EXT_3 ]])
126
+ ; CHECK-NEXT: call void @use.i32(i32 [[TMP7 ]])
127
+ ; CHECK-NEXT: call void @use.i32(i32 [[TMP5 ]])
128
+ ; CHECK-NEXT: call void @use.i32(i32 [[TMP3 ]])
103
129
; CHECK-NEXT: ret void
104
130
;
105
131
entry:
@@ -118,11 +144,17 @@ define void @zext_v4i8_2_lanes_used_1(<4 x i8> %src) {
118
144
; CHECK-LABEL: define void @zext_v4i8_2_lanes_used_1(
119
145
; CHECK-SAME: <4 x i8> [[SRC:%.*]]) {
120
146
; CHECK-NEXT: [[ENTRY:.*:]]
147
+ ; CHECK-NEXT: [[TMP0:%.*]] = freeze <4 x i8> [[SRC]]
148
+ ; CHECK-NEXT: [[TMP1:%.*]] = bitcast <4 x i8> [[TMP0]] to i32
149
+ ; CHECK-NEXT: [[TMP2:%.*]] = lshr i32 [[TMP1]], 16
150
+ ; CHECK-NEXT: [[TMP3:%.*]] = and i32 [[TMP2]], 255
151
+ ; CHECK-NEXT: [[TMP4:%.*]] = lshr i32 [[TMP1]], 8
152
+ ; CHECK-NEXT: [[TMP5:%.*]] = and i32 [[TMP4]], 255
121
153
; CHECK-NEXT: [[EXT9:%.*]] = zext nneg <4 x i8> [[SRC]] to <4 x i32>
122
154
; CHECK-NEXT: [[EXT_1:%.*]] = extractelement <4 x i32> [[EXT9]], i64 1
123
155
; CHECK-NEXT: [[EXT_2:%.*]] = extractelement <4 x i32> [[EXT9]], i64 2
124
- ; CHECK-NEXT: call void @use.i32(i32 [[EXT_1 ]])
125
- ; CHECK-NEXT: call void @use.i32(i32 [[EXT_2 ]])
156
+ ; CHECK-NEXT: call void @use.i32(i32 [[TMP5 ]])
157
+ ; CHECK-NEXT: call void @use.i32(i32 [[TMP3 ]])
126
158
; CHECK-NEXT: ret void
127
159
;
128
160
entry:
@@ -139,11 +171,17 @@ define void @zext_v4i8_2_lanes_used_2(<4 x i8> %src) {
139
171
; CHECK-LABEL: define void @zext_v4i8_2_lanes_used_2(
140
172
; CHECK-SAME: <4 x i8> [[SRC:%.*]]) {
141
173
; CHECK-NEXT: [[ENTRY:.*:]]
174
+ ; CHECK-NEXT: [[TMP0:%.*]] = freeze <4 x i8> [[SRC]]
175
+ ; CHECK-NEXT: [[TMP1:%.*]] = bitcast <4 x i8> [[TMP0]] to i32
176
+ ; CHECK-NEXT: [[TMP2:%.*]] = lshr i32 [[TMP1]], 16
177
+ ; CHECK-NEXT: [[TMP3:%.*]] = and i32 [[TMP2]], 255
178
+ ; CHECK-NEXT: [[TMP4:%.*]] = lshr i32 [[TMP1]], 0
179
+ ; CHECK-NEXT: [[TMP5:%.*]] = and i32 [[TMP4]], 255
142
180
; CHECK-NEXT: [[EXT9:%.*]] = zext nneg <4 x i8> [[SRC]] to <4 x i32>
143
181
; CHECK-NEXT: [[EXT_0:%.*]] = extractelement <4 x i32> [[EXT9]], i64 0
144
182
; CHECK-NEXT: [[EXT_2:%.*]] = extractelement <4 x i32> [[EXT9]], i64 2
145
- ; CHECK-NEXT: call void @use.i32(i32 [[EXT_0 ]])
146
- ; CHECK-NEXT: call void @use.i32(i32 [[EXT_2 ]])
183
+ ; CHECK-NEXT: call void @use.i32(i32 [[TMP5 ]])
184
+ ; CHECK-NEXT: call void @use.i32(i32 [[TMP3 ]])
147
185
; CHECK-NEXT: ret void
148
186
;
149
187
entry:
@@ -160,15 +198,24 @@ define void @zext_v4i8_all_lanes_used_noundef(<4 x i8> noundef %src) {
160
198
; CHECK-LABEL: define void @zext_v4i8_all_lanes_used_noundef(
161
199
; CHECK-SAME: <4 x i8> noundef [[SRC:%.*]]) {
162
200
; CHECK-NEXT: [[ENTRY:.*:]]
201
+ ; CHECK-NEXT: [[TMP0:%.*]] = bitcast <4 x i8> [[SRC]] to i32
202
+ ; CHECK-NEXT: [[TMP1:%.*]] = lshr i32 [[TMP0]], 24
203
+ ; CHECK-NEXT: [[TMP2:%.*]] = and i32 [[TMP1]], 255
204
+ ; CHECK-NEXT: [[TMP3:%.*]] = lshr i32 [[TMP0]], 16
205
+ ; CHECK-NEXT: [[TMP4:%.*]] = and i32 [[TMP3]], 255
206
+ ; CHECK-NEXT: [[TMP5:%.*]] = lshr i32 [[TMP0]], 8
207
+ ; CHECK-NEXT: [[TMP6:%.*]] = and i32 [[TMP5]], 255
208
+ ; CHECK-NEXT: [[TMP7:%.*]] = lshr i32 [[TMP0]], 0
209
+ ; CHECK-NEXT: [[TMP8:%.*]] = and i32 [[TMP7]], 255
163
210
; CHECK-NEXT: [[EXT9:%.*]] = zext nneg <4 x i8> [[SRC]] to <4 x i32>
164
211
; CHECK-NEXT: [[EXT_0:%.*]] = extractelement <4 x i32> [[EXT9]], i64 0
165
212
; CHECK-NEXT: [[EXT_1:%.*]] = extractelement <4 x i32> [[EXT9]], i64 1
166
213
; CHECK-NEXT: [[EXT_2:%.*]] = extractelement <4 x i32> [[EXT9]], i64 2
167
214
; CHECK-NEXT: [[EXT_3:%.*]] = extractelement <4 x i32> [[EXT9]], i64 3
168
- ; CHECK-NEXT: call void @use.i32(i32 [[EXT_0 ]])
169
- ; CHECK-NEXT: call void @use.i32(i32 [[EXT_1 ]])
170
- ; CHECK-NEXT: call void @use.i32(i32 [[EXT_2 ]])
171
- ; CHECK-NEXT: call void @use.i32(i32 [[EXT_3 ]])
215
+ ; CHECK-NEXT: call void @use.i32(i32 [[TMP8 ]])
216
+ ; CHECK-NEXT: call void @use.i32(i32 [[TMP6 ]])
217
+ ; CHECK-NEXT: call void @use.i32(i32 [[TMP4 ]])
218
+ ; CHECK-NEXT: call void @use.i32(i32 [[TMP2 ]])
172
219
; CHECK-NEXT: ret void
173
220
;
174
221
entry:
@@ -221,15 +268,25 @@ define void @zext_v4i16_all_lanes_used(<4 x i16> %src) {
221
268
; CHECK-LABEL: define void @zext_v4i16_all_lanes_used(
222
269
; CHECK-SAME: <4 x i16> [[SRC:%.*]]) {
223
270
; CHECK-NEXT: [[ENTRY:.*:]]
271
+ ; CHECK-NEXT: [[TMP0:%.*]] = freeze <4 x i16> [[SRC]]
272
+ ; CHECK-NEXT: [[TMP1:%.*]] = bitcast <4 x i16> [[TMP0]] to i64
273
+ ; CHECK-NEXT: [[TMP2:%.*]] = lshr i64 [[TMP1]], 48
274
+ ; CHECK-NEXT: [[TMP3:%.*]] = and i64 [[TMP2]], 65535
275
+ ; CHECK-NEXT: [[TMP4:%.*]] = lshr i64 [[TMP1]], 32
276
+ ; CHECK-NEXT: [[TMP5:%.*]] = and i64 [[TMP4]], 65535
277
+ ; CHECK-NEXT: [[TMP6:%.*]] = lshr i64 [[TMP1]], 16
278
+ ; CHECK-NEXT: [[TMP7:%.*]] = and i64 [[TMP6]], 65535
279
+ ; CHECK-NEXT: [[TMP8:%.*]] = lshr i64 [[TMP1]], 0
280
+ ; CHECK-NEXT: [[TMP9:%.*]] = and i64 [[TMP8]], 65535
224
281
; CHECK-NEXT: [[EXT9:%.*]] = zext nneg <4 x i16> [[SRC]] to <4 x i64>
225
282
; CHECK-NEXT: [[EXT_0:%.*]] = extractelement <4 x i64> [[EXT9]], i64 0
226
283
; CHECK-NEXT: [[EXT_1:%.*]] = extractelement <4 x i64> [[EXT9]], i64 1
227
284
; CHECK-NEXT: [[EXT_2:%.*]] = extractelement <4 x i64> [[EXT9]], i64 2
228
285
; CHECK-NEXT: [[EXT_3:%.*]] = extractelement <4 x i64> [[EXT9]], i64 3
229
- ; CHECK-NEXT: call void @use.i64(i64 [[EXT_0 ]])
230
- ; CHECK-NEXT: call void @use.i64(i64 [[EXT_1 ]])
231
- ; CHECK-NEXT: call void @use.i64(i64 [[EXT_2 ]])
232
- ; CHECK-NEXT: call void @use.i64(i64 [[EXT_3 ]])
286
+ ; CHECK-NEXT: call void @use.i64(i64 [[TMP9 ]])
287
+ ; CHECK-NEXT: call void @use.i64(i64 [[TMP7 ]])
288
+ ; CHECK-NEXT: call void @use.i64(i64 [[TMP5 ]])
289
+ ; CHECK-NEXT: call void @use.i64(i64 [[TMP3 ]])
233
290
; CHECK-NEXT: ret void
234
291
;
235
292
entry:
@@ -250,11 +307,17 @@ define void @zext_v2i32_all_lanes_used(<2 x i32> %src) {
250
307
; CHECK-LABEL: define void @zext_v2i32_all_lanes_used(
251
308
; CHECK-SAME: <2 x i32> [[SRC:%.*]]) {
252
309
; CHECK-NEXT: [[ENTRY:.*:]]
310
+ ; CHECK-NEXT: [[TMP0:%.*]] = freeze <2 x i32> [[SRC]]
311
+ ; CHECK-NEXT: [[TMP1:%.*]] = bitcast <2 x i32> [[TMP0]] to i64
312
+ ; CHECK-NEXT: [[TMP2:%.*]] = lshr i64 [[TMP1]], 32
313
+ ; CHECK-NEXT: [[TMP3:%.*]] = and i64 [[TMP2]], 4294967295
314
+ ; CHECK-NEXT: [[TMP4:%.*]] = lshr i64 [[TMP1]], 0
315
+ ; CHECK-NEXT: [[TMP5:%.*]] = and i64 [[TMP4]], 4294967295
253
316
; CHECK-NEXT: [[EXT9:%.*]] = zext nneg <2 x i32> [[SRC]] to <2 x i64>
254
317
; CHECK-NEXT: [[EXT_0:%.*]] = extractelement <2 x i64> [[EXT9]], i64 0
255
318
; CHECK-NEXT: [[EXT_1:%.*]] = extractelement <2 x i64> [[EXT9]], i64 1
256
- ; CHECK-NEXT: call void @use.i64(i64 [[EXT_0 ]])
257
- ; CHECK-NEXT: call void @use.i64(i64 [[EXT_1 ]])
319
+ ; CHECK-NEXT: call void @use.i64(i64 [[TMP5 ]])
320
+ ; CHECK-NEXT: call void @use.i64(i64 [[TMP3 ]])
258
321
; CHECK-NEXT: ret void
259
322
;
260
323
entry:
0 commit comments