@@ -287,9 +287,9 @@ define <2 x i32> @or_bitcast_v4i16_to_v2i32_constant_commuted(<4 x i16> %a) {
287
287
; Test bitwise operations with truncate and one constant
288
288
define <4 x i16 > @or_trunc_v4i32_to_v4i16_constant (<4 x i32 > %a ) {
289
289
; CHECK-LABEL: @or_trunc_v4i32_to_v4i16_constant(
290
- ; CHECK-NEXT: [[T1 :%.*]] = trunc <4 x i32> [[A :%.*]] to <4 x i16 >
291
- ; CHECK-NEXT: [[OR :%.*]] = or <4 x i16 > [[T1]], <i16 1, i16 2, i16 3, i16 4 >
292
- ; CHECK-NEXT: ret <4 x i16> [[OR ]]
290
+ ; CHECK-NEXT: [[A :%.*]] = or <4 x i32> [[A1 :%.*]], <i32 1, i32 2, i32 3, i32 4 >
291
+ ; CHECK-NEXT: [[T1 :%.*]] = trunc <4 x i32 > [[A]] to <4 x i16>
292
+ ; CHECK-NEXT: ret <4 x i16> [[T1 ]]
293
293
;
294
294
%t1 = trunc <4 x i32 > %a to <4 x i16 >
295
295
%or = or <4 x i16 > %t1 , <i16 1 , i16 2 , i16 3 , i16 4 >
@@ -299,9 +299,9 @@ define <4 x i16> @or_trunc_v4i32_to_v4i16_constant(<4 x i32> %a) {
299
299
; Test bitwise operations with zero extend and one constant
300
300
define <4 x i32 > @or_zext_v4i16_to_v4i32_constant (<4 x i16 > %a ) {
301
301
; CHECK-LABEL: @or_zext_v4i16_to_v4i32_constant(
302
- ; CHECK-NEXT: [[Z1 :%.*]] = zext <4 x i16> [[A :%.*]] to <4 x i32 >
303
- ; CHECK-NEXT: [[OR :%.*]] = or <4 x i32 > [[Z1]], <i32 1, i32 2, i32 3, i32 4 >
304
- ; CHECK-NEXT: ret <4 x i32> [[OR ]]
302
+ ; CHECK-NEXT: [[A :%.*]] = or <4 x i16> [[A1 :%.*]], <i16 1, i16 2, i16 3, i16 4 >
303
+ ; CHECK-NEXT: [[Z1 :%.*]] = zext <4 x i16 > [[A]] to <4 x i32>
304
+ ; CHECK-NEXT: ret <4 x i32> [[Z1 ]]
305
305
;
306
306
%z1 = zext <4 x i16 > %a to <4 x i32 >
307
307
%or = or <4 x i32 > %z1 , <i32 1 , i32 2 , i32 3 , i32 4 >
@@ -322,9 +322,9 @@ define <4 x i32> @or_zext_v4i8_to_v4i32_constant_with_loss(<4 x i8> %a) {
322
322
; Test bitwise operations with sign extend and one constant
323
323
define <4 x i32 > @or_sext_v4i8_to_v4i32_positive_constant (<4 x i8 > %a ) {
324
324
; CHECK-LABEL: @or_sext_v4i8_to_v4i32_positive_constant(
325
- ; CHECK-NEXT: [[S1 :%.*]] = sext <4 x i8> [[A :%.*]] to <4 x i32 >
326
- ; CHECK-NEXT: [[OR :%.*]] = or <4 x i32 > [[S1]], <i32 1, i32 2, i32 3, i32 4 >
327
- ; CHECK-NEXT: ret <4 x i32> [[OR ]]
325
+ ; CHECK-NEXT: [[A :%.*]] = or <4 x i8> [[A1 :%.*]], <i8 1, i8 2, i8 3, i8 4 >
326
+ ; CHECK-NEXT: [[S1 :%.*]] = sext <4 x i8 > [[A]] to <4 x i32>
327
+ ; CHECK-NEXT: ret <4 x i32> [[S1 ]]
328
328
;
329
329
%s1 = sext <4 x i8 > %a to <4 x i32 >
330
330
%or = or <4 x i32 > %s1 , <i32 1 , i32 2 , i32 3 , i32 4 >
@@ -333,9 +333,9 @@ define <4 x i32> @or_sext_v4i8_to_v4i32_positive_constant(<4 x i8> %a) {
333
333
334
334
define <4 x i32 > @or_sext_v4i8_to_v4i32_minus_constant (<4 x i8 > %a ) {
335
335
; CHECK-LABEL: @or_sext_v4i8_to_v4i32_minus_constant(
336
- ; CHECK-NEXT: [[S1 :%.*]] = sext <4 x i8> [[A :%.*]] to <4 x i32 >
337
- ; CHECK-NEXT: [[OR :%.*]] = or <4 x i32 > [[S1]], <i32 -1, i32 -2, i32 -3, i32 -4 >
338
- ; CHECK-NEXT: ret <4 x i32> [[OR ]]
336
+ ; CHECK-NEXT: [[A :%.*]] = or <4 x i8> [[A1 :%.*]], <i8 -1, i8 -2, i8 -3, i8 -4 >
337
+ ; CHECK-NEXT: [[S1 :%.*]] = sext <4 x i8 > [[A]] to <4 x i32>
338
+ ; CHECK-NEXT: ret <4 x i32> [[S1 ]]
339
339
;
340
340
%s1 = sext <4 x i8 > %a to <4 x i32 >
341
341
%or = or <4 x i32 > %s1 , <i32 -1 , i32 -2 , i32 -3 , i32 -4 >
@@ -356,8 +356,8 @@ define <4 x i32> @or_sext_v4i8_to_v4i32_constant_with_loss(<4 x i8> %a) {
356
356
; Test truncate with flag preservation and one constant
357
357
define <4 x i16 > @and_trunc_nuw_nsw_constant (<4 x i32 > %a ) {
358
358
; CHECK-LABEL: @and_trunc_nuw_nsw_constant(
359
- ; CHECK-NEXT: [[T1 :%.*]] = trunc nuw nsw <4 x i32> [[A:%.*]] to <4 x i16 >
360
- ; CHECK-NEXT: [[AND:%.*]] = and <4 x i16 > [[T1]], <i16 1, i16 2, i16 3, i16 4 >
359
+ ; CHECK-NEXT: [[AND_INNER :%.*]] = and <4 x i32> [[A:%.*]], <i32 1, i32 2, i32 3, i32 4 >
360
+ ; CHECK-NEXT: [[AND:%.*]] = trunc <4 x i32 > [[AND_INNER]] to <4 x i16>
361
361
; CHECK-NEXT: ret <4 x i16> [[AND]]
362
362
;
363
363
%t1 = trunc nuw nsw <4 x i32 > %a to <4 x i16 >
@@ -367,8 +367,8 @@ define <4 x i16> @and_trunc_nuw_nsw_constant(<4 x i32> %a) {
367
367
368
368
define <4 x i8 > @and_trunc_nuw_nsw_minus_constant (<4 x i32 > %a ) {
369
369
; CHECK-LABEL: @and_trunc_nuw_nsw_minus_constant(
370
- ; CHECK-NEXT: [[T1 :%.*]] = trunc nuw nsw <4 x i32> [[A:%.*]] to <4 x i8 >
371
- ; CHECK-NEXT: [[AND:%.*]] = and <4 x i8 > [[T1]], <i8 -16, i8 -15, i8 -14, i8 -13 >
370
+ ; CHECK-NEXT: [[AND_INNER :%.*]] = and <4 x i32> [[A:%.*]], <i32 240, i32 241, i32 242, i32 243 >
371
+ ; CHECK-NEXT: [[AND:%.*]] = trunc <4 x i32 > [[AND_INNER]] to <4 x i8>
372
372
; CHECK-NEXT: ret <4 x i8> [[AND]]
373
373
;
374
374
%t1 = trunc nuw nsw <4 x i32 > %a to <4 x i8 >
@@ -378,8 +378,8 @@ define <4 x i8> @and_trunc_nuw_nsw_minus_constant(<4 x i32> %a) {
378
378
379
379
define <4 x i8 > @and_trunc_nuw_nsw_multiconstant (<4 x i32 > %a ) {
380
380
; CHECK-LABEL: @and_trunc_nuw_nsw_multiconstant(
381
- ; CHECK-NEXT: [[T1 :%.*]] = trunc nuw nsw <4 x i32> [[A:%.*]] to <4 x i8 >
382
- ; CHECK-NEXT: [[AND:%.*]] = and <4 x i8 > [[T1]], <i8 -16, i8 1, i8 -14, i8 3 >
381
+ ; CHECK-NEXT: [[AND_INNER :%.*]] = and <4 x i32> [[A:%.*]], <i32 240, i32 1, i32 242, i32 3 >
382
+ ; CHECK-NEXT: [[AND:%.*]] = trunc <4 x i32 > [[AND_INNER]] to <4 x i8>
383
383
; CHECK-NEXT: ret <4 x i8> [[AND]]
384
384
;
385
385
%t1 = trunc nuw nsw <4 x i32 > %a to <4 x i8 >
@@ -390,8 +390,8 @@ define <4 x i8> @and_trunc_nuw_nsw_multiconstant(<4 x i32> %a) {
390
390
; Test sign extend with nneg flag and one constant
391
391
define <4 x i32 > @or_zext_nneg_constant (<4 x i16 > %a ) {
392
392
; CHECK-LABEL: @or_zext_nneg_constant(
393
- ; CHECK-NEXT: [[Z1 :%.*]] = zext nneg <4 x i16> [[A:%.*]] to <4 x i32 >
394
- ; CHECK-NEXT: [[OR:%.*]] = or <4 x i32 > [[Z1]], <i32 1, i32 2, i32 3, i32 4 >
393
+ ; CHECK-NEXT: [[OR_INNER :%.*]] = or <4 x i16> [[A:%.*]], <i16 1, i16 2, i16 3, i16 4 >
394
+ ; CHECK-NEXT: [[OR:%.*]] = zext <4 x i16 > [[OR_INNER]] to <4 x i32>
395
395
; CHECK-NEXT: ret <4 x i32> [[OR]]
396
396
;
397
397
%z1 = zext nneg <4 x i16 > %a to <4 x i32 >
@@ -401,8 +401,8 @@ define <4 x i32> @or_zext_nneg_constant(<4 x i16> %a) {
401
401
402
402
define <4 x i32 > @or_zext_nneg_minus_constant (<4 x i8 > %a ) {
403
403
; CHECK-LABEL: @or_zext_nneg_minus_constant(
404
- ; CHECK-NEXT: [[Z1 :%.*]] = zext nneg <4 x i8> [[A:%.*]] to <4 x i32 >
405
- ; CHECK-NEXT: [[OR:%.*]] = or <4 x i32 > [[Z1]], <i32 240, i32 241, i32 242, i32 243 >
404
+ ; CHECK-NEXT: [[OR_INNER :%.*]] = or <4 x i8> [[A:%.*]], <i8 -16, i8 -15, i8 -14, i8 -13 >
405
+ ; CHECK-NEXT: [[OR:%.*]] = zext <4 x i8 > [[OR_INNER]] to <4 x i32>
406
406
; CHECK-NEXT: ret <4 x i32> [[OR]]
407
407
;
408
408
%z1 = zext nneg <4 x i8 > %a to <4 x i32 >
@@ -412,8 +412,8 @@ define <4 x i32> @or_zext_nneg_minus_constant(<4 x i8> %a) {
412
412
413
413
define <4 x i32 > @or_zext_nneg_multiconstant (<4 x i8 > %a ) {
414
414
; CHECK-LABEL: @or_zext_nneg_multiconstant(
415
- ; CHECK-NEXT: [[Z1 :%.*]] = zext nneg <4 x i8> [[A:%.*]] to <4 x i32 >
416
- ; CHECK-NEXT: [[OR:%.*]] = or <4 x i32 > [[Z1]], <i32 240, i32 1, i32 242, i32 3 >
415
+ ; CHECK-NEXT: [[OR_INNER :%.*]] = or <4 x i8> [[A:%.*]], <i8 -16, i8 1, i8 -14, i8 3 >
416
+ ; CHECK-NEXT: [[OR:%.*]] = zext <4 x i8 > [[OR_INNER]] to <4 x i32>
417
417
; CHECK-NEXT: ret <4 x i32> [[OR]]
418
418
;
419
419
%z1 = zext nneg <4 x i8 > %a to <4 x i32 >
0 commit comments