@@ -74,18 +74,39 @@ define <4 x i32> @knownbits_mask_shuffle_shuffle_sext(<8 x i16> %a0) nounwind {
74
74
; X32-LABEL: knownbits_mask_shuffle_shuffle_sext:
75
75
; X32: # BB#0:
76
76
; X32-NEXT: vpand {{\.LCPI.*}}, %xmm0, %xmm0
77
+ ; X32-NEXT: vpxor %xmm1, %xmm1, %xmm1
78
+ ; X32-NEXT: vpunpckhwd {{.*#+}} xmm0 = xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]
79
+ ; X32-NEXT: retl
80
+ ;
81
+ ; X64-LABEL: knownbits_mask_shuffle_shuffle_sext:
82
+ ; X64: # BB#0:
83
+ ; X64-NEXT: vpand {{.*}}(%rip), %xmm0, %xmm0
84
+ ; X64-NEXT: vpxor %xmm1, %xmm1, %xmm1
85
+ ; X64-NEXT: vpunpckhwd {{.*#+}} xmm0 = xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]
86
+ ; X64-NEXT: retq
87
+ %1 = and <8 x i16 > %a0 , <i16 -1 , i16 -1 , i16 -1 , i16 -1 , i16 15 , i16 15 , i16 15 , i16 15 >
88
+ %2 = shufflevector <8 x i16 > %1 , <8 x i16 > undef , <8 x i32 > <i32 4 , i32 5 , i32 6 , i32 7 , i32 undef , i32 undef , i32 undef , i32 undef >
89
+ %3 = shufflevector <8 x i16 > %2 , <8 x i16 > undef , <4 x i32 > <i32 0 , i32 1 , i32 2 , i32 3 >
90
+ %4 = sext <4 x i16 > %3 to <4 x i32 >
91
+ ret <4 x i32 > %4
92
+ }
93
+
94
+ define <4 x i32 > @knownbits_mask_shuffle_shuffle_undef_sext (<8 x i16 > %a0 ) nounwind {
95
+ ; X32-LABEL: knownbits_mask_shuffle_shuffle_undef_sext:
96
+ ; X32: # BB#0:
97
+ ; X32-NEXT: vpand {{\.LCPI.*}}, %xmm0, %xmm0
77
98
; X32-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]
78
99
; X32-NEXT: vpmovsxwd %xmm0, %xmm0
79
100
; X32-NEXT: retl
80
101
;
81
- ; X64-LABEL: knownbits_mask_shuffle_shuffle_sext :
102
+ ; X64-LABEL: knownbits_mask_shuffle_shuffle_undef_sext :
82
103
; X64: # BB#0:
83
104
; X64-NEXT: vpand {{.*}}(%rip), %xmm0, %xmm0
84
105
; X64-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]
85
106
; X64-NEXT: vpmovsxwd %xmm0, %xmm0
86
107
; X64-NEXT: retq
87
108
%1 = and <8 x i16 > %a0 , <i16 -1 , i16 -1 , i16 -1 , i16 -1 , i16 15 , i16 15 , i16 15 , i16 15 >
88
- %2 = shufflevector <8 x i16 > %1 , <8 x i16 > undef , <8 x i32 > <i32 4 , i32 5 , i32 6 , i32 7 , i32 undef , i32 undef , i32 undef , i32 undef >
109
+ %2 = shufflevector <8 x i16 > %1 , <8 x i16 > undef , <8 x i32 > <i32 4 , i32 5 , i32 6 , i32 undef , i32 undef , i32 undef , i32 undef , i32 undef >
89
110
%3 = shufflevector <8 x i16 > %2 , <8 x i16 > undef , <4 x i32 > <i32 0 , i32 1 , i32 2 , i32 3 >
90
111
%4 = sext <4 x i16 > %3 to <4 x i32 >
91
112
ret <4 x i32 > %4
0 commit comments