@@ -682,3 +682,88 @@ define <4 x i32> @computesignbits_through_two_input_shuffle(<4 x i32> %x, <4 x i
682
682
ret <4 x i32 > %sel
683
683
}
684
684
685
+ define <2 x i64 > @bitcast_vec_cond (<16 x i1 > %cond , <2 x i64 > %c , <2 x i64 > %d ) {
686
+ ; CHECK-LABEL: @bitcast_vec_cond(
687
+ ; CHECK-NEXT: [[S:%.*]] = sext <16 x i1> [[COND:%.*]] to <16 x i8>
688
+ ; CHECK-NEXT: [[T9:%.*]] = bitcast <16 x i8> [[S]] to <2 x i64>
689
+ ; CHECK-NEXT: [[NOTT9:%.*]] = xor <2 x i64> [[T9]], <i64 -1, i64 -1>
690
+ ; CHECK-NEXT: [[T11:%.*]] = and <2 x i64> [[NOTT9]], [[C:%.*]]
691
+ ; CHECK-NEXT: [[T12:%.*]] = and <2 x i64> [[T9]], [[D:%.*]]
692
+ ; CHECK-NEXT: [[R:%.*]] = or <2 x i64> [[T11]], [[T12]]
693
+ ; CHECK-NEXT: ret <2 x i64> [[R]]
694
+ ;
695
+ %s = sext <16 x i1 > %cond to <16 x i8 >
696
+ %t9 = bitcast <16 x i8 > %s to <2 x i64 >
697
+ %nott9 = xor <2 x i64 > %t9 , <i64 -1 , i64 -1 >
698
+ %t11 = and <2 x i64 > %nott9 , %c
699
+ %t12 = and <2 x i64 > %t9 , %d
700
+ %r = or <2 x i64 > %t11 , %t12
701
+ ret <2 x i64 > %r
702
+ }
703
+
704
+ define <8 x i3 > @bitcast_vec_cond_commute1 (<3 x i1 > %cond , <8 x i3 > %pc , <8 x i3 > %d ) {
705
+ ; CHECK-LABEL: @bitcast_vec_cond_commute1(
706
+ ; CHECK-NEXT: [[C:%.*]] = mul <8 x i3> [[PC:%.*]], [[PC]]
707
+ ; CHECK-NEXT: [[S:%.*]] = sext <3 x i1> [[COND:%.*]] to <3 x i8>
708
+ ; CHECK-NEXT: [[T9:%.*]] = bitcast <3 x i8> [[S]] to <8 x i3>
709
+ ; CHECK-NEXT: [[NOTT9:%.*]] = xor <8 x i3> [[T9]], <i3 -1, i3 -1, i3 -1, i3 -1, i3 -1, i3 -1, i3 -1, i3 -1>
710
+ ; CHECK-NEXT: [[T11:%.*]] = and <8 x i3> [[C]], [[NOTT9]]
711
+ ; CHECK-NEXT: [[T12:%.*]] = and <8 x i3> [[T9]], [[D:%.*]]
712
+ ; CHECK-NEXT: [[R:%.*]] = or <8 x i3> [[T11]], [[T12]]
713
+ ; CHECK-NEXT: ret <8 x i3> [[R]]
714
+ ;
715
+ %c = mul <8 x i3 > %pc , %pc ; thwart complexity-based canonicalization
716
+ %s = sext <3 x i1 > %cond to <3 x i8 >
717
+ %t9 = bitcast <3 x i8 > %s to <8 x i3 >
718
+ %nott9 = xor <8 x i3 > %t9 , <i3 -1 , i3 -1 , i3 -1 , i3 -1 , i3 -1 , i3 -1 , i3 -1 , i3 -1 >
719
+ %t11 = and <8 x i3 > %c , %nott9
720
+ %t12 = and <8 x i3 > %t9 , %d
721
+ %r = or <8 x i3 > %t11 , %t12
722
+ ret <8 x i3 > %r
723
+ }
724
+
725
+ define <2 x i16 > @bitcast_vec_cond_commute2 (<4 x i1 > %cond , <2 x i16 > %pc , <2 x i16 > %pd ) {
726
+ ; CHECK-LABEL: @bitcast_vec_cond_commute2(
727
+ ; CHECK-NEXT: [[C:%.*]] = mul <2 x i16> [[PC:%.*]], [[PC]]
728
+ ; CHECK-NEXT: [[D:%.*]] = mul <2 x i16> [[PD:%.*]], [[PD]]
729
+ ; CHECK-NEXT: [[S:%.*]] = sext <4 x i1> [[COND:%.*]] to <4 x i8>
730
+ ; CHECK-NEXT: [[T9:%.*]] = bitcast <4 x i8> [[S]] to <2 x i16>
731
+ ; CHECK-NEXT: [[NOTT9:%.*]] = xor <2 x i16> [[T9]], <i16 -1, i16 -1>
732
+ ; CHECK-NEXT: [[T11:%.*]] = and <2 x i16> [[C]], [[NOTT9]]
733
+ ; CHECK-NEXT: [[T12:%.*]] = and <2 x i16> [[D]], [[T9]]
734
+ ; CHECK-NEXT: [[R:%.*]] = or <2 x i16> [[T11]], [[T12]]
735
+ ; CHECK-NEXT: ret <2 x i16> [[R]]
736
+ ;
737
+ %c = mul <2 x i16 > %pc , %pc ; thwart complexity-based canonicalization
738
+ %d = mul <2 x i16 > %pd , %pd ; thwart complexity-based canonicalization
739
+ %s = sext <4 x i1 > %cond to <4 x i8 >
740
+ %t9 = bitcast <4 x i8 > %s to <2 x i16 >
741
+ %nott9 = xor <2 x i16 > %t9 , <i16 -1 , i16 -1 >
742
+ %t11 = and <2 x i16 > %c , %nott9
743
+ %t12 = and <2 x i16 > %d , %t9
744
+ %r = or <2 x i16 > %t11 , %t12
745
+ ret <2 x i16 > %r
746
+ }
747
+
748
+ define <2 x i16 > @bitcast_vec_cond_commute3 (<4 x i8 > %cond , <2 x i16 > %pc , <2 x i16 > %pd ) {
749
+ ; CHECK-LABEL: @bitcast_vec_cond_commute3(
750
+ ; CHECK-NEXT: [[C:%.*]] = mul <2 x i16> [[PC:%.*]], [[PC]]
751
+ ; CHECK-NEXT: [[D:%.*]] = mul <2 x i16> [[PD:%.*]], [[PD]]
752
+ ; CHECK-NEXT: [[S:%.*]] = ashr <4 x i8> [[COND:%.*]], <i8 7, i8 7, i8 7, i8 7>
753
+ ; CHECK-NEXT: [[T9:%.*]] = bitcast <4 x i8> [[S]] to <2 x i16>
754
+ ; CHECK-NEXT: [[NOTT9:%.*]] = xor <2 x i16> [[T9]], <i16 -1, i16 -1>
755
+ ; CHECK-NEXT: [[T11:%.*]] = and <2 x i16> [[C]], [[NOTT9]]
756
+ ; CHECK-NEXT: [[T12:%.*]] = and <2 x i16> [[D]], [[T9]]
757
+ ; CHECK-NEXT: [[R:%.*]] = or <2 x i16> [[T11]], [[T12]]
758
+ ; CHECK-NEXT: ret <2 x i16> [[R]]
759
+ ;
760
+ %c = mul <2 x i16 > %pc , %pc ; thwart complexity-based canonicalization
761
+ %d = mul <2 x i16 > %pd , %pd ; thwart complexity-based canonicalization
762
+ %s = ashr <4 x i8 > %cond , <i8 7 , i8 7 , i8 7 , i8 7 >
763
+ %t9 = bitcast <4 x i8 > %s to <2 x i16 >
764
+ %nott9 = xor <2 x i16 > %t9 , <i16 -1 , i16 -1 >
765
+ %t11 = and <2 x i16 > %c , %nott9
766
+ %t12 = and <2 x i16 > %d , %t9
767
+ %r = or <2 x i16 > %t11 , %t12
768
+ ret <2 x i16 > %r
769
+ }
0 commit comments