@@ -264,9 +264,9 @@ define <4 x i32> @or_zext_nneg(<4 x i16> %a, <4 x i16> %b) {
264264; Test bitwise operations with integer-to-integer bitcast with one constant
265265define <2 x i32 > @or_bitcast_v4i16_to_v2i32_constant (<4 x i16 > %a ) {
266266; CHECK-LABEL: @or_bitcast_v4i16_to_v2i32_constant(
267- ; CHECK-NEXT: [[BC1 :%.*]] = bitcast <4 x i16> [[A :%.*]] to <2 x i32 >
268- ; CHECK-NEXT: [[OR :%.*]] = or <2 x i32 > [[BC1]], <i32 1000000, i32 2000000 >
269- ; CHECK-NEXT: ret <2 x i32> [[OR ]]
267+ ; CHECK-NEXT: [[A :%.*]] = or <4 x i16> [[A1 :%.*]], <i16 16960, i16 15, i16 -31616, i16 30 >
268+ ; CHECK-NEXT: [[BC1 :%.*]] = bitcast <4 x i16 > [[A]] to <2 x i32>
269+ ; CHECK-NEXT: ret <2 x i32> [[BC1 ]]
270270;
271271 %bc1 = bitcast <4 x i16 > %a to <2 x i32 >
272272 %or = or <2 x i32 > %bc1 , <i32 1000000 , i32 2000000 >
@@ -275,9 +275,9 @@ define <2 x i32> @or_bitcast_v4i16_to_v2i32_constant(<4 x i16> %a) {
275275
276276define <2 x i32 > @or_bitcast_v4i16_to_v2i32_constant_commuted (<4 x i16 > %a ) {
277277; CHECK-LABEL: @or_bitcast_v4i16_to_v2i32_constant_commuted(
278- ; CHECK-NEXT: [[BC1 :%.*]] = bitcast <4 x i16> [[A :%.*]] to <2 x i32 >
279- ; CHECK-NEXT: [[OR :%.*]] = or <2 x i32> <i32 1000000, i32 2000000>, [[BC1]]
280- ; CHECK-NEXT: ret <2 x i32> [[OR ]]
278+ ; CHECK-NEXT: [[A :%.*]] = or <4 x i16> [[A1 :%.*]], <i16 16960, i16 15, i16 -31616, i16 30 >
279+ ; CHECK-NEXT: [[BC1 :%.*]] = bitcast <4 x i16> [[A]] to <2 x i32>
280+ ; CHECK-NEXT: ret <2 x i32> [[BC1 ]]
281281;
282282 %bc1 = bitcast <4 x i16 > %a to <2 x i32 >
283283 %or = or <2 x i32 > <i32 1000000 , i32 2000000 >, %bc1
@@ -287,9 +287,9 @@ define <2 x i32> @or_bitcast_v4i16_to_v2i32_constant_commuted(<4 x i16> %a) {
287287; Test bitwise operations with truncate and one constant
288288define <4 x i16 > @or_trunc_v4i32_to_v4i16_constant (<4 x i32 > %a ) {
289289; CHECK-LABEL: @or_trunc_v4i32_to_v4i16_constant(
290- ; CHECK-NEXT: [[T1 :%.*]] = trunc <4 x i32> [[A :%.*]] to <4 x i16 >
291- ; CHECK-NEXT: [[AND :%.*]] = or <4 x i16 > [[T1]], <i16 1, i16 2, i16 3, i16 4 >
292- ; CHECK-NEXT: ret <4 x i16> [[AND ]]
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 ]]
293293;
294294 %t1 = trunc <4 x i32 > %a to <4 x i16 >
295295 %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) {
299299; Test bitwise operations with zero extend and one constant
300300define <4 x i32 > @or_zext_v4i16_to_v4i32_constant (<4 x i16 > %a ) {
301301; CHECK-LABEL: @or_zext_v4i16_to_v4i32_constant(
302- ; CHECK-NEXT: [[Z1 :%.*]] = zext <4 x i16> [[A :%.*]] to <4 x i32 >
303- ; CHECK-NEXT: [[AND :%.*]] = or <4 x i32 > [[Z1]], <i32 1, i32 2, i32 3, i32 4 >
304- ; CHECK-NEXT: ret <4 x i32> [[AND ]]
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 ]]
305305;
306306 %z1 = zext <4 x i16 > %a to <4 x i32 >
307307 %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) {
322322; Test bitwise operations with sign extend and one constant
323323define <4 x i32 > @or_sext_v4i8_to_v4i32_positive_constant (<4 x i8 > %a ) {
324324; 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 ]]
328328;
329329 %s1 = sext <4 x i8 > %a to <4 x i32 >
330330 %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) {
333333
334334define <4 x i32 > @or_sext_v4i8_to_v4i32_minus_constant (<4 x i8 > %a ) {
335335; 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 ]]
339339;
340340 %s1 = sext <4 x i8 > %a to <4 x i32 >
341341 %or = or <4 x i32 > %s1 , <i32 -1 , i32 -2 , i32 -3 , i32 -4 >
@@ -356,9 +356,9 @@ define <4 x i32> @or_sext_v4i8_to_v4i32_constant_with_loss(<4 x i8> %a) {
356356; Test truncate with flag preservation and one constant
357357define <4 x i16 > @and_trunc_nuw_nsw_constant (<4 x i32 > %a ) {
358358; 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 >
361- ; CHECK-NEXT: ret <4 x i16> [[AND ]]
359+ ; CHECK-NEXT: [[A :%.*]] = and <4 x i32> [[A1 :%.*]], <i32 1, i32 2, i32 3, i32 4 >
360+ ; CHECK-NEXT: [[T1 :%.*]] = trunc nuw nsw <4 x i32 > [[A]] to <4 x i16>
361+ ; CHECK-NEXT: ret <4 x i16> [[T1 ]]
362362;
363363 %t1 = trunc nuw nsw <4 x i32 > %a to <4 x i16 >
364364 %and = and <4 x i16 > %t1 , <i16 1 , i16 2 , i16 3 , i16 4 >
@@ -367,8 +367,8 @@ define <4 x i16> @and_trunc_nuw_nsw_constant(<4 x i32> %a) {
367367
368368define <4 x i8 > @and_trunc_nuw_nsw_minus_constant (<4 x i32 > %a ) {
369369; 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 nuw <4 x i32 > [[AND_INNER]] to <4 x i8>
372372; CHECK-NEXT: ret <4 x i8> [[AND]]
373373;
374374 %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) {
378378
379379define <4 x i8 > @and_trunc_nuw_nsw_multiconstant (<4 x i32 > %a ) {
380380; 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 nuw <4 x i32 > [[AND_INNER]] to <4 x i8>
383383; CHECK-NEXT: ret <4 x i8> [[AND]]
384384;
385385 %t1 = trunc nuw nsw <4 x i32 > %a to <4 x i8 >
@@ -390,9 +390,9 @@ define <4 x i8> @and_trunc_nuw_nsw_multiconstant(<4 x i32> %a) {
390390; Test sign extend with nneg flag and one constant
391391define <4 x i32 > @or_zext_nneg_constant (<4 x i16 > %a ) {
392392; 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 >
395- ; CHECK-NEXT: ret <4 x i32> [[OR ]]
393+ ; CHECK-NEXT: [[A :%.*]] = or <4 x i16> [[A1 :%.*]], <i16 1, i16 2, i16 3, i16 4 >
394+ ; CHECK-NEXT: [[Z1 :%.*]] = zext nneg <4 x i16 > [[A]] to <4 x i32>
395+ ; CHECK-NEXT: ret <4 x i32> [[Z1 ]]
396396;
397397 %z1 = zext nneg <4 x i16 > %a to <4 x i32 >
398398 %or = or <4 x i32 > %z1 , <i32 1 , i32 2 , i32 3 , i32 4 >
@@ -401,8 +401,8 @@ define <4 x i32> @or_zext_nneg_constant(<4 x i16> %a) {
401401
402402define <4 x i32 > @or_zext_nneg_minus_constant (<4 x i8 > %a ) {
403403; 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>
406406; CHECK-NEXT: ret <4 x i32> [[OR]]
407407;
408408 %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) {
412412
413413define <4 x i32 > @or_zext_nneg_multiconstant (<4 x i8 > %a ) {
414414; 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>
417417; CHECK-NEXT: ret <4 x i32> [[OR]]
418418;
419419 %z1 = zext nneg <4 x i8 > %a to <4 x i32 >
0 commit comments