Skip to content

Commit 052a291

Browse files
committed
[InstCombine] add tests for bitwise select of vectors; NFC
1 parent 88fc0ab commit 052a291

File tree

1 file changed

+85
-0
lines changed

1 file changed

+85
-0
lines changed

llvm/test/Transforms/InstCombine/logical-select.ll

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -682,3 +682,88 @@ define <4 x i32> @computesignbits_through_two_input_shuffle(<4 x i32> %x, <4 x i
682682
ret <4 x i32> %sel
683683
}
684684

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

Comments
 (0)