@@ -134,10 +134,10 @@ body: |
134
134
; GFX6-NEXT: %masklow14:_(s16) = G_CONSTANT i16 16383
135
135
; GFX6-NEXT: %masklow14vec:_(<2 x s16>) = G_BUILD_VECTOR %masklow14(s16), %masklow14(s16)
136
136
; GFX6-NEXT: %masked:_(<2 x s16>) = G_AND %narrow, %masklow14vec
137
- ; GFX6-NEXT: %extend :_(<2 x s32> ) = G_ZEXT %masked(<2 x s16>)
138
- ; GFX6-NEXT: %shiftamt :_(s32 ) = G_CONSTANT i32 2
139
- ; GFX6-NEXT: %shiftamtvec :_(<2 x s32 >) = G_BUILD_VECTOR %shiftamt(s32), %shiftamt(s32 )
140
- ; GFX6-NEXT: %shl:_(<2 x s32>) = G_SHL %extend, %shiftamtvec (<2 x s32 >)
137
+ ; GFX6-NEXT: [[C:%[0-9]+]] :_(s16 ) = G_CONSTANT i16 2
138
+ ; GFX6-NEXT: [[BUILD_VECTOR:%[0-9]+]] :_(<2 x s16> ) = G_BUILD_VECTOR [[C]](s16), [[C]](s16)
139
+ ; GFX6-NEXT: [[SHL:%[0-9]+]] :_(<2 x s16 >) = G_SHL %masked, [[BUILD_VECTOR]](<2 x s16> )
140
+ ; GFX6-NEXT: %shl:_(<2 x s32>) = G_ZEXT [[SHL]] (<2 x s16 >)
141
141
; GFX6-NEXT: $vgpr0_vgpr1 = COPY %shl(<2 x s32>)
142
142
; GFX9-LABEL: name: narrow_shl_v2s32_by_2_from_zext_v2s16
143
143
; GFX9: liveins: $vgpr0
@@ -146,10 +146,10 @@ body: |
146
146
; GFX9-NEXT: %masklow14:_(s16) = G_CONSTANT i16 16383
147
147
; GFX9-NEXT: %masklow14vec:_(<2 x s16>) = G_BUILD_VECTOR %masklow14(s16), %masklow14(s16)
148
148
; GFX9-NEXT: %masked:_(<2 x s16>) = G_AND %narrow, %masklow14vec
149
- ; GFX9-NEXT: %extend :_(<2 x s32> ) = G_ZEXT %masked(<2 x s16>)
150
- ; GFX9-NEXT: %shiftamt :_(s32 ) = G_CONSTANT i32 2
151
- ; GFX9-NEXT: %shiftamtvec :_(<2 x s32 >) = G_BUILD_VECTOR %shiftamt(s32), %shiftamt(s32 )
152
- ; GFX9-NEXT: %shl:_(<2 x s32>) = G_SHL %extend, %shiftamtvec (<2 x s32 >)
149
+ ; GFX9-NEXT: [[C:%[0-9]+]] :_(s16 ) = G_CONSTANT i16 2
150
+ ; GFX9-NEXT: [[BUILD_VECTOR:%[0-9]+]] :_(<2 x s16> ) = G_BUILD_VECTOR [[C]](s16), [[C]](s16)
151
+ ; GFX9-NEXT: [[SHL:%[0-9]+]] :_(<2 x s16 >) = G_SHL %masked, [[BUILD_VECTOR]](<2 x s16> )
152
+ ; GFX9-NEXT: %shl:_(<2 x s32>) = G_ZEXT [[SHL]] (<2 x s16 >)
153
153
; GFX9-NEXT: $vgpr0_vgpr1 = COPY %shl(<2 x s32>)
154
154
%narrow:_(<2 x s16>) = COPY $vgpr0
155
155
%masklow14:_(s16) = G_CONSTANT i16 16383
@@ -176,10 +176,10 @@ body: |
176
176
; GFX6-NEXT: %masklow30:_(s32) = G_CONSTANT i32 1073741823
177
177
; GFX6-NEXT: %masklow30vec:_(<2 x s32>) = G_BUILD_VECTOR %masklow30(s32), %masklow30(s32)
178
178
; GFX6-NEXT: %masked:_(<2 x s32>) = G_AND %narrow, %masklow30vec
179
- ; GFX6-NEXT: %extend:_(<2 x s64>) = G_ANYEXT %masked(<2 x s32>)
180
179
; GFX6-NEXT: %shiftamt:_(s32) = G_CONSTANT i32 2
181
180
; GFX6-NEXT: %shiftamtvec:_(<2 x s32>) = G_BUILD_VECTOR %shiftamt(s32), %shiftamt(s32)
182
- ; GFX6-NEXT: %shl:_(<2 x s64>) = G_SHL %extend, %shiftamtvec(<2 x s32>)
181
+ ; GFX6-NEXT: [[SHL:%[0-9]+]]:_(<2 x s32>) = G_SHL %masked, %shiftamtvec(<2 x s32>)
182
+ ; GFX6-NEXT: %shl:_(<2 x s64>) = G_ZEXT [[SHL]](<2 x s32>)
183
183
; GFX6-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %shl(<2 x s64>)
184
184
; GFX9-LABEL: name: narrow_shl_v2s64_by_2_from_anyext_v2s32
185
185
; GFX9: liveins: $vgpr0_vgpr1
@@ -188,10 +188,10 @@ body: |
188
188
; GFX9-NEXT: %masklow30:_(s32) = G_CONSTANT i32 1073741823
189
189
; GFX9-NEXT: %masklow30vec:_(<2 x s32>) = G_BUILD_VECTOR %masklow30(s32), %masklow30(s32)
190
190
; GFX9-NEXT: %masked:_(<2 x s32>) = G_AND %narrow, %masklow30vec
191
- ; GFX9-NEXT: %extend:_(<2 x s64>) = G_ANYEXT %masked(<2 x s32>)
192
191
; GFX9-NEXT: %shiftamt:_(s32) = G_CONSTANT i32 2
193
192
; GFX9-NEXT: %shiftamtvec:_(<2 x s32>) = G_BUILD_VECTOR %shiftamt(s32), %shiftamt(s32)
194
- ; GFX9-NEXT: %shl:_(<2 x s64>) = G_SHL %extend, %shiftamtvec(<2 x s32>)
193
+ ; GFX9-NEXT: [[SHL:%[0-9]+]]:_(<2 x s32>) = G_SHL %masked, %shiftamtvec(<2 x s32>)
194
+ ; GFX9-NEXT: %shl:_(<2 x s64>) = G_ZEXT [[SHL]](<2 x s32>)
195
195
; GFX9-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %shl(<2 x s64>)
196
196
%narrow:_(<2 x s32>) = COPY $vgpr0_vgpr1
197
197
%masklow30:_(s32) = G_CONSTANT i32 1073741823
@@ -203,3 +203,105 @@ body: |
203
203
%shl:_(<2 x s64>) = G_SHL %extend, %shiftamtvec
204
204
$vgpr0_vgpr1_vgpr2_vgpr3 = COPY %shl
205
205
...
206
+
207
+ ---
208
+ name : do_not_shl_s32_zero_by_16_from_zext_s16
209
+ tracksRegLiveness : true
210
+ legalized : true
211
+
212
+ body : |
213
+ bb.0:
214
+ liveins: $vgpr0
215
+ ; GFX6-LABEL: name: do_not_shl_s32_zero_by_16_from_zext_s16
216
+ ; GFX6: liveins: $vgpr0
217
+ ; GFX6-NEXT: {{ $}}
218
+ ; GFX6-NEXT: %zero:_(s16) = G_CONSTANT i16 0
219
+ ; GFX6-NEXT: %extend:_(s32) = G_ZEXT %zero(s16)
220
+ ; GFX6-NEXT: %shiftamt:_(s16) = G_CONSTANT i16 16
221
+ ; GFX6-NEXT: %shl:_(s32) = G_SHL %extend, %shiftamt(s16)
222
+ ; GFX6-NEXT: $vgpr0 = COPY %shl(s32)
223
+ ; GFX9-LABEL: name: do_not_shl_s32_zero_by_16_from_zext_s16
224
+ ; GFX9: liveins: $vgpr0
225
+ ; GFX9-NEXT: {{ $}}
226
+ ; GFX9-NEXT: %zero:_(s16) = G_CONSTANT i16 0
227
+ ; GFX9-NEXT: %extend:_(s32) = G_ZEXT %zero(s16)
228
+ ; GFX9-NEXT: %shiftamt:_(s16) = G_CONSTANT i16 16
229
+ ; GFX9-NEXT: %shl:_(s32) = G_SHL %extend, %shiftamt(s16)
230
+ ; GFX9-NEXT: $vgpr0 = COPY %shl(s32)
231
+ %zero:_(s16) = G_CONSTANT i16 0
232
+ %extend:_(s32) = G_ZEXT %zero:_(s16)
233
+ %shiftamt:_(s16) = G_CONSTANT i16 16
234
+ %shl:_(s32) = G_SHL %extend, %shiftamt(s16)
235
+ $vgpr0 = COPY %shl
236
+ ...
237
+
238
+ ---
239
+ name : do_not_shl_v2s32_zero_by_16_from_zext_v2s16
240
+ tracksRegLiveness : true
241
+ legalized : true
242
+
243
+ body : |
244
+ bb.0:
245
+ liveins: $vgpr0, $vgpr1
246
+ ; GFX6-LABEL: name: do_not_shl_v2s32_zero_by_16_from_zext_v2s16
247
+ ; GFX6: liveins: $vgpr0, $vgpr1
248
+ ; GFX6-NEXT: {{ $}}
249
+ ; GFX6-NEXT: %zero:_(s16) = G_CONSTANT i16 0
250
+ ; GFX6-NEXT: %zerovector:_(<2 x s16>) = G_BUILD_VECTOR %zero(s16), %zero(s16)
251
+ ; GFX6-NEXT: %shiftamt:_(s16) = G_CONSTANT i16 16
252
+ ; GFX6-NEXT: %shiftamtvector:_(<2 x s16>) = G_BUILD_VECTOR %shiftamt(s16), %shiftamt(s16)
253
+ ; GFX6-NEXT: %extend:_(<2 x s32>) = G_ZEXT %zerovector(<2 x s16>)
254
+ ; GFX6-NEXT: %shl:_(<2 x s32>) = G_SHL %extend, %shiftamtvector(<2 x s16>)
255
+ ; GFX6-NEXT: $vgpr0_vgpr1 = COPY %shl(<2 x s32>)
256
+ ; GFX9-LABEL: name: do_not_shl_v2s32_zero_by_16_from_zext_v2s16
257
+ ; GFX9: liveins: $vgpr0, $vgpr1
258
+ ; GFX9-NEXT: {{ $}}
259
+ ; GFX9-NEXT: %zero:_(s16) = G_CONSTANT i16 0
260
+ ; GFX9-NEXT: %zerovector:_(<2 x s16>) = G_BUILD_VECTOR %zero(s16), %zero(s16)
261
+ ; GFX9-NEXT: %shiftamt:_(s16) = G_CONSTANT i16 16
262
+ ; GFX9-NEXT: %shiftamtvector:_(<2 x s16>) = G_BUILD_VECTOR %shiftamt(s16), %shiftamt(s16)
263
+ ; GFX9-NEXT: %extend:_(<2 x s32>) = G_ZEXT %zerovector(<2 x s16>)
264
+ ; GFX9-NEXT: %shl:_(<2 x s32>) = G_SHL %extend, %shiftamtvector(<2 x s16>)
265
+ ; GFX9-NEXT: $vgpr0_vgpr1 = COPY %shl(<2 x s32>)
266
+ %zero:_(s16) = G_CONSTANT i16 0
267
+ %zerovector:_(<2 x s16>) = G_BUILD_VECTOR %zero, %zero:_(s16)
268
+ %shiftamt:_(s16) = G_CONSTANT i16 16
269
+ %shiftamtvector:_(<2 x s16>) = G_BUILD_VECTOR %shiftamt, %shiftamt:_(s16)
270
+ %extend:_(<2 x s32>) = G_ZEXT %zerovector:_(<2 x s16>)
271
+ %shl:_(<2 x s32>) = G_SHL %extend, %shiftamtvector
272
+ $vgpr0_vgpr1 = COPY %shl
273
+ ...
274
+
275
+ ---
276
+ name : do_not_shl_s32_by_16_from_zext_s16
277
+ tracksRegLiveness : true
278
+ legalized : true
279
+
280
+ body : |
281
+ bb.0:
282
+ liveins: $vgpr0
283
+ ; GFX6-LABEL: name: do_not_shl_s32_by_16_from_zext_s16
284
+ ; GFX6: liveins: $vgpr0
285
+ ; GFX6-NEXT: {{ $}}
286
+ ; GFX6-NEXT: %argument:_(s32) = COPY $vgpr0
287
+ ; GFX6-NEXT: %truncate:_(s16) = G_TRUNC %argument(s32)
288
+ ; GFX6-NEXT: %shiftamt:_(s16) = G_CONSTANT i16 16
289
+ ; GFX6-NEXT: %extend:_(s32) = G_ZEXT %truncate(s16)
290
+ ; GFX6-NEXT: %shl:_(s32) = G_SHL %extend, %shiftamt(s16)
291
+ ; GFX6-NEXT: $vgpr0 = COPY %shl(s32)
292
+ ; GFX9-LABEL: name: do_not_shl_s32_by_16_from_zext_s16
293
+ ; GFX9: liveins: $vgpr0
294
+ ; GFX9-NEXT: {{ $}}
295
+ ; GFX9-NEXT: %argument:_(s32) = COPY $vgpr0
296
+ ; GFX9-NEXT: %truncate:_(s16) = G_TRUNC %argument(s32)
297
+ ; GFX9-NEXT: %shiftamt:_(s16) = G_CONSTANT i16 16
298
+ ; GFX9-NEXT: %extend:_(s32) = G_ZEXT %truncate(s16)
299
+ ; GFX9-NEXT: %shl:_(s32) = G_SHL %extend, %shiftamt(s16)
300
+ ; GFX9-NEXT: $vgpr0 = COPY %shl(s32)
301
+ %argument:_(s32) = COPY $vgpr0
302
+ %truncate:_(s16) = G_TRUNC %argument:_(s32)
303
+ %shiftamt:_(s16) = G_CONSTANT i16 16
304
+ %extend:_(s32) = G_ZEXT %truncate:_(s16)
305
+ %shl:_(s32) = G_SHL %extend, %shiftamt(s16)
306
+ $vgpr0 = COPY %shl
307
+ ...
0 commit comments