OSDN Git Service

[TargetLowering] SimplifyDemandedBits - legal checks for SIGN/ZERO_EXTEND -> ZERO...
[android-x86/external-llvm.git] / test / CodeGen / X86 / avx512-vec-cmp.ll
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -mtriple=x86_64-apple-darwin -show-mc-encoding -mattr=+avx512f | FileCheck %s --check-prefix=CHECK --check-prefix=AVX512 --check-prefix=KNL
3 ; RUN: llc < %s -mtriple=x86_64-apple-darwin -show-mc-encoding -mattr=+avx512f,+avx512bw | FileCheck %s --check-prefix=CHECK --check-prefix=AVX512 --check-prefix=AVX512BW
4 ; RUN: llc < %s -mtriple=x86_64-apple-darwin -show-mc-encoding -mattr=+avx512f,+avx512bw,+avx512vl,+avx512dq | FileCheck %s --check-prefix=CHECK --check-prefix=SKX
5
6 define <16 x float> @test1(<16 x float> %x, <16 x float> %y) nounwind {
7 ; CHECK-LABEL: test1:
8 ; CHECK:       ## %bb.0:
9 ; CHECK-NEXT:    vcmpleps %zmm1, %zmm0, %k1 ## encoding: [0x62,0xf1,0x7c,0x48,0xc2,0xc9,0x02]
10 ; CHECK-NEXT:    vblendmps %zmm0, %zmm1, %zmm0 {%k1} ## encoding: [0x62,0xf2,0x75,0x49,0x65,0xc0]
11 ; CHECK-NEXT:    retq ## encoding: [0xc3]
12   %mask = fcmp ole <16 x float> %x, %y
13   %max = select <16 x i1> %mask, <16 x float> %x, <16 x float> %y
14   ret <16 x float> %max
15 }
16
17 define <8 x double> @test2(<8 x double> %x, <8 x double> %y) nounwind {
18 ; CHECK-LABEL: test2:
19 ; CHECK:       ## %bb.0:
20 ; CHECK-NEXT:    vcmplepd %zmm1, %zmm0, %k1 ## encoding: [0x62,0xf1,0xfd,0x48,0xc2,0xc9,0x02]
21 ; CHECK-NEXT:    vblendmpd %zmm0, %zmm1, %zmm0 {%k1} ## encoding: [0x62,0xf2,0xf5,0x49,0x65,0xc0]
22 ; CHECK-NEXT:    retq ## encoding: [0xc3]
23   %mask = fcmp ole <8 x double> %x, %y
24   %max = select <8 x i1> %mask, <8 x double> %x, <8 x double> %y
25   ret <8 x double> %max
26 }
27
28 define <16 x i32> @test3(<16 x i32> %x, <16 x i32> %x1, <16 x i32>* %yp) nounwind {
29 ; CHECK-LABEL: test3:
30 ; CHECK:       ## %bb.0:
31 ; CHECK-NEXT:    vpcmpeqd (%rdi), %zmm0, %k1 ## encoding: [0x62,0xf1,0x7d,0x48,0x76,0x0f]
32 ; CHECK-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1} ## encoding: [0x62,0xf2,0x75,0x49,0x64,0xc0]
33 ; CHECK-NEXT:    retq ## encoding: [0xc3]
34   %y = load <16 x i32>, <16 x i32>* %yp, align 4
35   %mask = icmp eq <16 x i32> %x, %y
36   %max = select <16 x i1> %mask, <16 x i32> %x, <16 x i32> %x1
37   ret <16 x i32> %max
38 }
39
40 define <16 x i32> @test4_unsigned(<16 x i32> %x, <16 x i32> %y, <16 x i32> %x1) nounwind {
41 ; CHECK-LABEL: test4_unsigned:
42 ; CHECK:       ## %bb.0:
43 ; CHECK-NEXT:    vpcmpnltud %zmm1, %zmm0, %k1 ## encoding: [0x62,0xf3,0x7d,0x48,0x1e,0xc9,0x05]
44 ; CHECK-NEXT:    vpblendmd %zmm2, %zmm1, %zmm0 {%k1} ## encoding: [0x62,0xf2,0x75,0x49,0x64,0xc2]
45 ; CHECK-NEXT:    retq ## encoding: [0xc3]
46   %mask = icmp uge <16 x i32> %x, %y
47   %max = select <16 x i1> %mask, <16 x i32> %x1, <16 x i32> %y
48   ret <16 x i32> %max
49 }
50
51 define <8 x i64> @test5(<8 x i64> %x, <8 x i64> %y) nounwind {
52 ; CHECK-LABEL: test5:
53 ; CHECK:       ## %bb.0:
54 ; CHECK-NEXT:    vpcmpeqq %zmm1, %zmm0, %k1 ## encoding: [0x62,0xf2,0xfd,0x48,0x29,0xc9]
55 ; CHECK-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1} ## encoding: [0x62,0xf2,0xf5,0x49,0x64,0xc0]
56 ; CHECK-NEXT:    retq ## encoding: [0xc3]
57   %mask = icmp eq <8 x i64> %x, %y
58   %max = select <8 x i1> %mask, <8 x i64> %x, <8 x i64> %y
59   ret <8 x i64> %max
60 }
61
62 define <8 x i64> @test6_unsigned(<8 x i64> %x, <8 x i64> %y, <8 x i64> %x1) nounwind {
63 ; CHECK-LABEL: test6_unsigned:
64 ; CHECK:       ## %bb.0:
65 ; CHECK-NEXT:    vpcmpnleuq %zmm1, %zmm0, %k1 ## encoding: [0x62,0xf3,0xfd,0x48,0x1e,0xc9,0x06]
66 ; CHECK-NEXT:    vpblendmq %zmm2, %zmm1, %zmm0 {%k1} ## encoding: [0x62,0xf2,0xf5,0x49,0x64,0xc2]
67 ; CHECK-NEXT:    retq ## encoding: [0xc3]
68   %mask = icmp ugt <8 x i64> %x, %y
69   %max = select <8 x i1> %mask, <8 x i64> %x1, <8 x i64> %y
70   ret <8 x i64> %max
71 }
72
73 define <4 x float> @test7(<4 x float> %a, <4 x float> %b) {
74 ; AVX512-LABEL: test7:
75 ; AVX512:       ## %bb.0:
76 ; AVX512-NEXT:    ## kill: def $xmm1 killed $xmm1 def $zmm1
77 ; AVX512-NEXT:    ## kill: def $xmm0 killed $xmm0 def $zmm0
78 ; AVX512-NEXT:    vxorps %xmm2, %xmm2, %xmm2 ## encoding: [0xc5,0xe8,0x57,0xd2]
79 ; AVX512-NEXT:    vcmpltps %zmm2, %zmm0, %k1 ## encoding: [0x62,0xf1,0x7c,0x48,0xc2,0xca,0x01]
80 ; AVX512-NEXT:    vblendmps %zmm0, %zmm1, %zmm0 {%k1} ## encoding: [0x62,0xf2,0x75,0x49,0x65,0xc0]
81 ; AVX512-NEXT:    ## kill: def $xmm0 killed $xmm0 killed $zmm0
82 ; AVX512-NEXT:    vzeroupper ## encoding: [0xc5,0xf8,0x77]
83 ; AVX512-NEXT:    retq ## encoding: [0xc3]
84 ;
85 ; SKX-LABEL: test7:
86 ; SKX:       ## %bb.0:
87 ; SKX-NEXT:    vxorps %xmm2, %xmm2, %xmm2 ## EVEX TO VEX Compression encoding: [0xc5,0xe8,0x57,0xd2]
88 ; SKX-NEXT:    vcmpltps %xmm2, %xmm0, %k1 ## encoding: [0x62,0xf1,0x7c,0x08,0xc2,0xca,0x01]
89 ; SKX-NEXT:    vblendmps %xmm0, %xmm1, %xmm0 {%k1} ## encoding: [0x62,0xf2,0x75,0x09,0x65,0xc0]
90 ; SKX-NEXT:    retq ## encoding: [0xc3]
91
92   %mask = fcmp olt <4 x float> %a, zeroinitializer
93   %c = select <4 x i1>%mask, <4 x float>%a, <4 x float>%b
94   ret <4 x float>%c
95 }
96
97 define <2 x double> @test8(<2 x double> %a, <2 x double> %b) {
98 ; AVX512-LABEL: test8:
99 ; AVX512:       ## %bb.0:
100 ; AVX512-NEXT:    ## kill: def $xmm1 killed $xmm1 def $zmm1
101 ; AVX512-NEXT:    ## kill: def $xmm0 killed $xmm0 def $zmm0
102 ; AVX512-NEXT:    vxorpd %xmm2, %xmm2, %xmm2 ## encoding: [0xc5,0xe9,0x57,0xd2]
103 ; AVX512-NEXT:    vcmpltpd %zmm2, %zmm0, %k1 ## encoding: [0x62,0xf1,0xfd,0x48,0xc2,0xca,0x01]
104 ; AVX512-NEXT:    vblendmpd %zmm0, %zmm1, %zmm0 {%k1} ## encoding: [0x62,0xf2,0xf5,0x49,0x65,0xc0]
105 ; AVX512-NEXT:    ## kill: def $xmm0 killed $xmm0 killed $zmm0
106 ; AVX512-NEXT:    vzeroupper ## encoding: [0xc5,0xf8,0x77]
107 ; AVX512-NEXT:    retq ## encoding: [0xc3]
108 ;
109 ; SKX-LABEL: test8:
110 ; SKX:       ## %bb.0:
111 ; SKX-NEXT:    vxorpd %xmm2, %xmm2, %xmm2 ## EVEX TO VEX Compression encoding: [0xc5,0xe9,0x57,0xd2]
112 ; SKX-NEXT:    vcmpltpd %xmm2, %xmm0, %k1 ## encoding: [0x62,0xf1,0xfd,0x08,0xc2,0xca,0x01]
113 ; SKX-NEXT:    vblendmpd %xmm0, %xmm1, %xmm0 {%k1} ## encoding: [0x62,0xf2,0xf5,0x09,0x65,0xc0]
114 ; SKX-NEXT:    retq ## encoding: [0xc3]
115   %mask = fcmp olt <2 x double> %a, zeroinitializer
116   %c = select <2 x i1>%mask, <2 x double>%a, <2 x double>%b
117   ret <2 x double>%c
118 }
119
120 define <8 x i32> @test9(<8 x i32> %x, <8 x i32> %y) nounwind {
121 ; AVX512-LABEL: test9:
122 ; AVX512:       ## %bb.0:
123 ; AVX512-NEXT:    ## kill: def $ymm1 killed $ymm1 def $zmm1
124 ; AVX512-NEXT:    ## kill: def $ymm0 killed $ymm0 def $zmm0
125 ; AVX512-NEXT:    vpcmpeqd %zmm1, %zmm0, %k1 ## encoding: [0x62,0xf1,0x7d,0x48,0x76,0xc9]
126 ; AVX512-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1} ## encoding: [0x62,0xf2,0x75,0x49,0x64,0xc0]
127 ; AVX512-NEXT:    ## kill: def $ymm0 killed $ymm0 killed $zmm0
128 ; AVX512-NEXT:    retq ## encoding: [0xc3]
129 ;
130 ; SKX-LABEL: test9:
131 ; SKX:       ## %bb.0:
132 ; SKX-NEXT:    vpcmpeqd %ymm1, %ymm0, %k1 ## encoding: [0x62,0xf1,0x7d,0x28,0x76,0xc9]
133 ; SKX-NEXT:    vpblendmd %ymm0, %ymm1, %ymm0 {%k1} ## encoding: [0x62,0xf2,0x75,0x29,0x64,0xc0]
134 ; SKX-NEXT:    retq ## encoding: [0xc3]
135   %mask = icmp eq <8 x i32> %x, %y
136   %max = select <8 x i1> %mask, <8 x i32> %x, <8 x i32> %y
137   ret <8 x i32> %max
138 }
139
140 define <8 x float> @test10(<8 x float> %x, <8 x float> %y) nounwind {
141 ; AVX512-LABEL: test10:
142 ; AVX512:       ## %bb.0:
143 ; AVX512-NEXT:    ## kill: def $ymm1 killed $ymm1 def $zmm1
144 ; AVX512-NEXT:    ## kill: def $ymm0 killed $ymm0 def $zmm0
145 ; AVX512-NEXT:    vcmpeqps %zmm1, %zmm0, %k1 ## encoding: [0x62,0xf1,0x7c,0x48,0xc2,0xc9,0x00]
146 ; AVX512-NEXT:    vblendmps %zmm0, %zmm1, %zmm0 {%k1} ## encoding: [0x62,0xf2,0x75,0x49,0x65,0xc0]
147 ; AVX512-NEXT:    ## kill: def $ymm0 killed $ymm0 killed $zmm0
148 ; AVX512-NEXT:    retq ## encoding: [0xc3]
149 ;
150 ; SKX-LABEL: test10:
151 ; SKX:       ## %bb.0:
152 ; SKX-NEXT:    vcmpeqps %ymm1, %ymm0, %k1 ## encoding: [0x62,0xf1,0x7c,0x28,0xc2,0xc9,0x00]
153 ; SKX-NEXT:    vblendmps %ymm0, %ymm1, %ymm0 {%k1} ## encoding: [0x62,0xf2,0x75,0x29,0x65,0xc0]
154 ; SKX-NEXT:    retq ## encoding: [0xc3]
155
156   %mask = fcmp oeq <8 x float> %x, %y
157   %max = select <8 x i1> %mask, <8 x float> %x, <8 x float> %y
158   ret <8 x float> %max
159 }
160
161 define <8 x i32> @test11_unsigned(<8 x i32> %x, <8 x i32> %y) nounwind {
162 ; AVX512-LABEL: test11_unsigned:
163 ; AVX512:       ## %bb.0:
164 ; AVX512-NEXT:    vpmaxud %ymm1, %ymm0, %ymm0 ## encoding: [0xc4,0xe2,0x7d,0x3f,0xc1]
165 ; AVX512-NEXT:    retq ## encoding: [0xc3]
166 ;
167 ; SKX-LABEL: test11_unsigned:
168 ; SKX:       ## %bb.0:
169 ; SKX-NEXT:    vpmaxud %ymm1, %ymm0, %ymm0 ## EVEX TO VEX Compression encoding: [0xc4,0xe2,0x7d,0x3f,0xc1]
170 ; SKX-NEXT:    retq ## encoding: [0xc3]
171   %mask = icmp ugt <8 x i32> %x, %y
172   %max = select <8 x i1> %mask, <8 x i32> %x, <8 x i32> %y
173   ret <8 x i32> %max
174 }
175
176 define i16 @test12(<16 x i64> %a, <16 x i64> %b) nounwind {
177 ; KNL-LABEL: test12:
178 ; KNL:       ## %bb.0:
179 ; KNL-NEXT:    vpcmpeqq %zmm2, %zmm0, %k0 ## encoding: [0x62,0xf2,0xfd,0x48,0x29,0xc2]
180 ; KNL-NEXT:    vpcmpeqq %zmm3, %zmm1, %k1 ## encoding: [0x62,0xf2,0xf5,0x48,0x29,0xcb]
181 ; KNL-NEXT:    kunpckbw %k0, %k1, %k0 ## encoding: [0xc5,0xf5,0x4b,0xc0]
182 ; KNL-NEXT:    kmovw %k0, %eax ## encoding: [0xc5,0xf8,0x93,0xc0]
183 ; KNL-NEXT:    ## kill: def $ax killed $ax killed $eax
184 ; KNL-NEXT:    vzeroupper ## encoding: [0xc5,0xf8,0x77]
185 ; KNL-NEXT:    retq ## encoding: [0xc3]
186 ;
187 ; AVX512BW-LABEL: test12:
188 ; AVX512BW:       ## %bb.0:
189 ; AVX512BW-NEXT:    vpcmpeqq %zmm2, %zmm0, %k0 ## encoding: [0x62,0xf2,0xfd,0x48,0x29,0xc2]
190 ; AVX512BW-NEXT:    vpcmpeqq %zmm3, %zmm1, %k1 ## encoding: [0x62,0xf2,0xf5,0x48,0x29,0xcb]
191 ; AVX512BW-NEXT:    kunpckbw %k0, %k1, %k0 ## encoding: [0xc5,0xf5,0x4b,0xc0]
192 ; AVX512BW-NEXT:    kmovd %k0, %eax ## encoding: [0xc5,0xfb,0x93,0xc0]
193 ; AVX512BW-NEXT:    ## kill: def $ax killed $ax killed $eax
194 ; AVX512BW-NEXT:    vzeroupper ## encoding: [0xc5,0xf8,0x77]
195 ; AVX512BW-NEXT:    retq ## encoding: [0xc3]
196 ;
197 ; SKX-LABEL: test12:
198 ; SKX:       ## %bb.0:
199 ; SKX-NEXT:    vpcmpeqq %zmm2, %zmm0, %k0 ## encoding: [0x62,0xf2,0xfd,0x48,0x29,0xc2]
200 ; SKX-NEXT:    vpcmpeqq %zmm3, %zmm1, %k1 ## encoding: [0x62,0xf2,0xf5,0x48,0x29,0xcb]
201 ; SKX-NEXT:    kunpckbw %k0, %k1, %k0 ## encoding: [0xc5,0xf5,0x4b,0xc0]
202 ; SKX-NEXT:    kmovd %k0, %eax ## encoding: [0xc5,0xfb,0x93,0xc0]
203 ; SKX-NEXT:    ## kill: def $ax killed $ax killed $eax
204 ; SKX-NEXT:    vzeroupper ## encoding: [0xc5,0xf8,0x77]
205 ; SKX-NEXT:    retq ## encoding: [0xc3]
206   %res = icmp eq <16 x i64> %a, %b
207   %res1 = bitcast <16 x i1> %res to i16
208   ret i16 %res1
209 }
210
211 define i32 @test12_v32i32(<32 x i32> %a, <32 x i32> %b) nounwind {
212 ; KNL-LABEL: test12_v32i32:
213 ; KNL:       ## %bb.0:
214 ; KNL-NEXT:    vpcmpeqd %zmm2, %zmm0, %k0 ## encoding: [0x62,0xf1,0x7d,0x48,0x76,0xc2]
215 ; KNL-NEXT:    kmovw %k0, %ecx ## encoding: [0xc5,0xf8,0x93,0xc8]
216 ; KNL-NEXT:    vpcmpeqd %zmm3, %zmm1, %k0 ## encoding: [0x62,0xf1,0x75,0x48,0x76,0xc3]
217 ; KNL-NEXT:    kmovw %k0, %eax ## encoding: [0xc5,0xf8,0x93,0xc0]
218 ; KNL-NEXT:    shll $16, %eax ## encoding: [0xc1,0xe0,0x10]
219 ; KNL-NEXT:    orl %ecx, %eax ## encoding: [0x09,0xc8]
220 ; KNL-NEXT:    vzeroupper ## encoding: [0xc5,0xf8,0x77]
221 ; KNL-NEXT:    retq ## encoding: [0xc3]
222 ;
223 ; AVX512BW-LABEL: test12_v32i32:
224 ; AVX512BW:       ## %bb.0:
225 ; AVX512BW-NEXT:    vpcmpeqd %zmm2, %zmm0, %k0 ## encoding: [0x62,0xf1,0x7d,0x48,0x76,0xc2]
226 ; AVX512BW-NEXT:    vpcmpeqd %zmm3, %zmm1, %k1 ## encoding: [0x62,0xf1,0x75,0x48,0x76,0xcb]
227 ; AVX512BW-NEXT:    kunpckwd %k0, %k1, %k0 ## encoding: [0xc5,0xf4,0x4b,0xc0]
228 ; AVX512BW-NEXT:    kmovd %k0, %eax ## encoding: [0xc5,0xfb,0x93,0xc0]
229 ; AVX512BW-NEXT:    vzeroupper ## encoding: [0xc5,0xf8,0x77]
230 ; AVX512BW-NEXT:    retq ## encoding: [0xc3]
231 ;
232 ; SKX-LABEL: test12_v32i32:
233 ; SKX:       ## %bb.0:
234 ; SKX-NEXT:    vpcmpeqd %zmm2, %zmm0, %k0 ## encoding: [0x62,0xf1,0x7d,0x48,0x76,0xc2]
235 ; SKX-NEXT:    vpcmpeqd %zmm3, %zmm1, %k1 ## encoding: [0x62,0xf1,0x75,0x48,0x76,0xcb]
236 ; SKX-NEXT:    kunpckwd %k0, %k1, %k0 ## encoding: [0xc5,0xf4,0x4b,0xc0]
237 ; SKX-NEXT:    kmovd %k0, %eax ## encoding: [0xc5,0xfb,0x93,0xc0]
238 ; SKX-NEXT:    vzeroupper ## encoding: [0xc5,0xf8,0x77]
239 ; SKX-NEXT:    retq ## encoding: [0xc3]
240   %res = icmp eq <32 x i32> %a, %b
241   %res1 = bitcast <32 x i1> %res to i32
242   ret i32 %res1
243 }
244
245 define i64 @test12_v64i16(<64 x i16> %a, <64 x i16> %b) nounwind {
246 ; KNL-LABEL: test12_v64i16:
247 ; KNL:       ## %bb.0:
248 ; KNL-NEXT:    vpcmpeqw %ymm4, %ymm0, %ymm0 ## encoding: [0xc5,0xfd,0x75,0xc4]
249 ; KNL-NEXT:    vpmovsxwd %ymm0, %zmm0 ## encoding: [0x62,0xf2,0x7d,0x48,0x23,0xc0]
250 ; KNL-NEXT:    vptestmd %zmm0, %zmm0, %k0 ## encoding: [0x62,0xf2,0x7d,0x48,0x27,0xc0]
251 ; KNL-NEXT:    kmovw %k0, %eax ## encoding: [0xc5,0xf8,0x93,0xc0]
252 ; KNL-NEXT:    vpcmpeqw %ymm5, %ymm1, %ymm0 ## encoding: [0xc5,0xf5,0x75,0xc5]
253 ; KNL-NEXT:    vpmovsxwd %ymm0, %zmm0 ## encoding: [0x62,0xf2,0x7d,0x48,0x23,0xc0]
254 ; KNL-NEXT:    vptestmd %zmm0, %zmm0, %k0 ## encoding: [0x62,0xf2,0x7d,0x48,0x27,0xc0]
255 ; KNL-NEXT:    kmovw %k0, %ecx ## encoding: [0xc5,0xf8,0x93,0xc8]
256 ; KNL-NEXT:    shll $16, %ecx ## encoding: [0xc1,0xe1,0x10]
257 ; KNL-NEXT:    orl %eax, %ecx ## encoding: [0x09,0xc1]
258 ; KNL-NEXT:    vpcmpeqw %ymm6, %ymm2, %ymm0 ## encoding: [0xc5,0xed,0x75,0xc6]
259 ; KNL-NEXT:    vpmovsxwd %ymm0, %zmm0 ## encoding: [0x62,0xf2,0x7d,0x48,0x23,0xc0]
260 ; KNL-NEXT:    vptestmd %zmm0, %zmm0, %k0 ## encoding: [0x62,0xf2,0x7d,0x48,0x27,0xc0]
261 ; KNL-NEXT:    kmovw %k0, %edx ## encoding: [0xc5,0xf8,0x93,0xd0]
262 ; KNL-NEXT:    vpcmpeqw %ymm7, %ymm3, %ymm0 ## encoding: [0xc5,0xe5,0x75,0xc7]
263 ; KNL-NEXT:    vpmovsxwd %ymm0, %zmm0 ## encoding: [0x62,0xf2,0x7d,0x48,0x23,0xc0]
264 ; KNL-NEXT:    vptestmd %zmm0, %zmm0, %k0 ## encoding: [0x62,0xf2,0x7d,0x48,0x27,0xc0]
265 ; KNL-NEXT:    kmovw %k0, %eax ## encoding: [0xc5,0xf8,0x93,0xc0]
266 ; KNL-NEXT:    shll $16, %eax ## encoding: [0xc1,0xe0,0x10]
267 ; KNL-NEXT:    orl %edx, %eax ## encoding: [0x09,0xd0]
268 ; KNL-NEXT:    shlq $32, %rax ## encoding: [0x48,0xc1,0xe0,0x20]
269 ; KNL-NEXT:    orq %rcx, %rax ## encoding: [0x48,0x09,0xc8]
270 ; KNL-NEXT:    vzeroupper ## encoding: [0xc5,0xf8,0x77]
271 ; KNL-NEXT:    retq ## encoding: [0xc3]
272 ;
273 ; AVX512BW-LABEL: test12_v64i16:
274 ; AVX512BW:       ## %bb.0:
275 ; AVX512BW-NEXT:    vpcmpeqw %zmm2, %zmm0, %k0 ## encoding: [0x62,0xf1,0x7d,0x48,0x75,0xc2]
276 ; AVX512BW-NEXT:    vpcmpeqw %zmm3, %zmm1, %k1 ## encoding: [0x62,0xf1,0x75,0x48,0x75,0xcb]
277 ; AVX512BW-NEXT:    kunpckdq %k0, %k1, %k0 ## encoding: [0xc4,0xe1,0xf4,0x4b,0xc0]
278 ; AVX512BW-NEXT:    kmovq %k0, %rax ## encoding: [0xc4,0xe1,0xfb,0x93,0xc0]
279 ; AVX512BW-NEXT:    vzeroupper ## encoding: [0xc5,0xf8,0x77]
280 ; AVX512BW-NEXT:    retq ## encoding: [0xc3]
281 ;
282 ; SKX-LABEL: test12_v64i16:
283 ; SKX:       ## %bb.0:
284 ; SKX-NEXT:    vpcmpeqw %zmm2, %zmm0, %k0 ## encoding: [0x62,0xf1,0x7d,0x48,0x75,0xc2]
285 ; SKX-NEXT:    vpcmpeqw %zmm3, %zmm1, %k1 ## encoding: [0x62,0xf1,0x75,0x48,0x75,0xcb]
286 ; SKX-NEXT:    kunpckdq %k0, %k1, %k0 ## encoding: [0xc4,0xe1,0xf4,0x4b,0xc0]
287 ; SKX-NEXT:    kmovq %k0, %rax ## encoding: [0xc4,0xe1,0xfb,0x93,0xc0]
288 ; SKX-NEXT:    vzeroupper ## encoding: [0xc5,0xf8,0x77]
289 ; SKX-NEXT:    retq ## encoding: [0xc3]
290   %res = icmp eq <64 x i16> %a, %b
291   %res1 = bitcast <64 x i1> %res to i64
292   ret i64 %res1
293 }
294
295 define <16 x i32> @test13(<16 x float>%a, <16 x float>%b)
296 ; AVX512-LABEL: test13:
297 ; AVX512:       ## %bb.0:
298 ; AVX512-NEXT:    vcmpeqps %zmm1, %zmm0, %k1 ## encoding: [0x62,0xf1,0x7c,0x48,0xc2,0xc9,0x00]
299 ; AVX512-NEXT:    vpternlogd $255, %zmm0, %zmm0, %zmm0 {%k1} {z} ## encoding: [0x62,0xf3,0x7d,0xc9,0x25,0xc0,0xff]
300 ; AVX512-NEXT:    vpsrld $31, %zmm0, %zmm0 ## encoding: [0x62,0xf1,0x7d,0x48,0x72,0xd0,0x1f]
301 ; AVX512-NEXT:    retq ## encoding: [0xc3]
302 ;
303 ; SKX-LABEL: test13:
304 ; SKX:       ## %bb.0:
305 ; SKX-NEXT:    vcmpeqps %zmm1, %zmm0, %k0 ## encoding: [0x62,0xf1,0x7c,0x48,0xc2,0xc1,0x00]
306 ; SKX-NEXT:    vpmovm2d %k0, %zmm0 ## encoding: [0x62,0xf2,0x7e,0x48,0x38,0xc0]
307 ; SKX-NEXT:    vpsrld $31, %zmm0, %zmm0 ## encoding: [0x62,0xf1,0x7d,0x48,0x72,0xd0,0x1f]
308 ; SKX-NEXT:    retq ## encoding: [0xc3]
309 {
310   %cmpvector_i = fcmp oeq <16 x float> %a, %b
311   %conv = zext <16 x i1> %cmpvector_i to <16 x i32>
312   ret <16 x i32> %conv
313 }
314
315 define <16 x i32> @test14(<16 x i32>%a, <16 x i32>%b) {
316 ; CHECK-LABEL: test14:
317 ; CHECK:       ## %bb.0:
318 ; CHECK-NEXT:    vpsubd %zmm1, %zmm0, %zmm2 ## encoding: [0x62,0xf1,0x7d,0x48,0xfa,0xd1]
319 ; CHECK-NEXT:    vpcmpgtd %zmm0, %zmm2, %k1 ## encoding: [0x62,0xf1,0x6d,0x48,0x66,0xc8]
320 ; CHECK-NEXT:    vpsubd %zmm1, %zmm0, %zmm0 {%k1} {z} ## encoding: [0x62,0xf1,0x7d,0xc9,0xfa,0xc1]
321 ; CHECK-NEXT:    retq ## encoding: [0xc3]
322   %sub_r = sub <16 x i32> %a, %b
323   %cmp.i2.i = icmp sgt <16 x i32> %sub_r, %a
324   %sext.i3.i = sext <16 x i1> %cmp.i2.i to <16 x i32>
325   %mask = icmp eq <16 x i32> %sext.i3.i, zeroinitializer
326   %res = select <16 x i1> %mask, <16 x i32> zeroinitializer, <16 x i32> %sub_r
327   ret <16 x i32>%res
328 }
329
330 define <8 x i64> @test15(<8 x i64>%a, <8 x i64>%b) {
331 ; CHECK-LABEL: test15:
332 ; CHECK:       ## %bb.0:
333 ; CHECK-NEXT:    vpsubq %zmm1, %zmm0, %zmm2 ## encoding: [0x62,0xf1,0xfd,0x48,0xfb,0xd1]
334 ; CHECK-NEXT:    vpcmpgtq %zmm0, %zmm2, %k1 ## encoding: [0x62,0xf2,0xed,0x48,0x37,0xc8]
335 ; CHECK-NEXT:    vpsubq %zmm1, %zmm0, %zmm0 {%k1} {z} ## encoding: [0x62,0xf1,0xfd,0xc9,0xfb,0xc1]
336 ; CHECK-NEXT:    retq ## encoding: [0xc3]
337   %sub_r = sub <8 x i64> %a, %b
338   %cmp.i2.i = icmp sgt <8 x i64> %sub_r, %a
339   %sext.i3.i = sext <8 x i1> %cmp.i2.i to <8 x i64>
340   %mask = icmp eq <8 x i64> %sext.i3.i, zeroinitializer
341   %res = select <8 x i1> %mask, <8 x i64> zeroinitializer, <8 x i64> %sub_r
342   ret <8 x i64>%res
343 }
344
345 define <16 x i32> @test16(<16 x i32> %x, <16 x i32> %y, <16 x i32> %x1) nounwind {
346 ; CHECK-LABEL: test16:
347 ; CHECK:       ## %bb.0:
348 ; CHECK-NEXT:    vpcmpnltd %zmm1, %zmm0, %k1 ## encoding: [0x62,0xf3,0x7d,0x48,0x1f,0xc9,0x05]
349 ; CHECK-NEXT:    vpblendmd %zmm2, %zmm1, %zmm0 {%k1} ## encoding: [0x62,0xf2,0x75,0x49,0x64,0xc2]
350 ; CHECK-NEXT:    retq ## encoding: [0xc3]
351   %mask = icmp sge <16 x i32> %x, %y
352   %max = select <16 x i1> %mask, <16 x i32> %x1, <16 x i32> %y
353   ret <16 x i32> %max
354 }
355
356 define <16 x i32> @test17(<16 x i32> %x, <16 x i32> %x1, <16 x i32>* %y.ptr) nounwind {
357 ; CHECK-LABEL: test17:
358 ; CHECK:       ## %bb.0:
359 ; CHECK-NEXT:    vpcmpgtd (%rdi), %zmm0, %k1 ## encoding: [0x62,0xf1,0x7d,0x48,0x66,0x0f]
360 ; CHECK-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1} ## encoding: [0x62,0xf2,0x75,0x49,0x64,0xc0]
361 ; CHECK-NEXT:    retq ## encoding: [0xc3]
362   %y = load <16 x i32>, <16 x i32>* %y.ptr, align 4
363   %mask = icmp sgt <16 x i32> %x, %y
364   %max = select <16 x i1> %mask, <16 x i32> %x, <16 x i32> %x1
365   ret <16 x i32> %max
366 }
367
368 define <16 x i32> @test18(<16 x i32> %x, <16 x i32> %x1, <16 x i32>* %y.ptr) nounwind {
369 ; CHECK-LABEL: test18:
370 ; CHECK:       ## %bb.0:
371 ; CHECK-NEXT:    vpcmpled (%rdi), %zmm0, %k1 ## encoding: [0x62,0xf3,0x7d,0x48,0x1f,0x0f,0x02]
372 ; CHECK-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1} ## encoding: [0x62,0xf2,0x75,0x49,0x64,0xc0]
373 ; CHECK-NEXT:    retq ## encoding: [0xc3]
374   %y = load <16 x i32>, <16 x i32>* %y.ptr, align 4
375   %mask = icmp sle <16 x i32> %x, %y
376   %max = select <16 x i1> %mask, <16 x i32> %x, <16 x i32> %x1
377   ret <16 x i32> %max
378 }
379
380 define <16 x i32> @test19(<16 x i32> %x, <16 x i32> %x1, <16 x i32>* %y.ptr) nounwind {
381 ; CHECK-LABEL: test19:
382 ; CHECK:       ## %bb.0:
383 ; CHECK-NEXT:    vpcmpleud (%rdi), %zmm0, %k1 ## encoding: [0x62,0xf3,0x7d,0x48,0x1e,0x0f,0x02]
384 ; CHECK-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1} ## encoding: [0x62,0xf2,0x75,0x49,0x64,0xc0]
385 ; CHECK-NEXT:    retq ## encoding: [0xc3]
386   %y = load <16 x i32>, <16 x i32>* %y.ptr, align 4
387   %mask = icmp ule <16 x i32> %x, %y
388   %max = select <16 x i1> %mask, <16 x i32> %x, <16 x i32> %x1
389   ret <16 x i32> %max
390 }
391
392 define <16 x i32> @test20(<16 x i32> %x, <16 x i32> %y, <16 x i32> %x1, <16 x i32> %y1) nounwind {
393 ; CHECK-LABEL: test20:
394 ; CHECK:       ## %bb.0:
395 ; CHECK-NEXT:    vpcmpeqd %zmm1, %zmm0, %k1 ## encoding: [0x62,0xf1,0x7d,0x48,0x76,0xc9]
396 ; CHECK-NEXT:    vpcmpeqd %zmm3, %zmm2, %k1 {%k1} ## encoding: [0x62,0xf1,0x6d,0x49,0x76,0xcb]
397 ; CHECK-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1} ## encoding: [0x62,0xf2,0x75,0x49,0x64,0xc0]
398 ; CHECK-NEXT:    retq ## encoding: [0xc3]
399   %mask1 = icmp eq <16 x i32> %x1, %y1
400   %mask0 = icmp eq <16 x i32> %x, %y
401   %mask = select <16 x i1> %mask0, <16 x i1> %mask1, <16 x i1> zeroinitializer
402   %max = select <16 x i1> %mask, <16 x i32> %x, <16 x i32> %y
403   ret <16 x i32> %max
404 }
405
406 define <8 x i64> @test21(<8 x i64> %x, <8 x i64> %y, <8 x i64> %x1, <8 x i64> %y1) nounwind {
407 ; CHECK-LABEL: test21:
408 ; CHECK:       ## %bb.0:
409 ; CHECK-NEXT:    vpcmpleq %zmm1, %zmm0, %k1 ## encoding: [0x62,0xf3,0xfd,0x48,0x1f,0xc9,0x02]
410 ; CHECK-NEXT:    vpcmpnltq %zmm3, %zmm2, %k1 {%k1} ## encoding: [0x62,0xf3,0xed,0x49,0x1f,0xcb,0x05]
411 ; CHECK-NEXT:    vpblendmq %zmm0, %zmm2, %zmm0 {%k1} ## encoding: [0x62,0xf2,0xed,0x49,0x64,0xc0]
412 ; CHECK-NEXT:    retq ## encoding: [0xc3]
413   %mask1 = icmp sge <8 x i64> %x1, %y1
414   %mask0 = icmp sle <8 x i64> %x, %y
415   %mask = select <8 x i1> %mask0, <8 x i1> %mask1, <8 x i1> zeroinitializer
416   %max = select <8 x i1> %mask, <8 x i64> %x, <8 x i64> %x1
417   ret <8 x i64> %max
418 }
419
420 define <8 x i64> @test22(<8 x i64> %x, <8 x i64>* %y.ptr, <8 x i64> %x1, <8 x i64> %y1) nounwind {
421 ; CHECK-LABEL: test22:
422 ; CHECK:       ## %bb.0:
423 ; CHECK-NEXT:    vpcmpgtq %zmm2, %zmm1, %k1 ## encoding: [0x62,0xf2,0xf5,0x48,0x37,0xca]
424 ; CHECK-NEXT:    vpcmpgtq (%rdi), %zmm0, %k1 {%k1} ## encoding: [0x62,0xf2,0xfd,0x49,0x37,0x0f]
425 ; CHECK-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1} ## encoding: [0x62,0xf2,0xf5,0x49,0x64,0xc0]
426 ; CHECK-NEXT:    retq ## encoding: [0xc3]
427   %mask1 = icmp sgt <8 x i64> %x1, %y1
428   %y = load <8 x i64>, <8 x i64>* %y.ptr, align 4
429   %mask0 = icmp sgt <8 x i64> %x, %y
430   %mask = select <8 x i1> %mask0, <8 x i1> %mask1, <8 x i1> zeroinitializer
431   %max = select <8 x i1> %mask, <8 x i64> %x, <8 x i64> %x1
432   ret <8 x i64> %max
433 }
434
435 define <16 x i32> @test23(<16 x i32> %x, <16 x i32>* %y.ptr, <16 x i32> %x1, <16 x i32> %y1) nounwind {
436 ; CHECK-LABEL: test23:
437 ; CHECK:       ## %bb.0:
438 ; CHECK-NEXT:    vpcmpnltd %zmm2, %zmm1, %k1 ## encoding: [0x62,0xf3,0x75,0x48,0x1f,0xca,0x05]
439 ; CHECK-NEXT:    vpcmpleud (%rdi), %zmm0, %k1 {%k1} ## encoding: [0x62,0xf3,0x7d,0x49,0x1e,0x0f,0x02]
440 ; CHECK-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1} ## encoding: [0x62,0xf2,0x75,0x49,0x64,0xc0]
441 ; CHECK-NEXT:    retq ## encoding: [0xc3]
442   %mask1 = icmp sge <16 x i32> %x1, %y1
443   %y = load <16 x i32>, <16 x i32>* %y.ptr, align 4
444   %mask0 = icmp ule <16 x i32> %x, %y
445   %mask = select <16 x i1> %mask0, <16 x i1> %mask1, <16 x i1> zeroinitializer
446   %max = select <16 x i1> %mask, <16 x i32> %x, <16 x i32> %x1
447   ret <16 x i32> %max
448 }
449
450 define <8 x i64> @test24(<8 x i64> %x, <8 x i64> %x1, i64* %yb.ptr) nounwind {
451 ; CHECK-LABEL: test24:
452 ; CHECK:       ## %bb.0:
453 ; CHECK-NEXT:    vpcmpeqq (%rdi){1to8}, %zmm0, %k1 ## encoding: [0x62,0xf2,0xfd,0x58,0x29,0x0f]
454 ; CHECK-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1} ## encoding: [0x62,0xf2,0xf5,0x49,0x64,0xc0]
455 ; CHECK-NEXT:    retq ## encoding: [0xc3]
456   %yb = load i64, i64* %yb.ptr, align 4
457   %y.0 = insertelement <8 x i64> undef, i64 %yb, i32 0
458   %y = shufflevector <8 x i64> %y.0, <8 x i64> undef, <8 x i32> zeroinitializer
459   %mask = icmp eq <8 x i64> %x, %y
460   %max = select <8 x i1> %mask, <8 x i64> %x, <8 x i64> %x1
461   ret <8 x i64> %max
462 }
463
464 define <16 x i32> @test25(<16 x i32> %x, i32* %yb.ptr, <16 x i32> %x1) nounwind {
465 ; CHECK-LABEL: test25:
466 ; CHECK:       ## %bb.0:
467 ; CHECK-NEXT:    vpcmpled (%rdi){1to16}, %zmm0, %k1 ## encoding: [0x62,0xf3,0x7d,0x58,0x1f,0x0f,0x02]
468 ; CHECK-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1} ## encoding: [0x62,0xf2,0x75,0x49,0x64,0xc0]
469 ; CHECK-NEXT:    retq ## encoding: [0xc3]
470   %yb = load i32, i32* %yb.ptr, align 4
471   %y.0 = insertelement <16 x i32> undef, i32 %yb, i32 0
472   %y = shufflevector <16 x i32> %y.0, <16 x i32> undef, <16 x i32> zeroinitializer
473   %mask = icmp sle <16 x i32> %x, %y
474   %max = select <16 x i1> %mask, <16 x i32> %x, <16 x i32> %x1
475   ret <16 x i32> %max
476 }
477
478 define <16 x i32> @test26(<16 x i32> %x, i32* %yb.ptr, <16 x i32> %x1, <16 x i32> %y1) nounwind {
479 ; CHECK-LABEL: test26:
480 ; CHECK:       ## %bb.0:
481 ; CHECK-NEXT:    vpcmpnltd %zmm2, %zmm1, %k1 ## encoding: [0x62,0xf3,0x75,0x48,0x1f,0xca,0x05]
482 ; CHECK-NEXT:    vpcmpgtd (%rdi){1to16}, %zmm0, %k1 {%k1} ## encoding: [0x62,0xf1,0x7d,0x59,0x66,0x0f]
483 ; CHECK-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1} ## encoding: [0x62,0xf2,0x75,0x49,0x64,0xc0]
484 ; CHECK-NEXT:    retq ## encoding: [0xc3]
485   %mask1 = icmp sge <16 x i32> %x1, %y1
486   %yb = load i32, i32* %yb.ptr, align 4
487   %y.0 = insertelement <16 x i32> undef, i32 %yb, i32 0
488   %y = shufflevector <16 x i32> %y.0, <16 x i32> undef, <16 x i32> zeroinitializer
489   %mask0 = icmp sgt <16 x i32> %x, %y
490   %mask = select <16 x i1> %mask0, <16 x i1> %mask1, <16 x i1> zeroinitializer
491   %max = select <16 x i1> %mask, <16 x i32> %x, <16 x i32> %x1
492   ret <16 x i32> %max
493 }
494
495 define <8 x i64> @test27(<8 x i64> %x, i64* %yb.ptr, <8 x i64> %x1, <8 x i64> %y1) nounwind {
496 ; CHECK-LABEL: test27:
497 ; CHECK:       ## %bb.0:
498 ; CHECK-NEXT:    vpcmpnltq %zmm2, %zmm1, %k1 ## encoding: [0x62,0xf3,0xf5,0x48,0x1f,0xca,0x05]
499 ; CHECK-NEXT:    vpcmpleq (%rdi){1to8}, %zmm0, %k1 {%k1} ## encoding: [0x62,0xf3,0xfd,0x59,0x1f,0x0f,0x02]
500 ; CHECK-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1} ## encoding: [0x62,0xf2,0xf5,0x49,0x64,0xc0]
501 ; CHECK-NEXT:    retq ## encoding: [0xc3]
502   %mask1 = icmp sge <8 x i64> %x1, %y1
503   %yb = load i64, i64* %yb.ptr, align 4
504   %y.0 = insertelement <8 x i64> undef, i64 %yb, i32 0
505   %y = shufflevector <8 x i64> %y.0, <8 x i64> undef, <8 x i32> zeroinitializer
506   %mask0 = icmp sle <8 x i64> %x, %y
507   %mask = select <8 x i1> %mask0, <8 x i1> %mask1, <8 x i1> zeroinitializer
508   %max = select <8 x i1> %mask, <8 x i64> %x, <8 x i64> %x1
509   ret <8 x i64> %max
510 }
511
512 define <8 x i32>@test28(<8 x i64> %x, <8 x i64> %y, <8 x i64> %x1, <8 x i64> %y1) {
513 ; AVX512-LABEL: test28:
514 ; AVX512:       ## %bb.0:
515 ; AVX512-NEXT:    vpcmpgtq %zmm1, %zmm0, %k0 ## encoding: [0x62,0xf2,0xfd,0x48,0x37,0xc1]
516 ; AVX512-NEXT:    vpcmpgtq %zmm3, %zmm2, %k1 ## encoding: [0x62,0xf2,0xed,0x48,0x37,0xcb]
517 ; AVX512-NEXT:    kxnorw %k1, %k0, %k1 ## encoding: [0xc5,0xfc,0x46,0xc9]
518 ; AVX512-NEXT:    vpternlogd $255, %zmm0, %zmm0, %zmm0 {%k1} {z} ## encoding: [0x62,0xf3,0x7d,0xc9,0x25,0xc0,0xff]
519 ; AVX512-NEXT:    ## kill: def $ymm0 killed $ymm0 killed $zmm0
520 ; AVX512-NEXT:    retq ## encoding: [0xc3]
521 ;
522 ; SKX-LABEL: test28:
523 ; SKX:       ## %bb.0:
524 ; SKX-NEXT:    vpcmpgtq %zmm1, %zmm0, %k0 ## encoding: [0x62,0xf2,0xfd,0x48,0x37,0xc1]
525 ; SKX-NEXT:    vpcmpgtq %zmm3, %zmm2, %k1 ## encoding: [0x62,0xf2,0xed,0x48,0x37,0xcb]
526 ; SKX-NEXT:    kxnorb %k1, %k0, %k0 ## encoding: [0xc5,0xfd,0x46,0xc1]
527 ; SKX-NEXT:    vpmovm2d %k0, %ymm0 ## encoding: [0x62,0xf2,0x7e,0x28,0x38,0xc0]
528 ; SKX-NEXT:    retq ## encoding: [0xc3]
529   %x_gt_y = icmp sgt <8 x i64> %x, %y
530   %x1_gt_y1 = icmp sgt <8 x i64> %x1, %y1
531   %res = icmp eq <8 x i1>%x_gt_y, %x1_gt_y1
532   %resse = sext <8 x i1>%res to <8 x i32>
533   ret <8 x i32> %resse
534 }
535
536 define <16 x i8>@test29(<16 x i32> %x, <16 x i32> %y, <16 x i32> %x1, <16 x i32> %y1) {
537 ; KNL-LABEL: test29:
538 ; KNL:       ## %bb.0:
539 ; KNL-NEXT:    vpcmpgtd %zmm1, %zmm0, %k0 ## encoding: [0x62,0xf1,0x7d,0x48,0x66,0xc1]
540 ; KNL-NEXT:    vpcmpgtd %zmm3, %zmm2, %k1 ## encoding: [0x62,0xf1,0x6d,0x48,0x66,0xcb]
541 ; KNL-NEXT:    kxorw %k1, %k0, %k1 ## encoding: [0xc5,0xfc,0x47,0xc9]
542 ; KNL-NEXT:    vpternlogd $255, %zmm0, %zmm0, %zmm0 {%k1} {z} ## encoding: [0x62,0xf3,0x7d,0xc9,0x25,0xc0,0xff]
543 ; KNL-NEXT:    vpmovdb %zmm0, %xmm0 ## encoding: [0x62,0xf2,0x7e,0x48,0x31,0xc0]
544 ; KNL-NEXT:    vzeroupper ## encoding: [0xc5,0xf8,0x77]
545 ; KNL-NEXT:    retq ## encoding: [0xc3]
546 ;
547 ; AVX512BW-LABEL: test29:
548 ; AVX512BW:       ## %bb.0:
549 ; AVX512BW-NEXT:    vpcmpgtd %zmm1, %zmm0, %k0 ## encoding: [0x62,0xf1,0x7d,0x48,0x66,0xc1]
550 ; AVX512BW-NEXT:    vpcmpgtd %zmm3, %zmm2, %k1 ## encoding: [0x62,0xf1,0x6d,0x48,0x66,0xcb]
551 ; AVX512BW-NEXT:    kxorw %k1, %k0, %k0 ## encoding: [0xc5,0xfc,0x47,0xc1]
552 ; AVX512BW-NEXT:    vpmovm2b %k0, %zmm0 ## encoding: [0x62,0xf2,0x7e,0x48,0x28,0xc0]
553 ; AVX512BW-NEXT:    ## kill: def $xmm0 killed $xmm0 killed $zmm0
554 ; AVX512BW-NEXT:    vzeroupper ## encoding: [0xc5,0xf8,0x77]
555 ; AVX512BW-NEXT:    retq ## encoding: [0xc3]
556 ;
557 ; SKX-LABEL: test29:
558 ; SKX:       ## %bb.0:
559 ; SKX-NEXT:    vpcmpgtd %zmm1, %zmm0, %k0 ## encoding: [0x62,0xf1,0x7d,0x48,0x66,0xc1]
560 ; SKX-NEXT:    vpcmpgtd %zmm3, %zmm2, %k1 ## encoding: [0x62,0xf1,0x6d,0x48,0x66,0xcb]
561 ; SKX-NEXT:    kxorw %k1, %k0, %k0 ## encoding: [0xc5,0xfc,0x47,0xc1]
562 ; SKX-NEXT:    vpmovm2b %k0, %xmm0 ## encoding: [0x62,0xf2,0x7e,0x08,0x28,0xc0]
563 ; SKX-NEXT:    vzeroupper ## encoding: [0xc5,0xf8,0x77]
564 ; SKX-NEXT:    retq ## encoding: [0xc3]
565   %x_gt_y = icmp sgt <16 x i32> %x, %y
566   %x1_gt_y1 = icmp sgt <16 x i32> %x1, %y1
567   %res = icmp ne <16 x i1>%x_gt_y, %x1_gt_y1
568   %resse = sext <16 x i1>%res to <16 x i8>
569   ret <16 x i8> %resse
570 }
571
572 define <4 x double> @test30(<4 x double> %x, <4 x double> %y) nounwind {
573 ; AVX512-LABEL: test30:
574 ; AVX512:       ## %bb.0:
575 ; AVX512-NEXT:    ## kill: def $ymm1 killed $ymm1 def $zmm1
576 ; AVX512-NEXT:    ## kill: def $ymm0 killed $ymm0 def $zmm0
577 ; AVX512-NEXT:    vcmpeqpd %zmm1, %zmm0, %k1 ## encoding: [0x62,0xf1,0xfd,0x48,0xc2,0xc9,0x00]
578 ; AVX512-NEXT:    vblendmpd %zmm0, %zmm1, %zmm0 {%k1} ## encoding: [0x62,0xf2,0xf5,0x49,0x65,0xc0]
579 ; AVX512-NEXT:    ## kill: def $ymm0 killed $ymm0 killed $zmm0
580 ; AVX512-NEXT:    retq ## encoding: [0xc3]
581 ;
582 ; SKX-LABEL: test30:
583 ; SKX:       ## %bb.0:
584 ; SKX-NEXT:    vcmpeqpd %ymm1, %ymm0, %k1 ## encoding: [0x62,0xf1,0xfd,0x28,0xc2,0xc9,0x00]
585 ; SKX-NEXT:    vblendmpd %ymm0, %ymm1, %ymm0 {%k1} ## encoding: [0x62,0xf2,0xf5,0x29,0x65,0xc0]
586 ; SKX-NEXT:    retq ## encoding: [0xc3]
587
588   %mask = fcmp oeq <4 x double> %x, %y
589   %max = select <4 x i1> %mask, <4 x double> %x, <4 x double> %y
590   ret <4 x double> %max
591 }
592
593 define <2 x double> @test31(<2 x double> %x, <2 x double> %x1, <2 x double>* %yp) nounwind {
594 ; AVX512-LABEL: test31:
595 ; AVX512:       ## %bb.0:
596 ; AVX512-NEXT:    ## kill: def $xmm1 killed $xmm1 def $zmm1
597 ; AVX512-NEXT:    ## kill: def $xmm0 killed $xmm0 def $zmm0
598 ; AVX512-NEXT:    vmovupd (%rdi), %xmm2 ## encoding: [0xc5,0xf9,0x10,0x17]
599 ; AVX512-NEXT:    vcmpltpd %zmm2, %zmm0, %k1 ## encoding: [0x62,0xf1,0xfd,0x48,0xc2,0xca,0x01]
600 ; AVX512-NEXT:    vblendmpd %zmm0, %zmm1, %zmm0 {%k1} ## encoding: [0x62,0xf2,0xf5,0x49,0x65,0xc0]
601 ; AVX512-NEXT:    ## kill: def $xmm0 killed $xmm0 killed $zmm0
602 ; AVX512-NEXT:    vzeroupper ## encoding: [0xc5,0xf8,0x77]
603 ; AVX512-NEXT:    retq ## encoding: [0xc3]
604 ;
605 ; SKX-LABEL: test31:
606 ; SKX:       ## %bb.0:
607 ; SKX-NEXT:    vcmpltpd (%rdi), %xmm0, %k1 ## encoding: [0x62,0xf1,0xfd,0x08,0xc2,0x0f,0x01]
608 ; SKX-NEXT:    vblendmpd %xmm0, %xmm1, %xmm0 {%k1} ## encoding: [0x62,0xf2,0xf5,0x09,0x65,0xc0]
609 ; SKX-NEXT:    retq ## encoding: [0xc3]
610
611   %y = load <2 x double>, <2 x double>* %yp, align 4
612   %mask = fcmp olt <2 x double> %x, %y
613   %max = select <2 x i1> %mask, <2 x double> %x, <2 x double> %x1
614   ret <2 x double> %max
615 }
616
617 define <4 x double> @test32(<4 x double> %x, <4 x double> %x1, <4 x double>* %yp) nounwind {
618 ; AVX512-LABEL: test32:
619 ; AVX512:       ## %bb.0:
620 ; AVX512-NEXT:    ## kill: def $ymm1 killed $ymm1 def $zmm1
621 ; AVX512-NEXT:    ## kill: def $ymm0 killed $ymm0 def $zmm0
622 ; AVX512-NEXT:    vmovupd (%rdi), %ymm2 ## encoding: [0xc5,0xfd,0x10,0x17]
623 ; AVX512-NEXT:    vcmpltpd %zmm2, %zmm0, %k1 ## encoding: [0x62,0xf1,0xfd,0x48,0xc2,0xca,0x01]
624 ; AVX512-NEXT:    vblendmpd %zmm0, %zmm1, %zmm0 {%k1} ## encoding: [0x62,0xf2,0xf5,0x49,0x65,0xc0]
625 ; AVX512-NEXT:    ## kill: def $ymm0 killed $ymm0 killed $zmm0
626 ; AVX512-NEXT:    retq ## encoding: [0xc3]
627 ;
628 ; SKX-LABEL: test32:
629 ; SKX:       ## %bb.0:
630 ; SKX-NEXT:    vcmpltpd (%rdi), %ymm0, %k1 ## encoding: [0x62,0xf1,0xfd,0x28,0xc2,0x0f,0x01]
631 ; SKX-NEXT:    vblendmpd %ymm0, %ymm1, %ymm0 {%k1} ## encoding: [0x62,0xf2,0xf5,0x29,0x65,0xc0]
632 ; SKX-NEXT:    retq ## encoding: [0xc3]
633
634   %y = load <4 x double>, <4 x double>* %yp, align 4
635   %mask = fcmp ogt <4 x double> %y, %x
636   %max = select <4 x i1> %mask, <4 x double> %x, <4 x double> %x1
637   ret <4 x double> %max
638 }
639
640 define <8 x double> @test33(<8 x double> %x, <8 x double> %x1, <8 x double>* %yp) nounwind {
641 ; CHECK-LABEL: test33:
642 ; CHECK:       ## %bb.0:
643 ; CHECK-NEXT:    vcmpltpd (%rdi), %zmm0, %k1 ## encoding: [0x62,0xf1,0xfd,0x48,0xc2,0x0f,0x01]
644 ; CHECK-NEXT:    vblendmpd %zmm0, %zmm1, %zmm0 {%k1} ## encoding: [0x62,0xf2,0xf5,0x49,0x65,0xc0]
645 ; CHECK-NEXT:    retq ## encoding: [0xc3]
646   %y = load <8 x double>, <8 x double>* %yp, align 4
647   %mask = fcmp olt <8 x double> %x, %y
648   %max = select <8 x i1> %mask, <8 x double> %x, <8 x double> %x1
649   ret <8 x double> %max
650 }
651
652 define <4 x float> @test34(<4 x float> %x, <4 x float> %x1, <4 x float>* %yp) nounwind {
653 ; AVX512-LABEL: test34:
654 ; AVX512:       ## %bb.0:
655 ; AVX512-NEXT:    ## kill: def $xmm1 killed $xmm1 def $zmm1
656 ; AVX512-NEXT:    ## kill: def $xmm0 killed $xmm0 def $zmm0
657 ; AVX512-NEXT:    vmovups (%rdi), %xmm2 ## encoding: [0xc5,0xf8,0x10,0x17]
658 ; AVX512-NEXT:    vcmpltps %zmm2, %zmm0, %k1 ## encoding: [0x62,0xf1,0x7c,0x48,0xc2,0xca,0x01]
659 ; AVX512-NEXT:    vblendmps %zmm0, %zmm1, %zmm0 {%k1} ## encoding: [0x62,0xf2,0x75,0x49,0x65,0xc0]
660 ; AVX512-NEXT:    ## kill: def $xmm0 killed $xmm0 killed $zmm0
661 ; AVX512-NEXT:    vzeroupper ## encoding: [0xc5,0xf8,0x77]
662 ; AVX512-NEXT:    retq ## encoding: [0xc3]
663 ;
664 ; SKX-LABEL: test34:
665 ; SKX:       ## %bb.0:
666 ; SKX-NEXT:    vcmpltps (%rdi), %xmm0, %k1 ## encoding: [0x62,0xf1,0x7c,0x08,0xc2,0x0f,0x01]
667 ; SKX-NEXT:    vblendmps %xmm0, %xmm1, %xmm0 {%k1} ## encoding: [0x62,0xf2,0x75,0x09,0x65,0xc0]
668 ; SKX-NEXT:    retq ## encoding: [0xc3]
669   %y = load <4 x float>, <4 x float>* %yp, align 4
670   %mask = fcmp olt <4 x float> %x, %y
671   %max = select <4 x i1> %mask, <4 x float> %x, <4 x float> %x1
672   ret <4 x float> %max
673 }
674
675 define <8 x float> @test35(<8 x float> %x, <8 x float> %x1, <8 x float>* %yp) nounwind {
676 ; AVX512-LABEL: test35:
677 ; AVX512:       ## %bb.0:
678 ; AVX512-NEXT:    ## kill: def $ymm1 killed $ymm1 def $zmm1
679 ; AVX512-NEXT:    ## kill: def $ymm0 killed $ymm0 def $zmm0
680 ; AVX512-NEXT:    vmovups (%rdi), %ymm2 ## encoding: [0xc5,0xfc,0x10,0x17]
681 ; AVX512-NEXT:    vcmpltps %zmm2, %zmm0, %k1 ## encoding: [0x62,0xf1,0x7c,0x48,0xc2,0xca,0x01]
682 ; AVX512-NEXT:    vblendmps %zmm0, %zmm1, %zmm0 {%k1} ## encoding: [0x62,0xf2,0x75,0x49,0x65,0xc0]
683 ; AVX512-NEXT:    ## kill: def $ymm0 killed $ymm0 killed $zmm0
684 ; AVX512-NEXT:    retq ## encoding: [0xc3]
685 ;
686 ; SKX-LABEL: test35:
687 ; SKX:       ## %bb.0:
688 ; SKX-NEXT:    vcmpltps (%rdi), %ymm0, %k1 ## encoding: [0x62,0xf1,0x7c,0x28,0xc2,0x0f,0x01]
689 ; SKX-NEXT:    vblendmps %ymm0, %ymm1, %ymm0 {%k1} ## encoding: [0x62,0xf2,0x75,0x29,0x65,0xc0]
690 ; SKX-NEXT:    retq ## encoding: [0xc3]
691
692   %y = load <8 x float>, <8 x float>* %yp, align 4
693   %mask = fcmp ogt <8 x float> %y, %x
694   %max = select <8 x i1> %mask, <8 x float> %x, <8 x float> %x1
695   ret <8 x float> %max
696 }
697
698 define <16 x float> @test36(<16 x float> %x, <16 x float> %x1, <16 x float>* %yp) nounwind {
699 ; CHECK-LABEL: test36:
700 ; CHECK:       ## %bb.0:
701 ; CHECK-NEXT:    vcmpltps (%rdi), %zmm0, %k1 ## encoding: [0x62,0xf1,0x7c,0x48,0xc2,0x0f,0x01]
702 ; CHECK-NEXT:    vblendmps %zmm0, %zmm1, %zmm0 {%k1} ## encoding: [0x62,0xf2,0x75,0x49,0x65,0xc0]
703 ; CHECK-NEXT:    retq ## encoding: [0xc3]
704   %y = load <16 x float>, <16 x float>* %yp, align 4
705   %mask = fcmp olt <16 x float> %x, %y
706   %max = select <16 x i1> %mask, <16 x float> %x, <16 x float> %x1
707   ret <16 x float> %max
708 }
709
710 define <8 x double> @test37(<8 x double> %x, <8 x double> %x1, double* %ptr) nounwind {
711 ; CHECK-LABEL: test37:
712 ; CHECK:       ## %bb.0:
713 ; CHECK-NEXT:    vcmpltpd (%rdi){1to8}, %zmm0, %k1 ## encoding: [0x62,0xf1,0xfd,0x58,0xc2,0x0f,0x01]
714 ; CHECK-NEXT:    vblendmpd %zmm0, %zmm1, %zmm0 {%k1} ## encoding: [0x62,0xf2,0xf5,0x49,0x65,0xc0]
715 ; CHECK-NEXT:    retq ## encoding: [0xc3]
716
717   %a = load double, double* %ptr
718   %v = insertelement <8 x double> undef, double %a, i32 0
719   %shuffle = shufflevector <8 x double> %v, <8 x double> undef, <8 x i32> zeroinitializer
720
721   %mask = fcmp ogt <8 x double> %shuffle, %x
722   %max = select <8 x i1> %mask, <8 x double> %x, <8 x double> %x1
723   ret <8 x double> %max
724 }
725
726 define <4 x double> @test38(<4 x double> %x, <4 x double> %x1, double* %ptr) nounwind {
727 ; AVX512-LABEL: test38:
728 ; AVX512:       ## %bb.0:
729 ; AVX512-NEXT:    ## kill: def $ymm1 killed $ymm1 def $zmm1
730 ; AVX512-NEXT:    ## kill: def $ymm0 killed $ymm0 def $zmm0
731 ; AVX512-NEXT:    vbroadcastsd (%rdi), %ymm2 ## encoding: [0xc4,0xe2,0x7d,0x19,0x17]
732 ; AVX512-NEXT:    vcmpltpd %zmm2, %zmm0, %k1 ## encoding: [0x62,0xf1,0xfd,0x48,0xc2,0xca,0x01]
733 ; AVX512-NEXT:    vblendmpd %zmm0, %zmm1, %zmm0 {%k1} ## encoding: [0x62,0xf2,0xf5,0x49,0x65,0xc0]
734 ; AVX512-NEXT:    ## kill: def $ymm0 killed $ymm0 killed $zmm0
735 ; AVX512-NEXT:    retq ## encoding: [0xc3]
736 ;
737 ; SKX-LABEL: test38:
738 ; SKX:       ## %bb.0:
739 ; SKX-NEXT:    vcmpltpd (%rdi){1to4}, %ymm0, %k1 ## encoding: [0x62,0xf1,0xfd,0x38,0xc2,0x0f,0x01]
740 ; SKX-NEXT:    vblendmpd %ymm0, %ymm1, %ymm0 {%k1} ## encoding: [0x62,0xf2,0xf5,0x29,0x65,0xc0]
741 ; SKX-NEXT:    retq ## encoding: [0xc3]
742
743   %a = load double, double* %ptr
744   %v = insertelement <4 x double> undef, double %a, i32 0
745   %shuffle = shufflevector <4 x double> %v, <4 x double> undef, <4 x i32> zeroinitializer
746
747   %mask = fcmp ogt <4 x double> %shuffle, %x
748   %max = select <4 x i1> %mask, <4 x double> %x, <4 x double> %x1
749   ret <4 x double> %max
750 }
751
752 define <2 x double> @test39(<2 x double> %x, <2 x double> %x1, double* %ptr) nounwind {
753 ; AVX512-LABEL: test39:
754 ; AVX512:       ## %bb.0:
755 ; AVX512-NEXT:    ## kill: def $xmm1 killed $xmm1 def $zmm1
756 ; AVX512-NEXT:    ## kill: def $xmm0 killed $xmm0 def $zmm0
757 ; AVX512-NEXT:    vmovddup (%rdi), %xmm2 ## encoding: [0xc5,0xfb,0x12,0x17]
758 ; AVX512-NEXT:    ## xmm2 = mem[0,0]
759 ; AVX512-NEXT:    vcmpltpd %zmm2, %zmm0, %k1 ## encoding: [0x62,0xf1,0xfd,0x48,0xc2,0xca,0x01]
760 ; AVX512-NEXT:    vblendmpd %zmm0, %zmm1, %zmm0 {%k1} ## encoding: [0x62,0xf2,0xf5,0x49,0x65,0xc0]
761 ; AVX512-NEXT:    ## kill: def $xmm0 killed $xmm0 killed $zmm0
762 ; AVX512-NEXT:    vzeroupper ## encoding: [0xc5,0xf8,0x77]
763 ; AVX512-NEXT:    retq ## encoding: [0xc3]
764 ;
765 ; SKX-LABEL: test39:
766 ; SKX:       ## %bb.0:
767 ; SKX-NEXT:    vcmpltpd (%rdi){1to2}, %xmm0, %k1 ## encoding: [0x62,0xf1,0xfd,0x18,0xc2,0x0f,0x01]
768 ; SKX-NEXT:    vblendmpd %xmm0, %xmm1, %xmm0 {%k1} ## encoding: [0x62,0xf2,0xf5,0x09,0x65,0xc0]
769 ; SKX-NEXT:    retq ## encoding: [0xc3]
770
771   %a = load double, double* %ptr
772   %v = insertelement <2 x double> undef, double %a, i32 0
773   %shuffle = shufflevector <2 x double> %v, <2 x double> undef, <2 x i32> <i32 0, i32 0>
774
775   %mask = fcmp ogt <2 x double> %shuffle, %x
776   %max = select <2 x i1> %mask, <2 x double> %x, <2 x double> %x1
777   ret <2 x double> %max
778 }
779
780
781 define <16  x float> @test40(<16  x float> %x, <16  x float> %x1, float* %ptr) nounwind {
782 ; CHECK-LABEL: test40:
783 ; CHECK:       ## %bb.0:
784 ; CHECK-NEXT:    vcmpltps (%rdi){1to16}, %zmm0, %k1 ## encoding: [0x62,0xf1,0x7c,0x58,0xc2,0x0f,0x01]
785 ; CHECK-NEXT:    vblendmps %zmm0, %zmm1, %zmm0 {%k1} ## encoding: [0x62,0xf2,0x75,0x49,0x65,0xc0]
786 ; CHECK-NEXT:    retq ## encoding: [0xc3]
787
788   %a = load float, float* %ptr
789   %v = insertelement <16  x float> undef, float %a, i32 0
790   %shuffle = shufflevector <16  x float> %v, <16  x float> undef, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>
791
792   %mask = fcmp ogt <16  x float> %shuffle, %x
793   %max = select <16 x i1> %mask, <16  x float> %x, <16  x float> %x1
794   ret <16  x float> %max
795 }
796
797 define <8  x float> @test41(<8  x float> %x, <8  x float> %x1, float* %ptr) nounwind {
798 ; AVX512-LABEL: test41:
799 ; AVX512:       ## %bb.0:
800 ; AVX512-NEXT:    ## kill: def $ymm1 killed $ymm1 def $zmm1
801 ; AVX512-NEXT:    ## kill: def $ymm0 killed $ymm0 def $zmm0
802 ; AVX512-NEXT:    vbroadcastss (%rdi), %ymm2 ## encoding: [0xc4,0xe2,0x7d,0x18,0x17]
803 ; AVX512-NEXT:    vcmpltps %zmm2, %zmm0, %k1 ## encoding: [0x62,0xf1,0x7c,0x48,0xc2,0xca,0x01]
804 ; AVX512-NEXT:    vblendmps %zmm0, %zmm1, %zmm0 {%k1} ## encoding: [0x62,0xf2,0x75,0x49,0x65,0xc0]
805 ; AVX512-NEXT:    ## kill: def $ymm0 killed $ymm0 killed $zmm0
806 ; AVX512-NEXT:    retq ## encoding: [0xc3]
807 ;
808 ; SKX-LABEL: test41:
809 ; SKX:       ## %bb.0:
810 ; SKX-NEXT:    vcmpltps (%rdi){1to8}, %ymm0, %k1 ## encoding: [0x62,0xf1,0x7c,0x38,0xc2,0x0f,0x01]
811 ; SKX-NEXT:    vblendmps %ymm0, %ymm1, %ymm0 {%k1} ## encoding: [0x62,0xf2,0x75,0x29,0x65,0xc0]
812 ; SKX-NEXT:    retq ## encoding: [0xc3]
813
814   %a = load float, float* %ptr
815   %v = insertelement <8  x float> undef, float %a, i32 0
816   %shuffle = shufflevector <8  x float> %v, <8  x float> undef, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>
817
818   %mask = fcmp ogt <8  x float> %shuffle, %x
819   %max = select <8 x i1> %mask, <8  x float> %x, <8  x float> %x1
820   ret <8  x float> %max
821 }
822
823 define <4  x float> @test42(<4  x float> %x, <4  x float> %x1, float* %ptr) nounwind {
824 ; AVX512-LABEL: test42:
825 ; AVX512:       ## %bb.0:
826 ; AVX512-NEXT:    ## kill: def $xmm1 killed $xmm1 def $zmm1
827 ; AVX512-NEXT:    ## kill: def $xmm0 killed $xmm0 def $zmm0
828 ; AVX512-NEXT:    vbroadcastss (%rdi), %xmm2 ## encoding: [0xc4,0xe2,0x79,0x18,0x17]
829 ; AVX512-NEXT:    vcmpltps %zmm2, %zmm0, %k1 ## encoding: [0x62,0xf1,0x7c,0x48,0xc2,0xca,0x01]
830 ; AVX512-NEXT:    vblendmps %zmm0, %zmm1, %zmm0 {%k1} ## encoding: [0x62,0xf2,0x75,0x49,0x65,0xc0]
831 ; AVX512-NEXT:    ## kill: def $xmm0 killed $xmm0 killed $zmm0
832 ; AVX512-NEXT:    vzeroupper ## encoding: [0xc5,0xf8,0x77]
833 ; AVX512-NEXT:    retq ## encoding: [0xc3]
834 ;
835 ; SKX-LABEL: test42:
836 ; SKX:       ## %bb.0:
837 ; SKX-NEXT:    vcmpltps (%rdi){1to4}, %xmm0, %k1 ## encoding: [0x62,0xf1,0x7c,0x18,0xc2,0x0f,0x01]
838 ; SKX-NEXT:    vblendmps %xmm0, %xmm1, %xmm0 {%k1} ## encoding: [0x62,0xf2,0x75,0x09,0x65,0xc0]
839 ; SKX-NEXT:    retq ## encoding: [0xc3]
840
841   %a = load float, float* %ptr
842   %v = insertelement <4  x float> undef, float %a, i32 0
843   %shuffle = shufflevector <4  x float> %v, <4  x float> undef, <4 x i32> <i32 0, i32 0, i32 0, i32 0>
844
845   %mask = fcmp ogt <4  x float> %shuffle, %x
846   %max = select <4 x i1> %mask, <4  x float> %x, <4  x float> %x1
847   ret <4  x float> %max
848 }
849
850 define <8 x double> @test43(<8 x double> %x, <8 x double> %x1, double* %ptr,<8 x i1> %mask_in) nounwind {
851 ; KNL-LABEL: test43:
852 ; KNL:       ## %bb.0:
853 ; KNL-NEXT:    vpmovsxwq %xmm2, %zmm2 ## encoding: [0x62,0xf2,0x7d,0x48,0x24,0xd2]
854 ; KNL-NEXT:    vpsllq $63, %zmm2, %zmm2 ## encoding: [0x62,0xf1,0xed,0x48,0x73,0xf2,0x3f]
855 ; KNL-NEXT:    vcmpltpd (%rdi){1to8}, %zmm0, %k1 ## encoding: [0x62,0xf1,0xfd,0x58,0xc2,0x0f,0x01]
856 ; KNL-NEXT:    vptestmq %zmm2, %zmm2, %k1 {%k1} ## encoding: [0x62,0xf2,0xed,0x49,0x27,0xca]
857 ; KNL-NEXT:    vblendmpd %zmm0, %zmm1, %zmm0 {%k1} ## encoding: [0x62,0xf2,0xf5,0x49,0x65,0xc0]
858 ; KNL-NEXT:    retq ## encoding: [0xc3]
859 ;
860 ; AVX512BW-LABEL: test43:
861 ; AVX512BW:       ## %bb.0:
862 ; AVX512BW-NEXT:    vpsllw $15, %xmm2, %xmm2 ## encoding: [0xc5,0xe9,0x71,0xf2,0x0f]
863 ; AVX512BW-NEXT:    vpmovw2m %zmm2, %k1 ## encoding: [0x62,0xf2,0xfe,0x48,0x29,0xca]
864 ; AVX512BW-NEXT:    vcmpltpd (%rdi){1to8}, %zmm0, %k1 {%k1} ## encoding: [0x62,0xf1,0xfd,0x59,0xc2,0x0f,0x01]
865 ; AVX512BW-NEXT:    vblendmpd %zmm0, %zmm1, %zmm0 {%k1} ## encoding: [0x62,0xf2,0xf5,0x49,0x65,0xc0]
866 ; AVX512BW-NEXT:    retq ## encoding: [0xc3]
867 ;
868 ; SKX-LABEL: test43:
869 ; SKX:       ## %bb.0:
870 ; SKX-NEXT:    vpsllw $15, %xmm2, %xmm2 ## EVEX TO VEX Compression encoding: [0xc5,0xe9,0x71,0xf2,0x0f]
871 ; SKX-NEXT:    vpmovw2m %xmm2, %k1 ## encoding: [0x62,0xf2,0xfe,0x08,0x29,0xca]
872 ; SKX-NEXT:    vcmpltpd (%rdi){1to8}, %zmm0, %k1 {%k1} ## encoding: [0x62,0xf1,0xfd,0x59,0xc2,0x0f,0x01]
873 ; SKX-NEXT:    vblendmpd %zmm0, %zmm1, %zmm0 {%k1} ## encoding: [0x62,0xf2,0xf5,0x49,0x65,0xc0]
874 ; SKX-NEXT:    retq ## encoding: [0xc3]
875
876   %a = load double, double* %ptr
877   %v = insertelement <8 x double> undef, double %a, i32 0
878   %shuffle = shufflevector <8 x double> %v, <8 x double> undef, <8 x i32> zeroinitializer
879
880   %mask_cmp = fcmp ogt <8 x double> %shuffle, %x
881   %mask = and <8 x i1> %mask_cmp, %mask_in
882   %max = select <8 x i1> %mask, <8 x double> %x, <8 x double> %x1
883   ret <8 x double> %max
884 }
885
886 define <4 x i32> @test44(<4 x i16> %x, <4 x i16> %y) #0 {
887 ; AVX512-LABEL: test44:
888 ; AVX512:       ## %bb.0:
889 ; AVX512-NEXT:    vpxor %xmm2, %xmm2, %xmm2 ## encoding: [0xc5,0xe9,0xef,0xd2]
890 ; AVX512-NEXT:    vpblendw $170, %xmm2, %xmm1, %xmm1 ## encoding: [0xc4,0xe3,0x71,0x0e,0xca,0xaa]
891 ; AVX512-NEXT:    ## xmm1 = xmm1[0],xmm2[1],xmm1[2],xmm2[3],xmm1[4],xmm2[5],xmm1[6],xmm2[7]
892 ; AVX512-NEXT:    vpblendw $170, %xmm2, %xmm0, %xmm0 ## encoding: [0xc4,0xe3,0x79,0x0e,0xc2,0xaa]
893 ; AVX512-NEXT:    ## xmm0 = xmm0[0],xmm2[1],xmm0[2],xmm2[3],xmm0[4],xmm2[5],xmm0[6],xmm2[7]
894 ; AVX512-NEXT:    vpcmpeqd %xmm1, %xmm0, %xmm0 ## encoding: [0xc5,0xf9,0x76,0xc1]
895 ; AVX512-NEXT:    retq ## encoding: [0xc3]
896 ;
897 ; SKX-LABEL: test44:
898 ; SKX:       ## %bb.0:
899 ; SKX-NEXT:    vpxor %xmm2, %xmm2, %xmm2 ## EVEX TO VEX Compression encoding: [0xc5,0xe9,0xef,0xd2]
900 ; SKX-NEXT:    vpblendw $170, %xmm2, %xmm1, %xmm1 ## encoding: [0xc4,0xe3,0x71,0x0e,0xca,0xaa]
901 ; SKX-NEXT:    ## xmm1 = xmm1[0],xmm2[1],xmm1[2],xmm2[3],xmm1[4],xmm2[5],xmm1[6],xmm2[7]
902 ; SKX-NEXT:    vpblendw $170, %xmm2, %xmm0, %xmm0 ## encoding: [0xc4,0xe3,0x79,0x0e,0xc2,0xaa]
903 ; SKX-NEXT:    ## xmm0 = xmm0[0],xmm2[1],xmm0[2],xmm2[3],xmm0[4],xmm2[5],xmm0[6],xmm2[7]
904 ; SKX-NEXT:    vpcmpeqd %xmm1, %xmm0, %xmm0 ## encoding: [0xc5,0xf9,0x76,0xc1]
905 ; SKX-NEXT:    retq ## encoding: [0xc3]
906   %mask = icmp eq <4 x i16> %x, %y
907   %1 = sext <4 x i1> %mask to <4 x i32>
908   ret <4 x i32> %1
909 }
910
911 define <2 x i64> @test45(<2 x i16> %x, <2 x i16> %y) #0 {
912 ; AVX512-LABEL: test45:
913 ; AVX512:       ## %bb.0:
914 ; AVX512-NEXT:    vpxor %xmm2, %xmm2, %xmm2 ## encoding: [0xc5,0xe9,0xef,0xd2]
915 ; AVX512-NEXT:    vpblendw $17, %xmm1, %xmm2, %xmm1 ## encoding: [0xc4,0xe3,0x69,0x0e,0xc9,0x11]
916 ; AVX512-NEXT:    ## xmm1 = xmm1[0],xmm2[1,2,3],xmm1[4],xmm2[5,6,7]
917 ; AVX512-NEXT:    vpblendw $17, %xmm0, %xmm2, %xmm0 ## encoding: [0xc4,0xe3,0x69,0x0e,0xc0,0x11]
918 ; AVX512-NEXT:    ## xmm0 = xmm0[0],xmm2[1,2,3],xmm0[4],xmm2[5,6,7]
919 ; AVX512-NEXT:    vpcmpeqq %xmm1, %xmm0, %xmm0 ## encoding: [0xc4,0xe2,0x79,0x29,0xc1]
920 ; AVX512-NEXT:    vpsrlq $63, %xmm0, %xmm0 ## encoding: [0xc5,0xf9,0x73,0xd0,0x3f]
921 ; AVX512-NEXT:    retq ## encoding: [0xc3]
922 ;
923 ; SKX-LABEL: test45:
924 ; SKX:       ## %bb.0:
925 ; SKX-NEXT:    vpxor %xmm2, %xmm2, %xmm2 ## EVEX TO VEX Compression encoding: [0xc5,0xe9,0xef,0xd2]
926 ; SKX-NEXT:    vpblendw $17, %xmm1, %xmm2, %xmm1 ## encoding: [0xc4,0xe3,0x69,0x0e,0xc9,0x11]
927 ; SKX-NEXT:    ## xmm1 = xmm1[0],xmm2[1,2,3],xmm1[4],xmm2[5,6,7]
928 ; SKX-NEXT:    vpblendw $17, %xmm0, %xmm2, %xmm0 ## encoding: [0xc4,0xe3,0x69,0x0e,0xc0,0x11]
929 ; SKX-NEXT:    ## xmm0 = xmm0[0],xmm2[1,2,3],xmm0[4],xmm2[5,6,7]
930 ; SKX-NEXT:    vpcmpeqq %xmm1, %xmm0, %xmm0 ## encoding: [0xc4,0xe2,0x79,0x29,0xc1]
931 ; SKX-NEXT:    vpsrlq $63, %xmm0, %xmm0 ## EVEX TO VEX Compression encoding: [0xc5,0xf9,0x73,0xd0,0x3f]
932 ; SKX-NEXT:    retq ## encoding: [0xc3]
933   %mask = icmp eq <2 x i16> %x, %y
934   %1 = zext <2 x i1> %mask to <2 x i64>
935   ret <2 x i64> %1
936 }
937
938 define <2 x i64> @test46(<2 x float> %x, <2 x float> %y) #0 {
939 ; AVX512-LABEL: test46:
940 ; AVX512:       ## %bb.0:
941 ; AVX512-NEXT:    vcmpeqps %xmm1, %xmm0, %xmm0 ## encoding: [0xc5,0xf8,0xc2,0xc1,0x00]
942 ; AVX512-NEXT:    vpermilps $212, %xmm0, %xmm0 ## encoding: [0xc4,0xe3,0x79,0x04,0xc0,0xd4]
943 ; AVX512-NEXT:    ## xmm0 = xmm0[0,1,1,3]
944 ; AVX512-NEXT:    vandps {{.*}}(%rip), %xmm0, %xmm0 ## encoding: [0xc5,0xf8,0x54,0x05,A,A,A,A]
945 ; AVX512-NEXT:    ## fixup A - offset: 4, value: LCPI47_0-4, kind: reloc_riprel_4byte
946 ; AVX512-NEXT:    retq ## encoding: [0xc3]
947 ;
948 ; SKX-LABEL: test46:
949 ; SKX:       ## %bb.0:
950 ; SKX-NEXT:    vcmpeqps %xmm1, %xmm0, %k0 ## encoding: [0x62,0xf1,0x7c,0x08,0xc2,0xc1,0x00]
951 ; SKX-NEXT:    vpmovm2q %k0, %xmm0 ## encoding: [0x62,0xf2,0xfe,0x08,0x38,0xc0]
952 ; SKX-NEXT:    vpsrlq $63, %xmm0, %xmm0 ## EVEX TO VEX Compression encoding: [0xc5,0xf9,0x73,0xd0,0x3f]
953 ; SKX-NEXT:    retq ## encoding: [0xc3]
954   %mask = fcmp oeq <2 x float> %x, %y
955   %1 = zext <2 x i1> %mask to <2 x i64>
956   ret <2 x i64> %1
957 }
958
959 define <16 x i8> @test47(<16 x i32> %a, <16 x i8> %b, <16 x i8> %c) {
960 ; KNL-LABEL: test47:
961 ; KNL:       ## %bb.0:
962 ; KNL-NEXT:    vptestnmd %zmm0, %zmm0, %k1 ## encoding: [0x62,0xf2,0x7e,0x48,0x27,0xc8]
963 ; KNL-NEXT:    vpternlogd $255, %zmm0, %zmm0, %zmm0 {%k1} {z} ## encoding: [0x62,0xf3,0x7d,0xc9,0x25,0xc0,0xff]
964 ; KNL-NEXT:    vpmovdb %zmm0, %xmm0 ## encoding: [0x62,0xf2,0x7e,0x48,0x31,0xc0]
965 ; KNL-NEXT:    vpblendvb %xmm0, %xmm1, %xmm2, %xmm0 ## encoding: [0xc4,0xe3,0x69,0x4c,0xc1,0x00]
966 ; KNL-NEXT:    vzeroupper ## encoding: [0xc5,0xf8,0x77]
967 ; KNL-NEXT:    retq ## encoding: [0xc3]
968 ;
969 ; AVX512BW-LABEL: test47:
970 ; AVX512BW:       ## %bb.0:
971 ; AVX512BW-NEXT:    ## kill: def $xmm2 killed $xmm2 def $zmm2
972 ; AVX512BW-NEXT:    ## kill: def $xmm1 killed $xmm1 def $zmm1
973 ; AVX512BW-NEXT:    vptestnmd %zmm0, %zmm0, %k1 ## encoding: [0x62,0xf2,0x7e,0x48,0x27,0xc8]
974 ; AVX512BW-NEXT:    vpblendmb %zmm1, %zmm2, %zmm0 {%k1} ## encoding: [0x62,0xf2,0x6d,0x49,0x66,0xc1]
975 ; AVX512BW-NEXT:    ## kill: def $xmm0 killed $xmm0 killed $zmm0
976 ; AVX512BW-NEXT:    vzeroupper ## encoding: [0xc5,0xf8,0x77]
977 ; AVX512BW-NEXT:    retq ## encoding: [0xc3]
978 ;
979 ; SKX-LABEL: test47:
980 ; SKX:       ## %bb.0:
981 ; SKX-NEXT:    vptestnmd %zmm0, %zmm0, %k1 ## encoding: [0x62,0xf2,0x7e,0x48,0x27,0xc8]
982 ; SKX-NEXT:    vpblendmb %xmm1, %xmm2, %xmm0 {%k1} ## encoding: [0x62,0xf2,0x6d,0x09,0x66,0xc1]
983 ; SKX-NEXT:    vzeroupper ## encoding: [0xc5,0xf8,0x77]
984 ; SKX-NEXT:    retq ## encoding: [0xc3]
985   %cmp = icmp eq <16 x i32> %a, zeroinitializer
986   %res = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %c
987   ret <16 x i8> %res
988 }
989
990 define <16 x i16> @test48(<16 x i32> %a, <16 x i16> %b, <16 x i16> %c) {
991 ; KNL-LABEL: test48:
992 ; KNL:       ## %bb.0:
993 ; KNL-NEXT:    vptestnmd %zmm0, %zmm0, %k1 ## encoding: [0x62,0xf2,0x7e,0x48,0x27,0xc8]
994 ; KNL-NEXT:    vpternlogd $255, %zmm0, %zmm0, %zmm0 {%k1} {z} ## encoding: [0x62,0xf3,0x7d,0xc9,0x25,0xc0,0xff]
995 ; KNL-NEXT:    vpmovdw %zmm0, %ymm0 ## encoding: [0x62,0xf2,0x7e,0x48,0x33,0xc0]
996 ; KNL-NEXT:    vpblendvb %ymm0, %ymm1, %ymm2, %ymm0 ## encoding: [0xc4,0xe3,0x6d,0x4c,0xc1,0x00]
997 ; KNL-NEXT:    retq ## encoding: [0xc3]
998 ;
999 ; AVX512BW-LABEL: test48:
1000 ; AVX512BW:       ## %bb.0:
1001 ; AVX512BW-NEXT:    ## kill: def $ymm2 killed $ymm2 def $zmm2
1002 ; AVX512BW-NEXT:    ## kill: def $ymm1 killed $ymm1 def $zmm1
1003 ; AVX512BW-NEXT:    vptestnmd %zmm0, %zmm0, %k1 ## encoding: [0x62,0xf2,0x7e,0x48,0x27,0xc8]
1004 ; AVX512BW-NEXT:    vpblendmw %zmm1, %zmm2, %zmm0 {%k1} ## encoding: [0x62,0xf2,0xed,0x49,0x66,0xc1]
1005 ; AVX512BW-NEXT:    ## kill: def $ymm0 killed $ymm0 killed $zmm0
1006 ; AVX512BW-NEXT:    retq ## encoding: [0xc3]
1007 ;
1008 ; SKX-LABEL: test48:
1009 ; SKX:       ## %bb.0:
1010 ; SKX-NEXT:    vptestnmd %zmm0, %zmm0, %k1 ## encoding: [0x62,0xf2,0x7e,0x48,0x27,0xc8]
1011 ; SKX-NEXT:    vpblendmw %ymm1, %ymm2, %ymm0 {%k1} ## encoding: [0x62,0xf2,0xed,0x29,0x66,0xc1]
1012 ; SKX-NEXT:    retq ## encoding: [0xc3]
1013   %cmp = icmp eq <16 x i32> %a, zeroinitializer
1014   %res = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %c
1015   ret <16 x i16> %res
1016 }
1017
1018 define <8 x i16> @test49(<8 x i64> %a, <8 x i16> %b, <8 x i16> %c) {
1019 ; KNL-LABEL: test49:
1020 ; KNL:       ## %bb.0:
1021 ; KNL-NEXT:    vptestnmq %zmm0, %zmm0, %k1 ## encoding: [0x62,0xf2,0xfe,0x48,0x27,0xc8]
1022 ; KNL-NEXT:    vpternlogd $255, %zmm0, %zmm0, %zmm0 {%k1} {z} ## encoding: [0x62,0xf3,0x7d,0xc9,0x25,0xc0,0xff]
1023 ; KNL-NEXT:    vpmovdw %zmm0, %ymm0 ## encoding: [0x62,0xf2,0x7e,0x48,0x33,0xc0]
1024 ; KNL-NEXT:    vpblendvb %xmm0, %xmm1, %xmm2, %xmm0 ## encoding: [0xc4,0xe3,0x69,0x4c,0xc1,0x00]
1025 ; KNL-NEXT:    vzeroupper ## encoding: [0xc5,0xf8,0x77]
1026 ; KNL-NEXT:    retq ## encoding: [0xc3]
1027 ;
1028 ; AVX512BW-LABEL: test49:
1029 ; AVX512BW:       ## %bb.0:
1030 ; AVX512BW-NEXT:    ## kill: def $xmm2 killed $xmm2 def $zmm2
1031 ; AVX512BW-NEXT:    ## kill: def $xmm1 killed $xmm1 def $zmm1
1032 ; AVX512BW-NEXT:    vptestnmq %zmm0, %zmm0, %k1 ## encoding: [0x62,0xf2,0xfe,0x48,0x27,0xc8]
1033 ; AVX512BW-NEXT:    vpblendmw %zmm1, %zmm2, %zmm0 {%k1} ## encoding: [0x62,0xf2,0xed,0x49,0x66,0xc1]
1034 ; AVX512BW-NEXT:    ## kill: def $xmm0 killed $xmm0 killed $zmm0
1035 ; AVX512BW-NEXT:    vzeroupper ## encoding: [0xc5,0xf8,0x77]
1036 ; AVX512BW-NEXT:    retq ## encoding: [0xc3]
1037 ;
1038 ; SKX-LABEL: test49:
1039 ; SKX:       ## %bb.0:
1040 ; SKX-NEXT:    vptestnmq %zmm0, %zmm0, %k1 ## encoding: [0x62,0xf2,0xfe,0x48,0x27,0xc8]
1041 ; SKX-NEXT:    vpblendmw %xmm1, %xmm2, %xmm0 {%k1} ## encoding: [0x62,0xf2,0xed,0x09,0x66,0xc1]
1042 ; SKX-NEXT:    vzeroupper ## encoding: [0xc5,0xf8,0x77]
1043 ; SKX-NEXT:    retq ## encoding: [0xc3]
1044   %cmp = icmp eq <8 x i64> %a, zeroinitializer
1045   %res = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %c
1046   ret <8 x i16> %res
1047 }
1048
1049 define i16 @pcmpeq_mem_1(<16 x i32> %a, <16 x i32>* %b) {
1050 ; KNL-LABEL: pcmpeq_mem_1:
1051 ; KNL:       ## %bb.0:
1052 ; KNL-NEXT:    vpcmpeqd (%rdi), %zmm0, %k0 ## encoding: [0x62,0xf1,0x7d,0x48,0x76,0x07]
1053 ; KNL-NEXT:    kmovw %k0, %eax ## encoding: [0xc5,0xf8,0x93,0xc0]
1054 ; KNL-NEXT:    ## kill: def $ax killed $ax killed $eax
1055 ; KNL-NEXT:    vzeroupper ## encoding: [0xc5,0xf8,0x77]
1056 ; KNL-NEXT:    retq ## encoding: [0xc3]
1057 ;
1058 ; AVX512BW-LABEL: pcmpeq_mem_1:
1059 ; AVX512BW:       ## %bb.0:
1060 ; AVX512BW-NEXT:    vpcmpeqd (%rdi), %zmm0, %k0 ## encoding: [0x62,0xf1,0x7d,0x48,0x76,0x07]
1061 ; AVX512BW-NEXT:    kmovd %k0, %eax ## encoding: [0xc5,0xfb,0x93,0xc0]
1062 ; AVX512BW-NEXT:    ## kill: def $ax killed $ax killed $eax
1063 ; AVX512BW-NEXT:    vzeroupper ## encoding: [0xc5,0xf8,0x77]
1064 ; AVX512BW-NEXT:    retq ## encoding: [0xc3]
1065 ;
1066 ; SKX-LABEL: pcmpeq_mem_1:
1067 ; SKX:       ## %bb.0:
1068 ; SKX-NEXT:    vpcmpeqd (%rdi), %zmm0, %k0 ## encoding: [0x62,0xf1,0x7d,0x48,0x76,0x07]
1069 ; SKX-NEXT:    kmovd %k0, %eax ## encoding: [0xc5,0xfb,0x93,0xc0]
1070 ; SKX-NEXT:    ## kill: def $ax killed $ax killed $eax
1071 ; SKX-NEXT:    vzeroupper ## encoding: [0xc5,0xf8,0x77]
1072 ; SKX-NEXT:    retq ## encoding: [0xc3]
1073   %load = load <16 x i32>, <16 x i32>* %b
1074   %cmp = icmp eq <16 x i32> %a, %load
1075   %cast = bitcast <16 x i1> %cmp to i16
1076   ret i16 %cast
1077 }
1078
1079 ; Make sure we use the short pcmpeq encoding like the test above when the memoryo
1080 ; operand is in the first argument instead of the second.
1081 define i16 @pcmpeq_mem_2(<16 x i32> %a, <16 x i32>* %b) {
1082 ; KNL-LABEL: pcmpeq_mem_2:
1083 ; KNL:       ## %bb.0:
1084 ; KNL-NEXT:    vpcmpeqd (%rdi), %zmm0, %k0 ## encoding: [0x62,0xf1,0x7d,0x48,0x76,0x07]
1085 ; KNL-NEXT:    kmovw %k0, %eax ## encoding: [0xc5,0xf8,0x93,0xc0]
1086 ; KNL-NEXT:    ## kill: def $ax killed $ax killed $eax
1087 ; KNL-NEXT:    vzeroupper ## encoding: [0xc5,0xf8,0x77]
1088 ; KNL-NEXT:    retq ## encoding: [0xc3]
1089 ;
1090 ; AVX512BW-LABEL: pcmpeq_mem_2:
1091 ; AVX512BW:       ## %bb.0:
1092 ; AVX512BW-NEXT:    vpcmpeqd (%rdi), %zmm0, %k0 ## encoding: [0x62,0xf1,0x7d,0x48,0x76,0x07]
1093 ; AVX512BW-NEXT:    kmovd %k0, %eax ## encoding: [0xc5,0xfb,0x93,0xc0]
1094 ; AVX512BW-NEXT:    ## kill: def $ax killed $ax killed $eax
1095 ; AVX512BW-NEXT:    vzeroupper ## encoding: [0xc5,0xf8,0x77]
1096 ; AVX512BW-NEXT:    retq ## encoding: [0xc3]
1097 ;
1098 ; SKX-LABEL: pcmpeq_mem_2:
1099 ; SKX:       ## %bb.0:
1100 ; SKX-NEXT:    vpcmpeqd (%rdi), %zmm0, %k0 ## encoding: [0x62,0xf1,0x7d,0x48,0x76,0x07]
1101 ; SKX-NEXT:    kmovd %k0, %eax ## encoding: [0xc5,0xfb,0x93,0xc0]
1102 ; SKX-NEXT:    ## kill: def $ax killed $ax killed $eax
1103 ; SKX-NEXT:    vzeroupper ## encoding: [0xc5,0xf8,0x77]
1104 ; SKX-NEXT:    retq ## encoding: [0xc3]
1105   %load = load <16 x i32>, <16 x i32>* %b
1106   %cmp = icmp eq <16 x i32> %load, %a
1107   %cast = bitcast <16 x i1> %cmp to i16
1108   ret i16 %cast
1109 }
1110
1111 ; Don't let a degenerate case trigger an infinite loop.
1112 ; This should get simplified before it even exists as a vselect node,
1113 ; but that does not happen as of this change.
1114
1115 define <2 x i64> @PR41066(<2 x i64> %t0, <2 x double> %x, <2 x double> %y) {
1116 ; AVX512-LABEL: PR41066:
1117 ; AVX512:       ## %bb.0:
1118 ; AVX512-NEXT:    vxorps %xmm0, %xmm0, %xmm0 ## encoding: [0xc5,0xf8,0x57,0xc0]
1119 ; AVX512-NEXT:    retq ## encoding: [0xc3]
1120 ;
1121 ; SKX-LABEL: PR41066:
1122 ; SKX:       ## %bb.0:
1123 ; SKX-NEXT:    vxorps %xmm0, %xmm0, %xmm0 ## EVEX TO VEX Compression encoding: [0xc5,0xf8,0x57,0xc0]
1124 ; SKX-NEXT:    retq ## encoding: [0xc3]
1125   %t1 = fcmp ogt <2 x double> %x, %y
1126   %t2 = select <2 x i1> %t1, <2 x i64> <i64 undef, i64 0>, <2 x i64> zeroinitializer
1127   ret <2 x i64> %t2
1128 }