1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse2 | FileCheck %s --check-prefix=SSE --check-prefix=SSE2 3 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse4.2 | FileCheck %s --check-prefix=SSE --check-prefix=SSE42 4 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx | FileCheck %s --check-prefix=AVX --check-prefix=AVX1 5 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2 | FileCheck %s --check-prefix=AVX --check-prefix=AVX2 6 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f | FileCheck %s --check-prefix=AVX --check-prefix=AVX512 --check-prefix=AVX512F 7 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512dq | FileCheck %s --check-prefix=AVX --check-prefix=AVX512 --check-prefix=AVX512DQ 8 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512bw | FileCheck %s --check-prefix=AVX --check-prefix=AVX512 --check-prefix=AVX512BW 9 10 ; 11 ; 128-bit vector comparisons 12 ; 13 14 define <2 x i1> @test_cmp_v2f64(<2 x double> %a0, <2 x double> %a1) nounwind { 15 ; SSE-LABEL: test_cmp_v2f64: 16 ; SSE: # %bb.0: 17 ; SSE-NEXT: cmpltpd %xmm0, %xmm1 18 ; SSE-NEXT: movapd %xmm1, %xmm0 19 ; SSE-NEXT: retq 20 ; 21 ; AVX-LABEL: test_cmp_v2f64: 22 ; AVX: # %bb.0: 23 ; AVX-NEXT: vcmpltpd %xmm0, %xmm1, %xmm0 24 ; AVX-NEXT: retq 25 %1 = fcmp ogt <2 x double> %a0, %a1 26 ret <2 x i1> %1 27 } 28 29 define <4 x i1> @test_cmp_v4f32(<4 x float> %a0, <4 x float> %a1) nounwind { 30 ; SSE-LABEL: test_cmp_v4f32: 31 ; SSE: # %bb.0: 32 ; SSE-NEXT: cmpltps %xmm0, %xmm1 33 ; SSE-NEXT: movaps %xmm1, %xmm0 34 ; SSE-NEXT: retq 35 ; 36 ; AVX-LABEL: test_cmp_v4f32: 37 ; AVX: # %bb.0: 38 ; AVX-NEXT: vcmpltps %xmm0, %xmm1, %xmm0 39 ; AVX-NEXT: retq 40 %1 = fcmp ogt <4 x float> %a0, %a1 41 ret <4 x i1> %1 42 } 43 44 define <2 x i1> @test_cmp_v2i64(<2 x i64> %a0, <2 x i64> %a1) nounwind { 45 ; SSE2-LABEL: test_cmp_v2i64: 46 ; SSE2: # %bb.0: 47 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0] 48 ; SSE2-NEXT: pxor %xmm2, %xmm1 49 ; SSE2-NEXT: pxor %xmm2, %xmm0 50 ; SSE2-NEXT: movdqa %xmm0, %xmm2 51 ; SSE2-NEXT: pcmpgtd %xmm1, %xmm2 52 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2] 53 ; SSE2-NEXT: pcmpeqd %xmm1, %xmm0 54 ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,1,3,3] 55 ; SSE2-NEXT: pand %xmm3, %xmm1 56 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm2[1,1,3,3] 57 ; SSE2-NEXT: por %xmm1, %xmm0 58 ; SSE2-NEXT: retq 59 ; 60 ; SSE42-LABEL: test_cmp_v2i64: 61 ; SSE42: # %bb.0: 62 ; SSE42-NEXT: pcmpgtq %xmm1, %xmm0 63 ; SSE42-NEXT: retq 64 ; 65 ; AVX-LABEL: test_cmp_v2i64: 66 ; AVX: # %bb.0: 67 ; AVX-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0 68 ; AVX-NEXT: retq 69 %1 = icmp sgt <2 x i64> %a0, %a1 70 ret <2 x i1> %1 71 } 72 73 define <4 x i1> @test_cmp_v4i32(<4 x i32> %a0, <4 x i32> %a1) nounwind { 74 ; SSE-LABEL: test_cmp_v4i32: 75 ; SSE: # %bb.0: 76 ; SSE-NEXT: pcmpgtd %xmm1, %xmm0 77 ; SSE-NEXT: retq 78 ; 79 ; AVX-LABEL: test_cmp_v4i32: 80 ; AVX: # %bb.0: 81 ; AVX-NEXT: vpcmpgtd %xmm1, %xmm0, %xmm0 82 ; AVX-NEXT: retq 83 %1 = icmp sgt <4 x i32> %a0, %a1 84 ret <4 x i1> %1 85 } 86 87 define <8 x i1> @test_cmp_v8i16(<8 x i16> %a0, <8 x i16> %a1) nounwind { 88 ; SSE-LABEL: test_cmp_v8i16: 89 ; SSE: # %bb.0: 90 ; SSE-NEXT: pcmpgtw %xmm1, %xmm0 91 ; SSE-NEXT: retq 92 ; 93 ; AVX-LABEL: test_cmp_v8i16: 94 ; AVX: # %bb.0: 95 ; AVX-NEXT: vpcmpgtw %xmm1, %xmm0, %xmm0 96 ; AVX-NEXT: retq 97 %1 = icmp sgt <8 x i16> %a0, %a1 98 ret <8 x i1> %1 99 } 100 101 define <16 x i1> @test_cmp_v16i8(<16 x i8> %a0, <16 x i8> %a1) nounwind { 102 ; SSE-LABEL: test_cmp_v16i8: 103 ; SSE: # %bb.0: 104 ; SSE-NEXT: pcmpgtb %xmm1, %xmm0 105 ; SSE-NEXT: retq 106 ; 107 ; AVX-LABEL: test_cmp_v16i8: 108 ; AVX: # %bb.0: 109 ; AVX-NEXT: vpcmpgtb %xmm1, %xmm0, %xmm0 110 ; AVX-NEXT: retq 111 %1 = icmp sgt <16 x i8> %a0, %a1 112 ret <16 x i1> %1 113 } 114 115 ; 116 ; 256-bit vector comparisons 117 ; 118 119 define <4 x i1> @test_cmp_v4f64(<4 x double> %a0, <4 x double> %a1) nounwind { 120 ; SSE-LABEL: test_cmp_v4f64: 121 ; SSE: # %bb.0: 122 ; SSE-NEXT: cmpltpd %xmm1, %xmm3 123 ; SSE-NEXT: cmpltpd %xmm0, %xmm2 124 ; SSE-NEXT: packssdw %xmm3, %xmm2 125 ; SSE-NEXT: movdqa %xmm2, %xmm0 126 ; SSE-NEXT: retq 127 ; 128 ; AVX1-LABEL: test_cmp_v4f64: 129 ; AVX1: # %bb.0: 130 ; AVX1-NEXT: vcmpltpd %ymm0, %ymm1, %ymm0 131 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1 132 ; AVX1-NEXT: vpackssdw %xmm1, %xmm0, %xmm0 133 ; AVX1-NEXT: vzeroupper 134 ; AVX1-NEXT: retq 135 ; 136 ; AVX2-LABEL: test_cmp_v4f64: 137 ; AVX2: # %bb.0: 138 ; AVX2-NEXT: vcmpltpd %ymm0, %ymm1, %ymm0 139 ; AVX2-NEXT: vextractf128 $1, %ymm0, %xmm1 140 ; AVX2-NEXT: vpackssdw %xmm1, %xmm0, %xmm0 141 ; AVX2-NEXT: vzeroupper 142 ; AVX2-NEXT: retq 143 ; 144 ; AVX512-LABEL: test_cmp_v4f64: 145 ; AVX512: # %bb.0: 146 ; AVX512-NEXT: vcmpltpd %ymm0, %ymm1, %ymm0 147 ; AVX512-NEXT: vpmovqd %zmm0, %ymm0 148 ; AVX512-NEXT: # kill: def $xmm0 killed $xmm0 killed $ymm0 149 ; AVX512-NEXT: vzeroupper 150 ; AVX512-NEXT: retq 151 %1 = fcmp ogt <4 x double> %a0, %a1 152 ret <4 x i1> %1 153 } 154 155 define <8 x i1> @test_cmp_v8f32(<8 x float> %a0, <8 x float> %a1) nounwind { 156 ; SSE-LABEL: test_cmp_v8f32: 157 ; SSE: # %bb.0: 158 ; SSE-NEXT: cmpltps %xmm1, %xmm3 159 ; SSE-NEXT: cmpltps %xmm0, %xmm2 160 ; SSE-NEXT: packssdw %xmm3, %xmm2 161 ; SSE-NEXT: movdqa %xmm2, %xmm0 162 ; SSE-NEXT: retq 163 ; 164 ; AVX1-LABEL: test_cmp_v8f32: 165 ; AVX1: # %bb.0: 166 ; AVX1-NEXT: vcmpltps %ymm0, %ymm1, %ymm0 167 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1 168 ; AVX1-NEXT: vpackssdw %xmm1, %xmm0, %xmm0 169 ; AVX1-NEXT: vzeroupper 170 ; AVX1-NEXT: retq 171 ; 172 ; AVX2-LABEL: test_cmp_v8f32: 173 ; AVX2: # %bb.0: 174 ; AVX2-NEXT: vcmpltps %ymm0, %ymm1, %ymm0 175 ; AVX2-NEXT: vextractf128 $1, %ymm0, %xmm1 176 ; AVX2-NEXT: vpackssdw %xmm1, %xmm0, %xmm0 177 ; AVX2-NEXT: vzeroupper 178 ; AVX2-NEXT: retq 179 ; 180 ; AVX512-LABEL: test_cmp_v8f32: 181 ; AVX512: # %bb.0: 182 ; AVX512-NEXT: vcmpltps %ymm0, %ymm1, %ymm0 183 ; AVX512-NEXT: vpmovdw %zmm0, %ymm0 184 ; AVX512-NEXT: # kill: def $xmm0 killed $xmm0 killed $ymm0 185 ; AVX512-NEXT: vzeroupper 186 ; AVX512-NEXT: retq 187 %1 = fcmp ogt <8 x float> %a0, %a1 188 ret <8 x i1> %1 189 } 190 191 define <4 x i1> @test_cmp_v4i64(<4 x i64> %a0, <4 x i64> %a1) nounwind { 192 ; SSE2-LABEL: test_cmp_v4i64: 193 ; SSE2: # %bb.0: 194 ; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,0,2147483648,0] 195 ; SSE2-NEXT: pxor %xmm4, %xmm3 196 ; SSE2-NEXT: pxor %xmm4, %xmm1 197 ; SSE2-NEXT: movdqa %xmm1, %xmm5 198 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm5 199 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 200 ; SSE2-NEXT: pcmpeqd %xmm3, %xmm1 201 ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3] 202 ; SSE2-NEXT: pand %xmm6, %xmm1 203 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm5[1,1,3,3] 204 ; SSE2-NEXT: por %xmm1, %xmm3 205 ; SSE2-NEXT: pxor %xmm4, %xmm2 206 ; SSE2-NEXT: pxor %xmm4, %xmm0 207 ; SSE2-NEXT: movdqa %xmm0, %xmm1 208 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm1 209 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm1[0,0,2,2] 210 ; SSE2-NEXT: pcmpeqd %xmm2, %xmm0 211 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm0[1,1,3,3] 212 ; SSE2-NEXT: pand %xmm4, %xmm2 213 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm1[1,1,3,3] 214 ; SSE2-NEXT: por %xmm2, %xmm0 215 ; SSE2-NEXT: packssdw %xmm3, %xmm0 216 ; SSE2-NEXT: retq 217 ; 218 ; SSE42-LABEL: test_cmp_v4i64: 219 ; SSE42: # %bb.0: 220 ; SSE42-NEXT: pcmpgtq %xmm3, %xmm1 221 ; SSE42-NEXT: pcmpgtq %xmm2, %xmm0 222 ; SSE42-NEXT: packssdw %xmm1, %xmm0 223 ; SSE42-NEXT: retq 224 ; 225 ; AVX1-LABEL: test_cmp_v4i64: 226 ; AVX1: # %bb.0: 227 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 228 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 229 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2 230 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0 231 ; AVX1-NEXT: vpackssdw %xmm2, %xmm0, %xmm0 232 ; AVX1-NEXT: vzeroupper 233 ; AVX1-NEXT: retq 234 ; 235 ; AVX2-LABEL: test_cmp_v4i64: 236 ; AVX2: # %bb.0: 237 ; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 238 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1 239 ; AVX2-NEXT: vpackssdw %xmm1, %xmm0, %xmm0 240 ; AVX2-NEXT: vzeroupper 241 ; AVX2-NEXT: retq 242 ; 243 ; AVX512-LABEL: test_cmp_v4i64: 244 ; AVX512: # %bb.0: 245 ; AVX512-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 246 ; AVX512-NEXT: vpmovqd %zmm0, %ymm0 247 ; AVX512-NEXT: # kill: def $xmm0 killed $xmm0 killed $ymm0 248 ; AVX512-NEXT: vzeroupper 249 ; AVX512-NEXT: retq 250 %1 = icmp sgt <4 x i64> %a0, %a1 251 ret <4 x i1> %1 252 } 253 254 define <8 x i1> @test_cmp_v8i32(<8 x i32> %a0, <8 x i32> %a1) nounwind { 255 ; SSE-LABEL: test_cmp_v8i32: 256 ; SSE: # %bb.0: 257 ; SSE-NEXT: pcmpgtd %xmm3, %xmm1 258 ; SSE-NEXT: pcmpgtd %xmm2, %xmm0 259 ; SSE-NEXT: packssdw %xmm1, %xmm0 260 ; SSE-NEXT: retq 261 ; 262 ; AVX1-LABEL: test_cmp_v8i32: 263 ; AVX1: # %bb.0: 264 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 265 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 266 ; AVX1-NEXT: vpcmpgtd %xmm2, %xmm3, %xmm2 267 ; AVX1-NEXT: vpcmpgtd %xmm1, %xmm0, %xmm0 268 ; AVX1-NEXT: vpackssdw %xmm2, %xmm0, %xmm0 269 ; AVX1-NEXT: vzeroupper 270 ; AVX1-NEXT: retq 271 ; 272 ; AVX2-LABEL: test_cmp_v8i32: 273 ; AVX2: # %bb.0: 274 ; AVX2-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm0 275 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1 276 ; AVX2-NEXT: vpackssdw %xmm1, %xmm0, %xmm0 277 ; AVX2-NEXT: vzeroupper 278 ; AVX2-NEXT: retq 279 ; 280 ; AVX512-LABEL: test_cmp_v8i32: 281 ; AVX512: # %bb.0: 282 ; AVX512-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm0 283 ; AVX512-NEXT: vpmovdw %zmm0, %ymm0 284 ; AVX512-NEXT: # kill: def $xmm0 killed $xmm0 killed $ymm0 285 ; AVX512-NEXT: vzeroupper 286 ; AVX512-NEXT: retq 287 %1 = icmp sgt <8 x i32> %a0, %a1 288 ret <8 x i1> %1 289 } 290 291 define <16 x i1> @test_cmp_v16i16(<16 x i16> %a0, <16 x i16> %a1) nounwind { 292 ; SSE-LABEL: test_cmp_v16i16: 293 ; SSE: # %bb.0: 294 ; SSE-NEXT: pcmpgtw %xmm3, %xmm1 295 ; SSE-NEXT: pcmpgtw %xmm2, %xmm0 296 ; SSE-NEXT: packsswb %xmm1, %xmm0 297 ; SSE-NEXT: retq 298 ; 299 ; AVX1-LABEL: test_cmp_v16i16: 300 ; AVX1: # %bb.0: 301 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 302 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 303 ; AVX1-NEXT: vpcmpgtw %xmm2, %xmm3, %xmm2 304 ; AVX1-NEXT: vpcmpgtw %xmm1, %xmm0, %xmm0 305 ; AVX1-NEXT: vpacksswb %xmm2, %xmm0, %xmm0 306 ; AVX1-NEXT: vzeroupper 307 ; AVX1-NEXT: retq 308 ; 309 ; AVX2-LABEL: test_cmp_v16i16: 310 ; AVX2: # %bb.0: 311 ; AVX2-NEXT: vpcmpgtw %ymm1, %ymm0, %ymm0 312 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1 313 ; AVX2-NEXT: vpacksswb %xmm1, %xmm0, %xmm0 314 ; AVX2-NEXT: vzeroupper 315 ; AVX2-NEXT: retq 316 ; 317 ; AVX512F-LABEL: test_cmp_v16i16: 318 ; AVX512F: # %bb.0: 319 ; AVX512F-NEXT: vpcmpgtw %ymm1, %ymm0, %ymm0 320 ; AVX512F-NEXT: vpmovsxwd %ymm0, %zmm0 321 ; AVX512F-NEXT: vpmovdb %zmm0, %xmm0 322 ; AVX512F-NEXT: vzeroupper 323 ; AVX512F-NEXT: retq 324 ; 325 ; AVX512DQ-LABEL: test_cmp_v16i16: 326 ; AVX512DQ: # %bb.0: 327 ; AVX512DQ-NEXT: vpcmpgtw %ymm1, %ymm0, %ymm0 328 ; AVX512DQ-NEXT: vpmovsxwd %ymm0, %zmm0 329 ; AVX512DQ-NEXT: vpmovdb %zmm0, %xmm0 330 ; AVX512DQ-NEXT: vzeroupper 331 ; AVX512DQ-NEXT: retq 332 ; 333 ; AVX512BW-LABEL: test_cmp_v16i16: 334 ; AVX512BW: # %bb.0: 335 ; AVX512BW-NEXT: vpcmpgtw %ymm1, %ymm0, %ymm0 336 ; AVX512BW-NEXT: vpmovwb %zmm0, %ymm0 337 ; AVX512BW-NEXT: # kill: def $xmm0 killed $xmm0 killed $ymm0 338 ; AVX512BW-NEXT: vzeroupper 339 ; AVX512BW-NEXT: retq 340 %1 = icmp sgt <16 x i16> %a0, %a1 341 ret <16 x i1> %1 342 } 343 344 define <32 x i1> @test_cmp_v32i8(<32 x i8> %a0, <32 x i8> %a1) nounwind { 345 ; SSE2-LABEL: test_cmp_v32i8: 346 ; SSE2: # %bb.0: 347 ; SSE2-NEXT: pcmpgtb %xmm2, %xmm0 348 ; SSE2-NEXT: pcmpgtb %xmm3, %xmm1 349 ; SSE2-NEXT: movdqa %xmm1, -{{[0-9]+}}(%rsp) 350 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax 351 ; SSE2-NEXT: andl $1, %eax 352 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 353 ; SSE2-NEXT: andl $1, %ecx 354 ; SSE2-NEXT: leal (%rcx,%rax,2), %eax 355 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 356 ; SSE2-NEXT: andl $1, %ecx 357 ; SSE2-NEXT: leal (%rax,%rcx,4), %eax 358 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 359 ; SSE2-NEXT: andl $1, %ecx 360 ; SSE2-NEXT: leal (%rax,%rcx,8), %eax 361 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 362 ; SSE2-NEXT: andl $1, %ecx 363 ; SSE2-NEXT: shll $4, %ecx 364 ; SSE2-NEXT: orl %eax, %ecx 365 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax 366 ; SSE2-NEXT: andl $1, %eax 367 ; SSE2-NEXT: shll $5, %eax 368 ; SSE2-NEXT: orl %ecx, %eax 369 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 370 ; SSE2-NEXT: andl $1, %ecx 371 ; SSE2-NEXT: shll $6, %ecx 372 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 373 ; SSE2-NEXT: andl $1, %edx 374 ; SSE2-NEXT: shll $7, %edx 375 ; SSE2-NEXT: orl %ecx, %edx 376 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 377 ; SSE2-NEXT: andl $1, %ecx 378 ; SSE2-NEXT: shll $8, %ecx 379 ; SSE2-NEXT: orl %edx, %ecx 380 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 381 ; SSE2-NEXT: andl $1, %edx 382 ; SSE2-NEXT: shll $9, %edx 383 ; SSE2-NEXT: orl %ecx, %edx 384 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 385 ; SSE2-NEXT: andl $1, %ecx 386 ; SSE2-NEXT: shll $10, %ecx 387 ; SSE2-NEXT: orl %edx, %ecx 388 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 389 ; SSE2-NEXT: andl $1, %edx 390 ; SSE2-NEXT: shll $11, %edx 391 ; SSE2-NEXT: orl %ecx, %edx 392 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 393 ; SSE2-NEXT: andl $1, %ecx 394 ; SSE2-NEXT: shll $12, %ecx 395 ; SSE2-NEXT: orl %edx, %ecx 396 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 397 ; SSE2-NEXT: andl $1, %edx 398 ; SSE2-NEXT: shll $13, %edx 399 ; SSE2-NEXT: orl %ecx, %edx 400 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 401 ; SSE2-NEXT: andl $1, %ecx 402 ; SSE2-NEXT: shll $14, %ecx 403 ; SSE2-NEXT: orl %edx, %ecx 404 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 405 ; SSE2-NEXT: shll $15, %edx 406 ; SSE2-NEXT: orl %ecx, %edx 407 ; SSE2-NEXT: orl %eax, %edx 408 ; SSE2-NEXT: movw %dx, 2(%rdi) 409 ; SSE2-NEXT: movdqa %xmm0, -{{[0-9]+}}(%rsp) 410 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax 411 ; SSE2-NEXT: andl $1, %eax 412 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 413 ; SSE2-NEXT: andl $1, %ecx 414 ; SSE2-NEXT: leal (%rcx,%rax,2), %eax 415 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 416 ; SSE2-NEXT: andl $1, %ecx 417 ; SSE2-NEXT: leal (%rax,%rcx,4), %eax 418 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 419 ; SSE2-NEXT: andl $1, %ecx 420 ; SSE2-NEXT: leal (%rax,%rcx,8), %eax 421 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 422 ; SSE2-NEXT: andl $1, %ecx 423 ; SSE2-NEXT: shll $4, %ecx 424 ; SSE2-NEXT: orl %eax, %ecx 425 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax 426 ; SSE2-NEXT: andl $1, %eax 427 ; SSE2-NEXT: shll $5, %eax 428 ; SSE2-NEXT: orl %ecx, %eax 429 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 430 ; SSE2-NEXT: andl $1, %ecx 431 ; SSE2-NEXT: shll $6, %ecx 432 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 433 ; SSE2-NEXT: andl $1, %edx 434 ; SSE2-NEXT: shll $7, %edx 435 ; SSE2-NEXT: orl %ecx, %edx 436 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 437 ; SSE2-NEXT: andl $1, %ecx 438 ; SSE2-NEXT: shll $8, %ecx 439 ; SSE2-NEXT: orl %edx, %ecx 440 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 441 ; SSE2-NEXT: andl $1, %edx 442 ; SSE2-NEXT: shll $9, %edx 443 ; SSE2-NEXT: orl %ecx, %edx 444 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 445 ; SSE2-NEXT: andl $1, %ecx 446 ; SSE2-NEXT: shll $10, %ecx 447 ; SSE2-NEXT: orl %edx, %ecx 448 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 449 ; SSE2-NEXT: andl $1, %edx 450 ; SSE2-NEXT: shll $11, %edx 451 ; SSE2-NEXT: orl %ecx, %edx 452 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 453 ; SSE2-NEXT: andl $1, %ecx 454 ; SSE2-NEXT: shll $12, %ecx 455 ; SSE2-NEXT: orl %edx, %ecx 456 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 457 ; SSE2-NEXT: andl $1, %edx 458 ; SSE2-NEXT: shll $13, %edx 459 ; SSE2-NEXT: orl %ecx, %edx 460 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 461 ; SSE2-NEXT: andl $1, %ecx 462 ; SSE2-NEXT: shll $14, %ecx 463 ; SSE2-NEXT: orl %edx, %ecx 464 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 465 ; SSE2-NEXT: shll $15, %edx 466 ; SSE2-NEXT: orl %ecx, %edx 467 ; SSE2-NEXT: orl %eax, %edx 468 ; SSE2-NEXT: movw %dx, (%rdi) 469 ; SSE2-NEXT: movq %rdi, %rax 470 ; SSE2-NEXT: retq 471 ; 472 ; SSE42-LABEL: test_cmp_v32i8: 473 ; SSE42: # %bb.0: 474 ; SSE42-NEXT: pcmpgtb %xmm2, %xmm0 475 ; SSE42-NEXT: pcmpgtb %xmm3, %xmm1 476 ; SSE42-NEXT: pextrb $1, %xmm1, %eax 477 ; SSE42-NEXT: andl $1, %eax 478 ; SSE42-NEXT: pextrb $0, %xmm1, %ecx 479 ; SSE42-NEXT: andl $1, %ecx 480 ; SSE42-NEXT: leal (%rcx,%rax,2), %eax 481 ; SSE42-NEXT: pextrb $2, %xmm1, %ecx 482 ; SSE42-NEXT: andl $1, %ecx 483 ; SSE42-NEXT: leal (%rax,%rcx,4), %eax 484 ; SSE42-NEXT: pextrb $3, %xmm1, %ecx 485 ; SSE42-NEXT: andl $1, %ecx 486 ; SSE42-NEXT: leal (%rax,%rcx,8), %eax 487 ; SSE42-NEXT: pextrb $4, %xmm1, %ecx 488 ; SSE42-NEXT: andl $1, %ecx 489 ; SSE42-NEXT: shll $4, %ecx 490 ; SSE42-NEXT: orl %eax, %ecx 491 ; SSE42-NEXT: pextrb $5, %xmm1, %eax 492 ; SSE42-NEXT: andl $1, %eax 493 ; SSE42-NEXT: shll $5, %eax 494 ; SSE42-NEXT: orl %ecx, %eax 495 ; SSE42-NEXT: pextrb $6, %xmm1, %ecx 496 ; SSE42-NEXT: andl $1, %ecx 497 ; SSE42-NEXT: shll $6, %ecx 498 ; SSE42-NEXT: pextrb $7, %xmm1, %edx 499 ; SSE42-NEXT: andl $1, %edx 500 ; SSE42-NEXT: shll $7, %edx 501 ; SSE42-NEXT: orl %ecx, %edx 502 ; SSE42-NEXT: pextrb $8, %xmm1, %ecx 503 ; SSE42-NEXT: andl $1, %ecx 504 ; SSE42-NEXT: shll $8, %ecx 505 ; SSE42-NEXT: orl %edx, %ecx 506 ; SSE42-NEXT: pextrb $9, %xmm1, %edx 507 ; SSE42-NEXT: andl $1, %edx 508 ; SSE42-NEXT: shll $9, %edx 509 ; SSE42-NEXT: orl %ecx, %edx 510 ; SSE42-NEXT: pextrb $10, %xmm1, %ecx 511 ; SSE42-NEXT: andl $1, %ecx 512 ; SSE42-NEXT: shll $10, %ecx 513 ; SSE42-NEXT: orl %edx, %ecx 514 ; SSE42-NEXT: pextrb $11, %xmm1, %edx 515 ; SSE42-NEXT: andl $1, %edx 516 ; SSE42-NEXT: shll $11, %edx 517 ; SSE42-NEXT: orl %ecx, %edx 518 ; SSE42-NEXT: pextrb $12, %xmm1, %ecx 519 ; SSE42-NEXT: andl $1, %ecx 520 ; SSE42-NEXT: shll $12, %ecx 521 ; SSE42-NEXT: orl %edx, %ecx 522 ; SSE42-NEXT: pextrb $13, %xmm1, %edx 523 ; SSE42-NEXT: andl $1, %edx 524 ; SSE42-NEXT: shll $13, %edx 525 ; SSE42-NEXT: orl %ecx, %edx 526 ; SSE42-NEXT: pextrb $14, %xmm1, %ecx 527 ; SSE42-NEXT: andl $1, %ecx 528 ; SSE42-NEXT: shll $14, %ecx 529 ; SSE42-NEXT: orl %edx, %ecx 530 ; SSE42-NEXT: pextrb $15, %xmm1, %edx 531 ; SSE42-NEXT: shll $15, %edx 532 ; SSE42-NEXT: orl %ecx, %edx 533 ; SSE42-NEXT: orl %eax, %edx 534 ; SSE42-NEXT: movw %dx, 2(%rdi) 535 ; SSE42-NEXT: pextrb $1, %xmm0, %eax 536 ; SSE42-NEXT: andl $1, %eax 537 ; SSE42-NEXT: pextrb $0, %xmm0, %ecx 538 ; SSE42-NEXT: andl $1, %ecx 539 ; SSE42-NEXT: leal (%rcx,%rax,2), %eax 540 ; SSE42-NEXT: pextrb $2, %xmm0, %ecx 541 ; SSE42-NEXT: andl $1, %ecx 542 ; SSE42-NEXT: leal (%rax,%rcx,4), %eax 543 ; SSE42-NEXT: pextrb $3, %xmm0, %ecx 544 ; SSE42-NEXT: andl $1, %ecx 545 ; SSE42-NEXT: leal (%rax,%rcx,8), %eax 546 ; SSE42-NEXT: pextrb $4, %xmm0, %ecx 547 ; SSE42-NEXT: andl $1, %ecx 548 ; SSE42-NEXT: shll $4, %ecx 549 ; SSE42-NEXT: orl %eax, %ecx 550 ; SSE42-NEXT: pextrb $5, %xmm0, %eax 551 ; SSE42-NEXT: andl $1, %eax 552 ; SSE42-NEXT: shll $5, %eax 553 ; SSE42-NEXT: orl %ecx, %eax 554 ; SSE42-NEXT: pextrb $6, %xmm0, %ecx 555 ; SSE42-NEXT: andl $1, %ecx 556 ; SSE42-NEXT: shll $6, %ecx 557 ; SSE42-NEXT: pextrb $7, %xmm0, %edx 558 ; SSE42-NEXT: andl $1, %edx 559 ; SSE42-NEXT: shll $7, %edx 560 ; SSE42-NEXT: orl %ecx, %edx 561 ; SSE42-NEXT: pextrb $8, %xmm0, %ecx 562 ; SSE42-NEXT: andl $1, %ecx 563 ; SSE42-NEXT: shll $8, %ecx 564 ; SSE42-NEXT: orl %edx, %ecx 565 ; SSE42-NEXT: pextrb $9, %xmm0, %edx 566 ; SSE42-NEXT: andl $1, %edx 567 ; SSE42-NEXT: shll $9, %edx 568 ; SSE42-NEXT: orl %ecx, %edx 569 ; SSE42-NEXT: pextrb $10, %xmm0, %ecx 570 ; SSE42-NEXT: andl $1, %ecx 571 ; SSE42-NEXT: shll $10, %ecx 572 ; SSE42-NEXT: orl %edx, %ecx 573 ; SSE42-NEXT: pextrb $11, %xmm0, %edx 574 ; SSE42-NEXT: andl $1, %edx 575 ; SSE42-NEXT: shll $11, %edx 576 ; SSE42-NEXT: orl %ecx, %edx 577 ; SSE42-NEXT: pextrb $12, %xmm0, %ecx 578 ; SSE42-NEXT: andl $1, %ecx 579 ; SSE42-NEXT: shll $12, %ecx 580 ; SSE42-NEXT: orl %edx, %ecx 581 ; SSE42-NEXT: pextrb $13, %xmm0, %edx 582 ; SSE42-NEXT: andl $1, %edx 583 ; SSE42-NEXT: shll $13, %edx 584 ; SSE42-NEXT: orl %ecx, %edx 585 ; SSE42-NEXT: pextrb $14, %xmm0, %ecx 586 ; SSE42-NEXT: andl $1, %ecx 587 ; SSE42-NEXT: shll $14, %ecx 588 ; SSE42-NEXT: orl %edx, %ecx 589 ; SSE42-NEXT: pextrb $15, %xmm0, %edx 590 ; SSE42-NEXT: shll $15, %edx 591 ; SSE42-NEXT: orl %ecx, %edx 592 ; SSE42-NEXT: orl %eax, %edx 593 ; SSE42-NEXT: movw %dx, (%rdi) 594 ; SSE42-NEXT: movq %rdi, %rax 595 ; SSE42-NEXT: retq 596 ; 597 ; AVX1-LABEL: test_cmp_v32i8: 598 ; AVX1: # %bb.0: 599 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 600 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 601 ; AVX1-NEXT: vpcmpgtb %xmm2, %xmm3, %xmm2 602 ; AVX1-NEXT: vpcmpgtb %xmm1, %xmm0, %xmm0 603 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 604 ; AVX1-NEXT: retq 605 ; 606 ; AVX2-LABEL: test_cmp_v32i8: 607 ; AVX2: # %bb.0: 608 ; AVX2-NEXT: vpcmpgtb %ymm1, %ymm0, %ymm0 609 ; AVX2-NEXT: retq 610 ; 611 ; AVX512-LABEL: test_cmp_v32i8: 612 ; AVX512: # %bb.0: 613 ; AVX512-NEXT: vpcmpgtb %ymm1, %ymm0, %ymm0 614 ; AVX512-NEXT: retq 615 %1 = icmp sgt <32 x i8> %a0, %a1 616 ret <32 x i1> %1 617 } 618 619 ; 620 ; 512-bit vector comparisons 621 ; 622 623 define <8 x i1> @test_cmp_v8f64(<8 x double> %a0, <8 x double> %a1) nounwind { 624 ; SSE-LABEL: test_cmp_v8f64: 625 ; SSE: # %bb.0: 626 ; SSE-NEXT: cmpltpd %xmm3, %xmm7 627 ; SSE-NEXT: cmpltpd %xmm2, %xmm6 628 ; SSE-NEXT: packssdw %xmm7, %xmm6 629 ; SSE-NEXT: cmpltpd %xmm1, %xmm5 630 ; SSE-NEXT: cmpltpd %xmm0, %xmm4 631 ; SSE-NEXT: packssdw %xmm5, %xmm4 632 ; SSE-NEXT: packssdw %xmm6, %xmm4 633 ; SSE-NEXT: movdqa %xmm4, %xmm0 634 ; SSE-NEXT: retq 635 ; 636 ; AVX1-LABEL: test_cmp_v8f64: 637 ; AVX1: # %bb.0: 638 ; AVX1-NEXT: vcmpltpd %ymm1, %ymm3, %ymm1 639 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3 640 ; AVX1-NEXT: vpackssdw %xmm3, %xmm1, %xmm1 641 ; AVX1-NEXT: vcmpltpd %ymm0, %ymm2, %ymm0 642 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 643 ; AVX1-NEXT: vpackssdw %xmm2, %xmm0, %xmm0 644 ; AVX1-NEXT: vpackssdw %xmm1, %xmm0, %xmm0 645 ; AVX1-NEXT: vzeroupper 646 ; AVX1-NEXT: retq 647 ; 648 ; AVX2-LABEL: test_cmp_v8f64: 649 ; AVX2: # %bb.0: 650 ; AVX2-NEXT: vcmpltpd %ymm1, %ymm3, %ymm1 651 ; AVX2-NEXT: vcmpltpd %ymm0, %ymm2, %ymm0 652 ; AVX2-NEXT: vpackssdw %ymm1, %ymm0, %ymm0 653 ; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3] 654 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1 655 ; AVX2-NEXT: vpackssdw %xmm1, %xmm0, %xmm0 656 ; AVX2-NEXT: vzeroupper 657 ; AVX2-NEXT: retq 658 ; 659 ; AVX512F-LABEL: test_cmp_v8f64: 660 ; AVX512F: # %bb.0: 661 ; AVX512F-NEXT: vcmpltpd %zmm0, %zmm1, %k1 662 ; AVX512F-NEXT: vpternlogd $255, %zmm0, %zmm0, %zmm0 {%k1} {z} 663 ; AVX512F-NEXT: vpmovdw %zmm0, %ymm0 664 ; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 killed $ymm0 665 ; AVX512F-NEXT: vzeroupper 666 ; AVX512F-NEXT: retq 667 ; 668 ; AVX512DQ-LABEL: test_cmp_v8f64: 669 ; AVX512DQ: # %bb.0: 670 ; AVX512DQ-NEXT: vcmpltpd %zmm0, %zmm1, %k0 671 ; AVX512DQ-NEXT: vpmovm2d %k0, %zmm0 672 ; AVX512DQ-NEXT: vpmovdw %zmm0, %ymm0 673 ; AVX512DQ-NEXT: # kill: def $xmm0 killed $xmm0 killed $ymm0 674 ; AVX512DQ-NEXT: vzeroupper 675 ; AVX512DQ-NEXT: retq 676 ; 677 ; AVX512BW-LABEL: test_cmp_v8f64: 678 ; AVX512BW: # %bb.0: 679 ; AVX512BW-NEXT: vcmpltpd %zmm0, %zmm1, %k0 680 ; AVX512BW-NEXT: vpmovm2w %k0, %zmm0 681 ; AVX512BW-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 682 ; AVX512BW-NEXT: vzeroupper 683 ; AVX512BW-NEXT: retq 684 %1 = fcmp ogt <8 x double> %a0, %a1 685 ret <8 x i1> %1 686 } 687 688 define <16 x i1> @test_cmp_v16f32(<16 x float> %a0, <16 x float> %a1) nounwind { 689 ; SSE-LABEL: test_cmp_v16f32: 690 ; SSE: # %bb.0: 691 ; SSE-NEXT: cmpltps %xmm3, %xmm7 692 ; SSE-NEXT: cmpltps %xmm2, %xmm6 693 ; SSE-NEXT: packssdw %xmm7, %xmm6 694 ; SSE-NEXT: cmpltps %xmm1, %xmm5 695 ; SSE-NEXT: cmpltps %xmm0, %xmm4 696 ; SSE-NEXT: packssdw %xmm5, %xmm4 697 ; SSE-NEXT: packsswb %xmm6, %xmm4 698 ; SSE-NEXT: movdqa %xmm4, %xmm0 699 ; SSE-NEXT: retq 700 ; 701 ; AVX1-LABEL: test_cmp_v16f32: 702 ; AVX1: # %bb.0: 703 ; AVX1-NEXT: vcmpltps %ymm1, %ymm3, %ymm1 704 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3 705 ; AVX1-NEXT: vpackssdw %xmm3, %xmm1, %xmm1 706 ; AVX1-NEXT: vcmpltps %ymm0, %ymm2, %ymm0 707 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 708 ; AVX1-NEXT: vpackssdw %xmm2, %xmm0, %xmm0 709 ; AVX1-NEXT: vpacksswb %xmm1, %xmm0, %xmm0 710 ; AVX1-NEXT: vzeroupper 711 ; AVX1-NEXT: retq 712 ; 713 ; AVX2-LABEL: test_cmp_v16f32: 714 ; AVX2: # %bb.0: 715 ; AVX2-NEXT: vcmpltps %ymm1, %ymm3, %ymm1 716 ; AVX2-NEXT: vcmpltps %ymm0, %ymm2, %ymm0 717 ; AVX2-NEXT: vpackssdw %ymm1, %ymm0, %ymm0 718 ; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3] 719 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1 720 ; AVX2-NEXT: vpacksswb %xmm1, %xmm0, %xmm0 721 ; AVX2-NEXT: vzeroupper 722 ; AVX2-NEXT: retq 723 ; 724 ; AVX512F-LABEL: test_cmp_v16f32: 725 ; AVX512F: # %bb.0: 726 ; AVX512F-NEXT: vcmpltps %zmm0, %zmm1, %k1 727 ; AVX512F-NEXT: vpternlogd $255, %zmm0, %zmm0, %zmm0 {%k1} {z} 728 ; AVX512F-NEXT: vpmovdb %zmm0, %xmm0 729 ; AVX512F-NEXT: vzeroupper 730 ; AVX512F-NEXT: retq 731 ; 732 ; AVX512DQ-LABEL: test_cmp_v16f32: 733 ; AVX512DQ: # %bb.0: 734 ; AVX512DQ-NEXT: vcmpltps %zmm0, %zmm1, %k0 735 ; AVX512DQ-NEXT: vpmovm2d %k0, %zmm0 736 ; AVX512DQ-NEXT: vpmovdb %zmm0, %xmm0 737 ; AVX512DQ-NEXT: vzeroupper 738 ; AVX512DQ-NEXT: retq 739 ; 740 ; AVX512BW-LABEL: test_cmp_v16f32: 741 ; AVX512BW: # %bb.0: 742 ; AVX512BW-NEXT: vcmpltps %zmm0, %zmm1, %k0 743 ; AVX512BW-NEXT: vpmovm2b %k0, %zmm0 744 ; AVX512BW-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 745 ; AVX512BW-NEXT: vzeroupper 746 ; AVX512BW-NEXT: retq 747 %1 = fcmp ogt <16 x float> %a0, %a1 748 ret <16 x i1> %1 749 } 750 751 define <8 x i1> @test_cmp_v8i64(<8 x i64> %a0, <8 x i64> %a1) nounwind { 752 ; SSE2-LABEL: test_cmp_v8i64: 753 ; SSE2: # %bb.0: 754 ; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [2147483648,0,2147483648,0] 755 ; SSE2-NEXT: pxor %xmm8, %xmm7 756 ; SSE2-NEXT: pxor %xmm8, %xmm3 757 ; SSE2-NEXT: movdqa %xmm3, %xmm9 758 ; SSE2-NEXT: pcmpgtd %xmm7, %xmm9 759 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2] 760 ; SSE2-NEXT: pcmpeqd %xmm7, %xmm3 761 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3] 762 ; SSE2-NEXT: pand %xmm10, %xmm3 763 ; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm9[1,1,3,3] 764 ; SSE2-NEXT: por %xmm3, %xmm7 765 ; SSE2-NEXT: pxor %xmm8, %xmm6 766 ; SSE2-NEXT: pxor %xmm8, %xmm2 767 ; SSE2-NEXT: movdqa %xmm2, %xmm3 768 ; SSE2-NEXT: pcmpgtd %xmm6, %xmm3 769 ; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm3[0,0,2,2] 770 ; SSE2-NEXT: pcmpeqd %xmm6, %xmm2 771 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm2[1,1,3,3] 772 ; SSE2-NEXT: pand %xmm9, %xmm6 773 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm3[1,1,3,3] 774 ; SSE2-NEXT: por %xmm6, %xmm2 775 ; SSE2-NEXT: packssdw %xmm7, %xmm2 776 ; SSE2-NEXT: pxor %xmm8, %xmm5 777 ; SSE2-NEXT: pxor %xmm8, %xmm1 778 ; SSE2-NEXT: movdqa %xmm1, %xmm3 779 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm3 780 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm3[0,0,2,2] 781 ; SSE2-NEXT: pcmpeqd %xmm5, %xmm1 782 ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3] 783 ; SSE2-NEXT: pand %xmm6, %xmm1 784 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3] 785 ; SSE2-NEXT: por %xmm1, %xmm3 786 ; SSE2-NEXT: pxor %xmm8, %xmm4 787 ; SSE2-NEXT: pxor %xmm8, %xmm0 788 ; SSE2-NEXT: movdqa %xmm0, %xmm1 789 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm1 790 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm1[0,0,2,2] 791 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm0 792 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm0[1,1,3,3] 793 ; SSE2-NEXT: pand %xmm5, %xmm4 794 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm1[1,1,3,3] 795 ; SSE2-NEXT: por %xmm4, %xmm0 796 ; SSE2-NEXT: packssdw %xmm3, %xmm0 797 ; SSE2-NEXT: packssdw %xmm2, %xmm0 798 ; SSE2-NEXT: retq 799 ; 800 ; SSE42-LABEL: test_cmp_v8i64: 801 ; SSE42: # %bb.0: 802 ; SSE42-NEXT: pcmpgtq %xmm7, %xmm3 803 ; SSE42-NEXT: pcmpgtq %xmm6, %xmm2 804 ; SSE42-NEXT: packssdw %xmm3, %xmm2 805 ; SSE42-NEXT: pcmpgtq %xmm5, %xmm1 806 ; SSE42-NEXT: pcmpgtq %xmm4, %xmm0 807 ; SSE42-NEXT: packssdw %xmm1, %xmm0 808 ; SSE42-NEXT: packssdw %xmm2, %xmm0 809 ; SSE42-NEXT: retq 810 ; 811 ; AVX1-LABEL: test_cmp_v8i64: 812 ; AVX1: # %bb.0: 813 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm4 814 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm5 815 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4 816 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm1, %xmm1 817 ; AVX1-NEXT: vpackssdw %xmm4, %xmm1, %xmm1 818 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm3 819 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4 820 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm4, %xmm3 821 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm0, %xmm0 822 ; AVX1-NEXT: vpackssdw %xmm3, %xmm0, %xmm0 823 ; AVX1-NEXT: vpackssdw %xmm1, %xmm0, %xmm0 824 ; AVX1-NEXT: vzeroupper 825 ; AVX1-NEXT: retq 826 ; 827 ; AVX2-LABEL: test_cmp_v8i64: 828 ; AVX2: # %bb.0: 829 ; AVX2-NEXT: vpcmpgtq %ymm3, %ymm1, %ymm1 830 ; AVX2-NEXT: vpcmpgtq %ymm2, %ymm0, %ymm0 831 ; AVX2-NEXT: vpackssdw %ymm1, %ymm0, %ymm0 832 ; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3] 833 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1 834 ; AVX2-NEXT: vpackssdw %xmm1, %xmm0, %xmm0 835 ; AVX2-NEXT: vzeroupper 836 ; AVX2-NEXT: retq 837 ; 838 ; AVX512F-LABEL: test_cmp_v8i64: 839 ; AVX512F: # %bb.0: 840 ; AVX512F-NEXT: vpcmpgtq %zmm1, %zmm0, %k1 841 ; AVX512F-NEXT: vpternlogd $255, %zmm0, %zmm0, %zmm0 {%k1} {z} 842 ; AVX512F-NEXT: vpmovdw %zmm0, %ymm0 843 ; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 killed $ymm0 844 ; AVX512F-NEXT: vzeroupper 845 ; AVX512F-NEXT: retq 846 ; 847 ; AVX512DQ-LABEL: test_cmp_v8i64: 848 ; AVX512DQ: # %bb.0: 849 ; AVX512DQ-NEXT: vpcmpgtq %zmm1, %zmm0, %k0 850 ; AVX512DQ-NEXT: vpmovm2d %k0, %zmm0 851 ; AVX512DQ-NEXT: vpmovdw %zmm0, %ymm0 852 ; AVX512DQ-NEXT: # kill: def $xmm0 killed $xmm0 killed $ymm0 853 ; AVX512DQ-NEXT: vzeroupper 854 ; AVX512DQ-NEXT: retq 855 ; 856 ; AVX512BW-LABEL: test_cmp_v8i64: 857 ; AVX512BW: # %bb.0: 858 ; AVX512BW-NEXT: vpcmpgtq %zmm1, %zmm0, %k0 859 ; AVX512BW-NEXT: vpmovm2w %k0, %zmm0 860 ; AVX512BW-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 861 ; AVX512BW-NEXT: vzeroupper 862 ; AVX512BW-NEXT: retq 863 %1 = icmp sgt <8 x i64> %a0, %a1 864 ret <8 x i1> %1 865 } 866 867 define <16 x i1> @test_cmp_v16i32(<16 x i32> %a0, <16 x i32> %a1) nounwind { 868 ; SSE-LABEL: test_cmp_v16i32: 869 ; SSE: # %bb.0: 870 ; SSE-NEXT: pcmpgtd %xmm7, %xmm3 871 ; SSE-NEXT: pcmpgtd %xmm6, %xmm2 872 ; SSE-NEXT: packssdw %xmm3, %xmm2 873 ; SSE-NEXT: pcmpgtd %xmm5, %xmm1 874 ; SSE-NEXT: pcmpgtd %xmm4, %xmm0 875 ; SSE-NEXT: packssdw %xmm1, %xmm0 876 ; SSE-NEXT: packsswb %xmm2, %xmm0 877 ; SSE-NEXT: retq 878 ; 879 ; AVX1-LABEL: test_cmp_v16i32: 880 ; AVX1: # %bb.0: 881 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm4 882 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm5 883 ; AVX1-NEXT: vpcmpgtd %xmm4, %xmm5, %xmm4 884 ; AVX1-NEXT: vpcmpgtd %xmm3, %xmm1, %xmm1 885 ; AVX1-NEXT: vpackssdw %xmm4, %xmm1, %xmm1 886 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm3 887 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4 888 ; AVX1-NEXT: vpcmpgtd %xmm3, %xmm4, %xmm3 889 ; AVX1-NEXT: vpcmpgtd %xmm2, %xmm0, %xmm0 890 ; AVX1-NEXT: vpackssdw %xmm3, %xmm0, %xmm0 891 ; AVX1-NEXT: vpacksswb %xmm1, %xmm0, %xmm0 892 ; AVX1-NEXT: vzeroupper 893 ; AVX1-NEXT: retq 894 ; 895 ; AVX2-LABEL: test_cmp_v16i32: 896 ; AVX2: # %bb.0: 897 ; AVX2-NEXT: vpcmpgtd %ymm3, %ymm1, %ymm1 898 ; AVX2-NEXT: vpcmpgtd %ymm2, %ymm0, %ymm0 899 ; AVX2-NEXT: vpackssdw %ymm1, %ymm0, %ymm0 900 ; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3] 901 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1 902 ; AVX2-NEXT: vpacksswb %xmm1, %xmm0, %xmm0 903 ; AVX2-NEXT: vzeroupper 904 ; AVX2-NEXT: retq 905 ; 906 ; AVX512F-LABEL: test_cmp_v16i32: 907 ; AVX512F: # %bb.0: 908 ; AVX512F-NEXT: vpcmpgtd %zmm1, %zmm0, %k1 909 ; AVX512F-NEXT: vpternlogd $255, %zmm0, %zmm0, %zmm0 {%k1} {z} 910 ; AVX512F-NEXT: vpmovdb %zmm0, %xmm0 911 ; AVX512F-NEXT: vzeroupper 912 ; AVX512F-NEXT: retq 913 ; 914 ; AVX512DQ-LABEL: test_cmp_v16i32: 915 ; AVX512DQ: # %bb.0: 916 ; AVX512DQ-NEXT: vpcmpgtd %zmm1, %zmm0, %k0 917 ; AVX512DQ-NEXT: vpmovm2d %k0, %zmm0 918 ; AVX512DQ-NEXT: vpmovdb %zmm0, %xmm0 919 ; AVX512DQ-NEXT: vzeroupper 920 ; AVX512DQ-NEXT: retq 921 ; 922 ; AVX512BW-LABEL: test_cmp_v16i32: 923 ; AVX512BW: # %bb.0: 924 ; AVX512BW-NEXT: vpcmpgtd %zmm1, %zmm0, %k0 925 ; AVX512BW-NEXT: vpmovm2b %k0, %zmm0 926 ; AVX512BW-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 927 ; AVX512BW-NEXT: vzeroupper 928 ; AVX512BW-NEXT: retq 929 %1 = icmp sgt <16 x i32> %a0, %a1 930 ret <16 x i1> %1 931 } 932 933 define <32 x i1> @test_cmp_v32i16(<32 x i16> %a0, <32 x i16> %a1) nounwind { 934 ; SSE2-LABEL: test_cmp_v32i16: 935 ; SSE2: # %bb.0: 936 ; SSE2-NEXT: pcmpgtw %xmm5, %xmm1 937 ; SSE2-NEXT: pcmpgtw %xmm4, %xmm0 938 ; SSE2-NEXT: packsswb %xmm1, %xmm0 939 ; SSE2-NEXT: pcmpgtw %xmm7, %xmm3 940 ; SSE2-NEXT: pcmpgtw %xmm6, %xmm2 941 ; SSE2-NEXT: packsswb %xmm3, %xmm2 942 ; SSE2-NEXT: movdqa %xmm2, -{{[0-9]+}}(%rsp) 943 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax 944 ; SSE2-NEXT: andl $1, %eax 945 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 946 ; SSE2-NEXT: andl $1, %ecx 947 ; SSE2-NEXT: leal (%rcx,%rax,2), %eax 948 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 949 ; SSE2-NEXT: andl $1, %ecx 950 ; SSE2-NEXT: leal (%rax,%rcx,4), %eax 951 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 952 ; SSE2-NEXT: andl $1, %ecx 953 ; SSE2-NEXT: leal (%rax,%rcx,8), %eax 954 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 955 ; SSE2-NEXT: andl $1, %ecx 956 ; SSE2-NEXT: shll $4, %ecx 957 ; SSE2-NEXT: orl %eax, %ecx 958 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax 959 ; SSE2-NEXT: andl $1, %eax 960 ; SSE2-NEXT: shll $5, %eax 961 ; SSE2-NEXT: orl %ecx, %eax 962 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 963 ; SSE2-NEXT: andl $1, %ecx 964 ; SSE2-NEXT: shll $6, %ecx 965 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 966 ; SSE2-NEXT: andl $1, %edx 967 ; SSE2-NEXT: shll $7, %edx 968 ; SSE2-NEXT: orl %ecx, %edx 969 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 970 ; SSE2-NEXT: andl $1, %ecx 971 ; SSE2-NEXT: shll $8, %ecx 972 ; SSE2-NEXT: orl %edx, %ecx 973 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 974 ; SSE2-NEXT: andl $1, %edx 975 ; SSE2-NEXT: shll $9, %edx 976 ; SSE2-NEXT: orl %ecx, %edx 977 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 978 ; SSE2-NEXT: andl $1, %ecx 979 ; SSE2-NEXT: shll $10, %ecx 980 ; SSE2-NEXT: orl %edx, %ecx 981 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 982 ; SSE2-NEXT: andl $1, %edx 983 ; SSE2-NEXT: shll $11, %edx 984 ; SSE2-NEXT: orl %ecx, %edx 985 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 986 ; SSE2-NEXT: andl $1, %ecx 987 ; SSE2-NEXT: shll $12, %ecx 988 ; SSE2-NEXT: orl %edx, %ecx 989 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 990 ; SSE2-NEXT: andl $1, %edx 991 ; SSE2-NEXT: shll $13, %edx 992 ; SSE2-NEXT: orl %ecx, %edx 993 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 994 ; SSE2-NEXT: andl $1, %ecx 995 ; SSE2-NEXT: shll $14, %ecx 996 ; SSE2-NEXT: orl %edx, %ecx 997 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 998 ; SSE2-NEXT: shll $15, %edx 999 ; SSE2-NEXT: orl %ecx, %edx 1000 ; SSE2-NEXT: orl %eax, %edx 1001 ; SSE2-NEXT: movw %dx, 2(%rdi) 1002 ; SSE2-NEXT: movdqa %xmm0, -{{[0-9]+}}(%rsp) 1003 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax 1004 ; SSE2-NEXT: andl $1, %eax 1005 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 1006 ; SSE2-NEXT: andl $1, %ecx 1007 ; SSE2-NEXT: leal (%rcx,%rax,2), %eax 1008 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 1009 ; SSE2-NEXT: andl $1, %ecx 1010 ; SSE2-NEXT: leal (%rax,%rcx,4), %eax 1011 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 1012 ; SSE2-NEXT: andl $1, %ecx 1013 ; SSE2-NEXT: leal (%rax,%rcx,8), %eax 1014 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 1015 ; SSE2-NEXT: andl $1, %ecx 1016 ; SSE2-NEXT: shll $4, %ecx 1017 ; SSE2-NEXT: orl %eax, %ecx 1018 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax 1019 ; SSE2-NEXT: andl $1, %eax 1020 ; SSE2-NEXT: shll $5, %eax 1021 ; SSE2-NEXT: orl %ecx, %eax 1022 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 1023 ; SSE2-NEXT: andl $1, %ecx 1024 ; SSE2-NEXT: shll $6, %ecx 1025 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 1026 ; SSE2-NEXT: andl $1, %edx 1027 ; SSE2-NEXT: shll $7, %edx 1028 ; SSE2-NEXT: orl %ecx, %edx 1029 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 1030 ; SSE2-NEXT: andl $1, %ecx 1031 ; SSE2-NEXT: shll $8, %ecx 1032 ; SSE2-NEXT: orl %edx, %ecx 1033 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 1034 ; SSE2-NEXT: andl $1, %edx 1035 ; SSE2-NEXT: shll $9, %edx 1036 ; SSE2-NEXT: orl %ecx, %edx 1037 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 1038 ; SSE2-NEXT: andl $1, %ecx 1039 ; SSE2-NEXT: shll $10, %ecx 1040 ; SSE2-NEXT: orl %edx, %ecx 1041 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 1042 ; SSE2-NEXT: andl $1, %edx 1043 ; SSE2-NEXT: shll $11, %edx 1044 ; SSE2-NEXT: orl %ecx, %edx 1045 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 1046 ; SSE2-NEXT: andl $1, %ecx 1047 ; SSE2-NEXT: shll $12, %ecx 1048 ; SSE2-NEXT: orl %edx, %ecx 1049 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 1050 ; SSE2-NEXT: andl $1, %edx 1051 ; SSE2-NEXT: shll $13, %edx 1052 ; SSE2-NEXT: orl %ecx, %edx 1053 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 1054 ; SSE2-NEXT: andl $1, %ecx 1055 ; SSE2-NEXT: shll $14, %ecx 1056 ; SSE2-NEXT: orl %edx, %ecx 1057 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 1058 ; SSE2-NEXT: shll $15, %edx 1059 ; SSE2-NEXT: orl %ecx, %edx 1060 ; SSE2-NEXT: orl %eax, %edx 1061 ; SSE2-NEXT: movw %dx, (%rdi) 1062 ; SSE2-NEXT: movq %rdi, %rax 1063 ; SSE2-NEXT: retq 1064 ; 1065 ; SSE42-LABEL: test_cmp_v32i16: 1066 ; SSE42: # %bb.0: 1067 ; SSE42-NEXT: pcmpgtw %xmm5, %xmm1 1068 ; SSE42-NEXT: pcmpgtw %xmm4, %xmm0 1069 ; SSE42-NEXT: pcmpgtw %xmm7, %xmm3 1070 ; SSE42-NEXT: pcmpgtw %xmm6, %xmm2 1071 ; SSE42-NEXT: pextrb $2, %xmm2, %eax 1072 ; SSE42-NEXT: andl $1, %eax 1073 ; SSE42-NEXT: pextrb $0, %xmm2, %ecx 1074 ; SSE42-NEXT: andl $1, %ecx 1075 ; SSE42-NEXT: leal (%rcx,%rax,2), %eax 1076 ; SSE42-NEXT: pextrb $4, %xmm2, %ecx 1077 ; SSE42-NEXT: andl $1, %ecx 1078 ; SSE42-NEXT: leal (%rax,%rcx,4), %eax 1079 ; SSE42-NEXT: pextrb $6, %xmm2, %ecx 1080 ; SSE42-NEXT: andl $1, %ecx 1081 ; SSE42-NEXT: leal (%rax,%rcx,8), %eax 1082 ; SSE42-NEXT: pextrb $8, %xmm2, %ecx 1083 ; SSE42-NEXT: andl $1, %ecx 1084 ; SSE42-NEXT: shll $4, %ecx 1085 ; SSE42-NEXT: orl %eax, %ecx 1086 ; SSE42-NEXT: pextrb $10, %xmm2, %eax 1087 ; SSE42-NEXT: andl $1, %eax 1088 ; SSE42-NEXT: shll $5, %eax 1089 ; SSE42-NEXT: orl %ecx, %eax 1090 ; SSE42-NEXT: pextrb $12, %xmm2, %ecx 1091 ; SSE42-NEXT: andl $1, %ecx 1092 ; SSE42-NEXT: shll $6, %ecx 1093 ; SSE42-NEXT: pextrb $14, %xmm2, %edx 1094 ; SSE42-NEXT: andl $1, %edx 1095 ; SSE42-NEXT: shll $7, %edx 1096 ; SSE42-NEXT: orl %ecx, %edx 1097 ; SSE42-NEXT: pextrb $0, %xmm3, %ecx 1098 ; SSE42-NEXT: andl $1, %ecx 1099 ; SSE42-NEXT: shll $8, %ecx 1100 ; SSE42-NEXT: orl %edx, %ecx 1101 ; SSE42-NEXT: pextrb $2, %xmm3, %edx 1102 ; SSE42-NEXT: andl $1, %edx 1103 ; SSE42-NEXT: shll $9, %edx 1104 ; SSE42-NEXT: orl %ecx, %edx 1105 ; SSE42-NEXT: pextrb $4, %xmm3, %ecx 1106 ; SSE42-NEXT: andl $1, %ecx 1107 ; SSE42-NEXT: shll $10, %ecx 1108 ; SSE42-NEXT: orl %edx, %ecx 1109 ; SSE42-NEXT: pextrb $6, %xmm3, %edx 1110 ; SSE42-NEXT: andl $1, %edx 1111 ; SSE42-NEXT: shll $11, %edx 1112 ; SSE42-NEXT: orl %ecx, %edx 1113 ; SSE42-NEXT: pextrb $8, %xmm3, %ecx 1114 ; SSE42-NEXT: andl $1, %ecx 1115 ; SSE42-NEXT: shll $12, %ecx 1116 ; SSE42-NEXT: orl %edx, %ecx 1117 ; SSE42-NEXT: pextrb $10, %xmm3, %edx 1118 ; SSE42-NEXT: andl $1, %edx 1119 ; SSE42-NEXT: shll $13, %edx 1120 ; SSE42-NEXT: orl %ecx, %edx 1121 ; SSE42-NEXT: pextrb $12, %xmm3, %ecx 1122 ; SSE42-NEXT: andl $1, %ecx 1123 ; SSE42-NEXT: shll $14, %ecx 1124 ; SSE42-NEXT: orl %edx, %ecx 1125 ; SSE42-NEXT: pextrb $14, %xmm3, %edx 1126 ; SSE42-NEXT: shll $15, %edx 1127 ; SSE42-NEXT: orl %ecx, %edx 1128 ; SSE42-NEXT: orl %eax, %edx 1129 ; SSE42-NEXT: movw %dx, 2(%rdi) 1130 ; SSE42-NEXT: pextrb $2, %xmm0, %eax 1131 ; SSE42-NEXT: andl $1, %eax 1132 ; SSE42-NEXT: pextrb $0, %xmm0, %ecx 1133 ; SSE42-NEXT: andl $1, %ecx 1134 ; SSE42-NEXT: leal (%rcx,%rax,2), %eax 1135 ; SSE42-NEXT: pextrb $4, %xmm0, %ecx 1136 ; SSE42-NEXT: andl $1, %ecx 1137 ; SSE42-NEXT: leal (%rax,%rcx,4), %eax 1138 ; SSE42-NEXT: pextrb $6, %xmm0, %ecx 1139 ; SSE42-NEXT: andl $1, %ecx 1140 ; SSE42-NEXT: leal (%rax,%rcx,8), %eax 1141 ; SSE42-NEXT: pextrb $8, %xmm0, %ecx 1142 ; SSE42-NEXT: andl $1, %ecx 1143 ; SSE42-NEXT: shll $4, %ecx 1144 ; SSE42-NEXT: orl %eax, %ecx 1145 ; SSE42-NEXT: pextrb $10, %xmm0, %eax 1146 ; SSE42-NEXT: andl $1, %eax 1147 ; SSE42-NEXT: shll $5, %eax 1148 ; SSE42-NEXT: orl %ecx, %eax 1149 ; SSE42-NEXT: pextrb $12, %xmm0, %ecx 1150 ; SSE42-NEXT: andl $1, %ecx 1151 ; SSE42-NEXT: shll $6, %ecx 1152 ; SSE42-NEXT: pextrb $14, %xmm0, %edx 1153 ; SSE42-NEXT: andl $1, %edx 1154 ; SSE42-NEXT: shll $7, %edx 1155 ; SSE42-NEXT: orl %ecx, %edx 1156 ; SSE42-NEXT: pextrb $0, %xmm1, %ecx 1157 ; SSE42-NEXT: andl $1, %ecx 1158 ; SSE42-NEXT: shll $8, %ecx 1159 ; SSE42-NEXT: orl %edx, %ecx 1160 ; SSE42-NEXT: pextrb $2, %xmm1, %edx 1161 ; SSE42-NEXT: andl $1, %edx 1162 ; SSE42-NEXT: shll $9, %edx 1163 ; SSE42-NEXT: orl %ecx, %edx 1164 ; SSE42-NEXT: pextrb $4, %xmm1, %ecx 1165 ; SSE42-NEXT: andl $1, %ecx 1166 ; SSE42-NEXT: shll $10, %ecx 1167 ; SSE42-NEXT: orl %edx, %ecx 1168 ; SSE42-NEXT: pextrb $6, %xmm1, %edx 1169 ; SSE42-NEXT: andl $1, %edx 1170 ; SSE42-NEXT: shll $11, %edx 1171 ; SSE42-NEXT: orl %ecx, %edx 1172 ; SSE42-NEXT: pextrb $8, %xmm1, %ecx 1173 ; SSE42-NEXT: andl $1, %ecx 1174 ; SSE42-NEXT: shll $12, %ecx 1175 ; SSE42-NEXT: orl %edx, %ecx 1176 ; SSE42-NEXT: pextrb $10, %xmm1, %edx 1177 ; SSE42-NEXT: andl $1, %edx 1178 ; SSE42-NEXT: shll $13, %edx 1179 ; SSE42-NEXT: orl %ecx, %edx 1180 ; SSE42-NEXT: pextrb $12, %xmm1, %ecx 1181 ; SSE42-NEXT: andl $1, %ecx 1182 ; SSE42-NEXT: shll $14, %ecx 1183 ; SSE42-NEXT: orl %edx, %ecx 1184 ; SSE42-NEXT: pextrb $14, %xmm1, %edx 1185 ; SSE42-NEXT: shll $15, %edx 1186 ; SSE42-NEXT: orl %ecx, %edx 1187 ; SSE42-NEXT: orl %eax, %edx 1188 ; SSE42-NEXT: movw %dx, (%rdi) 1189 ; SSE42-NEXT: movq %rdi, %rax 1190 ; SSE42-NEXT: retq 1191 ; 1192 ; AVX1-LABEL: test_cmp_v32i16: 1193 ; AVX1: # %bb.0: 1194 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm4 1195 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm5 1196 ; AVX1-NEXT: vpcmpgtw %xmm4, %xmm5, %xmm4 1197 ; AVX1-NEXT: vpcmpgtw %xmm3, %xmm1, %xmm1 1198 ; AVX1-NEXT: vpacksswb %xmm4, %xmm1, %xmm1 1199 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm3 1200 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4 1201 ; AVX1-NEXT: vpcmpgtw %xmm3, %xmm4, %xmm3 1202 ; AVX1-NEXT: vpcmpgtw %xmm2, %xmm0, %xmm0 1203 ; AVX1-NEXT: vpacksswb %xmm3, %xmm0, %xmm0 1204 ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 1205 ; AVX1-NEXT: retq 1206 ; 1207 ; AVX2-LABEL: test_cmp_v32i16: 1208 ; AVX2: # %bb.0: 1209 ; AVX2-NEXT: vpcmpgtw %ymm3, %ymm1, %ymm1 1210 ; AVX2-NEXT: vpcmpgtw %ymm2, %ymm0, %ymm0 1211 ; AVX2-NEXT: vpacksswb %ymm1, %ymm0, %ymm0 1212 ; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3] 1213 ; AVX2-NEXT: retq 1214 ; 1215 ; AVX512F-LABEL: test_cmp_v32i16: 1216 ; AVX512F: # %bb.0: 1217 ; AVX512F-NEXT: vpcmpgtw %ymm2, %ymm0, %ymm0 1218 ; AVX512F-NEXT: vpmovsxwd %ymm0, %zmm0 1219 ; AVX512F-NEXT: vpmovdb %zmm0, %xmm0 1220 ; AVX512F-NEXT: vpcmpgtw %ymm3, %ymm1, %ymm1 1221 ; AVX512F-NEXT: vpmovsxwd %ymm1, %zmm1 1222 ; AVX512F-NEXT: vpmovdb %zmm1, %xmm1 1223 ; AVX512F-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm0 1224 ; AVX512F-NEXT: retq 1225 ; 1226 ; AVX512DQ-LABEL: test_cmp_v32i16: 1227 ; AVX512DQ: # %bb.0: 1228 ; AVX512DQ-NEXT: vpcmpgtw %ymm2, %ymm0, %ymm0 1229 ; AVX512DQ-NEXT: vpmovsxwd %ymm0, %zmm0 1230 ; AVX512DQ-NEXT: vpmovdb %zmm0, %xmm0 1231 ; AVX512DQ-NEXT: vpcmpgtw %ymm3, %ymm1, %ymm1 1232 ; AVX512DQ-NEXT: vpmovsxwd %ymm1, %zmm1 1233 ; AVX512DQ-NEXT: vpmovdb %zmm1, %xmm1 1234 ; AVX512DQ-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm0 1235 ; AVX512DQ-NEXT: retq 1236 ; 1237 ; AVX512BW-LABEL: test_cmp_v32i16: 1238 ; AVX512BW: # %bb.0: 1239 ; AVX512BW-NEXT: vpcmpgtw %zmm1, %zmm0, %k0 1240 ; AVX512BW-NEXT: vpmovm2b %k0, %zmm0 1241 ; AVX512BW-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 1242 ; AVX512BW-NEXT: retq 1243 %1 = icmp sgt <32 x i16> %a0, %a1 1244 ret <32 x i1> %1 1245 } 1246 1247 define <64 x i1> @test_cmp_v64i8(<64 x i8> %a0, <64 x i8> %a1) nounwind { 1248 ; SSE2-LABEL: test_cmp_v64i8: 1249 ; SSE2: # %bb.0: 1250 ; SSE2-NEXT: pcmpgtb %xmm4, %xmm0 1251 ; SSE2-NEXT: pcmpgtb %xmm5, %xmm1 1252 ; SSE2-NEXT: pcmpgtb %xmm6, %xmm2 1253 ; SSE2-NEXT: pcmpgtb %xmm7, %xmm3 1254 ; SSE2-NEXT: movdqa %xmm3, -{{[0-9]+}}(%rsp) 1255 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax 1256 ; SSE2-NEXT: andl $1, %eax 1257 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 1258 ; SSE2-NEXT: andl $1, %ecx 1259 ; SSE2-NEXT: leal (%rcx,%rax,2), %eax 1260 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 1261 ; SSE2-NEXT: andl $1, %ecx 1262 ; SSE2-NEXT: leal (%rax,%rcx,4), %eax 1263 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 1264 ; SSE2-NEXT: andl $1, %ecx 1265 ; SSE2-NEXT: leal (%rax,%rcx,8), %eax 1266 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 1267 ; SSE2-NEXT: andl $1, %ecx 1268 ; SSE2-NEXT: shll $4, %ecx 1269 ; SSE2-NEXT: orl %eax, %ecx 1270 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax 1271 ; SSE2-NEXT: andl $1, %eax 1272 ; SSE2-NEXT: shll $5, %eax 1273 ; SSE2-NEXT: orl %ecx, %eax 1274 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 1275 ; SSE2-NEXT: andl $1, %ecx 1276 ; SSE2-NEXT: shll $6, %ecx 1277 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 1278 ; SSE2-NEXT: andl $1, %edx 1279 ; SSE2-NEXT: shll $7, %edx 1280 ; SSE2-NEXT: orl %ecx, %edx 1281 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 1282 ; SSE2-NEXT: andl $1, %ecx 1283 ; SSE2-NEXT: shll $8, %ecx 1284 ; SSE2-NEXT: orl %edx, %ecx 1285 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 1286 ; SSE2-NEXT: andl $1, %edx 1287 ; SSE2-NEXT: shll $9, %edx 1288 ; SSE2-NEXT: orl %ecx, %edx 1289 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 1290 ; SSE2-NEXT: andl $1, %ecx 1291 ; SSE2-NEXT: shll $10, %ecx 1292 ; SSE2-NEXT: orl %edx, %ecx 1293 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 1294 ; SSE2-NEXT: andl $1, %edx 1295 ; SSE2-NEXT: shll $11, %edx 1296 ; SSE2-NEXT: orl %ecx, %edx 1297 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 1298 ; SSE2-NEXT: andl $1, %ecx 1299 ; SSE2-NEXT: shll $12, %ecx 1300 ; SSE2-NEXT: orl %edx, %ecx 1301 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 1302 ; SSE2-NEXT: andl $1, %edx 1303 ; SSE2-NEXT: shll $13, %edx 1304 ; SSE2-NEXT: orl %ecx, %edx 1305 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 1306 ; SSE2-NEXT: andl $1, %ecx 1307 ; SSE2-NEXT: shll $14, %ecx 1308 ; SSE2-NEXT: orl %edx, %ecx 1309 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 1310 ; SSE2-NEXT: shll $15, %edx 1311 ; SSE2-NEXT: orl %ecx, %edx 1312 ; SSE2-NEXT: orl %eax, %edx 1313 ; SSE2-NEXT: movw %dx, 6(%rdi) 1314 ; SSE2-NEXT: movdqa %xmm2, -{{[0-9]+}}(%rsp) 1315 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax 1316 ; SSE2-NEXT: andl $1, %eax 1317 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 1318 ; SSE2-NEXT: andl $1, %ecx 1319 ; SSE2-NEXT: leal (%rcx,%rax,2), %eax 1320 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 1321 ; SSE2-NEXT: andl $1, %ecx 1322 ; SSE2-NEXT: leal (%rax,%rcx,4), %eax 1323 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 1324 ; SSE2-NEXT: andl $1, %ecx 1325 ; SSE2-NEXT: leal (%rax,%rcx,8), %eax 1326 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 1327 ; SSE2-NEXT: andl $1, %ecx 1328 ; SSE2-NEXT: shll $4, %ecx 1329 ; SSE2-NEXT: orl %eax, %ecx 1330 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax 1331 ; SSE2-NEXT: andl $1, %eax 1332 ; SSE2-NEXT: shll $5, %eax 1333 ; SSE2-NEXT: orl %ecx, %eax 1334 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 1335 ; SSE2-NEXT: andl $1, %ecx 1336 ; SSE2-NEXT: shll $6, %ecx 1337 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 1338 ; SSE2-NEXT: andl $1, %edx 1339 ; SSE2-NEXT: shll $7, %edx 1340 ; SSE2-NEXT: orl %ecx, %edx 1341 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 1342 ; SSE2-NEXT: andl $1, %ecx 1343 ; SSE2-NEXT: shll $8, %ecx 1344 ; SSE2-NEXT: orl %edx, %ecx 1345 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 1346 ; SSE2-NEXT: andl $1, %edx 1347 ; SSE2-NEXT: shll $9, %edx 1348 ; SSE2-NEXT: orl %ecx, %edx 1349 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 1350 ; SSE2-NEXT: andl $1, %ecx 1351 ; SSE2-NEXT: shll $10, %ecx 1352 ; SSE2-NEXT: orl %edx, %ecx 1353 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 1354 ; SSE2-NEXT: andl $1, %edx 1355 ; SSE2-NEXT: shll $11, %edx 1356 ; SSE2-NEXT: orl %ecx, %edx 1357 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 1358 ; SSE2-NEXT: andl $1, %ecx 1359 ; SSE2-NEXT: shll $12, %ecx 1360 ; SSE2-NEXT: orl %edx, %ecx 1361 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 1362 ; SSE2-NEXT: andl $1, %edx 1363 ; SSE2-NEXT: shll $13, %edx 1364 ; SSE2-NEXT: orl %ecx, %edx 1365 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 1366 ; SSE2-NEXT: andl $1, %ecx 1367 ; SSE2-NEXT: shll $14, %ecx 1368 ; SSE2-NEXT: orl %edx, %ecx 1369 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 1370 ; SSE2-NEXT: shll $15, %edx 1371 ; SSE2-NEXT: orl %ecx, %edx 1372 ; SSE2-NEXT: orl %eax, %edx 1373 ; SSE2-NEXT: movw %dx, 4(%rdi) 1374 ; SSE2-NEXT: movdqa %xmm1, -{{[0-9]+}}(%rsp) 1375 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax 1376 ; SSE2-NEXT: andl $1, %eax 1377 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 1378 ; SSE2-NEXT: andl $1, %ecx 1379 ; SSE2-NEXT: leal (%rcx,%rax,2), %eax 1380 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 1381 ; SSE2-NEXT: andl $1, %ecx 1382 ; SSE2-NEXT: leal (%rax,%rcx,4), %eax 1383 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 1384 ; SSE2-NEXT: andl $1, %ecx 1385 ; SSE2-NEXT: leal (%rax,%rcx,8), %eax 1386 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 1387 ; SSE2-NEXT: andl $1, %ecx 1388 ; SSE2-NEXT: shll $4, %ecx 1389 ; SSE2-NEXT: orl %eax, %ecx 1390 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax 1391 ; SSE2-NEXT: andl $1, %eax 1392 ; SSE2-NEXT: shll $5, %eax 1393 ; SSE2-NEXT: orl %ecx, %eax 1394 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 1395 ; SSE2-NEXT: andl $1, %ecx 1396 ; SSE2-NEXT: shll $6, %ecx 1397 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 1398 ; SSE2-NEXT: andl $1, %edx 1399 ; SSE2-NEXT: shll $7, %edx 1400 ; SSE2-NEXT: orl %ecx, %edx 1401 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 1402 ; SSE2-NEXT: andl $1, %ecx 1403 ; SSE2-NEXT: shll $8, %ecx 1404 ; SSE2-NEXT: orl %edx, %ecx 1405 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 1406 ; SSE2-NEXT: andl $1, %edx 1407 ; SSE2-NEXT: shll $9, %edx 1408 ; SSE2-NEXT: orl %ecx, %edx 1409 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 1410 ; SSE2-NEXT: andl $1, %ecx 1411 ; SSE2-NEXT: shll $10, %ecx 1412 ; SSE2-NEXT: orl %edx, %ecx 1413 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 1414 ; SSE2-NEXT: andl $1, %edx 1415 ; SSE2-NEXT: shll $11, %edx 1416 ; SSE2-NEXT: orl %ecx, %edx 1417 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 1418 ; SSE2-NEXT: andl $1, %ecx 1419 ; SSE2-NEXT: shll $12, %ecx 1420 ; SSE2-NEXT: orl %edx, %ecx 1421 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 1422 ; SSE2-NEXT: andl $1, %edx 1423 ; SSE2-NEXT: shll $13, %edx 1424 ; SSE2-NEXT: orl %ecx, %edx 1425 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 1426 ; SSE2-NEXT: andl $1, %ecx 1427 ; SSE2-NEXT: shll $14, %ecx 1428 ; SSE2-NEXT: orl %edx, %ecx 1429 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 1430 ; SSE2-NEXT: shll $15, %edx 1431 ; SSE2-NEXT: orl %ecx, %edx 1432 ; SSE2-NEXT: orl %eax, %edx 1433 ; SSE2-NEXT: movw %dx, 2(%rdi) 1434 ; SSE2-NEXT: movdqa %xmm0, -{{[0-9]+}}(%rsp) 1435 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax 1436 ; SSE2-NEXT: andl $1, %eax 1437 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 1438 ; SSE2-NEXT: andl $1, %ecx 1439 ; SSE2-NEXT: leal (%rcx,%rax,2), %eax 1440 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 1441 ; SSE2-NEXT: andl $1, %ecx 1442 ; SSE2-NEXT: leal (%rax,%rcx,4), %eax 1443 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 1444 ; SSE2-NEXT: andl $1, %ecx 1445 ; SSE2-NEXT: leal (%rax,%rcx,8), %eax 1446 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 1447 ; SSE2-NEXT: andl $1, %ecx 1448 ; SSE2-NEXT: shll $4, %ecx 1449 ; SSE2-NEXT: orl %eax, %ecx 1450 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax 1451 ; SSE2-NEXT: andl $1, %eax 1452 ; SSE2-NEXT: shll $5, %eax 1453 ; SSE2-NEXT: orl %ecx, %eax 1454 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 1455 ; SSE2-NEXT: andl $1, %ecx 1456 ; SSE2-NEXT: shll $6, %ecx 1457 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 1458 ; SSE2-NEXT: andl $1, %edx 1459 ; SSE2-NEXT: shll $7, %edx 1460 ; SSE2-NEXT: orl %ecx, %edx 1461 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 1462 ; SSE2-NEXT: andl $1, %ecx 1463 ; SSE2-NEXT: shll $8, %ecx 1464 ; SSE2-NEXT: orl %edx, %ecx 1465 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 1466 ; SSE2-NEXT: andl $1, %edx 1467 ; SSE2-NEXT: shll $9, %edx 1468 ; SSE2-NEXT: orl %ecx, %edx 1469 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 1470 ; SSE2-NEXT: andl $1, %ecx 1471 ; SSE2-NEXT: shll $10, %ecx 1472 ; SSE2-NEXT: orl %edx, %ecx 1473 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 1474 ; SSE2-NEXT: andl $1, %edx 1475 ; SSE2-NEXT: shll $11, %edx 1476 ; SSE2-NEXT: orl %ecx, %edx 1477 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 1478 ; SSE2-NEXT: andl $1, %ecx 1479 ; SSE2-NEXT: shll $12, %ecx 1480 ; SSE2-NEXT: orl %edx, %ecx 1481 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 1482 ; SSE2-NEXT: andl $1, %edx 1483 ; SSE2-NEXT: shll $13, %edx 1484 ; SSE2-NEXT: orl %ecx, %edx 1485 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 1486 ; SSE2-NEXT: andl $1, %ecx 1487 ; SSE2-NEXT: shll $14, %ecx 1488 ; SSE2-NEXT: orl %edx, %ecx 1489 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 1490 ; SSE2-NEXT: shll $15, %edx 1491 ; SSE2-NEXT: orl %ecx, %edx 1492 ; SSE2-NEXT: orl %eax, %edx 1493 ; SSE2-NEXT: movw %dx, (%rdi) 1494 ; SSE2-NEXT: movq %rdi, %rax 1495 ; SSE2-NEXT: retq 1496 ; 1497 ; SSE42-LABEL: test_cmp_v64i8: 1498 ; SSE42: # %bb.0: 1499 ; SSE42-NEXT: pcmpgtb %xmm4, %xmm0 1500 ; SSE42-NEXT: pcmpgtb %xmm5, %xmm1 1501 ; SSE42-NEXT: pcmpgtb %xmm6, %xmm2 1502 ; SSE42-NEXT: pcmpgtb %xmm7, %xmm3 1503 ; SSE42-NEXT: pextrb $1, %xmm3, %eax 1504 ; SSE42-NEXT: andl $1, %eax 1505 ; SSE42-NEXT: pextrb $0, %xmm3, %ecx 1506 ; SSE42-NEXT: andl $1, %ecx 1507 ; SSE42-NEXT: leal (%rcx,%rax,2), %eax 1508 ; SSE42-NEXT: pextrb $2, %xmm3, %ecx 1509 ; SSE42-NEXT: andl $1, %ecx 1510 ; SSE42-NEXT: leal (%rax,%rcx,4), %eax 1511 ; SSE42-NEXT: pextrb $3, %xmm3, %ecx 1512 ; SSE42-NEXT: andl $1, %ecx 1513 ; SSE42-NEXT: leal (%rax,%rcx,8), %eax 1514 ; SSE42-NEXT: pextrb $4, %xmm3, %ecx 1515 ; SSE42-NEXT: andl $1, %ecx 1516 ; SSE42-NEXT: shll $4, %ecx 1517 ; SSE42-NEXT: orl %eax, %ecx 1518 ; SSE42-NEXT: pextrb $5, %xmm3, %eax 1519 ; SSE42-NEXT: andl $1, %eax 1520 ; SSE42-NEXT: shll $5, %eax 1521 ; SSE42-NEXT: orl %ecx, %eax 1522 ; SSE42-NEXT: pextrb $6, %xmm3, %ecx 1523 ; SSE42-NEXT: andl $1, %ecx 1524 ; SSE42-NEXT: shll $6, %ecx 1525 ; SSE42-NEXT: pextrb $7, %xmm3, %edx 1526 ; SSE42-NEXT: andl $1, %edx 1527 ; SSE42-NEXT: shll $7, %edx 1528 ; SSE42-NEXT: orl %ecx, %edx 1529 ; SSE42-NEXT: pextrb $8, %xmm3, %ecx 1530 ; SSE42-NEXT: andl $1, %ecx 1531 ; SSE42-NEXT: shll $8, %ecx 1532 ; SSE42-NEXT: orl %edx, %ecx 1533 ; SSE42-NEXT: pextrb $9, %xmm3, %edx 1534 ; SSE42-NEXT: andl $1, %edx 1535 ; SSE42-NEXT: shll $9, %edx 1536 ; SSE42-NEXT: orl %ecx, %edx 1537 ; SSE42-NEXT: pextrb $10, %xmm3, %ecx 1538 ; SSE42-NEXT: andl $1, %ecx 1539 ; SSE42-NEXT: shll $10, %ecx 1540 ; SSE42-NEXT: orl %edx, %ecx 1541 ; SSE42-NEXT: pextrb $11, %xmm3, %edx 1542 ; SSE42-NEXT: andl $1, %edx 1543 ; SSE42-NEXT: shll $11, %edx 1544 ; SSE42-NEXT: orl %ecx, %edx 1545 ; SSE42-NEXT: pextrb $12, %xmm3, %ecx 1546 ; SSE42-NEXT: andl $1, %ecx 1547 ; SSE42-NEXT: shll $12, %ecx 1548 ; SSE42-NEXT: orl %edx, %ecx 1549 ; SSE42-NEXT: pextrb $13, %xmm3, %edx 1550 ; SSE42-NEXT: andl $1, %edx 1551 ; SSE42-NEXT: shll $13, %edx 1552 ; SSE42-NEXT: orl %ecx, %edx 1553 ; SSE42-NEXT: pextrb $14, %xmm3, %ecx 1554 ; SSE42-NEXT: andl $1, %ecx 1555 ; SSE42-NEXT: shll $14, %ecx 1556 ; SSE42-NEXT: orl %edx, %ecx 1557 ; SSE42-NEXT: pextrb $15, %xmm3, %edx 1558 ; SSE42-NEXT: shll $15, %edx 1559 ; SSE42-NEXT: orl %ecx, %edx 1560 ; SSE42-NEXT: orl %eax, %edx 1561 ; SSE42-NEXT: movw %dx, 6(%rdi) 1562 ; SSE42-NEXT: pextrb $1, %xmm2, %eax 1563 ; SSE42-NEXT: andl $1, %eax 1564 ; SSE42-NEXT: pextrb $0, %xmm2, %ecx 1565 ; SSE42-NEXT: andl $1, %ecx 1566 ; SSE42-NEXT: leal (%rcx,%rax,2), %eax 1567 ; SSE42-NEXT: pextrb $2, %xmm2, %ecx 1568 ; SSE42-NEXT: andl $1, %ecx 1569 ; SSE42-NEXT: leal (%rax,%rcx,4), %eax 1570 ; SSE42-NEXT: pextrb $3, %xmm2, %ecx 1571 ; SSE42-NEXT: andl $1, %ecx 1572 ; SSE42-NEXT: leal (%rax,%rcx,8), %eax 1573 ; SSE42-NEXT: pextrb $4, %xmm2, %ecx 1574 ; SSE42-NEXT: andl $1, %ecx 1575 ; SSE42-NEXT: shll $4, %ecx 1576 ; SSE42-NEXT: orl %eax, %ecx 1577 ; SSE42-NEXT: pextrb $5, %xmm2, %eax 1578 ; SSE42-NEXT: andl $1, %eax 1579 ; SSE42-NEXT: shll $5, %eax 1580 ; SSE42-NEXT: orl %ecx, %eax 1581 ; SSE42-NEXT: pextrb $6, %xmm2, %ecx 1582 ; SSE42-NEXT: andl $1, %ecx 1583 ; SSE42-NEXT: shll $6, %ecx 1584 ; SSE42-NEXT: pextrb $7, %xmm2, %edx 1585 ; SSE42-NEXT: andl $1, %edx 1586 ; SSE42-NEXT: shll $7, %edx 1587 ; SSE42-NEXT: orl %ecx, %edx 1588 ; SSE42-NEXT: pextrb $8, %xmm2, %ecx 1589 ; SSE42-NEXT: andl $1, %ecx 1590 ; SSE42-NEXT: shll $8, %ecx 1591 ; SSE42-NEXT: orl %edx, %ecx 1592 ; SSE42-NEXT: pextrb $9, %xmm2, %edx 1593 ; SSE42-NEXT: andl $1, %edx 1594 ; SSE42-NEXT: shll $9, %edx 1595 ; SSE42-NEXT: orl %ecx, %edx 1596 ; SSE42-NEXT: pextrb $10, %xmm2, %ecx 1597 ; SSE42-NEXT: andl $1, %ecx 1598 ; SSE42-NEXT: shll $10, %ecx 1599 ; SSE42-NEXT: orl %edx, %ecx 1600 ; SSE42-NEXT: pextrb $11, %xmm2, %edx 1601 ; SSE42-NEXT: andl $1, %edx 1602 ; SSE42-NEXT: shll $11, %edx 1603 ; SSE42-NEXT: orl %ecx, %edx 1604 ; SSE42-NEXT: pextrb $12, %xmm2, %ecx 1605 ; SSE42-NEXT: andl $1, %ecx 1606 ; SSE42-NEXT: shll $12, %ecx 1607 ; SSE42-NEXT: orl %edx, %ecx 1608 ; SSE42-NEXT: pextrb $13, %xmm2, %edx 1609 ; SSE42-NEXT: andl $1, %edx 1610 ; SSE42-NEXT: shll $13, %edx 1611 ; SSE42-NEXT: orl %ecx, %edx 1612 ; SSE42-NEXT: pextrb $14, %xmm2, %ecx 1613 ; SSE42-NEXT: andl $1, %ecx 1614 ; SSE42-NEXT: shll $14, %ecx 1615 ; SSE42-NEXT: orl %edx, %ecx 1616 ; SSE42-NEXT: pextrb $15, %xmm2, %edx 1617 ; SSE42-NEXT: shll $15, %edx 1618 ; SSE42-NEXT: orl %ecx, %edx 1619 ; SSE42-NEXT: orl %eax, %edx 1620 ; SSE42-NEXT: movw %dx, 4(%rdi) 1621 ; SSE42-NEXT: pextrb $1, %xmm1, %eax 1622 ; SSE42-NEXT: andl $1, %eax 1623 ; SSE42-NEXT: pextrb $0, %xmm1, %ecx 1624 ; SSE42-NEXT: andl $1, %ecx 1625 ; SSE42-NEXT: leal (%rcx,%rax,2), %eax 1626 ; SSE42-NEXT: pextrb $2, %xmm1, %ecx 1627 ; SSE42-NEXT: andl $1, %ecx 1628 ; SSE42-NEXT: leal (%rax,%rcx,4), %eax 1629 ; SSE42-NEXT: pextrb $3, %xmm1, %ecx 1630 ; SSE42-NEXT: andl $1, %ecx 1631 ; SSE42-NEXT: leal (%rax,%rcx,8), %eax 1632 ; SSE42-NEXT: pextrb $4, %xmm1, %ecx 1633 ; SSE42-NEXT: andl $1, %ecx 1634 ; SSE42-NEXT: shll $4, %ecx 1635 ; SSE42-NEXT: orl %eax, %ecx 1636 ; SSE42-NEXT: pextrb $5, %xmm1, %eax 1637 ; SSE42-NEXT: andl $1, %eax 1638 ; SSE42-NEXT: shll $5, %eax 1639 ; SSE42-NEXT: orl %ecx, %eax 1640 ; SSE42-NEXT: pextrb $6, %xmm1, %ecx 1641 ; SSE42-NEXT: andl $1, %ecx 1642 ; SSE42-NEXT: shll $6, %ecx 1643 ; SSE42-NEXT: pextrb $7, %xmm1, %edx 1644 ; SSE42-NEXT: andl $1, %edx 1645 ; SSE42-NEXT: shll $7, %edx 1646 ; SSE42-NEXT: orl %ecx, %edx 1647 ; SSE42-NEXT: pextrb $8, %xmm1, %ecx 1648 ; SSE42-NEXT: andl $1, %ecx 1649 ; SSE42-NEXT: shll $8, %ecx 1650 ; SSE42-NEXT: orl %edx, %ecx 1651 ; SSE42-NEXT: pextrb $9, %xmm1, %edx 1652 ; SSE42-NEXT: andl $1, %edx 1653 ; SSE42-NEXT: shll $9, %edx 1654 ; SSE42-NEXT: orl %ecx, %edx 1655 ; SSE42-NEXT: pextrb $10, %xmm1, %ecx 1656 ; SSE42-NEXT: andl $1, %ecx 1657 ; SSE42-NEXT: shll $10, %ecx 1658 ; SSE42-NEXT: orl %edx, %ecx 1659 ; SSE42-NEXT: pextrb $11, %xmm1, %edx 1660 ; SSE42-NEXT: andl $1, %edx 1661 ; SSE42-NEXT: shll $11, %edx 1662 ; SSE42-NEXT: orl %ecx, %edx 1663 ; SSE42-NEXT: pextrb $12, %xmm1, %ecx 1664 ; SSE42-NEXT: andl $1, %ecx 1665 ; SSE42-NEXT: shll $12, %ecx 1666 ; SSE42-NEXT: orl %edx, %ecx 1667 ; SSE42-NEXT: pextrb $13, %xmm1, %edx 1668 ; SSE42-NEXT: andl $1, %edx 1669 ; SSE42-NEXT: shll $13, %edx 1670 ; SSE42-NEXT: orl %ecx, %edx 1671 ; SSE42-NEXT: pextrb $14, %xmm1, %ecx 1672 ; SSE42-NEXT: andl $1, %ecx 1673 ; SSE42-NEXT: shll $14, %ecx 1674 ; SSE42-NEXT: orl %edx, %ecx 1675 ; SSE42-NEXT: pextrb $15, %xmm1, %edx 1676 ; SSE42-NEXT: shll $15, %edx 1677 ; SSE42-NEXT: orl %ecx, %edx 1678 ; SSE42-NEXT: orl %eax, %edx 1679 ; SSE42-NEXT: movw %dx, 2(%rdi) 1680 ; SSE42-NEXT: pextrb $1, %xmm0, %eax 1681 ; SSE42-NEXT: andl $1, %eax 1682 ; SSE42-NEXT: pextrb $0, %xmm0, %ecx 1683 ; SSE42-NEXT: andl $1, %ecx 1684 ; SSE42-NEXT: leal (%rcx,%rax,2), %eax 1685 ; SSE42-NEXT: pextrb $2, %xmm0, %ecx 1686 ; SSE42-NEXT: andl $1, %ecx 1687 ; SSE42-NEXT: leal (%rax,%rcx,4), %eax 1688 ; SSE42-NEXT: pextrb $3, %xmm0, %ecx 1689 ; SSE42-NEXT: andl $1, %ecx 1690 ; SSE42-NEXT: leal (%rax,%rcx,8), %eax 1691 ; SSE42-NEXT: pextrb $4, %xmm0, %ecx 1692 ; SSE42-NEXT: andl $1, %ecx 1693 ; SSE42-NEXT: shll $4, %ecx 1694 ; SSE42-NEXT: orl %eax, %ecx 1695 ; SSE42-NEXT: pextrb $5, %xmm0, %eax 1696 ; SSE42-NEXT: andl $1, %eax 1697 ; SSE42-NEXT: shll $5, %eax 1698 ; SSE42-NEXT: orl %ecx, %eax 1699 ; SSE42-NEXT: pextrb $6, %xmm0, %ecx 1700 ; SSE42-NEXT: andl $1, %ecx 1701 ; SSE42-NEXT: shll $6, %ecx 1702 ; SSE42-NEXT: pextrb $7, %xmm0, %edx 1703 ; SSE42-NEXT: andl $1, %edx 1704 ; SSE42-NEXT: shll $7, %edx 1705 ; SSE42-NEXT: orl %ecx, %edx 1706 ; SSE42-NEXT: pextrb $8, %xmm0, %ecx 1707 ; SSE42-NEXT: andl $1, %ecx 1708 ; SSE42-NEXT: shll $8, %ecx 1709 ; SSE42-NEXT: orl %edx, %ecx 1710 ; SSE42-NEXT: pextrb $9, %xmm0, %edx 1711 ; SSE42-NEXT: andl $1, %edx 1712 ; SSE42-NEXT: shll $9, %edx 1713 ; SSE42-NEXT: orl %ecx, %edx 1714 ; SSE42-NEXT: pextrb $10, %xmm0, %ecx 1715 ; SSE42-NEXT: andl $1, %ecx 1716 ; SSE42-NEXT: shll $10, %ecx 1717 ; SSE42-NEXT: orl %edx, %ecx 1718 ; SSE42-NEXT: pextrb $11, %xmm0, %edx 1719 ; SSE42-NEXT: andl $1, %edx 1720 ; SSE42-NEXT: shll $11, %edx 1721 ; SSE42-NEXT: orl %ecx, %edx 1722 ; SSE42-NEXT: pextrb $12, %xmm0, %ecx 1723 ; SSE42-NEXT: andl $1, %ecx 1724 ; SSE42-NEXT: shll $12, %ecx 1725 ; SSE42-NEXT: orl %edx, %ecx 1726 ; SSE42-NEXT: pextrb $13, %xmm0, %edx 1727 ; SSE42-NEXT: andl $1, %edx 1728 ; SSE42-NEXT: shll $13, %edx 1729 ; SSE42-NEXT: orl %ecx, %edx 1730 ; SSE42-NEXT: pextrb $14, %xmm0, %ecx 1731 ; SSE42-NEXT: andl $1, %ecx 1732 ; SSE42-NEXT: shll $14, %ecx 1733 ; SSE42-NEXT: orl %edx, %ecx 1734 ; SSE42-NEXT: pextrb $15, %xmm0, %edx 1735 ; SSE42-NEXT: shll $15, %edx 1736 ; SSE42-NEXT: orl %ecx, %edx 1737 ; SSE42-NEXT: orl %eax, %edx 1738 ; SSE42-NEXT: movw %dx, (%rdi) 1739 ; SSE42-NEXT: movq %rdi, %rax 1740 ; SSE42-NEXT: retq 1741 ; 1742 ; AVX1-LABEL: test_cmp_v64i8: 1743 ; AVX1: # %bb.0: 1744 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 1745 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 1746 ; AVX1-NEXT: vpcmpgtb %xmm4, %xmm5, %xmm4 1747 ; AVX1-NEXT: vpcmpgtb %xmm2, %xmm0, %xmm0 1748 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 1749 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm5 1750 ; AVX1-NEXT: vpcmpgtb %xmm2, %xmm5, %xmm2 1751 ; AVX1-NEXT: vpcmpgtb %xmm3, %xmm1, %xmm1 1752 ; AVX1-NEXT: vpextrb $1, %xmm1, %eax 1753 ; AVX1-NEXT: andl $1, %eax 1754 ; AVX1-NEXT: vpextrb $0, %xmm1, %ecx 1755 ; AVX1-NEXT: andl $1, %ecx 1756 ; AVX1-NEXT: leal (%rcx,%rax,2), %eax 1757 ; AVX1-NEXT: vpextrb $2, %xmm1, %ecx 1758 ; AVX1-NEXT: andl $1, %ecx 1759 ; AVX1-NEXT: leal (%rax,%rcx,4), %eax 1760 ; AVX1-NEXT: vpextrb $3, %xmm1, %ecx 1761 ; AVX1-NEXT: andl $1, %ecx 1762 ; AVX1-NEXT: leal (%rax,%rcx,8), %eax 1763 ; AVX1-NEXT: vpextrb $4, %xmm1, %ecx 1764 ; AVX1-NEXT: andl $1, %ecx 1765 ; AVX1-NEXT: shll $4, %ecx 1766 ; AVX1-NEXT: orl %eax, %ecx 1767 ; AVX1-NEXT: vpextrb $5, %xmm1, %eax 1768 ; AVX1-NEXT: andl $1, %eax 1769 ; AVX1-NEXT: shll $5, %eax 1770 ; AVX1-NEXT: orl %ecx, %eax 1771 ; AVX1-NEXT: vpextrb $6, %xmm1, %ecx 1772 ; AVX1-NEXT: andl $1, %ecx 1773 ; AVX1-NEXT: shll $6, %ecx 1774 ; AVX1-NEXT: vpextrb $7, %xmm1, %edx 1775 ; AVX1-NEXT: andl $1, %edx 1776 ; AVX1-NEXT: shll $7, %edx 1777 ; AVX1-NEXT: orl %ecx, %edx 1778 ; AVX1-NEXT: vpextrb $8, %xmm1, %ecx 1779 ; AVX1-NEXT: andl $1, %ecx 1780 ; AVX1-NEXT: shll $8, %ecx 1781 ; AVX1-NEXT: orl %edx, %ecx 1782 ; AVX1-NEXT: vpextrb $9, %xmm1, %edx 1783 ; AVX1-NEXT: andl $1, %edx 1784 ; AVX1-NEXT: shll $9, %edx 1785 ; AVX1-NEXT: orl %ecx, %edx 1786 ; AVX1-NEXT: vpextrb $10, %xmm1, %ecx 1787 ; AVX1-NEXT: andl $1, %ecx 1788 ; AVX1-NEXT: shll $10, %ecx 1789 ; AVX1-NEXT: orl %edx, %ecx 1790 ; AVX1-NEXT: vpextrb $11, %xmm1, %edx 1791 ; AVX1-NEXT: andl $1, %edx 1792 ; AVX1-NEXT: shll $11, %edx 1793 ; AVX1-NEXT: orl %ecx, %edx 1794 ; AVX1-NEXT: vpextrb $12, %xmm1, %ecx 1795 ; AVX1-NEXT: andl $1, %ecx 1796 ; AVX1-NEXT: shll $12, %ecx 1797 ; AVX1-NEXT: orl %edx, %ecx 1798 ; AVX1-NEXT: vpextrb $13, %xmm1, %edx 1799 ; AVX1-NEXT: andl $1, %edx 1800 ; AVX1-NEXT: shll $13, %edx 1801 ; AVX1-NEXT: orl %ecx, %edx 1802 ; AVX1-NEXT: vpextrb $14, %xmm1, %ecx 1803 ; AVX1-NEXT: andl $1, %ecx 1804 ; AVX1-NEXT: shll $14, %ecx 1805 ; AVX1-NEXT: orl %edx, %ecx 1806 ; AVX1-NEXT: vpextrb $15, %xmm1, %edx 1807 ; AVX1-NEXT: andl $1, %edx 1808 ; AVX1-NEXT: shll $15, %edx 1809 ; AVX1-NEXT: orl %ecx, %edx 1810 ; AVX1-NEXT: vpextrb $0, %xmm2, %ecx 1811 ; AVX1-NEXT: andl $1, %ecx 1812 ; AVX1-NEXT: shll $16, %ecx 1813 ; AVX1-NEXT: orl %edx, %ecx 1814 ; AVX1-NEXT: vpextrb $1, %xmm2, %edx 1815 ; AVX1-NEXT: andl $1, %edx 1816 ; AVX1-NEXT: shll $17, %edx 1817 ; AVX1-NEXT: orl %ecx, %edx 1818 ; AVX1-NEXT: vpextrb $2, %xmm2, %ecx 1819 ; AVX1-NEXT: andl $1, %ecx 1820 ; AVX1-NEXT: shll $18, %ecx 1821 ; AVX1-NEXT: orl %edx, %ecx 1822 ; AVX1-NEXT: vpextrb $3, %xmm2, %edx 1823 ; AVX1-NEXT: andl $1, %edx 1824 ; AVX1-NEXT: shll $19, %edx 1825 ; AVX1-NEXT: orl %ecx, %edx 1826 ; AVX1-NEXT: vpextrb $4, %xmm2, %ecx 1827 ; AVX1-NEXT: andl $1, %ecx 1828 ; AVX1-NEXT: shll $20, %ecx 1829 ; AVX1-NEXT: orl %edx, %ecx 1830 ; AVX1-NEXT: vpextrb $5, %xmm2, %edx 1831 ; AVX1-NEXT: andl $1, %edx 1832 ; AVX1-NEXT: shll $21, %edx 1833 ; AVX1-NEXT: orl %ecx, %edx 1834 ; AVX1-NEXT: vpextrb $6, %xmm2, %ecx 1835 ; AVX1-NEXT: andl $1, %ecx 1836 ; AVX1-NEXT: shll $22, %ecx 1837 ; AVX1-NEXT: orl %edx, %ecx 1838 ; AVX1-NEXT: vpextrb $7, %xmm2, %edx 1839 ; AVX1-NEXT: andl $1, %edx 1840 ; AVX1-NEXT: shll $23, %edx 1841 ; AVX1-NEXT: orl %ecx, %edx 1842 ; AVX1-NEXT: vpextrb $8, %xmm2, %ecx 1843 ; AVX1-NEXT: andl $1, %ecx 1844 ; AVX1-NEXT: shll $24, %ecx 1845 ; AVX1-NEXT: orl %edx, %ecx 1846 ; AVX1-NEXT: vpextrb $9, %xmm2, %edx 1847 ; AVX1-NEXT: andl $1, %edx 1848 ; AVX1-NEXT: shll $25, %edx 1849 ; AVX1-NEXT: orl %ecx, %edx 1850 ; AVX1-NEXT: vpextrb $10, %xmm2, %ecx 1851 ; AVX1-NEXT: andl $1, %ecx 1852 ; AVX1-NEXT: shll $26, %ecx 1853 ; AVX1-NEXT: orl %edx, %ecx 1854 ; AVX1-NEXT: vpextrb $11, %xmm2, %edx 1855 ; AVX1-NEXT: andl $1, %edx 1856 ; AVX1-NEXT: shll $27, %edx 1857 ; AVX1-NEXT: orl %ecx, %edx 1858 ; AVX1-NEXT: vpextrb $12, %xmm2, %ecx 1859 ; AVX1-NEXT: andl $1, %ecx 1860 ; AVX1-NEXT: shll $28, %ecx 1861 ; AVX1-NEXT: orl %edx, %ecx 1862 ; AVX1-NEXT: vpextrb $13, %xmm2, %edx 1863 ; AVX1-NEXT: andl $1, %edx 1864 ; AVX1-NEXT: shll $29, %edx 1865 ; AVX1-NEXT: orl %ecx, %edx 1866 ; AVX1-NEXT: vpextrb $14, %xmm2, %ecx 1867 ; AVX1-NEXT: andl $1, %ecx 1868 ; AVX1-NEXT: shll $30, %ecx 1869 ; AVX1-NEXT: orl %edx, %ecx 1870 ; AVX1-NEXT: vpextrb $15, %xmm2, %edx 1871 ; AVX1-NEXT: shll $31, %edx 1872 ; AVX1-NEXT: orl %ecx, %edx 1873 ; AVX1-NEXT: orl %eax, %edx 1874 ; AVX1-NEXT: movl %edx, 4(%rdi) 1875 ; AVX1-NEXT: vpextrb $1, %xmm0, %eax 1876 ; AVX1-NEXT: andl $1, %eax 1877 ; AVX1-NEXT: vpextrb $0, %xmm0, %ecx 1878 ; AVX1-NEXT: andl $1, %ecx 1879 ; AVX1-NEXT: leal (%rcx,%rax,2), %eax 1880 ; AVX1-NEXT: vpextrb $2, %xmm0, %ecx 1881 ; AVX1-NEXT: andl $1, %ecx 1882 ; AVX1-NEXT: leal (%rax,%rcx,4), %eax 1883 ; AVX1-NEXT: vpextrb $3, %xmm0, %ecx 1884 ; AVX1-NEXT: andl $1, %ecx 1885 ; AVX1-NEXT: leal (%rax,%rcx,8), %eax 1886 ; AVX1-NEXT: vpextrb $4, %xmm0, %ecx 1887 ; AVX1-NEXT: andl $1, %ecx 1888 ; AVX1-NEXT: shll $4, %ecx 1889 ; AVX1-NEXT: orl %eax, %ecx 1890 ; AVX1-NEXT: vpextrb $5, %xmm0, %eax 1891 ; AVX1-NEXT: andl $1, %eax 1892 ; AVX1-NEXT: shll $5, %eax 1893 ; AVX1-NEXT: orl %ecx, %eax 1894 ; AVX1-NEXT: vpextrb $6, %xmm0, %ecx 1895 ; AVX1-NEXT: andl $1, %ecx 1896 ; AVX1-NEXT: shll $6, %ecx 1897 ; AVX1-NEXT: vpextrb $7, %xmm0, %edx 1898 ; AVX1-NEXT: andl $1, %edx 1899 ; AVX1-NEXT: shll $7, %edx 1900 ; AVX1-NEXT: orl %ecx, %edx 1901 ; AVX1-NEXT: vpextrb $8, %xmm0, %ecx 1902 ; AVX1-NEXT: andl $1, %ecx 1903 ; AVX1-NEXT: shll $8, %ecx 1904 ; AVX1-NEXT: orl %edx, %ecx 1905 ; AVX1-NEXT: vpextrb $9, %xmm0, %edx 1906 ; AVX1-NEXT: andl $1, %edx 1907 ; AVX1-NEXT: shll $9, %edx 1908 ; AVX1-NEXT: orl %ecx, %edx 1909 ; AVX1-NEXT: vpextrb $10, %xmm0, %ecx 1910 ; AVX1-NEXT: andl $1, %ecx 1911 ; AVX1-NEXT: shll $10, %ecx 1912 ; AVX1-NEXT: orl %edx, %ecx 1913 ; AVX1-NEXT: vpextrb $11, %xmm0, %edx 1914 ; AVX1-NEXT: andl $1, %edx 1915 ; AVX1-NEXT: shll $11, %edx 1916 ; AVX1-NEXT: orl %ecx, %edx 1917 ; AVX1-NEXT: vpextrb $12, %xmm0, %ecx 1918 ; AVX1-NEXT: andl $1, %ecx 1919 ; AVX1-NEXT: shll $12, %ecx 1920 ; AVX1-NEXT: orl %edx, %ecx 1921 ; AVX1-NEXT: vpextrb $13, %xmm0, %edx 1922 ; AVX1-NEXT: andl $1, %edx 1923 ; AVX1-NEXT: shll $13, %edx 1924 ; AVX1-NEXT: orl %ecx, %edx 1925 ; AVX1-NEXT: vpextrb $14, %xmm0, %ecx 1926 ; AVX1-NEXT: andl $1, %ecx 1927 ; AVX1-NEXT: shll $14, %ecx 1928 ; AVX1-NEXT: orl %edx, %ecx 1929 ; AVX1-NEXT: vpextrb $15, %xmm0, %edx 1930 ; AVX1-NEXT: andl $1, %edx 1931 ; AVX1-NEXT: shll $15, %edx 1932 ; AVX1-NEXT: orl %ecx, %edx 1933 ; AVX1-NEXT: vpextrb $0, %xmm4, %ecx 1934 ; AVX1-NEXT: andl $1, %ecx 1935 ; AVX1-NEXT: shll $16, %ecx 1936 ; AVX1-NEXT: orl %edx, %ecx 1937 ; AVX1-NEXT: vpextrb $1, %xmm4, %edx 1938 ; AVX1-NEXT: andl $1, %edx 1939 ; AVX1-NEXT: shll $17, %edx 1940 ; AVX1-NEXT: orl %ecx, %edx 1941 ; AVX1-NEXT: vpextrb $2, %xmm4, %ecx 1942 ; AVX1-NEXT: andl $1, %ecx 1943 ; AVX1-NEXT: shll $18, %ecx 1944 ; AVX1-NEXT: orl %edx, %ecx 1945 ; AVX1-NEXT: vpextrb $3, %xmm4, %edx 1946 ; AVX1-NEXT: andl $1, %edx 1947 ; AVX1-NEXT: shll $19, %edx 1948 ; AVX1-NEXT: orl %ecx, %edx 1949 ; AVX1-NEXT: vpextrb $4, %xmm4, %ecx 1950 ; AVX1-NEXT: andl $1, %ecx 1951 ; AVX1-NEXT: shll $20, %ecx 1952 ; AVX1-NEXT: orl %edx, %ecx 1953 ; AVX1-NEXT: vpextrb $5, %xmm4, %edx 1954 ; AVX1-NEXT: andl $1, %edx 1955 ; AVX1-NEXT: shll $21, %edx 1956 ; AVX1-NEXT: orl %ecx, %edx 1957 ; AVX1-NEXT: vpextrb $6, %xmm4, %ecx 1958 ; AVX1-NEXT: andl $1, %ecx 1959 ; AVX1-NEXT: shll $22, %ecx 1960 ; AVX1-NEXT: orl %edx, %ecx 1961 ; AVX1-NEXT: vpextrb $7, %xmm4, %edx 1962 ; AVX1-NEXT: andl $1, %edx 1963 ; AVX1-NEXT: shll $23, %edx 1964 ; AVX1-NEXT: orl %ecx, %edx 1965 ; AVX1-NEXT: vpextrb $8, %xmm4, %ecx 1966 ; AVX1-NEXT: andl $1, %ecx 1967 ; AVX1-NEXT: shll $24, %ecx 1968 ; AVX1-NEXT: orl %edx, %ecx 1969 ; AVX1-NEXT: vpextrb $9, %xmm4, %edx 1970 ; AVX1-NEXT: andl $1, %edx 1971 ; AVX1-NEXT: shll $25, %edx 1972 ; AVX1-NEXT: orl %ecx, %edx 1973 ; AVX1-NEXT: vpextrb $10, %xmm4, %ecx 1974 ; AVX1-NEXT: andl $1, %ecx 1975 ; AVX1-NEXT: shll $26, %ecx 1976 ; AVX1-NEXT: orl %edx, %ecx 1977 ; AVX1-NEXT: vpextrb $11, %xmm4, %edx 1978 ; AVX1-NEXT: andl $1, %edx 1979 ; AVX1-NEXT: shll $27, %edx 1980 ; AVX1-NEXT: orl %ecx, %edx 1981 ; AVX1-NEXT: vpextrb $12, %xmm4, %ecx 1982 ; AVX1-NEXT: andl $1, %ecx 1983 ; AVX1-NEXT: shll $28, %ecx 1984 ; AVX1-NEXT: orl %edx, %ecx 1985 ; AVX1-NEXT: vpextrb $13, %xmm4, %edx 1986 ; AVX1-NEXT: andl $1, %edx 1987 ; AVX1-NEXT: shll $29, %edx 1988 ; AVX1-NEXT: orl %ecx, %edx 1989 ; AVX1-NEXT: vpextrb $14, %xmm4, %ecx 1990 ; AVX1-NEXT: andl $1, %ecx 1991 ; AVX1-NEXT: shll $30, %ecx 1992 ; AVX1-NEXT: orl %edx, %ecx 1993 ; AVX1-NEXT: vpextrb $15, %xmm4, %edx 1994 ; AVX1-NEXT: shll $31, %edx 1995 ; AVX1-NEXT: orl %ecx, %edx 1996 ; AVX1-NEXT: orl %eax, %edx 1997 ; AVX1-NEXT: movl %edx, (%rdi) 1998 ; AVX1-NEXT: movq %rdi, %rax 1999 ; AVX1-NEXT: vzeroupper 2000 ; AVX1-NEXT: retq 2001 ; 2002 ; AVX2-LABEL: test_cmp_v64i8: 2003 ; AVX2: # %bb.0: 2004 ; AVX2-NEXT: vpcmpgtb %ymm2, %ymm0, %ymm0 2005 ; AVX2-NEXT: vpcmpgtb %ymm3, %ymm1, %ymm1 2006 ; AVX2-NEXT: vpextrb $1, %xmm1, %eax 2007 ; AVX2-NEXT: andl $1, %eax 2008 ; AVX2-NEXT: vpextrb $0, %xmm1, %ecx 2009 ; AVX2-NEXT: andl $1, %ecx 2010 ; AVX2-NEXT: leal (%rcx,%rax,2), %eax 2011 ; AVX2-NEXT: vpextrb $2, %xmm1, %ecx 2012 ; AVX2-NEXT: andl $1, %ecx 2013 ; AVX2-NEXT: leal (%rax,%rcx,4), %eax 2014 ; AVX2-NEXT: vpextrb $3, %xmm1, %ecx 2015 ; AVX2-NEXT: andl $1, %ecx 2016 ; AVX2-NEXT: leal (%rax,%rcx,8), %eax 2017 ; AVX2-NEXT: vpextrb $4, %xmm1, %ecx 2018 ; AVX2-NEXT: andl $1, %ecx 2019 ; AVX2-NEXT: shll $4, %ecx 2020 ; AVX2-NEXT: orl %eax, %ecx 2021 ; AVX2-NEXT: vpextrb $5, %xmm1, %eax 2022 ; AVX2-NEXT: andl $1, %eax 2023 ; AVX2-NEXT: shll $5, %eax 2024 ; AVX2-NEXT: orl %ecx, %eax 2025 ; AVX2-NEXT: vpextrb $6, %xmm1, %ecx 2026 ; AVX2-NEXT: andl $1, %ecx 2027 ; AVX2-NEXT: shll $6, %ecx 2028 ; AVX2-NEXT: vpextrb $7, %xmm1, %edx 2029 ; AVX2-NEXT: andl $1, %edx 2030 ; AVX2-NEXT: shll $7, %edx 2031 ; AVX2-NEXT: orl %ecx, %edx 2032 ; AVX2-NEXT: vpextrb $8, %xmm1, %ecx 2033 ; AVX2-NEXT: andl $1, %ecx 2034 ; AVX2-NEXT: shll $8, %ecx 2035 ; AVX2-NEXT: orl %edx, %ecx 2036 ; AVX2-NEXT: vpextrb $9, %xmm1, %edx 2037 ; AVX2-NEXT: andl $1, %edx 2038 ; AVX2-NEXT: shll $9, %edx 2039 ; AVX2-NEXT: orl %ecx, %edx 2040 ; AVX2-NEXT: vpextrb $10, %xmm1, %ecx 2041 ; AVX2-NEXT: andl $1, %ecx 2042 ; AVX2-NEXT: shll $10, %ecx 2043 ; AVX2-NEXT: orl %edx, %ecx 2044 ; AVX2-NEXT: vpextrb $11, %xmm1, %edx 2045 ; AVX2-NEXT: andl $1, %edx 2046 ; AVX2-NEXT: shll $11, %edx 2047 ; AVX2-NEXT: orl %ecx, %edx 2048 ; AVX2-NEXT: vpextrb $12, %xmm1, %ecx 2049 ; AVX2-NEXT: andl $1, %ecx 2050 ; AVX2-NEXT: shll $12, %ecx 2051 ; AVX2-NEXT: orl %edx, %ecx 2052 ; AVX2-NEXT: vpextrb $13, %xmm1, %edx 2053 ; AVX2-NEXT: andl $1, %edx 2054 ; AVX2-NEXT: shll $13, %edx 2055 ; AVX2-NEXT: orl %ecx, %edx 2056 ; AVX2-NEXT: vpextrb $14, %xmm1, %ecx 2057 ; AVX2-NEXT: andl $1, %ecx 2058 ; AVX2-NEXT: shll $14, %ecx 2059 ; AVX2-NEXT: orl %edx, %ecx 2060 ; AVX2-NEXT: vpextrb $15, %xmm1, %edx 2061 ; AVX2-NEXT: andl $1, %edx 2062 ; AVX2-NEXT: shll $15, %edx 2063 ; AVX2-NEXT: orl %ecx, %edx 2064 ; AVX2-NEXT: vextracti128 $1, %ymm1, %xmm1 2065 ; AVX2-NEXT: vpextrb $0, %xmm1, %ecx 2066 ; AVX2-NEXT: andl $1, %ecx 2067 ; AVX2-NEXT: shll $16, %ecx 2068 ; AVX2-NEXT: orl %edx, %ecx 2069 ; AVX2-NEXT: vpextrb $1, %xmm1, %edx 2070 ; AVX2-NEXT: andl $1, %edx 2071 ; AVX2-NEXT: shll $17, %edx 2072 ; AVX2-NEXT: orl %ecx, %edx 2073 ; AVX2-NEXT: vpextrb $2, %xmm1, %ecx 2074 ; AVX2-NEXT: andl $1, %ecx 2075 ; AVX2-NEXT: shll $18, %ecx 2076 ; AVX2-NEXT: orl %edx, %ecx 2077 ; AVX2-NEXT: vpextrb $3, %xmm1, %edx 2078 ; AVX2-NEXT: andl $1, %edx 2079 ; AVX2-NEXT: shll $19, %edx 2080 ; AVX2-NEXT: orl %ecx, %edx 2081 ; AVX2-NEXT: vpextrb $4, %xmm1, %ecx 2082 ; AVX2-NEXT: andl $1, %ecx 2083 ; AVX2-NEXT: shll $20, %ecx 2084 ; AVX2-NEXT: orl %edx, %ecx 2085 ; AVX2-NEXT: vpextrb $5, %xmm1, %edx 2086 ; AVX2-NEXT: andl $1, %edx 2087 ; AVX2-NEXT: shll $21, %edx 2088 ; AVX2-NEXT: orl %ecx, %edx 2089 ; AVX2-NEXT: vpextrb $6, %xmm1, %ecx 2090 ; AVX2-NEXT: andl $1, %ecx 2091 ; AVX2-NEXT: shll $22, %ecx 2092 ; AVX2-NEXT: orl %edx, %ecx 2093 ; AVX2-NEXT: vpextrb $7, %xmm1, %edx 2094 ; AVX2-NEXT: andl $1, %edx 2095 ; AVX2-NEXT: shll $23, %edx 2096 ; AVX2-NEXT: orl %ecx, %edx 2097 ; AVX2-NEXT: vpextrb $8, %xmm1, %ecx 2098 ; AVX2-NEXT: andl $1, %ecx 2099 ; AVX2-NEXT: shll $24, %ecx 2100 ; AVX2-NEXT: orl %edx, %ecx 2101 ; AVX2-NEXT: vpextrb $9, %xmm1, %edx 2102 ; AVX2-NEXT: andl $1, %edx 2103 ; AVX2-NEXT: shll $25, %edx 2104 ; AVX2-NEXT: orl %ecx, %edx 2105 ; AVX2-NEXT: vpextrb $10, %xmm1, %ecx 2106 ; AVX2-NEXT: andl $1, %ecx 2107 ; AVX2-NEXT: shll $26, %ecx 2108 ; AVX2-NEXT: orl %edx, %ecx 2109 ; AVX2-NEXT: vpextrb $11, %xmm1, %edx 2110 ; AVX2-NEXT: andl $1, %edx 2111 ; AVX2-NEXT: shll $27, %edx 2112 ; AVX2-NEXT: orl %ecx, %edx 2113 ; AVX2-NEXT: vpextrb $12, %xmm1, %ecx 2114 ; AVX2-NEXT: andl $1, %ecx 2115 ; AVX2-NEXT: shll $28, %ecx 2116 ; AVX2-NEXT: orl %edx, %ecx 2117 ; AVX2-NEXT: vpextrb $13, %xmm1, %edx 2118 ; AVX2-NEXT: andl $1, %edx 2119 ; AVX2-NEXT: shll $29, %edx 2120 ; AVX2-NEXT: orl %ecx, %edx 2121 ; AVX2-NEXT: vpextrb $14, %xmm1, %ecx 2122 ; AVX2-NEXT: andl $1, %ecx 2123 ; AVX2-NEXT: shll $30, %ecx 2124 ; AVX2-NEXT: orl %edx, %ecx 2125 ; AVX2-NEXT: vpextrb $15, %xmm1, %edx 2126 ; AVX2-NEXT: shll $31, %edx 2127 ; AVX2-NEXT: orl %ecx, %edx 2128 ; AVX2-NEXT: orl %eax, %edx 2129 ; AVX2-NEXT: movl %edx, 4(%rdi) 2130 ; AVX2-NEXT: vpextrb $1, %xmm0, %eax 2131 ; AVX2-NEXT: andl $1, %eax 2132 ; AVX2-NEXT: vpextrb $0, %xmm0, %ecx 2133 ; AVX2-NEXT: andl $1, %ecx 2134 ; AVX2-NEXT: leal (%rcx,%rax,2), %eax 2135 ; AVX2-NEXT: vpextrb $2, %xmm0, %ecx 2136 ; AVX2-NEXT: andl $1, %ecx 2137 ; AVX2-NEXT: leal (%rax,%rcx,4), %eax 2138 ; AVX2-NEXT: vpextrb $3, %xmm0, %ecx 2139 ; AVX2-NEXT: andl $1, %ecx 2140 ; AVX2-NEXT: leal (%rax,%rcx,8), %eax 2141 ; AVX2-NEXT: vpextrb $4, %xmm0, %ecx 2142 ; AVX2-NEXT: andl $1, %ecx 2143 ; AVX2-NEXT: shll $4, %ecx 2144 ; AVX2-NEXT: orl %eax, %ecx 2145 ; AVX2-NEXT: vpextrb $5, %xmm0, %eax 2146 ; AVX2-NEXT: andl $1, %eax 2147 ; AVX2-NEXT: shll $5, %eax 2148 ; AVX2-NEXT: orl %ecx, %eax 2149 ; AVX2-NEXT: vpextrb $6, %xmm0, %ecx 2150 ; AVX2-NEXT: andl $1, %ecx 2151 ; AVX2-NEXT: shll $6, %ecx 2152 ; AVX2-NEXT: vpextrb $7, %xmm0, %edx 2153 ; AVX2-NEXT: andl $1, %edx 2154 ; AVX2-NEXT: shll $7, %edx 2155 ; AVX2-NEXT: orl %ecx, %edx 2156 ; AVX2-NEXT: vpextrb $8, %xmm0, %ecx 2157 ; AVX2-NEXT: andl $1, %ecx 2158 ; AVX2-NEXT: shll $8, %ecx 2159 ; AVX2-NEXT: orl %edx, %ecx 2160 ; AVX2-NEXT: vpextrb $9, %xmm0, %edx 2161 ; AVX2-NEXT: andl $1, %edx 2162 ; AVX2-NEXT: shll $9, %edx 2163 ; AVX2-NEXT: orl %ecx, %edx 2164 ; AVX2-NEXT: vpextrb $10, %xmm0, %ecx 2165 ; AVX2-NEXT: andl $1, %ecx 2166 ; AVX2-NEXT: shll $10, %ecx 2167 ; AVX2-NEXT: orl %edx, %ecx 2168 ; AVX2-NEXT: vpextrb $11, %xmm0, %edx 2169 ; AVX2-NEXT: andl $1, %edx 2170 ; AVX2-NEXT: shll $11, %edx 2171 ; AVX2-NEXT: orl %ecx, %edx 2172 ; AVX2-NEXT: vpextrb $12, %xmm0, %ecx 2173 ; AVX2-NEXT: andl $1, %ecx 2174 ; AVX2-NEXT: shll $12, %ecx 2175 ; AVX2-NEXT: orl %edx, %ecx 2176 ; AVX2-NEXT: vpextrb $13, %xmm0, %edx 2177 ; AVX2-NEXT: andl $1, %edx 2178 ; AVX2-NEXT: shll $13, %edx 2179 ; AVX2-NEXT: orl %ecx, %edx 2180 ; AVX2-NEXT: vpextrb $14, %xmm0, %ecx 2181 ; AVX2-NEXT: andl $1, %ecx 2182 ; AVX2-NEXT: shll $14, %ecx 2183 ; AVX2-NEXT: orl %edx, %ecx 2184 ; AVX2-NEXT: vpextrb $15, %xmm0, %edx 2185 ; AVX2-NEXT: andl $1, %edx 2186 ; AVX2-NEXT: shll $15, %edx 2187 ; AVX2-NEXT: orl %ecx, %edx 2188 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm0 2189 ; AVX2-NEXT: vpextrb $0, %xmm0, %ecx 2190 ; AVX2-NEXT: andl $1, %ecx 2191 ; AVX2-NEXT: shll $16, %ecx 2192 ; AVX2-NEXT: orl %edx, %ecx 2193 ; AVX2-NEXT: vpextrb $1, %xmm0, %edx 2194 ; AVX2-NEXT: andl $1, %edx 2195 ; AVX2-NEXT: shll $17, %edx 2196 ; AVX2-NEXT: orl %ecx, %edx 2197 ; AVX2-NEXT: vpextrb $2, %xmm0, %ecx 2198 ; AVX2-NEXT: andl $1, %ecx 2199 ; AVX2-NEXT: shll $18, %ecx 2200 ; AVX2-NEXT: orl %edx, %ecx 2201 ; AVX2-NEXT: vpextrb $3, %xmm0, %edx 2202 ; AVX2-NEXT: andl $1, %edx 2203 ; AVX2-NEXT: shll $19, %edx 2204 ; AVX2-NEXT: orl %ecx, %edx 2205 ; AVX2-NEXT: vpextrb $4, %xmm0, %ecx 2206 ; AVX2-NEXT: andl $1, %ecx 2207 ; AVX2-NEXT: shll $20, %ecx 2208 ; AVX2-NEXT: orl %edx, %ecx 2209 ; AVX2-NEXT: vpextrb $5, %xmm0, %edx 2210 ; AVX2-NEXT: andl $1, %edx 2211 ; AVX2-NEXT: shll $21, %edx 2212 ; AVX2-NEXT: orl %ecx, %edx 2213 ; AVX2-NEXT: vpextrb $6, %xmm0, %ecx 2214 ; AVX2-NEXT: andl $1, %ecx 2215 ; AVX2-NEXT: shll $22, %ecx 2216 ; AVX2-NEXT: orl %edx, %ecx 2217 ; AVX2-NEXT: vpextrb $7, %xmm0, %edx 2218 ; AVX2-NEXT: andl $1, %edx 2219 ; AVX2-NEXT: shll $23, %edx 2220 ; AVX2-NEXT: orl %ecx, %edx 2221 ; AVX2-NEXT: vpextrb $8, %xmm0, %ecx 2222 ; AVX2-NEXT: andl $1, %ecx 2223 ; AVX2-NEXT: shll $24, %ecx 2224 ; AVX2-NEXT: orl %edx, %ecx 2225 ; AVX2-NEXT: vpextrb $9, %xmm0, %edx 2226 ; AVX2-NEXT: andl $1, %edx 2227 ; AVX2-NEXT: shll $25, %edx 2228 ; AVX2-NEXT: orl %ecx, %edx 2229 ; AVX2-NEXT: vpextrb $10, %xmm0, %ecx 2230 ; AVX2-NEXT: andl $1, %ecx 2231 ; AVX2-NEXT: shll $26, %ecx 2232 ; AVX2-NEXT: orl %edx, %ecx 2233 ; AVX2-NEXT: vpextrb $11, %xmm0, %edx 2234 ; AVX2-NEXT: andl $1, %edx 2235 ; AVX2-NEXT: shll $27, %edx 2236 ; AVX2-NEXT: orl %ecx, %edx 2237 ; AVX2-NEXT: vpextrb $12, %xmm0, %ecx 2238 ; AVX2-NEXT: andl $1, %ecx 2239 ; AVX2-NEXT: shll $28, %ecx 2240 ; AVX2-NEXT: orl %edx, %ecx 2241 ; AVX2-NEXT: vpextrb $13, %xmm0, %edx 2242 ; AVX2-NEXT: andl $1, %edx 2243 ; AVX2-NEXT: shll $29, %edx 2244 ; AVX2-NEXT: orl %ecx, %edx 2245 ; AVX2-NEXT: vpextrb $14, %xmm0, %ecx 2246 ; AVX2-NEXT: andl $1, %ecx 2247 ; AVX2-NEXT: shll $30, %ecx 2248 ; AVX2-NEXT: orl %edx, %ecx 2249 ; AVX2-NEXT: vpextrb $15, %xmm0, %edx 2250 ; AVX2-NEXT: shll $31, %edx 2251 ; AVX2-NEXT: orl %ecx, %edx 2252 ; AVX2-NEXT: orl %eax, %edx 2253 ; AVX2-NEXT: movl %edx, (%rdi) 2254 ; AVX2-NEXT: movq %rdi, %rax 2255 ; AVX2-NEXT: vzeroupper 2256 ; AVX2-NEXT: retq 2257 ; 2258 ; AVX512F-LABEL: test_cmp_v64i8: 2259 ; AVX512F: # %bb.0: 2260 ; AVX512F-NEXT: vpcmpgtb %ymm2, %ymm0, %ymm0 2261 ; AVX512F-NEXT: vextracti128 $1, %ymm0, %xmm4 2262 ; AVX512F-NEXT: vpcmpgtb %ymm3, %ymm1, %ymm2 2263 ; AVX512F-NEXT: vextracti128 $1, %ymm2, %xmm3 2264 ; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 killed $ymm0 2265 ; AVX512F-NEXT: vmovdqa %xmm4, %xmm1 2266 ; AVX512F-NEXT: # kill: def $xmm2 killed $xmm2 killed $ymm2 2267 ; AVX512F-NEXT: vzeroupper 2268 ; AVX512F-NEXT: retq 2269 ; 2270 ; AVX512DQ-LABEL: test_cmp_v64i8: 2271 ; AVX512DQ: # %bb.0: 2272 ; AVX512DQ-NEXT: vpcmpgtb %ymm2, %ymm0, %ymm0 2273 ; AVX512DQ-NEXT: vextracti128 $1, %ymm0, %xmm4 2274 ; AVX512DQ-NEXT: vpcmpgtb %ymm3, %ymm1, %ymm2 2275 ; AVX512DQ-NEXT: vextracti128 $1, %ymm2, %xmm3 2276 ; AVX512DQ-NEXT: # kill: def $xmm0 killed $xmm0 killed $ymm0 2277 ; AVX512DQ-NEXT: vmovdqa %xmm4, %xmm1 2278 ; AVX512DQ-NEXT: # kill: def $xmm2 killed $xmm2 killed $ymm2 2279 ; AVX512DQ-NEXT: vzeroupper 2280 ; AVX512DQ-NEXT: retq 2281 ; 2282 ; AVX512BW-LABEL: test_cmp_v64i8: 2283 ; AVX512BW: # %bb.0: 2284 ; AVX512BW-NEXT: vpcmpgtb %zmm1, %zmm0, %k0 2285 ; AVX512BW-NEXT: vpmovm2b %k0, %zmm0 2286 ; AVX512BW-NEXT: retq 2287 %1 = icmp sgt <64 x i8> %a0, %a1 2288 ret <64 x i1> %1 2289 } 2290 2291 ; 2292 ; 1024-bit vector comparisons 2293 ; 2294 2295 define <16 x i1> @test_cmp_v16f64(<16 x double> %a0, <16 x double> %a1) nounwind { 2296 ; SSE-LABEL: test_cmp_v16f64: 2297 ; SSE: # %bb.0: 2298 ; SSE-NEXT: movapd %xmm0, %xmm8 2299 ; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm0 2300 ; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm11 2301 ; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm10 2302 ; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm12 2303 ; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm9 2304 ; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm13 2305 ; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm14 2306 ; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm15 2307 ; SSE-NEXT: cmpltpd %xmm7, %xmm15 2308 ; SSE-NEXT: cmpltpd %xmm6, %xmm14 2309 ; SSE-NEXT: packssdw %xmm15, %xmm14 2310 ; SSE-NEXT: cmpltpd %xmm5, %xmm13 2311 ; SSE-NEXT: cmpltpd %xmm4, %xmm9 2312 ; SSE-NEXT: packssdw %xmm13, %xmm9 2313 ; SSE-NEXT: packssdw %xmm14, %xmm9 2314 ; SSE-NEXT: cmpltpd %xmm3, %xmm12 2315 ; SSE-NEXT: cmpltpd %xmm2, %xmm10 2316 ; SSE-NEXT: packssdw %xmm12, %xmm10 2317 ; SSE-NEXT: cmpltpd %xmm1, %xmm11 2318 ; SSE-NEXT: cmpltpd %xmm8, %xmm0 2319 ; SSE-NEXT: packssdw %xmm11, %xmm0 2320 ; SSE-NEXT: packssdw %xmm10, %xmm0 2321 ; SSE-NEXT: packsswb %xmm9, %xmm0 2322 ; SSE-NEXT: retq 2323 ; 2324 ; AVX1-LABEL: test_cmp_v16f64: 2325 ; AVX1: # %bb.0: 2326 ; AVX1-NEXT: vcmpltpd %ymm3, %ymm7, %ymm3 2327 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm7 2328 ; AVX1-NEXT: vpackssdw %xmm7, %xmm3, %xmm3 2329 ; AVX1-NEXT: vcmpltpd %ymm2, %ymm6, %ymm2 2330 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm6 2331 ; AVX1-NEXT: vpackssdw %xmm6, %xmm2, %xmm2 2332 ; AVX1-NEXT: vpackssdw %xmm3, %xmm2, %xmm2 2333 ; AVX1-NEXT: vcmpltpd %ymm1, %ymm5, %ymm1 2334 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3 2335 ; AVX1-NEXT: vpackssdw %xmm3, %xmm1, %xmm1 2336 ; AVX1-NEXT: vcmpltpd %ymm0, %ymm4, %ymm0 2337 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2338 ; AVX1-NEXT: vpackssdw %xmm3, %xmm0, %xmm0 2339 ; AVX1-NEXT: vpackssdw %xmm1, %xmm0, %xmm0 2340 ; AVX1-NEXT: vpacksswb %xmm2, %xmm0, %xmm0 2341 ; AVX1-NEXT: vzeroupper 2342 ; AVX1-NEXT: retq 2343 ; 2344 ; AVX2-LABEL: test_cmp_v16f64: 2345 ; AVX2: # %bb.0: 2346 ; AVX2-NEXT: vcmpltpd %ymm3, %ymm7, %ymm3 2347 ; AVX2-NEXT: vcmpltpd %ymm2, %ymm6, %ymm2 2348 ; AVX2-NEXT: vpackssdw %ymm3, %ymm2, %ymm2 2349 ; AVX2-NEXT: vpermq {{.*#+}} ymm2 = ymm2[0,2,1,3] 2350 ; AVX2-NEXT: vcmpltpd %ymm1, %ymm5, %ymm1 2351 ; AVX2-NEXT: vcmpltpd %ymm0, %ymm4, %ymm0 2352 ; AVX2-NEXT: vpackssdw %ymm1, %ymm0, %ymm0 2353 ; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3] 2354 ; AVX2-NEXT: vpackssdw %ymm2, %ymm0, %ymm0 2355 ; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3] 2356 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1 2357 ; AVX2-NEXT: vpacksswb %xmm1, %xmm0, %xmm0 2358 ; AVX2-NEXT: vzeroupper 2359 ; AVX2-NEXT: retq 2360 ; 2361 ; AVX512F-LABEL: test_cmp_v16f64: 2362 ; AVX512F: # %bb.0: 2363 ; AVX512F-NEXT: vcmpltpd %zmm0, %zmm2, %k0 2364 ; AVX512F-NEXT: vcmpltpd %zmm1, %zmm3, %k1 2365 ; AVX512F-NEXT: kunpckbw %k0, %k1, %k1 2366 ; AVX512F-NEXT: vpternlogd $255, %zmm0, %zmm0, %zmm0 {%k1} {z} 2367 ; AVX512F-NEXT: vpmovdb %zmm0, %xmm0 2368 ; AVX512F-NEXT: vzeroupper 2369 ; AVX512F-NEXT: retq 2370 ; 2371 ; AVX512DQ-LABEL: test_cmp_v16f64: 2372 ; AVX512DQ: # %bb.0: 2373 ; AVX512DQ-NEXT: vcmpltpd %zmm0, %zmm2, %k0 2374 ; AVX512DQ-NEXT: vcmpltpd %zmm1, %zmm3, %k1 2375 ; AVX512DQ-NEXT: kunpckbw %k0, %k1, %k0 2376 ; AVX512DQ-NEXT: vpmovm2d %k0, %zmm0 2377 ; AVX512DQ-NEXT: vpmovdb %zmm0, %xmm0 2378 ; AVX512DQ-NEXT: vzeroupper 2379 ; AVX512DQ-NEXT: retq 2380 ; 2381 ; AVX512BW-LABEL: test_cmp_v16f64: 2382 ; AVX512BW: # %bb.0: 2383 ; AVX512BW-NEXT: vcmpltpd %zmm0, %zmm2, %k0 2384 ; AVX512BW-NEXT: vcmpltpd %zmm1, %zmm3, %k1 2385 ; AVX512BW-NEXT: kunpckbw %k0, %k1, %k0 2386 ; AVX512BW-NEXT: vpmovm2b %k0, %zmm0 2387 ; AVX512BW-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 2388 ; AVX512BW-NEXT: vzeroupper 2389 ; AVX512BW-NEXT: retq 2390 %1 = fcmp ogt <16 x double> %a0, %a1 2391 ret <16 x i1> %1 2392 } 2393 2394 define <32 x i1> @test_cmp_v32f32(<32 x float> %a0, <32 x float> %a1) nounwind { 2395 ; SSE2-LABEL: test_cmp_v32f32: 2396 ; SSE2: # %bb.0: 2397 ; SSE2-NEXT: movaps {{[0-9]+}}(%rsp), %xmm9 2398 ; SSE2-NEXT: movaps {{[0-9]+}}(%rsp), %xmm11 2399 ; SSE2-NEXT: movaps {{[0-9]+}}(%rsp), %xmm10 2400 ; SSE2-NEXT: movaps {{[0-9]+}}(%rsp), %xmm12 2401 ; SSE2-NEXT: movaps {{[0-9]+}}(%rsp), %xmm8 2402 ; SSE2-NEXT: movaps {{[0-9]+}}(%rsp), %xmm13 2403 ; SSE2-NEXT: movaps {{[0-9]+}}(%rsp), %xmm14 2404 ; SSE2-NEXT: movaps {{[0-9]+}}(%rsp), %xmm15 2405 ; SSE2-NEXT: cmpltps %xmm3, %xmm15 2406 ; SSE2-NEXT: movaps {{.*#+}} xmm3 = [255,255,255,255] 2407 ; SSE2-NEXT: andps %xmm3, %xmm15 2408 ; SSE2-NEXT: cmpltps %xmm2, %xmm14 2409 ; SSE2-NEXT: andps %xmm3, %xmm14 2410 ; SSE2-NEXT: packuswb %xmm15, %xmm14 2411 ; SSE2-NEXT: cmpltps %xmm1, %xmm13 2412 ; SSE2-NEXT: andps %xmm3, %xmm13 2413 ; SSE2-NEXT: cmpltps %xmm0, %xmm8 2414 ; SSE2-NEXT: andps %xmm3, %xmm8 2415 ; SSE2-NEXT: packuswb %xmm13, %xmm8 2416 ; SSE2-NEXT: packuswb %xmm14, %xmm8 2417 ; SSE2-NEXT: cmpltps %xmm7, %xmm12 2418 ; SSE2-NEXT: andps %xmm3, %xmm12 2419 ; SSE2-NEXT: cmpltps %xmm6, %xmm10 2420 ; SSE2-NEXT: andps %xmm3, %xmm10 2421 ; SSE2-NEXT: packuswb %xmm12, %xmm10 2422 ; SSE2-NEXT: cmpltps %xmm5, %xmm11 2423 ; SSE2-NEXT: andps %xmm3, %xmm11 2424 ; SSE2-NEXT: cmpltps %xmm4, %xmm9 2425 ; SSE2-NEXT: andps %xmm3, %xmm9 2426 ; SSE2-NEXT: packuswb %xmm11, %xmm9 2427 ; SSE2-NEXT: packuswb %xmm10, %xmm9 2428 ; SSE2-NEXT: movdqa %xmm9, -{{[0-9]+}}(%rsp) 2429 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax 2430 ; SSE2-NEXT: andl $1, %eax 2431 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 2432 ; SSE2-NEXT: andl $1, %ecx 2433 ; SSE2-NEXT: leal (%rcx,%rax,2), %eax 2434 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 2435 ; SSE2-NEXT: andl $1, %ecx 2436 ; SSE2-NEXT: leal (%rax,%rcx,4), %eax 2437 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 2438 ; SSE2-NEXT: andl $1, %ecx 2439 ; SSE2-NEXT: leal (%rax,%rcx,8), %eax 2440 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 2441 ; SSE2-NEXT: andl $1, %ecx 2442 ; SSE2-NEXT: shll $4, %ecx 2443 ; SSE2-NEXT: orl %eax, %ecx 2444 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax 2445 ; SSE2-NEXT: andl $1, %eax 2446 ; SSE2-NEXT: shll $5, %eax 2447 ; SSE2-NEXT: orl %ecx, %eax 2448 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 2449 ; SSE2-NEXT: andl $1, %ecx 2450 ; SSE2-NEXT: shll $6, %ecx 2451 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 2452 ; SSE2-NEXT: andl $1, %edx 2453 ; SSE2-NEXT: shll $7, %edx 2454 ; SSE2-NEXT: orl %ecx, %edx 2455 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 2456 ; SSE2-NEXT: andl $1, %ecx 2457 ; SSE2-NEXT: shll $8, %ecx 2458 ; SSE2-NEXT: orl %edx, %ecx 2459 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 2460 ; SSE2-NEXT: andl $1, %edx 2461 ; SSE2-NEXT: shll $9, %edx 2462 ; SSE2-NEXT: orl %ecx, %edx 2463 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 2464 ; SSE2-NEXT: andl $1, %ecx 2465 ; SSE2-NEXT: shll $10, %ecx 2466 ; SSE2-NEXT: orl %edx, %ecx 2467 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 2468 ; SSE2-NEXT: andl $1, %edx 2469 ; SSE2-NEXT: shll $11, %edx 2470 ; SSE2-NEXT: orl %ecx, %edx 2471 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 2472 ; SSE2-NEXT: andl $1, %ecx 2473 ; SSE2-NEXT: shll $12, %ecx 2474 ; SSE2-NEXT: orl %edx, %ecx 2475 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 2476 ; SSE2-NEXT: andl $1, %edx 2477 ; SSE2-NEXT: shll $13, %edx 2478 ; SSE2-NEXT: orl %ecx, %edx 2479 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 2480 ; SSE2-NEXT: andl $1, %ecx 2481 ; SSE2-NEXT: shll $14, %ecx 2482 ; SSE2-NEXT: orl %edx, %ecx 2483 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 2484 ; SSE2-NEXT: shll $15, %edx 2485 ; SSE2-NEXT: orl %ecx, %edx 2486 ; SSE2-NEXT: orl %eax, %edx 2487 ; SSE2-NEXT: movw %dx, 2(%rdi) 2488 ; SSE2-NEXT: movdqa %xmm8, -{{[0-9]+}}(%rsp) 2489 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax 2490 ; SSE2-NEXT: andl $1, %eax 2491 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 2492 ; SSE2-NEXT: andl $1, %ecx 2493 ; SSE2-NEXT: leal (%rcx,%rax,2), %eax 2494 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 2495 ; SSE2-NEXT: andl $1, %ecx 2496 ; SSE2-NEXT: leal (%rax,%rcx,4), %eax 2497 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 2498 ; SSE2-NEXT: andl $1, %ecx 2499 ; SSE2-NEXT: leal (%rax,%rcx,8), %eax 2500 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 2501 ; SSE2-NEXT: andl $1, %ecx 2502 ; SSE2-NEXT: shll $4, %ecx 2503 ; SSE2-NEXT: orl %eax, %ecx 2504 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax 2505 ; SSE2-NEXT: andl $1, %eax 2506 ; SSE2-NEXT: shll $5, %eax 2507 ; SSE2-NEXT: orl %ecx, %eax 2508 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 2509 ; SSE2-NEXT: andl $1, %ecx 2510 ; SSE2-NEXT: shll $6, %ecx 2511 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 2512 ; SSE2-NEXT: andl $1, %edx 2513 ; SSE2-NEXT: shll $7, %edx 2514 ; SSE2-NEXT: orl %ecx, %edx 2515 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 2516 ; SSE2-NEXT: andl $1, %ecx 2517 ; SSE2-NEXT: shll $8, %ecx 2518 ; SSE2-NEXT: orl %edx, %ecx 2519 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 2520 ; SSE2-NEXT: andl $1, %edx 2521 ; SSE2-NEXT: shll $9, %edx 2522 ; SSE2-NEXT: orl %ecx, %edx 2523 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 2524 ; SSE2-NEXT: andl $1, %ecx 2525 ; SSE2-NEXT: shll $10, %ecx 2526 ; SSE2-NEXT: orl %edx, %ecx 2527 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 2528 ; SSE2-NEXT: andl $1, %edx 2529 ; SSE2-NEXT: shll $11, %edx 2530 ; SSE2-NEXT: orl %ecx, %edx 2531 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 2532 ; SSE2-NEXT: andl $1, %ecx 2533 ; SSE2-NEXT: shll $12, %ecx 2534 ; SSE2-NEXT: orl %edx, %ecx 2535 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 2536 ; SSE2-NEXT: andl $1, %edx 2537 ; SSE2-NEXT: shll $13, %edx 2538 ; SSE2-NEXT: orl %ecx, %edx 2539 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 2540 ; SSE2-NEXT: andl $1, %ecx 2541 ; SSE2-NEXT: shll $14, %ecx 2542 ; SSE2-NEXT: orl %edx, %ecx 2543 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 2544 ; SSE2-NEXT: shll $15, %edx 2545 ; SSE2-NEXT: orl %ecx, %edx 2546 ; SSE2-NEXT: orl %eax, %edx 2547 ; SSE2-NEXT: movw %dx, (%rdi) 2548 ; SSE2-NEXT: movq %rdi, %rax 2549 ; SSE2-NEXT: retq 2550 ; 2551 ; SSE42-LABEL: test_cmp_v32f32: 2552 ; SSE42: # %bb.0: 2553 ; SSE42-NEXT: movaps {{[0-9]+}}(%rsp), %xmm15 2554 ; SSE42-NEXT: movaps {{[0-9]+}}(%rsp), %xmm14 2555 ; SSE42-NEXT: movaps {{[0-9]+}}(%rsp), %xmm13 2556 ; SSE42-NEXT: movaps {{[0-9]+}}(%rsp), %xmm12 2557 ; SSE42-NEXT: movaps {{[0-9]+}}(%rsp), %xmm11 2558 ; SSE42-NEXT: movaps {{[0-9]+}}(%rsp), %xmm10 2559 ; SSE42-NEXT: movaps {{[0-9]+}}(%rsp), %xmm9 2560 ; SSE42-NEXT: movaps {{[0-9]+}}(%rsp), %xmm8 2561 ; SSE42-NEXT: cmpltps %xmm3, %xmm8 2562 ; SSE42-NEXT: cmpltps %xmm2, %xmm9 2563 ; SSE42-NEXT: cmpltps %xmm1, %xmm10 2564 ; SSE42-NEXT: cmpltps %xmm0, %xmm11 2565 ; SSE42-NEXT: cmpltps %xmm7, %xmm12 2566 ; SSE42-NEXT: cmpltps %xmm6, %xmm13 2567 ; SSE42-NEXT: cmpltps %xmm5, %xmm14 2568 ; SSE42-NEXT: cmpltps %xmm4, %xmm15 2569 ; SSE42-NEXT: pextrb $4, %xmm15, %eax 2570 ; SSE42-NEXT: andl $1, %eax 2571 ; SSE42-NEXT: pextrb $0, %xmm15, %ecx 2572 ; SSE42-NEXT: andl $1, %ecx 2573 ; SSE42-NEXT: leal (%rcx,%rax,2), %eax 2574 ; SSE42-NEXT: pextrb $8, %xmm15, %ecx 2575 ; SSE42-NEXT: andl $1, %ecx 2576 ; SSE42-NEXT: leal (%rax,%rcx,4), %eax 2577 ; SSE42-NEXT: pextrb $12, %xmm15, %ecx 2578 ; SSE42-NEXT: andl $1, %ecx 2579 ; SSE42-NEXT: leal (%rax,%rcx,8), %eax 2580 ; SSE42-NEXT: pextrb $0, %xmm14, %ecx 2581 ; SSE42-NEXT: andl $1, %ecx 2582 ; SSE42-NEXT: shll $4, %ecx 2583 ; SSE42-NEXT: orl %eax, %ecx 2584 ; SSE42-NEXT: pextrb $4, %xmm14, %eax 2585 ; SSE42-NEXT: andl $1, %eax 2586 ; SSE42-NEXT: shll $5, %eax 2587 ; SSE42-NEXT: orl %ecx, %eax 2588 ; SSE42-NEXT: pextrb $8, %xmm14, %ecx 2589 ; SSE42-NEXT: andl $1, %ecx 2590 ; SSE42-NEXT: shll $6, %ecx 2591 ; SSE42-NEXT: pextrb $12, %xmm14, %edx 2592 ; SSE42-NEXT: andl $1, %edx 2593 ; SSE42-NEXT: shll $7, %edx 2594 ; SSE42-NEXT: orl %ecx, %edx 2595 ; SSE42-NEXT: pextrb $0, %xmm13, %ecx 2596 ; SSE42-NEXT: andl $1, %ecx 2597 ; SSE42-NEXT: shll $8, %ecx 2598 ; SSE42-NEXT: orl %edx, %ecx 2599 ; SSE42-NEXT: pextrb $4, %xmm13, %edx 2600 ; SSE42-NEXT: andl $1, %edx 2601 ; SSE42-NEXT: shll $9, %edx 2602 ; SSE42-NEXT: orl %ecx, %edx 2603 ; SSE42-NEXT: pextrb $8, %xmm13, %ecx 2604 ; SSE42-NEXT: andl $1, %ecx 2605 ; SSE42-NEXT: shll $10, %ecx 2606 ; SSE42-NEXT: orl %edx, %ecx 2607 ; SSE42-NEXT: pextrb $12, %xmm13, %edx 2608 ; SSE42-NEXT: andl $1, %edx 2609 ; SSE42-NEXT: shll $11, %edx 2610 ; SSE42-NEXT: orl %ecx, %edx 2611 ; SSE42-NEXT: pextrb $0, %xmm12, %ecx 2612 ; SSE42-NEXT: andl $1, %ecx 2613 ; SSE42-NEXT: shll $12, %ecx 2614 ; SSE42-NEXT: orl %edx, %ecx 2615 ; SSE42-NEXT: pextrb $4, %xmm12, %edx 2616 ; SSE42-NEXT: andl $1, %edx 2617 ; SSE42-NEXT: shll $13, %edx 2618 ; SSE42-NEXT: orl %ecx, %edx 2619 ; SSE42-NEXT: pextrb $8, %xmm12, %ecx 2620 ; SSE42-NEXT: andl $1, %ecx 2621 ; SSE42-NEXT: shll $14, %ecx 2622 ; SSE42-NEXT: orl %edx, %ecx 2623 ; SSE42-NEXT: pextrb $12, %xmm12, %edx 2624 ; SSE42-NEXT: shll $15, %edx 2625 ; SSE42-NEXT: orl %ecx, %edx 2626 ; SSE42-NEXT: orl %eax, %edx 2627 ; SSE42-NEXT: movw %dx, 2(%rdi) 2628 ; SSE42-NEXT: pextrb $4, %xmm11, %eax 2629 ; SSE42-NEXT: andl $1, %eax 2630 ; SSE42-NEXT: pextrb $0, %xmm11, %ecx 2631 ; SSE42-NEXT: andl $1, %ecx 2632 ; SSE42-NEXT: leal (%rcx,%rax,2), %eax 2633 ; SSE42-NEXT: pextrb $8, %xmm11, %ecx 2634 ; SSE42-NEXT: andl $1, %ecx 2635 ; SSE42-NEXT: leal (%rax,%rcx,4), %eax 2636 ; SSE42-NEXT: pextrb $12, %xmm11, %ecx 2637 ; SSE42-NEXT: andl $1, %ecx 2638 ; SSE42-NEXT: leal (%rax,%rcx,8), %eax 2639 ; SSE42-NEXT: pextrb $0, %xmm10, %ecx 2640 ; SSE42-NEXT: andl $1, %ecx 2641 ; SSE42-NEXT: shll $4, %ecx 2642 ; SSE42-NEXT: orl %eax, %ecx 2643 ; SSE42-NEXT: pextrb $4, %xmm10, %eax 2644 ; SSE42-NEXT: andl $1, %eax 2645 ; SSE42-NEXT: shll $5, %eax 2646 ; SSE42-NEXT: orl %ecx, %eax 2647 ; SSE42-NEXT: pextrb $8, %xmm10, %ecx 2648 ; SSE42-NEXT: andl $1, %ecx 2649 ; SSE42-NEXT: shll $6, %ecx 2650 ; SSE42-NEXT: pextrb $12, %xmm10, %edx 2651 ; SSE42-NEXT: andl $1, %edx 2652 ; SSE42-NEXT: shll $7, %edx 2653 ; SSE42-NEXT: orl %ecx, %edx 2654 ; SSE42-NEXT: pextrb $0, %xmm9, %ecx 2655 ; SSE42-NEXT: andl $1, %ecx 2656 ; SSE42-NEXT: shll $8, %ecx 2657 ; SSE42-NEXT: orl %edx, %ecx 2658 ; SSE42-NEXT: pextrb $4, %xmm9, %edx 2659 ; SSE42-NEXT: andl $1, %edx 2660 ; SSE42-NEXT: shll $9, %edx 2661 ; SSE42-NEXT: orl %ecx, %edx 2662 ; SSE42-NEXT: pextrb $8, %xmm9, %ecx 2663 ; SSE42-NEXT: andl $1, %ecx 2664 ; SSE42-NEXT: shll $10, %ecx 2665 ; SSE42-NEXT: orl %edx, %ecx 2666 ; SSE42-NEXT: pextrb $12, %xmm9, %edx 2667 ; SSE42-NEXT: andl $1, %edx 2668 ; SSE42-NEXT: shll $11, %edx 2669 ; SSE42-NEXT: orl %ecx, %edx 2670 ; SSE42-NEXT: pextrb $0, %xmm8, %ecx 2671 ; SSE42-NEXT: andl $1, %ecx 2672 ; SSE42-NEXT: shll $12, %ecx 2673 ; SSE42-NEXT: orl %edx, %ecx 2674 ; SSE42-NEXT: pextrb $4, %xmm8, %edx 2675 ; SSE42-NEXT: andl $1, %edx 2676 ; SSE42-NEXT: shll $13, %edx 2677 ; SSE42-NEXT: orl %ecx, %edx 2678 ; SSE42-NEXT: pextrb $8, %xmm8, %ecx 2679 ; SSE42-NEXT: andl $1, %ecx 2680 ; SSE42-NEXT: shll $14, %ecx 2681 ; SSE42-NEXT: orl %edx, %ecx 2682 ; SSE42-NEXT: pextrb $12, %xmm8, %edx 2683 ; SSE42-NEXT: shll $15, %edx 2684 ; SSE42-NEXT: orl %ecx, %edx 2685 ; SSE42-NEXT: orl %eax, %edx 2686 ; SSE42-NEXT: movw %dx, (%rdi) 2687 ; SSE42-NEXT: movq %rdi, %rax 2688 ; SSE42-NEXT: retq 2689 ; 2690 ; AVX1-LABEL: test_cmp_v32f32: 2691 ; AVX1: # %bb.0: 2692 ; AVX1-NEXT: vcmpltps %ymm3, %ymm7, %ymm3 2693 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm7 2694 ; AVX1-NEXT: vpackssdw %xmm7, %xmm3, %xmm3 2695 ; AVX1-NEXT: vcmpltps %ymm2, %ymm6, %ymm2 2696 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm6 2697 ; AVX1-NEXT: vpackssdw %xmm6, %xmm2, %xmm2 2698 ; AVX1-NEXT: vpacksswb %xmm3, %xmm2, %xmm2 2699 ; AVX1-NEXT: vcmpltps %ymm1, %ymm5, %ymm1 2700 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3 2701 ; AVX1-NEXT: vpackssdw %xmm3, %xmm1, %xmm1 2702 ; AVX1-NEXT: vcmpltps %ymm0, %ymm4, %ymm0 2703 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2704 ; AVX1-NEXT: vpackssdw %xmm3, %xmm0, %xmm0 2705 ; AVX1-NEXT: vpacksswb %xmm1, %xmm0, %xmm0 2706 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2707 ; AVX1-NEXT: retq 2708 ; 2709 ; AVX2-LABEL: test_cmp_v32f32: 2710 ; AVX2: # %bb.0: 2711 ; AVX2-NEXT: vcmpltps %ymm3, %ymm7, %ymm3 2712 ; AVX2-NEXT: vcmpltps %ymm2, %ymm6, %ymm2 2713 ; AVX2-NEXT: vpackssdw %ymm3, %ymm2, %ymm2 2714 ; AVX2-NEXT: vpermq {{.*#+}} ymm2 = ymm2[0,2,1,3] 2715 ; AVX2-NEXT: vcmpltps %ymm1, %ymm5, %ymm1 2716 ; AVX2-NEXT: vcmpltps %ymm0, %ymm4, %ymm0 2717 ; AVX2-NEXT: vpackssdw %ymm1, %ymm0, %ymm0 2718 ; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3] 2719 ; AVX2-NEXT: vpacksswb %ymm2, %ymm0, %ymm0 2720 ; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3] 2721 ; AVX2-NEXT: retq 2722 ; 2723 ; AVX512F-LABEL: test_cmp_v32f32: 2724 ; AVX512F: # %bb.0: 2725 ; AVX512F-NEXT: vcmpltps %zmm1, %zmm3, %k1 2726 ; AVX512F-NEXT: vcmpltps %zmm0, %zmm2, %k2 2727 ; AVX512F-NEXT: vpternlogd $255, %zmm0, %zmm0, %zmm0 {%k2} {z} 2728 ; AVX512F-NEXT: vpmovdb %zmm0, %xmm0 2729 ; AVX512F-NEXT: vpternlogd $255, %zmm1, %zmm1, %zmm1 {%k1} {z} 2730 ; AVX512F-NEXT: vpmovdb %zmm1, %xmm1 2731 ; AVX512F-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm0 2732 ; AVX512F-NEXT: retq 2733 ; 2734 ; AVX512DQ-LABEL: test_cmp_v32f32: 2735 ; AVX512DQ: # %bb.0: 2736 ; AVX512DQ-NEXT: vcmpltps %zmm1, %zmm3, %k0 2737 ; AVX512DQ-NEXT: vcmpltps %zmm0, %zmm2, %k1 2738 ; AVX512DQ-NEXT: vpmovm2d %k1, %zmm0 2739 ; AVX512DQ-NEXT: vpmovdb %zmm0, %xmm0 2740 ; AVX512DQ-NEXT: vpmovm2d %k0, %zmm1 2741 ; AVX512DQ-NEXT: vpmovdb %zmm1, %xmm1 2742 ; AVX512DQ-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm0 2743 ; AVX512DQ-NEXT: retq 2744 ; 2745 ; AVX512BW-LABEL: test_cmp_v32f32: 2746 ; AVX512BW: # %bb.0: 2747 ; AVX512BW-NEXT: vcmpltps %zmm0, %zmm2, %k0 2748 ; AVX512BW-NEXT: vcmpltps %zmm1, %zmm3, %k1 2749 ; AVX512BW-NEXT: kunpckwd %k0, %k1, %k0 2750 ; AVX512BW-NEXT: vpmovm2b %k0, %zmm0 2751 ; AVX512BW-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 2752 ; AVX512BW-NEXT: retq 2753 %1 = fcmp ogt <32 x float> %a0, %a1 2754 ret <32 x i1> %1 2755 } 2756 2757 define <16 x i1> @test_cmp_v16i64(<16 x i64> %a0, <16 x i64> %a1) nounwind { 2758 ; SSE2-LABEL: test_cmp_v16i64: 2759 ; SSE2: # %bb.0: 2760 ; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [2147483648,0,2147483648,0] 2761 ; SSE2-NEXT: pxor %xmm8, %xmm7 2762 ; SSE2-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm9 2763 ; SSE2-NEXT: pxor %xmm8, %xmm9 2764 ; SSE2-NEXT: movdqa %xmm7, %xmm10 2765 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm10 2766 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2] 2767 ; SSE2-NEXT: pcmpeqd %xmm7, %xmm9 2768 ; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm9[1,1,3,3] 2769 ; SSE2-NEXT: pand %xmm11, %xmm7 2770 ; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3] 2771 ; SSE2-NEXT: por %xmm7, %xmm9 2772 ; SSE2-NEXT: pxor %xmm8, %xmm6 2773 ; SSE2-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm7 2774 ; SSE2-NEXT: pxor %xmm8, %xmm7 2775 ; SSE2-NEXT: movdqa %xmm6, %xmm10 2776 ; SSE2-NEXT: pcmpgtd %xmm7, %xmm10 2777 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2] 2778 ; SSE2-NEXT: pcmpeqd %xmm6, %xmm7 2779 ; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm7[1,1,3,3] 2780 ; SSE2-NEXT: pand %xmm11, %xmm7 2781 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm10[1,1,3,3] 2782 ; SSE2-NEXT: por %xmm7, %xmm10 2783 ; SSE2-NEXT: packssdw %xmm9, %xmm10 2784 ; SSE2-NEXT: pxor %xmm8, %xmm5 2785 ; SSE2-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm7 2786 ; SSE2-NEXT: pxor %xmm8, %xmm7 2787 ; SSE2-NEXT: movdqa %xmm5, %xmm6 2788 ; SSE2-NEXT: pcmpgtd %xmm7, %xmm6 2789 ; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm6[0,0,2,2] 2790 ; SSE2-NEXT: pcmpeqd %xmm5, %xmm7 2791 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3] 2792 ; SSE2-NEXT: pand %xmm9, %xmm5 2793 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3] 2794 ; SSE2-NEXT: por %xmm5, %xmm6 2795 ; SSE2-NEXT: pxor %xmm8, %xmm4 2796 ; SSE2-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm5 2797 ; SSE2-NEXT: pxor %xmm8, %xmm5 2798 ; SSE2-NEXT: movdqa %xmm4, %xmm7 2799 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 2800 ; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm7[0,0,2,2] 2801 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm5 2802 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3] 2803 ; SSE2-NEXT: pand %xmm9, %xmm5 2804 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm7[1,1,3,3] 2805 ; SSE2-NEXT: por %xmm5, %xmm4 2806 ; SSE2-NEXT: packssdw %xmm6, %xmm4 2807 ; SSE2-NEXT: packssdw %xmm10, %xmm4 2808 ; SSE2-NEXT: pxor %xmm8, %xmm3 2809 ; SSE2-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm5 2810 ; SSE2-NEXT: pxor %xmm8, %xmm5 2811 ; SSE2-NEXT: movdqa %xmm3, %xmm6 2812 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm6 2813 ; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2] 2814 ; SSE2-NEXT: pcmpeqd %xmm3, %xmm5 2815 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm5[1,1,3,3] 2816 ; SSE2-NEXT: pand %xmm7, %xmm3 2817 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3] 2818 ; SSE2-NEXT: por %xmm3, %xmm5 2819 ; SSE2-NEXT: pxor %xmm8, %xmm2 2820 ; SSE2-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm3 2821 ; SSE2-NEXT: pxor %xmm8, %xmm3 2822 ; SSE2-NEXT: movdqa %xmm2, %xmm6 2823 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm6 2824 ; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2] 2825 ; SSE2-NEXT: pcmpeqd %xmm2, %xmm3 2826 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3] 2827 ; SSE2-NEXT: pand %xmm7, %xmm3 2828 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm6[1,1,3,3] 2829 ; SSE2-NEXT: por %xmm3, %xmm2 2830 ; SSE2-NEXT: packssdw %xmm5, %xmm2 2831 ; SSE2-NEXT: pxor %xmm8, %xmm1 2832 ; SSE2-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm3 2833 ; SSE2-NEXT: pxor %xmm8, %xmm3 2834 ; SSE2-NEXT: movdqa %xmm1, %xmm5 2835 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm5 2836 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 2837 ; SSE2-NEXT: pcmpeqd %xmm1, %xmm3 2838 ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm3[1,1,3,3] 2839 ; SSE2-NEXT: pand %xmm6, %xmm1 2840 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm5[1,1,3,3] 2841 ; SSE2-NEXT: por %xmm1, %xmm3 2842 ; SSE2-NEXT: pxor %xmm8, %xmm0 2843 ; SSE2-NEXT: pxor {{[0-9]+}}(%rsp), %xmm8 2844 ; SSE2-NEXT: movdqa %xmm0, %xmm1 2845 ; SSE2-NEXT: pcmpgtd %xmm8, %xmm1 2846 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm1[0,0,2,2] 2847 ; SSE2-NEXT: pcmpeqd %xmm0, %xmm8 2848 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm8[1,1,3,3] 2849 ; SSE2-NEXT: pand %xmm5, %xmm6 2850 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm1[1,1,3,3] 2851 ; SSE2-NEXT: por %xmm6, %xmm0 2852 ; SSE2-NEXT: packssdw %xmm3, %xmm0 2853 ; SSE2-NEXT: packssdw %xmm2, %xmm0 2854 ; SSE2-NEXT: packsswb %xmm4, %xmm0 2855 ; SSE2-NEXT: retq 2856 ; 2857 ; SSE42-LABEL: test_cmp_v16i64: 2858 ; SSE42: # %bb.0: 2859 ; SSE42-NEXT: pcmpgtq {{[0-9]+}}(%rsp), %xmm7 2860 ; SSE42-NEXT: pcmpgtq {{[0-9]+}}(%rsp), %xmm6 2861 ; SSE42-NEXT: packssdw %xmm7, %xmm6 2862 ; SSE42-NEXT: pcmpgtq {{[0-9]+}}(%rsp), %xmm5 2863 ; SSE42-NEXT: pcmpgtq {{[0-9]+}}(%rsp), %xmm4 2864 ; SSE42-NEXT: packssdw %xmm5, %xmm4 2865 ; SSE42-NEXT: packssdw %xmm6, %xmm4 2866 ; SSE42-NEXT: pcmpgtq {{[0-9]+}}(%rsp), %xmm3 2867 ; SSE42-NEXT: pcmpgtq {{[0-9]+}}(%rsp), %xmm2 2868 ; SSE42-NEXT: packssdw %xmm3, %xmm2 2869 ; SSE42-NEXT: pcmpgtq {{[0-9]+}}(%rsp), %xmm1 2870 ; SSE42-NEXT: pcmpgtq {{[0-9]+}}(%rsp), %xmm0 2871 ; SSE42-NEXT: packssdw %xmm1, %xmm0 2872 ; SSE42-NEXT: packssdw %xmm2, %xmm0 2873 ; SSE42-NEXT: packsswb %xmm4, %xmm0 2874 ; SSE42-NEXT: retq 2875 ; 2876 ; AVX1-LABEL: test_cmp_v16i64: 2877 ; AVX1: # %bb.0: 2878 ; AVX1-NEXT: vextractf128 $1, %ymm7, %xmm8 2879 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm9 2880 ; AVX1-NEXT: vpcmpgtq %xmm8, %xmm9, %xmm8 2881 ; AVX1-NEXT: vpcmpgtq %xmm7, %xmm3, %xmm3 2882 ; AVX1-NEXT: vpackssdw %xmm8, %xmm3, %xmm8 2883 ; AVX1-NEXT: vextractf128 $1, %ymm6, %xmm7 2884 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm3 2885 ; AVX1-NEXT: vpcmpgtq %xmm7, %xmm3, %xmm3 2886 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm2, %xmm2 2887 ; AVX1-NEXT: vpackssdw %xmm3, %xmm2, %xmm2 2888 ; AVX1-NEXT: vpackssdw %xmm8, %xmm2, %xmm2 2889 ; AVX1-NEXT: vextractf128 $1, %ymm5, %xmm3 2890 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm6 2891 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm6, %xmm3 2892 ; AVX1-NEXT: vpcmpgtq %xmm5, %xmm1, %xmm1 2893 ; AVX1-NEXT: vpackssdw %xmm3, %xmm1, %xmm1 2894 ; AVX1-NEXT: vextractf128 $1, %ymm4, %xmm3 2895 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 2896 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm5, %xmm3 2897 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm0, %xmm0 2898 ; AVX1-NEXT: vpackssdw %xmm3, %xmm0, %xmm0 2899 ; AVX1-NEXT: vpackssdw %xmm1, %xmm0, %xmm0 2900 ; AVX1-NEXT: vpacksswb %xmm2, %xmm0, %xmm0 2901 ; AVX1-NEXT: vzeroupper 2902 ; AVX1-NEXT: retq 2903 ; 2904 ; AVX2-LABEL: test_cmp_v16i64: 2905 ; AVX2: # %bb.0: 2906 ; AVX2-NEXT: vpcmpgtq %ymm7, %ymm3, %ymm3 2907 ; AVX2-NEXT: vpcmpgtq %ymm6, %ymm2, %ymm2 2908 ; AVX2-NEXT: vpackssdw %ymm3, %ymm2, %ymm2 2909 ; AVX2-NEXT: vpermq {{.*#+}} ymm2 = ymm2[0,2,1,3] 2910 ; AVX2-NEXT: vpcmpgtq %ymm5, %ymm1, %ymm1 2911 ; AVX2-NEXT: vpcmpgtq %ymm4, %ymm0, %ymm0 2912 ; AVX2-NEXT: vpackssdw %ymm1, %ymm0, %ymm0 2913 ; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3] 2914 ; AVX2-NEXT: vpackssdw %ymm2, %ymm0, %ymm0 2915 ; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3] 2916 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1 2917 ; AVX2-NEXT: vpacksswb %xmm1, %xmm0, %xmm0 2918 ; AVX2-NEXT: vzeroupper 2919 ; AVX2-NEXT: retq 2920 ; 2921 ; AVX512F-LABEL: test_cmp_v16i64: 2922 ; AVX512F: # %bb.0: 2923 ; AVX512F-NEXT: vpcmpgtq %zmm2, %zmm0, %k0 2924 ; AVX512F-NEXT: vpcmpgtq %zmm3, %zmm1, %k1 2925 ; AVX512F-NEXT: kunpckbw %k0, %k1, %k1 2926 ; AVX512F-NEXT: vpternlogd $255, %zmm0, %zmm0, %zmm0 {%k1} {z} 2927 ; AVX512F-NEXT: vpmovdb %zmm0, %xmm0 2928 ; AVX512F-NEXT: vzeroupper 2929 ; AVX512F-NEXT: retq 2930 ; 2931 ; AVX512DQ-LABEL: test_cmp_v16i64: 2932 ; AVX512DQ: # %bb.0: 2933 ; AVX512DQ-NEXT: vpcmpgtq %zmm2, %zmm0, %k0 2934 ; AVX512DQ-NEXT: vpcmpgtq %zmm3, %zmm1, %k1 2935 ; AVX512DQ-NEXT: kunpckbw %k0, %k1, %k0 2936 ; AVX512DQ-NEXT: vpmovm2d %k0, %zmm0 2937 ; AVX512DQ-NEXT: vpmovdb %zmm0, %xmm0 2938 ; AVX512DQ-NEXT: vzeroupper 2939 ; AVX512DQ-NEXT: retq 2940 ; 2941 ; AVX512BW-LABEL: test_cmp_v16i64: 2942 ; AVX512BW: # %bb.0: 2943 ; AVX512BW-NEXT: vpcmpgtq %zmm2, %zmm0, %k0 2944 ; AVX512BW-NEXT: vpcmpgtq %zmm3, %zmm1, %k1 2945 ; AVX512BW-NEXT: kunpckbw %k0, %k1, %k0 2946 ; AVX512BW-NEXT: vpmovm2b %k0, %zmm0 2947 ; AVX512BW-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 2948 ; AVX512BW-NEXT: vzeroupper 2949 ; AVX512BW-NEXT: retq 2950 %1 = icmp sgt <16 x i64> %a0, %a1 2951 ret <16 x i1> %1 2952 } 2953 2954 define <32 x i1> @test_cmp_v32i32(<32 x i32> %a0, <32 x i32> %a1) nounwind { 2955 ; SSE2-LABEL: test_cmp_v32i32: 2956 ; SSE2: # %bb.0: 2957 ; SSE2-NEXT: pcmpgtd {{[0-9]+}}(%rsp), %xmm3 2958 ; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [255,255,255,255] 2959 ; SSE2-NEXT: pand %xmm8, %xmm3 2960 ; SSE2-NEXT: pcmpgtd {{[0-9]+}}(%rsp), %xmm2 2961 ; SSE2-NEXT: pand %xmm8, %xmm2 2962 ; SSE2-NEXT: packuswb %xmm3, %xmm2 2963 ; SSE2-NEXT: pcmpgtd {{[0-9]+}}(%rsp), %xmm1 2964 ; SSE2-NEXT: pand %xmm8, %xmm1 2965 ; SSE2-NEXT: pcmpgtd {{[0-9]+}}(%rsp), %xmm0 2966 ; SSE2-NEXT: pand %xmm8, %xmm0 2967 ; SSE2-NEXT: packuswb %xmm1, %xmm0 2968 ; SSE2-NEXT: packuswb %xmm2, %xmm0 2969 ; SSE2-NEXT: pcmpgtd {{[0-9]+}}(%rsp), %xmm7 2970 ; SSE2-NEXT: pand %xmm8, %xmm7 2971 ; SSE2-NEXT: pcmpgtd {{[0-9]+}}(%rsp), %xmm6 2972 ; SSE2-NEXT: pand %xmm8, %xmm6 2973 ; SSE2-NEXT: packuswb %xmm7, %xmm6 2974 ; SSE2-NEXT: pcmpgtd {{[0-9]+}}(%rsp), %xmm5 2975 ; SSE2-NEXT: pand %xmm8, %xmm5 2976 ; SSE2-NEXT: pcmpgtd {{[0-9]+}}(%rsp), %xmm4 2977 ; SSE2-NEXT: pand %xmm8, %xmm4 2978 ; SSE2-NEXT: packuswb %xmm5, %xmm4 2979 ; SSE2-NEXT: packuswb %xmm6, %xmm4 2980 ; SSE2-NEXT: movdqa %xmm4, -{{[0-9]+}}(%rsp) 2981 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax 2982 ; SSE2-NEXT: andl $1, %eax 2983 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 2984 ; SSE2-NEXT: andl $1, %ecx 2985 ; SSE2-NEXT: leal (%rcx,%rax,2), %eax 2986 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 2987 ; SSE2-NEXT: andl $1, %ecx 2988 ; SSE2-NEXT: leal (%rax,%rcx,4), %eax 2989 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 2990 ; SSE2-NEXT: andl $1, %ecx 2991 ; SSE2-NEXT: leal (%rax,%rcx,8), %eax 2992 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 2993 ; SSE2-NEXT: andl $1, %ecx 2994 ; SSE2-NEXT: shll $4, %ecx 2995 ; SSE2-NEXT: orl %eax, %ecx 2996 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax 2997 ; SSE2-NEXT: andl $1, %eax 2998 ; SSE2-NEXT: shll $5, %eax 2999 ; SSE2-NEXT: orl %ecx, %eax 3000 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 3001 ; SSE2-NEXT: andl $1, %ecx 3002 ; SSE2-NEXT: shll $6, %ecx 3003 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 3004 ; SSE2-NEXT: andl $1, %edx 3005 ; SSE2-NEXT: shll $7, %edx 3006 ; SSE2-NEXT: orl %ecx, %edx 3007 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 3008 ; SSE2-NEXT: andl $1, %ecx 3009 ; SSE2-NEXT: shll $8, %ecx 3010 ; SSE2-NEXT: orl %edx, %ecx 3011 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 3012 ; SSE2-NEXT: andl $1, %edx 3013 ; SSE2-NEXT: shll $9, %edx 3014 ; SSE2-NEXT: orl %ecx, %edx 3015 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 3016 ; SSE2-NEXT: andl $1, %ecx 3017 ; SSE2-NEXT: shll $10, %ecx 3018 ; SSE2-NEXT: orl %edx, %ecx 3019 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 3020 ; SSE2-NEXT: andl $1, %edx 3021 ; SSE2-NEXT: shll $11, %edx 3022 ; SSE2-NEXT: orl %ecx, %edx 3023 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 3024 ; SSE2-NEXT: andl $1, %ecx 3025 ; SSE2-NEXT: shll $12, %ecx 3026 ; SSE2-NEXT: orl %edx, %ecx 3027 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 3028 ; SSE2-NEXT: andl $1, %edx 3029 ; SSE2-NEXT: shll $13, %edx 3030 ; SSE2-NEXT: orl %ecx, %edx 3031 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 3032 ; SSE2-NEXT: andl $1, %ecx 3033 ; SSE2-NEXT: shll $14, %ecx 3034 ; SSE2-NEXT: orl %edx, %ecx 3035 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 3036 ; SSE2-NEXT: shll $15, %edx 3037 ; SSE2-NEXT: orl %ecx, %edx 3038 ; SSE2-NEXT: orl %eax, %edx 3039 ; SSE2-NEXT: movw %dx, 2(%rdi) 3040 ; SSE2-NEXT: movdqa %xmm0, -{{[0-9]+}}(%rsp) 3041 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax 3042 ; SSE2-NEXT: andl $1, %eax 3043 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 3044 ; SSE2-NEXT: andl $1, %ecx 3045 ; SSE2-NEXT: leal (%rcx,%rax,2), %eax 3046 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 3047 ; SSE2-NEXT: andl $1, %ecx 3048 ; SSE2-NEXT: leal (%rax,%rcx,4), %eax 3049 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 3050 ; SSE2-NEXT: andl $1, %ecx 3051 ; SSE2-NEXT: leal (%rax,%rcx,8), %eax 3052 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 3053 ; SSE2-NEXT: andl $1, %ecx 3054 ; SSE2-NEXT: shll $4, %ecx 3055 ; SSE2-NEXT: orl %eax, %ecx 3056 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax 3057 ; SSE2-NEXT: andl $1, %eax 3058 ; SSE2-NEXT: shll $5, %eax 3059 ; SSE2-NEXT: orl %ecx, %eax 3060 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 3061 ; SSE2-NEXT: andl $1, %ecx 3062 ; SSE2-NEXT: shll $6, %ecx 3063 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 3064 ; SSE2-NEXT: andl $1, %edx 3065 ; SSE2-NEXT: shll $7, %edx 3066 ; SSE2-NEXT: orl %ecx, %edx 3067 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 3068 ; SSE2-NEXT: andl $1, %ecx 3069 ; SSE2-NEXT: shll $8, %ecx 3070 ; SSE2-NEXT: orl %edx, %ecx 3071 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 3072 ; SSE2-NEXT: andl $1, %edx 3073 ; SSE2-NEXT: shll $9, %edx 3074 ; SSE2-NEXT: orl %ecx, %edx 3075 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 3076 ; SSE2-NEXT: andl $1, %ecx 3077 ; SSE2-NEXT: shll $10, %ecx 3078 ; SSE2-NEXT: orl %edx, %ecx 3079 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 3080 ; SSE2-NEXT: andl $1, %edx 3081 ; SSE2-NEXT: shll $11, %edx 3082 ; SSE2-NEXT: orl %ecx, %edx 3083 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 3084 ; SSE2-NEXT: andl $1, %ecx 3085 ; SSE2-NEXT: shll $12, %ecx 3086 ; SSE2-NEXT: orl %edx, %ecx 3087 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 3088 ; SSE2-NEXT: andl $1, %edx 3089 ; SSE2-NEXT: shll $13, %edx 3090 ; SSE2-NEXT: orl %ecx, %edx 3091 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 3092 ; SSE2-NEXT: andl $1, %ecx 3093 ; SSE2-NEXT: shll $14, %ecx 3094 ; SSE2-NEXT: orl %edx, %ecx 3095 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 3096 ; SSE2-NEXT: shll $15, %edx 3097 ; SSE2-NEXT: orl %ecx, %edx 3098 ; SSE2-NEXT: orl %eax, %edx 3099 ; SSE2-NEXT: movw %dx, (%rdi) 3100 ; SSE2-NEXT: movq %rdi, %rax 3101 ; SSE2-NEXT: retq 3102 ; 3103 ; SSE42-LABEL: test_cmp_v32i32: 3104 ; SSE42: # %bb.0: 3105 ; SSE42-NEXT: pcmpgtd {{[0-9]+}}(%rsp), %xmm3 3106 ; SSE42-NEXT: pcmpgtd {{[0-9]+}}(%rsp), %xmm2 3107 ; SSE42-NEXT: pcmpgtd {{[0-9]+}}(%rsp), %xmm1 3108 ; SSE42-NEXT: pcmpgtd {{[0-9]+}}(%rsp), %xmm0 3109 ; SSE42-NEXT: pcmpgtd {{[0-9]+}}(%rsp), %xmm7 3110 ; SSE42-NEXT: pcmpgtd {{[0-9]+}}(%rsp), %xmm6 3111 ; SSE42-NEXT: pcmpgtd {{[0-9]+}}(%rsp), %xmm5 3112 ; SSE42-NEXT: pcmpgtd {{[0-9]+}}(%rsp), %xmm4 3113 ; SSE42-NEXT: pextrb $4, %xmm4, %eax 3114 ; SSE42-NEXT: andl $1, %eax 3115 ; SSE42-NEXT: pextrb $0, %xmm4, %ecx 3116 ; SSE42-NEXT: andl $1, %ecx 3117 ; SSE42-NEXT: leal (%rcx,%rax,2), %eax 3118 ; SSE42-NEXT: pextrb $8, %xmm4, %ecx 3119 ; SSE42-NEXT: andl $1, %ecx 3120 ; SSE42-NEXT: leal (%rax,%rcx,4), %eax 3121 ; SSE42-NEXT: pextrb $12, %xmm4, %ecx 3122 ; SSE42-NEXT: andl $1, %ecx 3123 ; SSE42-NEXT: leal (%rax,%rcx,8), %eax 3124 ; SSE42-NEXT: pextrb $0, %xmm5, %ecx 3125 ; SSE42-NEXT: andl $1, %ecx 3126 ; SSE42-NEXT: shll $4, %ecx 3127 ; SSE42-NEXT: orl %eax, %ecx 3128 ; SSE42-NEXT: pextrb $4, %xmm5, %eax 3129 ; SSE42-NEXT: andl $1, %eax 3130 ; SSE42-NEXT: shll $5, %eax 3131 ; SSE42-NEXT: orl %ecx, %eax 3132 ; SSE42-NEXT: pextrb $8, %xmm5, %ecx 3133 ; SSE42-NEXT: andl $1, %ecx 3134 ; SSE42-NEXT: shll $6, %ecx 3135 ; SSE42-NEXT: pextrb $12, %xmm5, %edx 3136 ; SSE42-NEXT: andl $1, %edx 3137 ; SSE42-NEXT: shll $7, %edx 3138 ; SSE42-NEXT: orl %ecx, %edx 3139 ; SSE42-NEXT: pextrb $0, %xmm6, %ecx 3140 ; SSE42-NEXT: andl $1, %ecx 3141 ; SSE42-NEXT: shll $8, %ecx 3142 ; SSE42-NEXT: orl %edx, %ecx 3143 ; SSE42-NEXT: pextrb $4, %xmm6, %edx 3144 ; SSE42-NEXT: andl $1, %edx 3145 ; SSE42-NEXT: shll $9, %edx 3146 ; SSE42-NEXT: orl %ecx, %edx 3147 ; SSE42-NEXT: pextrb $8, %xmm6, %ecx 3148 ; SSE42-NEXT: andl $1, %ecx 3149 ; SSE42-NEXT: shll $10, %ecx 3150 ; SSE42-NEXT: orl %edx, %ecx 3151 ; SSE42-NEXT: pextrb $12, %xmm6, %edx 3152 ; SSE42-NEXT: andl $1, %edx 3153 ; SSE42-NEXT: shll $11, %edx 3154 ; SSE42-NEXT: orl %ecx, %edx 3155 ; SSE42-NEXT: pextrb $0, %xmm7, %ecx 3156 ; SSE42-NEXT: andl $1, %ecx 3157 ; SSE42-NEXT: shll $12, %ecx 3158 ; SSE42-NEXT: orl %edx, %ecx 3159 ; SSE42-NEXT: pextrb $4, %xmm7, %edx 3160 ; SSE42-NEXT: andl $1, %edx 3161 ; SSE42-NEXT: shll $13, %edx 3162 ; SSE42-NEXT: orl %ecx, %edx 3163 ; SSE42-NEXT: pextrb $8, %xmm7, %ecx 3164 ; SSE42-NEXT: andl $1, %ecx 3165 ; SSE42-NEXT: shll $14, %ecx 3166 ; SSE42-NEXT: orl %edx, %ecx 3167 ; SSE42-NEXT: pextrb $12, %xmm7, %edx 3168 ; SSE42-NEXT: shll $15, %edx 3169 ; SSE42-NEXT: orl %ecx, %edx 3170 ; SSE42-NEXT: orl %eax, %edx 3171 ; SSE42-NEXT: movw %dx, 2(%rdi) 3172 ; SSE42-NEXT: pextrb $4, %xmm0, %eax 3173 ; SSE42-NEXT: andl $1, %eax 3174 ; SSE42-NEXT: pextrb $0, %xmm0, %ecx 3175 ; SSE42-NEXT: andl $1, %ecx 3176 ; SSE42-NEXT: leal (%rcx,%rax,2), %eax 3177 ; SSE42-NEXT: pextrb $8, %xmm0, %ecx 3178 ; SSE42-NEXT: andl $1, %ecx 3179 ; SSE42-NEXT: leal (%rax,%rcx,4), %eax 3180 ; SSE42-NEXT: pextrb $12, %xmm0, %ecx 3181 ; SSE42-NEXT: andl $1, %ecx 3182 ; SSE42-NEXT: leal (%rax,%rcx,8), %eax 3183 ; SSE42-NEXT: pextrb $0, %xmm1, %ecx 3184 ; SSE42-NEXT: andl $1, %ecx 3185 ; SSE42-NEXT: shll $4, %ecx 3186 ; SSE42-NEXT: orl %eax, %ecx 3187 ; SSE42-NEXT: pextrb $4, %xmm1, %eax 3188 ; SSE42-NEXT: andl $1, %eax 3189 ; SSE42-NEXT: shll $5, %eax 3190 ; SSE42-NEXT: orl %ecx, %eax 3191 ; SSE42-NEXT: pextrb $8, %xmm1, %ecx 3192 ; SSE42-NEXT: andl $1, %ecx 3193 ; SSE42-NEXT: shll $6, %ecx 3194 ; SSE42-NEXT: pextrb $12, %xmm1, %edx 3195 ; SSE42-NEXT: andl $1, %edx 3196 ; SSE42-NEXT: shll $7, %edx 3197 ; SSE42-NEXT: orl %ecx, %edx 3198 ; SSE42-NEXT: pextrb $0, %xmm2, %ecx 3199 ; SSE42-NEXT: andl $1, %ecx 3200 ; SSE42-NEXT: shll $8, %ecx 3201 ; SSE42-NEXT: orl %edx, %ecx 3202 ; SSE42-NEXT: pextrb $4, %xmm2, %edx 3203 ; SSE42-NEXT: andl $1, %edx 3204 ; SSE42-NEXT: shll $9, %edx 3205 ; SSE42-NEXT: orl %ecx, %edx 3206 ; SSE42-NEXT: pextrb $8, %xmm2, %ecx 3207 ; SSE42-NEXT: andl $1, %ecx 3208 ; SSE42-NEXT: shll $10, %ecx 3209 ; SSE42-NEXT: orl %edx, %ecx 3210 ; SSE42-NEXT: pextrb $12, %xmm2, %edx 3211 ; SSE42-NEXT: andl $1, %edx 3212 ; SSE42-NEXT: shll $11, %edx 3213 ; SSE42-NEXT: orl %ecx, %edx 3214 ; SSE42-NEXT: pextrb $0, %xmm3, %ecx 3215 ; SSE42-NEXT: andl $1, %ecx 3216 ; SSE42-NEXT: shll $12, %ecx 3217 ; SSE42-NEXT: orl %edx, %ecx 3218 ; SSE42-NEXT: pextrb $4, %xmm3, %edx 3219 ; SSE42-NEXT: andl $1, %edx 3220 ; SSE42-NEXT: shll $13, %edx 3221 ; SSE42-NEXT: orl %ecx, %edx 3222 ; SSE42-NEXT: pextrb $8, %xmm3, %ecx 3223 ; SSE42-NEXT: andl $1, %ecx 3224 ; SSE42-NEXT: shll $14, %ecx 3225 ; SSE42-NEXT: orl %edx, %ecx 3226 ; SSE42-NEXT: pextrb $12, %xmm3, %edx 3227 ; SSE42-NEXT: shll $15, %edx 3228 ; SSE42-NEXT: orl %ecx, %edx 3229 ; SSE42-NEXT: orl %eax, %edx 3230 ; SSE42-NEXT: movw %dx, (%rdi) 3231 ; SSE42-NEXT: movq %rdi, %rax 3232 ; SSE42-NEXT: retq 3233 ; 3234 ; AVX1-LABEL: test_cmp_v32i32: 3235 ; AVX1: # %bb.0: 3236 ; AVX1-NEXT: vextractf128 $1, %ymm7, %xmm8 3237 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm9 3238 ; AVX1-NEXT: vpcmpgtd %xmm8, %xmm9, %xmm8 3239 ; AVX1-NEXT: vpcmpgtd %xmm7, %xmm3, %xmm3 3240 ; AVX1-NEXT: vpackssdw %xmm8, %xmm3, %xmm8 3241 ; AVX1-NEXT: vextractf128 $1, %ymm6, %xmm7 3242 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm3 3243 ; AVX1-NEXT: vpcmpgtd %xmm7, %xmm3, %xmm3 3244 ; AVX1-NEXT: vpcmpgtd %xmm6, %xmm2, %xmm2 3245 ; AVX1-NEXT: vpackssdw %xmm3, %xmm2, %xmm2 3246 ; AVX1-NEXT: vpacksswb %xmm8, %xmm2, %xmm2 3247 ; AVX1-NEXT: vextractf128 $1, %ymm5, %xmm3 3248 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm6 3249 ; AVX1-NEXT: vpcmpgtd %xmm3, %xmm6, %xmm3 3250 ; AVX1-NEXT: vpcmpgtd %xmm5, %xmm1, %xmm1 3251 ; AVX1-NEXT: vpackssdw %xmm3, %xmm1, %xmm1 3252 ; AVX1-NEXT: vextractf128 $1, %ymm4, %xmm3 3253 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 3254 ; AVX1-NEXT: vpcmpgtd %xmm3, %xmm5, %xmm3 3255 ; AVX1-NEXT: vpcmpgtd %xmm4, %xmm0, %xmm0 3256 ; AVX1-NEXT: vpackssdw %xmm3, %xmm0, %xmm0 3257 ; AVX1-NEXT: vpacksswb %xmm1, %xmm0, %xmm0 3258 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 3259 ; AVX1-NEXT: retq 3260 ; 3261 ; AVX2-LABEL: test_cmp_v32i32: 3262 ; AVX2: # %bb.0: 3263 ; AVX2-NEXT: vpcmpgtd %ymm7, %ymm3, %ymm3 3264 ; AVX2-NEXT: vpcmpgtd %ymm6, %ymm2, %ymm2 3265 ; AVX2-NEXT: vpackssdw %ymm3, %ymm2, %ymm2 3266 ; AVX2-NEXT: vpermq {{.*#+}} ymm2 = ymm2[0,2,1,3] 3267 ; AVX2-NEXT: vpcmpgtd %ymm5, %ymm1, %ymm1 3268 ; AVX2-NEXT: vpcmpgtd %ymm4, %ymm0, %ymm0 3269 ; AVX2-NEXT: vpackssdw %ymm1, %ymm0, %ymm0 3270 ; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3] 3271 ; AVX2-NEXT: vpacksswb %ymm2, %ymm0, %ymm0 3272 ; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3] 3273 ; AVX2-NEXT: retq 3274 ; 3275 ; AVX512F-LABEL: test_cmp_v32i32: 3276 ; AVX512F: # %bb.0: 3277 ; AVX512F-NEXT: vpcmpgtd %zmm3, %zmm1, %k1 3278 ; AVX512F-NEXT: vpcmpgtd %zmm2, %zmm0, %k2 3279 ; AVX512F-NEXT: vpternlogd $255, %zmm0, %zmm0, %zmm0 {%k2} {z} 3280 ; AVX512F-NEXT: vpmovdb %zmm0, %xmm0 3281 ; AVX512F-NEXT: vpternlogd $255, %zmm1, %zmm1, %zmm1 {%k1} {z} 3282 ; AVX512F-NEXT: vpmovdb %zmm1, %xmm1 3283 ; AVX512F-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm0 3284 ; AVX512F-NEXT: retq 3285 ; 3286 ; AVX512DQ-LABEL: test_cmp_v32i32: 3287 ; AVX512DQ: # %bb.0: 3288 ; AVX512DQ-NEXT: vpcmpgtd %zmm3, %zmm1, %k0 3289 ; AVX512DQ-NEXT: vpcmpgtd %zmm2, %zmm0, %k1 3290 ; AVX512DQ-NEXT: vpmovm2d %k1, %zmm0 3291 ; AVX512DQ-NEXT: vpmovdb %zmm0, %xmm0 3292 ; AVX512DQ-NEXT: vpmovm2d %k0, %zmm1 3293 ; AVX512DQ-NEXT: vpmovdb %zmm1, %xmm1 3294 ; AVX512DQ-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm0 3295 ; AVX512DQ-NEXT: retq 3296 ; 3297 ; AVX512BW-LABEL: test_cmp_v32i32: 3298 ; AVX512BW: # %bb.0: 3299 ; AVX512BW-NEXT: vpcmpgtd %zmm2, %zmm0, %k0 3300 ; AVX512BW-NEXT: vpcmpgtd %zmm3, %zmm1, %k1 3301 ; AVX512BW-NEXT: kunpckwd %k0, %k1, %k0 3302 ; AVX512BW-NEXT: vpmovm2b %k0, %zmm0 3303 ; AVX512BW-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 3304 ; AVX512BW-NEXT: retq 3305 %1 = icmp sgt <32 x i32> %a0, %a1 3306 ret <32 x i1> %1 3307 } 3308 3309 define <64 x i1> @test_cmp_v64i16(<64 x i16> %a0, <64 x i16> %a1) nounwind { 3310 ; SSE2-LABEL: test_cmp_v64i16: 3311 ; SSE2: # %bb.0: 3312 ; SSE2-NEXT: pcmpgtw {{[0-9]+}}(%rsp), %xmm1 3313 ; SSE2-NEXT: pcmpgtw {{[0-9]+}}(%rsp), %xmm0 3314 ; SSE2-NEXT: packsswb %xmm1, %xmm0 3315 ; SSE2-NEXT: pcmpgtw {{[0-9]+}}(%rsp), %xmm3 3316 ; SSE2-NEXT: pcmpgtw {{[0-9]+}}(%rsp), %xmm2 3317 ; SSE2-NEXT: packsswb %xmm3, %xmm2 3318 ; SSE2-NEXT: pcmpgtw {{[0-9]+}}(%rsp), %xmm5 3319 ; SSE2-NEXT: pcmpgtw {{[0-9]+}}(%rsp), %xmm4 3320 ; SSE2-NEXT: packsswb %xmm5, %xmm4 3321 ; SSE2-NEXT: pcmpgtw {{[0-9]+}}(%rsp), %xmm7 3322 ; SSE2-NEXT: pcmpgtw {{[0-9]+}}(%rsp), %xmm6 3323 ; SSE2-NEXT: packsswb %xmm7, %xmm6 3324 ; SSE2-NEXT: movdqa %xmm6, -{{[0-9]+}}(%rsp) 3325 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax 3326 ; SSE2-NEXT: andl $1, %eax 3327 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 3328 ; SSE2-NEXT: andl $1, %ecx 3329 ; SSE2-NEXT: leal (%rcx,%rax,2), %eax 3330 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 3331 ; SSE2-NEXT: andl $1, %ecx 3332 ; SSE2-NEXT: leal (%rax,%rcx,4), %eax 3333 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 3334 ; SSE2-NEXT: andl $1, %ecx 3335 ; SSE2-NEXT: leal (%rax,%rcx,8), %eax 3336 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 3337 ; SSE2-NEXT: andl $1, %ecx 3338 ; SSE2-NEXT: shll $4, %ecx 3339 ; SSE2-NEXT: orl %eax, %ecx 3340 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax 3341 ; SSE2-NEXT: andl $1, %eax 3342 ; SSE2-NEXT: shll $5, %eax 3343 ; SSE2-NEXT: orl %ecx, %eax 3344 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 3345 ; SSE2-NEXT: andl $1, %ecx 3346 ; SSE2-NEXT: shll $6, %ecx 3347 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 3348 ; SSE2-NEXT: andl $1, %edx 3349 ; SSE2-NEXT: shll $7, %edx 3350 ; SSE2-NEXT: orl %ecx, %edx 3351 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 3352 ; SSE2-NEXT: andl $1, %ecx 3353 ; SSE2-NEXT: shll $8, %ecx 3354 ; SSE2-NEXT: orl %edx, %ecx 3355 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 3356 ; SSE2-NEXT: andl $1, %edx 3357 ; SSE2-NEXT: shll $9, %edx 3358 ; SSE2-NEXT: orl %ecx, %edx 3359 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 3360 ; SSE2-NEXT: andl $1, %ecx 3361 ; SSE2-NEXT: shll $10, %ecx 3362 ; SSE2-NEXT: orl %edx, %ecx 3363 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 3364 ; SSE2-NEXT: andl $1, %edx 3365 ; SSE2-NEXT: shll $11, %edx 3366 ; SSE2-NEXT: orl %ecx, %edx 3367 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 3368 ; SSE2-NEXT: andl $1, %ecx 3369 ; SSE2-NEXT: shll $12, %ecx 3370 ; SSE2-NEXT: orl %edx, %ecx 3371 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 3372 ; SSE2-NEXT: andl $1, %edx 3373 ; SSE2-NEXT: shll $13, %edx 3374 ; SSE2-NEXT: orl %ecx, %edx 3375 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 3376 ; SSE2-NEXT: andl $1, %ecx 3377 ; SSE2-NEXT: shll $14, %ecx 3378 ; SSE2-NEXT: orl %edx, %ecx 3379 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 3380 ; SSE2-NEXT: shll $15, %edx 3381 ; SSE2-NEXT: orl %ecx, %edx 3382 ; SSE2-NEXT: orl %eax, %edx 3383 ; SSE2-NEXT: movw %dx, 6(%rdi) 3384 ; SSE2-NEXT: movdqa %xmm4, -{{[0-9]+}}(%rsp) 3385 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax 3386 ; SSE2-NEXT: andl $1, %eax 3387 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 3388 ; SSE2-NEXT: andl $1, %ecx 3389 ; SSE2-NEXT: leal (%rcx,%rax,2), %eax 3390 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 3391 ; SSE2-NEXT: andl $1, %ecx 3392 ; SSE2-NEXT: leal (%rax,%rcx,4), %eax 3393 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 3394 ; SSE2-NEXT: andl $1, %ecx 3395 ; SSE2-NEXT: leal (%rax,%rcx,8), %eax 3396 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 3397 ; SSE2-NEXT: andl $1, %ecx 3398 ; SSE2-NEXT: shll $4, %ecx 3399 ; SSE2-NEXT: orl %eax, %ecx 3400 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax 3401 ; SSE2-NEXT: andl $1, %eax 3402 ; SSE2-NEXT: shll $5, %eax 3403 ; SSE2-NEXT: orl %ecx, %eax 3404 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 3405 ; SSE2-NEXT: andl $1, %ecx 3406 ; SSE2-NEXT: shll $6, %ecx 3407 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 3408 ; SSE2-NEXT: andl $1, %edx 3409 ; SSE2-NEXT: shll $7, %edx 3410 ; SSE2-NEXT: orl %ecx, %edx 3411 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 3412 ; SSE2-NEXT: andl $1, %ecx 3413 ; SSE2-NEXT: shll $8, %ecx 3414 ; SSE2-NEXT: orl %edx, %ecx 3415 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 3416 ; SSE2-NEXT: andl $1, %edx 3417 ; SSE2-NEXT: shll $9, %edx 3418 ; SSE2-NEXT: orl %ecx, %edx 3419 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 3420 ; SSE2-NEXT: andl $1, %ecx 3421 ; SSE2-NEXT: shll $10, %ecx 3422 ; SSE2-NEXT: orl %edx, %ecx 3423 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 3424 ; SSE2-NEXT: andl $1, %edx 3425 ; SSE2-NEXT: shll $11, %edx 3426 ; SSE2-NEXT: orl %ecx, %edx 3427 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 3428 ; SSE2-NEXT: andl $1, %ecx 3429 ; SSE2-NEXT: shll $12, %ecx 3430 ; SSE2-NEXT: orl %edx, %ecx 3431 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 3432 ; SSE2-NEXT: andl $1, %edx 3433 ; SSE2-NEXT: shll $13, %edx 3434 ; SSE2-NEXT: orl %ecx, %edx 3435 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 3436 ; SSE2-NEXT: andl $1, %ecx 3437 ; SSE2-NEXT: shll $14, %ecx 3438 ; SSE2-NEXT: orl %edx, %ecx 3439 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 3440 ; SSE2-NEXT: shll $15, %edx 3441 ; SSE2-NEXT: orl %ecx, %edx 3442 ; SSE2-NEXT: orl %eax, %edx 3443 ; SSE2-NEXT: movw %dx, 4(%rdi) 3444 ; SSE2-NEXT: movdqa %xmm2, -{{[0-9]+}}(%rsp) 3445 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax 3446 ; SSE2-NEXT: andl $1, %eax 3447 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 3448 ; SSE2-NEXT: andl $1, %ecx 3449 ; SSE2-NEXT: leal (%rcx,%rax,2), %eax 3450 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 3451 ; SSE2-NEXT: andl $1, %ecx 3452 ; SSE2-NEXT: leal (%rax,%rcx,4), %eax 3453 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 3454 ; SSE2-NEXT: andl $1, %ecx 3455 ; SSE2-NEXT: leal (%rax,%rcx,8), %eax 3456 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 3457 ; SSE2-NEXT: andl $1, %ecx 3458 ; SSE2-NEXT: shll $4, %ecx 3459 ; SSE2-NEXT: orl %eax, %ecx 3460 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax 3461 ; SSE2-NEXT: andl $1, %eax 3462 ; SSE2-NEXT: shll $5, %eax 3463 ; SSE2-NEXT: orl %ecx, %eax 3464 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 3465 ; SSE2-NEXT: andl $1, %ecx 3466 ; SSE2-NEXT: shll $6, %ecx 3467 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 3468 ; SSE2-NEXT: andl $1, %edx 3469 ; SSE2-NEXT: shll $7, %edx 3470 ; SSE2-NEXT: orl %ecx, %edx 3471 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 3472 ; SSE2-NEXT: andl $1, %ecx 3473 ; SSE2-NEXT: shll $8, %ecx 3474 ; SSE2-NEXT: orl %edx, %ecx 3475 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 3476 ; SSE2-NEXT: andl $1, %edx 3477 ; SSE2-NEXT: shll $9, %edx 3478 ; SSE2-NEXT: orl %ecx, %edx 3479 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 3480 ; SSE2-NEXT: andl $1, %ecx 3481 ; SSE2-NEXT: shll $10, %ecx 3482 ; SSE2-NEXT: orl %edx, %ecx 3483 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 3484 ; SSE2-NEXT: andl $1, %edx 3485 ; SSE2-NEXT: shll $11, %edx 3486 ; SSE2-NEXT: orl %ecx, %edx 3487 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 3488 ; SSE2-NEXT: andl $1, %ecx 3489 ; SSE2-NEXT: shll $12, %ecx 3490 ; SSE2-NEXT: orl %edx, %ecx 3491 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 3492 ; SSE2-NEXT: andl $1, %edx 3493 ; SSE2-NEXT: shll $13, %edx 3494 ; SSE2-NEXT: orl %ecx, %edx 3495 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 3496 ; SSE2-NEXT: andl $1, %ecx 3497 ; SSE2-NEXT: shll $14, %ecx 3498 ; SSE2-NEXT: orl %edx, %ecx 3499 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 3500 ; SSE2-NEXT: shll $15, %edx 3501 ; SSE2-NEXT: orl %ecx, %edx 3502 ; SSE2-NEXT: orl %eax, %edx 3503 ; SSE2-NEXT: movw %dx, 2(%rdi) 3504 ; SSE2-NEXT: movdqa %xmm0, -{{[0-9]+}}(%rsp) 3505 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax 3506 ; SSE2-NEXT: andl $1, %eax 3507 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 3508 ; SSE2-NEXT: andl $1, %ecx 3509 ; SSE2-NEXT: leal (%rcx,%rax,2), %eax 3510 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 3511 ; SSE2-NEXT: andl $1, %ecx 3512 ; SSE2-NEXT: leal (%rax,%rcx,4), %eax 3513 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 3514 ; SSE2-NEXT: andl $1, %ecx 3515 ; SSE2-NEXT: leal (%rax,%rcx,8), %eax 3516 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 3517 ; SSE2-NEXT: andl $1, %ecx 3518 ; SSE2-NEXT: shll $4, %ecx 3519 ; SSE2-NEXT: orl %eax, %ecx 3520 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax 3521 ; SSE2-NEXT: andl $1, %eax 3522 ; SSE2-NEXT: shll $5, %eax 3523 ; SSE2-NEXT: orl %ecx, %eax 3524 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 3525 ; SSE2-NEXT: andl $1, %ecx 3526 ; SSE2-NEXT: shll $6, %ecx 3527 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 3528 ; SSE2-NEXT: andl $1, %edx 3529 ; SSE2-NEXT: shll $7, %edx 3530 ; SSE2-NEXT: orl %ecx, %edx 3531 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 3532 ; SSE2-NEXT: andl $1, %ecx 3533 ; SSE2-NEXT: shll $8, %ecx 3534 ; SSE2-NEXT: orl %edx, %ecx 3535 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 3536 ; SSE2-NEXT: andl $1, %edx 3537 ; SSE2-NEXT: shll $9, %edx 3538 ; SSE2-NEXT: orl %ecx, %edx 3539 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 3540 ; SSE2-NEXT: andl $1, %ecx 3541 ; SSE2-NEXT: shll $10, %ecx 3542 ; SSE2-NEXT: orl %edx, %ecx 3543 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 3544 ; SSE2-NEXT: andl $1, %edx 3545 ; SSE2-NEXT: shll $11, %edx 3546 ; SSE2-NEXT: orl %ecx, %edx 3547 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 3548 ; SSE2-NEXT: andl $1, %ecx 3549 ; SSE2-NEXT: shll $12, %ecx 3550 ; SSE2-NEXT: orl %edx, %ecx 3551 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 3552 ; SSE2-NEXT: andl $1, %edx 3553 ; SSE2-NEXT: shll $13, %edx 3554 ; SSE2-NEXT: orl %ecx, %edx 3555 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 3556 ; SSE2-NEXT: andl $1, %ecx 3557 ; SSE2-NEXT: shll $14, %ecx 3558 ; SSE2-NEXT: orl %edx, %ecx 3559 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 3560 ; SSE2-NEXT: shll $15, %edx 3561 ; SSE2-NEXT: orl %ecx, %edx 3562 ; SSE2-NEXT: orl %eax, %edx 3563 ; SSE2-NEXT: movw %dx, (%rdi) 3564 ; SSE2-NEXT: movq %rdi, %rax 3565 ; SSE2-NEXT: retq 3566 ; 3567 ; SSE42-LABEL: test_cmp_v64i16: 3568 ; SSE42: # %bb.0: 3569 ; SSE42-NEXT: pcmpgtw {{[0-9]+}}(%rsp), %xmm1 3570 ; SSE42-NEXT: pcmpgtw {{[0-9]+}}(%rsp), %xmm0 3571 ; SSE42-NEXT: pcmpgtw {{[0-9]+}}(%rsp), %xmm3 3572 ; SSE42-NEXT: pcmpgtw {{[0-9]+}}(%rsp), %xmm2 3573 ; SSE42-NEXT: pcmpgtw {{[0-9]+}}(%rsp), %xmm5 3574 ; SSE42-NEXT: pcmpgtw {{[0-9]+}}(%rsp), %xmm4 3575 ; SSE42-NEXT: pcmpgtw {{[0-9]+}}(%rsp), %xmm7 3576 ; SSE42-NEXT: pcmpgtw {{[0-9]+}}(%rsp), %xmm6 3577 ; SSE42-NEXT: pextrb $2, %xmm6, %eax 3578 ; SSE42-NEXT: andl $1, %eax 3579 ; SSE42-NEXT: pextrb $0, %xmm6, %ecx 3580 ; SSE42-NEXT: andl $1, %ecx 3581 ; SSE42-NEXT: leal (%rcx,%rax,2), %eax 3582 ; SSE42-NEXT: pextrb $4, %xmm6, %ecx 3583 ; SSE42-NEXT: andl $1, %ecx 3584 ; SSE42-NEXT: leal (%rax,%rcx,4), %eax 3585 ; SSE42-NEXT: pextrb $6, %xmm6, %ecx 3586 ; SSE42-NEXT: andl $1, %ecx 3587 ; SSE42-NEXT: leal (%rax,%rcx,8), %eax 3588 ; SSE42-NEXT: pextrb $8, %xmm6, %ecx 3589 ; SSE42-NEXT: andl $1, %ecx 3590 ; SSE42-NEXT: shll $4, %ecx 3591 ; SSE42-NEXT: orl %eax, %ecx 3592 ; SSE42-NEXT: pextrb $10, %xmm6, %eax 3593 ; SSE42-NEXT: andl $1, %eax 3594 ; SSE42-NEXT: shll $5, %eax 3595 ; SSE42-NEXT: orl %ecx, %eax 3596 ; SSE42-NEXT: pextrb $12, %xmm6, %ecx 3597 ; SSE42-NEXT: andl $1, %ecx 3598 ; SSE42-NEXT: shll $6, %ecx 3599 ; SSE42-NEXT: pextrb $14, %xmm6, %edx 3600 ; SSE42-NEXT: andl $1, %edx 3601 ; SSE42-NEXT: shll $7, %edx 3602 ; SSE42-NEXT: orl %ecx, %edx 3603 ; SSE42-NEXT: pextrb $0, %xmm7, %ecx 3604 ; SSE42-NEXT: andl $1, %ecx 3605 ; SSE42-NEXT: shll $8, %ecx 3606 ; SSE42-NEXT: orl %edx, %ecx 3607 ; SSE42-NEXT: pextrb $2, %xmm7, %edx 3608 ; SSE42-NEXT: andl $1, %edx 3609 ; SSE42-NEXT: shll $9, %edx 3610 ; SSE42-NEXT: orl %ecx, %edx 3611 ; SSE42-NEXT: pextrb $4, %xmm7, %ecx 3612 ; SSE42-NEXT: andl $1, %ecx 3613 ; SSE42-NEXT: shll $10, %ecx 3614 ; SSE42-NEXT: orl %edx, %ecx 3615 ; SSE42-NEXT: pextrb $6, %xmm7, %edx 3616 ; SSE42-NEXT: andl $1, %edx 3617 ; SSE42-NEXT: shll $11, %edx 3618 ; SSE42-NEXT: orl %ecx, %edx 3619 ; SSE42-NEXT: pextrb $8, %xmm7, %ecx 3620 ; SSE42-NEXT: andl $1, %ecx 3621 ; SSE42-NEXT: shll $12, %ecx 3622 ; SSE42-NEXT: orl %edx, %ecx 3623 ; SSE42-NEXT: pextrb $10, %xmm7, %edx 3624 ; SSE42-NEXT: andl $1, %edx 3625 ; SSE42-NEXT: shll $13, %edx 3626 ; SSE42-NEXT: orl %ecx, %edx 3627 ; SSE42-NEXT: pextrb $12, %xmm7, %ecx 3628 ; SSE42-NEXT: andl $1, %ecx 3629 ; SSE42-NEXT: shll $14, %ecx 3630 ; SSE42-NEXT: orl %edx, %ecx 3631 ; SSE42-NEXT: pextrb $14, %xmm7, %edx 3632 ; SSE42-NEXT: shll $15, %edx 3633 ; SSE42-NEXT: orl %ecx, %edx 3634 ; SSE42-NEXT: orl %eax, %edx 3635 ; SSE42-NEXT: movw %dx, 6(%rdi) 3636 ; SSE42-NEXT: pextrb $2, %xmm4, %eax 3637 ; SSE42-NEXT: andl $1, %eax 3638 ; SSE42-NEXT: pextrb $0, %xmm4, %ecx 3639 ; SSE42-NEXT: andl $1, %ecx 3640 ; SSE42-NEXT: leal (%rcx,%rax,2), %eax 3641 ; SSE42-NEXT: pextrb $4, %xmm4, %ecx 3642 ; SSE42-NEXT: andl $1, %ecx 3643 ; SSE42-NEXT: leal (%rax,%rcx,4), %eax 3644 ; SSE42-NEXT: pextrb $6, %xmm4, %ecx 3645 ; SSE42-NEXT: andl $1, %ecx 3646 ; SSE42-NEXT: leal (%rax,%rcx,8), %eax 3647 ; SSE42-NEXT: pextrb $8, %xmm4, %ecx 3648 ; SSE42-NEXT: andl $1, %ecx 3649 ; SSE42-NEXT: shll $4, %ecx 3650 ; SSE42-NEXT: orl %eax, %ecx 3651 ; SSE42-NEXT: pextrb $10, %xmm4, %eax 3652 ; SSE42-NEXT: andl $1, %eax 3653 ; SSE42-NEXT: shll $5, %eax 3654 ; SSE42-NEXT: orl %ecx, %eax 3655 ; SSE42-NEXT: pextrb $12, %xmm4, %ecx 3656 ; SSE42-NEXT: andl $1, %ecx 3657 ; SSE42-NEXT: shll $6, %ecx 3658 ; SSE42-NEXT: pextrb $14, %xmm4, %edx 3659 ; SSE42-NEXT: andl $1, %edx 3660 ; SSE42-NEXT: shll $7, %edx 3661 ; SSE42-NEXT: orl %ecx, %edx 3662 ; SSE42-NEXT: pextrb $0, %xmm5, %ecx 3663 ; SSE42-NEXT: andl $1, %ecx 3664 ; SSE42-NEXT: shll $8, %ecx 3665 ; SSE42-NEXT: orl %edx, %ecx 3666 ; SSE42-NEXT: pextrb $2, %xmm5, %edx 3667 ; SSE42-NEXT: andl $1, %edx 3668 ; SSE42-NEXT: shll $9, %edx 3669 ; SSE42-NEXT: orl %ecx, %edx 3670 ; SSE42-NEXT: pextrb $4, %xmm5, %ecx 3671 ; SSE42-NEXT: andl $1, %ecx 3672 ; SSE42-NEXT: shll $10, %ecx 3673 ; SSE42-NEXT: orl %edx, %ecx 3674 ; SSE42-NEXT: pextrb $6, %xmm5, %edx 3675 ; SSE42-NEXT: andl $1, %edx 3676 ; SSE42-NEXT: shll $11, %edx 3677 ; SSE42-NEXT: orl %ecx, %edx 3678 ; SSE42-NEXT: pextrb $8, %xmm5, %ecx 3679 ; SSE42-NEXT: andl $1, %ecx 3680 ; SSE42-NEXT: shll $12, %ecx 3681 ; SSE42-NEXT: orl %edx, %ecx 3682 ; SSE42-NEXT: pextrb $10, %xmm5, %edx 3683 ; SSE42-NEXT: andl $1, %edx 3684 ; SSE42-NEXT: shll $13, %edx 3685 ; SSE42-NEXT: orl %ecx, %edx 3686 ; SSE42-NEXT: pextrb $12, %xmm5, %ecx 3687 ; SSE42-NEXT: andl $1, %ecx 3688 ; SSE42-NEXT: shll $14, %ecx 3689 ; SSE42-NEXT: orl %edx, %ecx 3690 ; SSE42-NEXT: pextrb $14, %xmm5, %edx 3691 ; SSE42-NEXT: shll $15, %edx 3692 ; SSE42-NEXT: orl %ecx, %edx 3693 ; SSE42-NEXT: orl %eax, %edx 3694 ; SSE42-NEXT: movw %dx, 4(%rdi) 3695 ; SSE42-NEXT: pextrb $2, %xmm2, %eax 3696 ; SSE42-NEXT: andl $1, %eax 3697 ; SSE42-NEXT: pextrb $0, %xmm2, %ecx 3698 ; SSE42-NEXT: andl $1, %ecx 3699 ; SSE42-NEXT: leal (%rcx,%rax,2), %eax 3700 ; SSE42-NEXT: pextrb $4, %xmm2, %ecx 3701 ; SSE42-NEXT: andl $1, %ecx 3702 ; SSE42-NEXT: leal (%rax,%rcx,4), %eax 3703 ; SSE42-NEXT: pextrb $6, %xmm2, %ecx 3704 ; SSE42-NEXT: andl $1, %ecx 3705 ; SSE42-NEXT: leal (%rax,%rcx,8), %eax 3706 ; SSE42-NEXT: pextrb $8, %xmm2, %ecx 3707 ; SSE42-NEXT: andl $1, %ecx 3708 ; SSE42-NEXT: shll $4, %ecx 3709 ; SSE42-NEXT: orl %eax, %ecx 3710 ; SSE42-NEXT: pextrb $10, %xmm2, %eax 3711 ; SSE42-NEXT: andl $1, %eax 3712 ; SSE42-NEXT: shll $5, %eax 3713 ; SSE42-NEXT: orl %ecx, %eax 3714 ; SSE42-NEXT: pextrb $12, %xmm2, %ecx 3715 ; SSE42-NEXT: andl $1, %ecx 3716 ; SSE42-NEXT: shll $6, %ecx 3717 ; SSE42-NEXT: pextrb $14, %xmm2, %edx 3718 ; SSE42-NEXT: andl $1, %edx 3719 ; SSE42-NEXT: shll $7, %edx 3720 ; SSE42-NEXT: orl %ecx, %edx 3721 ; SSE42-NEXT: pextrb $0, %xmm3, %ecx 3722 ; SSE42-NEXT: andl $1, %ecx 3723 ; SSE42-NEXT: shll $8, %ecx 3724 ; SSE42-NEXT: orl %edx, %ecx 3725 ; SSE42-NEXT: pextrb $2, %xmm3, %edx 3726 ; SSE42-NEXT: andl $1, %edx 3727 ; SSE42-NEXT: shll $9, %edx 3728 ; SSE42-NEXT: orl %ecx, %edx 3729 ; SSE42-NEXT: pextrb $4, %xmm3, %ecx 3730 ; SSE42-NEXT: andl $1, %ecx 3731 ; SSE42-NEXT: shll $10, %ecx 3732 ; SSE42-NEXT: orl %edx, %ecx 3733 ; SSE42-NEXT: pextrb $6, %xmm3, %edx 3734 ; SSE42-NEXT: andl $1, %edx 3735 ; SSE42-NEXT: shll $11, %edx 3736 ; SSE42-NEXT: orl %ecx, %edx 3737 ; SSE42-NEXT: pextrb $8, %xmm3, %ecx 3738 ; SSE42-NEXT: andl $1, %ecx 3739 ; SSE42-NEXT: shll $12, %ecx 3740 ; SSE42-NEXT: orl %edx, %ecx 3741 ; SSE42-NEXT: pextrb $10, %xmm3, %edx 3742 ; SSE42-NEXT: andl $1, %edx 3743 ; SSE42-NEXT: shll $13, %edx 3744 ; SSE42-NEXT: orl %ecx, %edx 3745 ; SSE42-NEXT: pextrb $12, %xmm3, %ecx 3746 ; SSE42-NEXT: andl $1, %ecx 3747 ; SSE42-NEXT: shll $14, %ecx 3748 ; SSE42-NEXT: orl %edx, %ecx 3749 ; SSE42-NEXT: pextrb $14, %xmm3, %edx 3750 ; SSE42-NEXT: shll $15, %edx 3751 ; SSE42-NEXT: orl %ecx, %edx 3752 ; SSE42-NEXT: orl %eax, %edx 3753 ; SSE42-NEXT: movw %dx, 2(%rdi) 3754 ; SSE42-NEXT: pextrb $2, %xmm0, %eax 3755 ; SSE42-NEXT: andl $1, %eax 3756 ; SSE42-NEXT: pextrb $0, %xmm0, %ecx 3757 ; SSE42-NEXT: andl $1, %ecx 3758 ; SSE42-NEXT: leal (%rcx,%rax,2), %eax 3759 ; SSE42-NEXT: pextrb $4, %xmm0, %ecx 3760 ; SSE42-NEXT: andl $1, %ecx 3761 ; SSE42-NEXT: leal (%rax,%rcx,4), %eax 3762 ; SSE42-NEXT: pextrb $6, %xmm0, %ecx 3763 ; SSE42-NEXT: andl $1, %ecx 3764 ; SSE42-NEXT: leal (%rax,%rcx,8), %eax 3765 ; SSE42-NEXT: pextrb $8, %xmm0, %ecx 3766 ; SSE42-NEXT: andl $1, %ecx 3767 ; SSE42-NEXT: shll $4, %ecx 3768 ; SSE42-NEXT: orl %eax, %ecx 3769 ; SSE42-NEXT: pextrb $10, %xmm0, %eax 3770 ; SSE42-NEXT: andl $1, %eax 3771 ; SSE42-NEXT: shll $5, %eax 3772 ; SSE42-NEXT: orl %ecx, %eax 3773 ; SSE42-NEXT: pextrb $12, %xmm0, %ecx 3774 ; SSE42-NEXT: andl $1, %ecx 3775 ; SSE42-NEXT: shll $6, %ecx 3776 ; SSE42-NEXT: pextrb $14, %xmm0, %edx 3777 ; SSE42-NEXT: andl $1, %edx 3778 ; SSE42-NEXT: shll $7, %edx 3779 ; SSE42-NEXT: orl %ecx, %edx 3780 ; SSE42-NEXT: pextrb $0, %xmm1, %ecx 3781 ; SSE42-NEXT: andl $1, %ecx 3782 ; SSE42-NEXT: shll $8, %ecx 3783 ; SSE42-NEXT: orl %edx, %ecx 3784 ; SSE42-NEXT: pextrb $2, %xmm1, %edx 3785 ; SSE42-NEXT: andl $1, %edx 3786 ; SSE42-NEXT: shll $9, %edx 3787 ; SSE42-NEXT: orl %ecx, %edx 3788 ; SSE42-NEXT: pextrb $4, %xmm1, %ecx 3789 ; SSE42-NEXT: andl $1, %ecx 3790 ; SSE42-NEXT: shll $10, %ecx 3791 ; SSE42-NEXT: orl %edx, %ecx 3792 ; SSE42-NEXT: pextrb $6, %xmm1, %edx 3793 ; SSE42-NEXT: andl $1, %edx 3794 ; SSE42-NEXT: shll $11, %edx 3795 ; SSE42-NEXT: orl %ecx, %edx 3796 ; SSE42-NEXT: pextrb $8, %xmm1, %ecx 3797 ; SSE42-NEXT: andl $1, %ecx 3798 ; SSE42-NEXT: shll $12, %ecx 3799 ; SSE42-NEXT: orl %edx, %ecx 3800 ; SSE42-NEXT: pextrb $10, %xmm1, %edx 3801 ; SSE42-NEXT: andl $1, %edx 3802 ; SSE42-NEXT: shll $13, %edx 3803 ; SSE42-NEXT: orl %ecx, %edx 3804 ; SSE42-NEXT: pextrb $12, %xmm1, %ecx 3805 ; SSE42-NEXT: andl $1, %ecx 3806 ; SSE42-NEXT: shll $14, %ecx 3807 ; SSE42-NEXT: orl %edx, %ecx 3808 ; SSE42-NEXT: pextrb $14, %xmm1, %edx 3809 ; SSE42-NEXT: shll $15, %edx 3810 ; SSE42-NEXT: orl %ecx, %edx 3811 ; SSE42-NEXT: orl %eax, %edx 3812 ; SSE42-NEXT: movw %dx, (%rdi) 3813 ; SSE42-NEXT: movq %rdi, %rax 3814 ; SSE42-NEXT: retq 3815 ; 3816 ; AVX1-LABEL: test_cmp_v64i16: 3817 ; AVX1: # %bb.0: 3818 ; AVX1-NEXT: vextractf128 $1, %ymm5, %xmm8 3819 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm9 3820 ; AVX1-NEXT: vpcmpgtw %xmm8, %xmm9, %xmm8 3821 ; AVX1-NEXT: vpcmpgtw %xmm5, %xmm1, %xmm9 3822 ; AVX1-NEXT: vextractf128 $1, %ymm4, %xmm5 3823 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1 3824 ; AVX1-NEXT: vpcmpgtw %xmm5, %xmm1, %xmm5 3825 ; AVX1-NEXT: vpcmpgtw %xmm4, %xmm0, %xmm0 3826 ; AVX1-NEXT: vextractf128 $1, %ymm7, %xmm1 3827 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm4 3828 ; AVX1-NEXT: vpcmpgtw %xmm1, %xmm4, %xmm4 3829 ; AVX1-NEXT: vpcmpgtw %xmm7, %xmm3, %xmm3 3830 ; AVX1-NEXT: vextractf128 $1, %ymm6, %xmm1 3831 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm7 3832 ; AVX1-NEXT: vpcmpgtw %xmm1, %xmm7, %xmm7 3833 ; AVX1-NEXT: vpcmpgtw %xmm6, %xmm2, %xmm2 3834 ; AVX1-NEXT: vpextrb $2, %xmm2, %eax 3835 ; AVX1-NEXT: andl $1, %eax 3836 ; AVX1-NEXT: vpextrb $0, %xmm2, %ecx 3837 ; AVX1-NEXT: andl $1, %ecx 3838 ; AVX1-NEXT: leal (%rcx,%rax,2), %eax 3839 ; AVX1-NEXT: vpextrb $4, %xmm2, %ecx 3840 ; AVX1-NEXT: andl $1, %ecx 3841 ; AVX1-NEXT: leal (%rax,%rcx,4), %eax 3842 ; AVX1-NEXT: vpextrb $6, %xmm2, %ecx 3843 ; AVX1-NEXT: andl $1, %ecx 3844 ; AVX1-NEXT: leal (%rax,%rcx,8), %eax 3845 ; AVX1-NEXT: vpextrb $8, %xmm2, %ecx 3846 ; AVX1-NEXT: andl $1, %ecx 3847 ; AVX1-NEXT: shll $4, %ecx 3848 ; AVX1-NEXT: orl %eax, %ecx 3849 ; AVX1-NEXT: vpextrb $10, %xmm2, %eax 3850 ; AVX1-NEXT: andl $1, %eax 3851 ; AVX1-NEXT: shll $5, %eax 3852 ; AVX1-NEXT: orl %ecx, %eax 3853 ; AVX1-NEXT: vpextrb $12, %xmm2, %ecx 3854 ; AVX1-NEXT: andl $1, %ecx 3855 ; AVX1-NEXT: shll $6, %ecx 3856 ; AVX1-NEXT: vpextrb $14, %xmm2, %edx 3857 ; AVX1-NEXT: andl $1, %edx 3858 ; AVX1-NEXT: shll $7, %edx 3859 ; AVX1-NEXT: orl %ecx, %edx 3860 ; AVX1-NEXT: vpextrb $0, %xmm7, %ecx 3861 ; AVX1-NEXT: andl $1, %ecx 3862 ; AVX1-NEXT: shll $8, %ecx 3863 ; AVX1-NEXT: orl %edx, %ecx 3864 ; AVX1-NEXT: vpextrb $2, %xmm7, %edx 3865 ; AVX1-NEXT: andl $1, %edx 3866 ; AVX1-NEXT: shll $9, %edx 3867 ; AVX1-NEXT: orl %ecx, %edx 3868 ; AVX1-NEXT: vpextrb $4, %xmm7, %ecx 3869 ; AVX1-NEXT: andl $1, %ecx 3870 ; AVX1-NEXT: shll $10, %ecx 3871 ; AVX1-NEXT: orl %edx, %ecx 3872 ; AVX1-NEXT: vpextrb $6, %xmm7, %edx 3873 ; AVX1-NEXT: andl $1, %edx 3874 ; AVX1-NEXT: shll $11, %edx 3875 ; AVX1-NEXT: orl %ecx, %edx 3876 ; AVX1-NEXT: vpextrb $8, %xmm7, %ecx 3877 ; AVX1-NEXT: andl $1, %ecx 3878 ; AVX1-NEXT: shll $12, %ecx 3879 ; AVX1-NEXT: orl %edx, %ecx 3880 ; AVX1-NEXT: vpextrb $10, %xmm7, %edx 3881 ; AVX1-NEXT: andl $1, %edx 3882 ; AVX1-NEXT: shll $13, %edx 3883 ; AVX1-NEXT: orl %ecx, %edx 3884 ; AVX1-NEXT: vpextrb $12, %xmm7, %ecx 3885 ; AVX1-NEXT: andl $1, %ecx 3886 ; AVX1-NEXT: shll $14, %ecx 3887 ; AVX1-NEXT: orl %edx, %ecx 3888 ; AVX1-NEXT: vpextrb $14, %xmm7, %edx 3889 ; AVX1-NEXT: andl $1, %edx 3890 ; AVX1-NEXT: shll $15, %edx 3891 ; AVX1-NEXT: orl %ecx, %edx 3892 ; AVX1-NEXT: vpextrb $0, %xmm3, %ecx 3893 ; AVX1-NEXT: andl $1, %ecx 3894 ; AVX1-NEXT: shll $16, %ecx 3895 ; AVX1-NEXT: orl %edx, %ecx 3896 ; AVX1-NEXT: vpextrb $2, %xmm3, %edx 3897 ; AVX1-NEXT: andl $1, %edx 3898 ; AVX1-NEXT: shll $17, %edx 3899 ; AVX1-NEXT: orl %ecx, %edx 3900 ; AVX1-NEXT: vpextrb $4, %xmm3, %ecx 3901 ; AVX1-NEXT: andl $1, %ecx 3902 ; AVX1-NEXT: shll $18, %ecx 3903 ; AVX1-NEXT: orl %edx, %ecx 3904 ; AVX1-NEXT: vpextrb $6, %xmm3, %edx 3905 ; AVX1-NEXT: andl $1, %edx 3906 ; AVX1-NEXT: shll $19, %edx 3907 ; AVX1-NEXT: orl %ecx, %edx 3908 ; AVX1-NEXT: vpextrb $8, %xmm3, %ecx 3909 ; AVX1-NEXT: andl $1, %ecx 3910 ; AVX1-NEXT: shll $20, %ecx 3911 ; AVX1-NEXT: orl %edx, %ecx 3912 ; AVX1-NEXT: vpextrb $10, %xmm3, %edx 3913 ; AVX1-NEXT: andl $1, %edx 3914 ; AVX1-NEXT: shll $21, %edx 3915 ; AVX1-NEXT: orl %ecx, %edx 3916 ; AVX1-NEXT: vpextrb $12, %xmm3, %ecx 3917 ; AVX1-NEXT: andl $1, %ecx 3918 ; AVX1-NEXT: shll $22, %ecx 3919 ; AVX1-NEXT: orl %edx, %ecx 3920 ; AVX1-NEXT: vpextrb $14, %xmm3, %edx 3921 ; AVX1-NEXT: andl $1, %edx 3922 ; AVX1-NEXT: shll $23, %edx 3923 ; AVX1-NEXT: orl %ecx, %edx 3924 ; AVX1-NEXT: vpextrb $0, %xmm4, %ecx 3925 ; AVX1-NEXT: andl $1, %ecx 3926 ; AVX1-NEXT: shll $24, %ecx 3927 ; AVX1-NEXT: orl %edx, %ecx 3928 ; AVX1-NEXT: vpextrb $2, %xmm4, %edx 3929 ; AVX1-NEXT: andl $1, %edx 3930 ; AVX1-NEXT: shll $25, %edx 3931 ; AVX1-NEXT: orl %ecx, %edx 3932 ; AVX1-NEXT: vpextrb $4, %xmm4, %ecx 3933 ; AVX1-NEXT: andl $1, %ecx 3934 ; AVX1-NEXT: shll $26, %ecx 3935 ; AVX1-NEXT: orl %edx, %ecx 3936 ; AVX1-NEXT: vpextrb $6, %xmm4, %edx 3937 ; AVX1-NEXT: andl $1, %edx 3938 ; AVX1-NEXT: shll $27, %edx 3939 ; AVX1-NEXT: orl %ecx, %edx 3940 ; AVX1-NEXT: vpextrb $8, %xmm4, %ecx 3941 ; AVX1-NEXT: andl $1, %ecx 3942 ; AVX1-NEXT: shll $28, %ecx 3943 ; AVX1-NEXT: orl %edx, %ecx 3944 ; AVX1-NEXT: vpextrb $10, %xmm4, %edx 3945 ; AVX1-NEXT: andl $1, %edx 3946 ; AVX1-NEXT: shll $29, %edx 3947 ; AVX1-NEXT: orl %ecx, %edx 3948 ; AVX1-NEXT: vpextrb $12, %xmm4, %ecx 3949 ; AVX1-NEXT: andl $1, %ecx 3950 ; AVX1-NEXT: shll $30, %ecx 3951 ; AVX1-NEXT: orl %edx, %ecx 3952 ; AVX1-NEXT: vpextrb $14, %xmm4, %edx 3953 ; AVX1-NEXT: shll $31, %edx 3954 ; AVX1-NEXT: orl %ecx, %edx 3955 ; AVX1-NEXT: orl %eax, %edx 3956 ; AVX1-NEXT: movl %edx, 4(%rdi) 3957 ; AVX1-NEXT: vpextrb $2, %xmm0, %eax 3958 ; AVX1-NEXT: andl $1, %eax 3959 ; AVX1-NEXT: vpextrb $0, %xmm0, %ecx 3960 ; AVX1-NEXT: andl $1, %ecx 3961 ; AVX1-NEXT: leal (%rcx,%rax,2), %eax 3962 ; AVX1-NEXT: vpextrb $4, %xmm0, %ecx 3963 ; AVX1-NEXT: andl $1, %ecx 3964 ; AVX1-NEXT: leal (%rax,%rcx,4), %eax 3965 ; AVX1-NEXT: vpextrb $6, %xmm0, %ecx 3966 ; AVX1-NEXT: andl $1, %ecx 3967 ; AVX1-NEXT: leal (%rax,%rcx,8), %eax 3968 ; AVX1-NEXT: vpextrb $8, %xmm0, %ecx 3969 ; AVX1-NEXT: andl $1, %ecx 3970 ; AVX1-NEXT: shll $4, %ecx 3971 ; AVX1-NEXT: orl %eax, %ecx 3972 ; AVX1-NEXT: vpextrb $10, %xmm0, %eax 3973 ; AVX1-NEXT: andl $1, %eax 3974 ; AVX1-NEXT: shll $5, %eax 3975 ; AVX1-NEXT: orl %ecx, %eax 3976 ; AVX1-NEXT: vpextrb $12, %xmm0, %ecx 3977 ; AVX1-NEXT: andl $1, %ecx 3978 ; AVX1-NEXT: shll $6, %ecx 3979 ; AVX1-NEXT: vpextrb $14, %xmm0, %edx 3980 ; AVX1-NEXT: andl $1, %edx 3981 ; AVX1-NEXT: shll $7, %edx 3982 ; AVX1-NEXT: orl %ecx, %edx 3983 ; AVX1-NEXT: vpextrb $0, %xmm5, %ecx 3984 ; AVX1-NEXT: andl $1, %ecx 3985 ; AVX1-NEXT: shll $8, %ecx 3986 ; AVX1-NEXT: orl %edx, %ecx 3987 ; AVX1-NEXT: vpextrb $2, %xmm5, %edx 3988 ; AVX1-NEXT: andl $1, %edx 3989 ; AVX1-NEXT: shll $9, %edx 3990 ; AVX1-NEXT: orl %ecx, %edx 3991 ; AVX1-NEXT: vpextrb $4, %xmm5, %ecx 3992 ; AVX1-NEXT: andl $1, %ecx 3993 ; AVX1-NEXT: shll $10, %ecx 3994 ; AVX1-NEXT: orl %edx, %ecx 3995 ; AVX1-NEXT: vpextrb $6, %xmm5, %edx 3996 ; AVX1-NEXT: andl $1, %edx 3997 ; AVX1-NEXT: shll $11, %edx 3998 ; AVX1-NEXT: orl %ecx, %edx 3999 ; AVX1-NEXT: vpextrb $8, %xmm5, %ecx 4000 ; AVX1-NEXT: andl $1, %ecx 4001 ; AVX1-NEXT: shll $12, %ecx 4002 ; AVX1-NEXT: orl %edx, %ecx 4003 ; AVX1-NEXT: vpextrb $10, %xmm5, %edx 4004 ; AVX1-NEXT: andl $1, %edx 4005 ; AVX1-NEXT: shll $13, %edx 4006 ; AVX1-NEXT: orl %ecx, %edx 4007 ; AVX1-NEXT: vpextrb $12, %xmm5, %ecx 4008 ; AVX1-NEXT: andl $1, %ecx 4009 ; AVX1-NEXT: shll $14, %ecx 4010 ; AVX1-NEXT: orl %edx, %ecx 4011 ; AVX1-NEXT: vpextrb $14, %xmm5, %edx 4012 ; AVX1-NEXT: andl $1, %edx 4013 ; AVX1-NEXT: shll $15, %edx 4014 ; AVX1-NEXT: orl %ecx, %edx 4015 ; AVX1-NEXT: vpextrb $0, %xmm9, %ecx 4016 ; AVX1-NEXT: andl $1, %ecx 4017 ; AVX1-NEXT: shll $16, %ecx 4018 ; AVX1-NEXT: orl %edx, %ecx 4019 ; AVX1-NEXT: vpextrb $2, %xmm9, %edx 4020 ; AVX1-NEXT: andl $1, %edx 4021 ; AVX1-NEXT: shll $17, %edx 4022 ; AVX1-NEXT: orl %ecx, %edx 4023 ; AVX1-NEXT: vpextrb $4, %xmm9, %ecx 4024 ; AVX1-NEXT: andl $1, %ecx 4025 ; AVX1-NEXT: shll $18, %ecx 4026 ; AVX1-NEXT: orl %edx, %ecx 4027 ; AVX1-NEXT: vpextrb $6, %xmm9, %edx 4028 ; AVX1-NEXT: andl $1, %edx 4029 ; AVX1-NEXT: shll $19, %edx 4030 ; AVX1-NEXT: orl %ecx, %edx 4031 ; AVX1-NEXT: vpextrb $8, %xmm9, %ecx 4032 ; AVX1-NEXT: andl $1, %ecx 4033 ; AVX1-NEXT: shll $20, %ecx 4034 ; AVX1-NEXT: orl %edx, %ecx 4035 ; AVX1-NEXT: vpextrb $10, %xmm9, %edx 4036 ; AVX1-NEXT: andl $1, %edx 4037 ; AVX1-NEXT: shll $21, %edx 4038 ; AVX1-NEXT: orl %ecx, %edx 4039 ; AVX1-NEXT: vpextrb $12, %xmm9, %ecx 4040 ; AVX1-NEXT: andl $1, %ecx 4041 ; AVX1-NEXT: shll $22, %ecx 4042 ; AVX1-NEXT: orl %edx, %ecx 4043 ; AVX1-NEXT: vpextrb $14, %xmm9, %edx 4044 ; AVX1-NEXT: andl $1, %edx 4045 ; AVX1-NEXT: shll $23, %edx 4046 ; AVX1-NEXT: orl %ecx, %edx 4047 ; AVX1-NEXT: vpextrb $0, %xmm8, %ecx 4048 ; AVX1-NEXT: andl $1, %ecx 4049 ; AVX1-NEXT: shll $24, %ecx 4050 ; AVX1-NEXT: orl %edx, %ecx 4051 ; AVX1-NEXT: vpextrb $2, %xmm8, %edx 4052 ; AVX1-NEXT: andl $1, %edx 4053 ; AVX1-NEXT: shll $25, %edx 4054 ; AVX1-NEXT: orl %ecx, %edx 4055 ; AVX1-NEXT: vpextrb $4, %xmm8, %ecx 4056 ; AVX1-NEXT: andl $1, %ecx 4057 ; AVX1-NEXT: shll $26, %ecx 4058 ; AVX1-NEXT: orl %edx, %ecx 4059 ; AVX1-NEXT: vpextrb $6, %xmm8, %edx 4060 ; AVX1-NEXT: andl $1, %edx 4061 ; AVX1-NEXT: shll $27, %edx 4062 ; AVX1-NEXT: orl %ecx, %edx 4063 ; AVX1-NEXT: vpextrb $8, %xmm8, %ecx 4064 ; AVX1-NEXT: andl $1, %ecx 4065 ; AVX1-NEXT: shll $28, %ecx 4066 ; AVX1-NEXT: orl %edx, %ecx 4067 ; AVX1-NEXT: vpextrb $10, %xmm8, %edx 4068 ; AVX1-NEXT: andl $1, %edx 4069 ; AVX1-NEXT: shll $29, %edx 4070 ; AVX1-NEXT: orl %ecx, %edx 4071 ; AVX1-NEXT: vpextrb $12, %xmm8, %ecx 4072 ; AVX1-NEXT: andl $1, %ecx 4073 ; AVX1-NEXT: shll $30, %ecx 4074 ; AVX1-NEXT: orl %edx, %ecx 4075 ; AVX1-NEXT: vpextrb $14, %xmm8, %edx 4076 ; AVX1-NEXT: shll $31, %edx 4077 ; AVX1-NEXT: orl %ecx, %edx 4078 ; AVX1-NEXT: orl %eax, %edx 4079 ; AVX1-NEXT: movl %edx, (%rdi) 4080 ; AVX1-NEXT: movq %rdi, %rax 4081 ; AVX1-NEXT: vzeroupper 4082 ; AVX1-NEXT: retq 4083 ; 4084 ; AVX2-LABEL: test_cmp_v64i16: 4085 ; AVX2: # %bb.0: 4086 ; AVX2-NEXT: vpcmpgtw %ymm5, %ymm1, %ymm5 4087 ; AVX2-NEXT: vextracti128 $1, %ymm5, %xmm1 4088 ; AVX2-NEXT: vpcmpgtw %ymm4, %ymm0, %ymm4 4089 ; AVX2-NEXT: vextracti128 $1, %ymm4, %xmm0 4090 ; AVX2-NEXT: vpcmpgtw %ymm7, %ymm3, %ymm7 4091 ; AVX2-NEXT: vextracti128 $1, %ymm7, %xmm3 4092 ; AVX2-NEXT: vpcmpgtw %ymm6, %ymm2, %ymm6 4093 ; AVX2-NEXT: vextracti128 $1, %ymm6, %xmm2 4094 ; AVX2-NEXT: vpextrb $2, %xmm6, %eax 4095 ; AVX2-NEXT: andl $1, %eax 4096 ; AVX2-NEXT: vpextrb $0, %xmm6, %ecx 4097 ; AVX2-NEXT: andl $1, %ecx 4098 ; AVX2-NEXT: leal (%rcx,%rax,2), %eax 4099 ; AVX2-NEXT: vpextrb $4, %xmm6, %ecx 4100 ; AVX2-NEXT: andl $1, %ecx 4101 ; AVX2-NEXT: leal (%rax,%rcx,4), %eax 4102 ; AVX2-NEXT: vpextrb $6, %xmm6, %ecx 4103 ; AVX2-NEXT: andl $1, %ecx 4104 ; AVX2-NEXT: leal (%rax,%rcx,8), %eax 4105 ; AVX2-NEXT: vpextrb $8, %xmm6, %ecx 4106 ; AVX2-NEXT: andl $1, %ecx 4107 ; AVX2-NEXT: shll $4, %ecx 4108 ; AVX2-NEXT: orl %eax, %ecx 4109 ; AVX2-NEXT: vpextrb $10, %xmm6, %eax 4110 ; AVX2-NEXT: andl $1, %eax 4111 ; AVX2-NEXT: shll $5, %eax 4112 ; AVX2-NEXT: orl %ecx, %eax 4113 ; AVX2-NEXT: vpextrb $12, %xmm6, %ecx 4114 ; AVX2-NEXT: andl $1, %ecx 4115 ; AVX2-NEXT: shll $6, %ecx 4116 ; AVX2-NEXT: vpextrb $14, %xmm6, %edx 4117 ; AVX2-NEXT: andl $1, %edx 4118 ; AVX2-NEXT: shll $7, %edx 4119 ; AVX2-NEXT: orl %ecx, %edx 4120 ; AVX2-NEXT: vpextrb $0, %xmm2, %ecx 4121 ; AVX2-NEXT: andl $1, %ecx 4122 ; AVX2-NEXT: shll $8, %ecx 4123 ; AVX2-NEXT: orl %edx, %ecx 4124 ; AVX2-NEXT: vpextrb $2, %xmm2, %edx 4125 ; AVX2-NEXT: andl $1, %edx 4126 ; AVX2-NEXT: shll $9, %edx 4127 ; AVX2-NEXT: orl %ecx, %edx 4128 ; AVX2-NEXT: vpextrb $4, %xmm2, %ecx 4129 ; AVX2-NEXT: andl $1, %ecx 4130 ; AVX2-NEXT: shll $10, %ecx 4131 ; AVX2-NEXT: orl %edx, %ecx 4132 ; AVX2-NEXT: vpextrb $6, %xmm2, %edx 4133 ; AVX2-NEXT: andl $1, %edx 4134 ; AVX2-NEXT: shll $11, %edx 4135 ; AVX2-NEXT: orl %ecx, %edx 4136 ; AVX2-NEXT: vpextrb $8, %xmm2, %ecx 4137 ; AVX2-NEXT: andl $1, %ecx 4138 ; AVX2-NEXT: shll $12, %ecx 4139 ; AVX2-NEXT: orl %edx, %ecx 4140 ; AVX2-NEXT: vpextrb $10, %xmm2, %edx 4141 ; AVX2-NEXT: andl $1, %edx 4142 ; AVX2-NEXT: shll $13, %edx 4143 ; AVX2-NEXT: orl %ecx, %edx 4144 ; AVX2-NEXT: vpextrb $12, %xmm2, %ecx 4145 ; AVX2-NEXT: andl $1, %ecx 4146 ; AVX2-NEXT: shll $14, %ecx 4147 ; AVX2-NEXT: orl %edx, %ecx 4148 ; AVX2-NEXT: vpextrb $14, %xmm2, %edx 4149 ; AVX2-NEXT: andl $1, %edx 4150 ; AVX2-NEXT: shll $15, %edx 4151 ; AVX2-NEXT: orl %ecx, %edx 4152 ; AVX2-NEXT: vpextrb $0, %xmm7, %ecx 4153 ; AVX2-NEXT: andl $1, %ecx 4154 ; AVX2-NEXT: shll $16, %ecx 4155 ; AVX2-NEXT: orl %edx, %ecx 4156 ; AVX2-NEXT: vpextrb $2, %xmm7, %edx 4157 ; AVX2-NEXT: andl $1, %edx 4158 ; AVX2-NEXT: shll $17, %edx 4159 ; AVX2-NEXT: orl %ecx, %edx 4160 ; AVX2-NEXT: vpextrb $4, %xmm7, %ecx 4161 ; AVX2-NEXT: andl $1, %ecx 4162 ; AVX2-NEXT: shll $18, %ecx 4163 ; AVX2-NEXT: orl %edx, %ecx 4164 ; AVX2-NEXT: vpextrb $6, %xmm7, %edx 4165 ; AVX2-NEXT: andl $1, %edx 4166 ; AVX2-NEXT: shll $19, %edx 4167 ; AVX2-NEXT: orl %ecx, %edx 4168 ; AVX2-NEXT: vpextrb $8, %xmm7, %ecx 4169 ; AVX2-NEXT: andl $1, %ecx 4170 ; AVX2-NEXT: shll $20, %ecx 4171 ; AVX2-NEXT: orl %edx, %ecx 4172 ; AVX2-NEXT: vpextrb $10, %xmm7, %edx 4173 ; AVX2-NEXT: andl $1, %edx 4174 ; AVX2-NEXT: shll $21, %edx 4175 ; AVX2-NEXT: orl %ecx, %edx 4176 ; AVX2-NEXT: vpextrb $12, %xmm7, %ecx 4177 ; AVX2-NEXT: andl $1, %ecx 4178 ; AVX2-NEXT: shll $22, %ecx 4179 ; AVX2-NEXT: orl %edx, %ecx 4180 ; AVX2-NEXT: vpextrb $14, %xmm7, %edx 4181 ; AVX2-NEXT: andl $1, %edx 4182 ; AVX2-NEXT: shll $23, %edx 4183 ; AVX2-NEXT: orl %ecx, %edx 4184 ; AVX2-NEXT: vpextrb $0, %xmm3, %ecx 4185 ; AVX2-NEXT: andl $1, %ecx 4186 ; AVX2-NEXT: shll $24, %ecx 4187 ; AVX2-NEXT: orl %edx, %ecx 4188 ; AVX2-NEXT: vpextrb $2, %xmm3, %edx 4189 ; AVX2-NEXT: andl $1, %edx 4190 ; AVX2-NEXT: shll $25, %edx 4191 ; AVX2-NEXT: orl %ecx, %edx 4192 ; AVX2-NEXT: vpextrb $4, %xmm3, %ecx 4193 ; AVX2-NEXT: andl $1, %ecx 4194 ; AVX2-NEXT: shll $26, %ecx 4195 ; AVX2-NEXT: orl %edx, %ecx 4196 ; AVX2-NEXT: vpextrb $6, %xmm3, %edx 4197 ; AVX2-NEXT: andl $1, %edx 4198 ; AVX2-NEXT: shll $27, %edx 4199 ; AVX2-NEXT: orl %ecx, %edx 4200 ; AVX2-NEXT: vpextrb $8, %xmm3, %ecx 4201 ; AVX2-NEXT: andl $1, %ecx 4202 ; AVX2-NEXT: shll $28, %ecx 4203 ; AVX2-NEXT: orl %edx, %ecx 4204 ; AVX2-NEXT: vpextrb $10, %xmm3, %edx 4205 ; AVX2-NEXT: andl $1, %edx 4206 ; AVX2-NEXT: shll $29, %edx 4207 ; AVX2-NEXT: orl %ecx, %edx 4208 ; AVX2-NEXT: vpextrb $12, %xmm3, %ecx 4209 ; AVX2-NEXT: andl $1, %ecx 4210 ; AVX2-NEXT: shll $30, %ecx 4211 ; AVX2-NEXT: orl %edx, %ecx 4212 ; AVX2-NEXT: vpextrb $14, %xmm3, %edx 4213 ; AVX2-NEXT: shll $31, %edx 4214 ; AVX2-NEXT: orl %ecx, %edx 4215 ; AVX2-NEXT: orl %eax, %edx 4216 ; AVX2-NEXT: movl %edx, 4(%rdi) 4217 ; AVX2-NEXT: vpextrb $2, %xmm4, %eax 4218 ; AVX2-NEXT: andl $1, %eax 4219 ; AVX2-NEXT: vpextrb $0, %xmm4, %ecx 4220 ; AVX2-NEXT: andl $1, %ecx 4221 ; AVX2-NEXT: leal (%rcx,%rax,2), %eax 4222 ; AVX2-NEXT: vpextrb $4, %xmm4, %ecx 4223 ; AVX2-NEXT: andl $1, %ecx 4224 ; AVX2-NEXT: leal (%rax,%rcx,4), %eax 4225 ; AVX2-NEXT: vpextrb $6, %xmm4, %ecx 4226 ; AVX2-NEXT: andl $1, %ecx 4227 ; AVX2-NEXT: leal (%rax,%rcx,8), %eax 4228 ; AVX2-NEXT: vpextrb $8, %xmm4, %ecx 4229 ; AVX2-NEXT: andl $1, %ecx 4230 ; AVX2-NEXT: shll $4, %ecx 4231 ; AVX2-NEXT: orl %eax, %ecx 4232 ; AVX2-NEXT: vpextrb $10, %xmm4, %eax 4233 ; AVX2-NEXT: andl $1, %eax 4234 ; AVX2-NEXT: shll $5, %eax 4235 ; AVX2-NEXT: orl %ecx, %eax 4236 ; AVX2-NEXT: vpextrb $12, %xmm4, %ecx 4237 ; AVX2-NEXT: andl $1, %ecx 4238 ; AVX2-NEXT: shll $6, %ecx 4239 ; AVX2-NEXT: vpextrb $14, %xmm4, %edx 4240 ; AVX2-NEXT: andl $1, %edx 4241 ; AVX2-NEXT: shll $7, %edx 4242 ; AVX2-NEXT: orl %ecx, %edx 4243 ; AVX2-NEXT: vpextrb $0, %xmm0, %ecx 4244 ; AVX2-NEXT: andl $1, %ecx 4245 ; AVX2-NEXT: shll $8, %ecx 4246 ; AVX2-NEXT: orl %edx, %ecx 4247 ; AVX2-NEXT: vpextrb $2, %xmm0, %edx 4248 ; AVX2-NEXT: andl $1, %edx 4249 ; AVX2-NEXT: shll $9, %edx 4250 ; AVX2-NEXT: orl %ecx, %edx 4251 ; AVX2-NEXT: vpextrb $4, %xmm0, %ecx 4252 ; AVX2-NEXT: andl $1, %ecx 4253 ; AVX2-NEXT: shll $10, %ecx 4254 ; AVX2-NEXT: orl %edx, %ecx 4255 ; AVX2-NEXT: vpextrb $6, %xmm0, %edx 4256 ; AVX2-NEXT: andl $1, %edx 4257 ; AVX2-NEXT: shll $11, %edx 4258 ; AVX2-NEXT: orl %ecx, %edx 4259 ; AVX2-NEXT: vpextrb $8, %xmm0, %ecx 4260 ; AVX2-NEXT: andl $1, %ecx 4261 ; AVX2-NEXT: shll $12, %ecx 4262 ; AVX2-NEXT: orl %edx, %ecx 4263 ; AVX2-NEXT: vpextrb $10, %xmm0, %edx 4264 ; AVX2-NEXT: andl $1, %edx 4265 ; AVX2-NEXT: shll $13, %edx 4266 ; AVX2-NEXT: orl %ecx, %edx 4267 ; AVX2-NEXT: vpextrb $12, %xmm0, %ecx 4268 ; AVX2-NEXT: andl $1, %ecx 4269 ; AVX2-NEXT: shll $14, %ecx 4270 ; AVX2-NEXT: orl %edx, %ecx 4271 ; AVX2-NEXT: vpextrb $14, %xmm0, %edx 4272 ; AVX2-NEXT: andl $1, %edx 4273 ; AVX2-NEXT: shll $15, %edx 4274 ; AVX2-NEXT: orl %ecx, %edx 4275 ; AVX2-NEXT: vpextrb $0, %xmm5, %ecx 4276 ; AVX2-NEXT: andl $1, %ecx 4277 ; AVX2-NEXT: shll $16, %ecx 4278 ; AVX2-NEXT: orl %edx, %ecx 4279 ; AVX2-NEXT: vpextrb $2, %xmm5, %edx 4280 ; AVX2-NEXT: andl $1, %edx 4281 ; AVX2-NEXT: shll $17, %edx 4282 ; AVX2-NEXT: orl %ecx, %edx 4283 ; AVX2-NEXT: vpextrb $4, %xmm5, %ecx 4284 ; AVX2-NEXT: andl $1, %ecx 4285 ; AVX2-NEXT: shll $18, %ecx 4286 ; AVX2-NEXT: orl %edx, %ecx 4287 ; AVX2-NEXT: vpextrb $6, %xmm5, %edx 4288 ; AVX2-NEXT: andl $1, %edx 4289 ; AVX2-NEXT: shll $19, %edx 4290 ; AVX2-NEXT: orl %ecx, %edx 4291 ; AVX2-NEXT: vpextrb $8, %xmm5, %ecx 4292 ; AVX2-NEXT: andl $1, %ecx 4293 ; AVX2-NEXT: shll $20, %ecx 4294 ; AVX2-NEXT: orl %edx, %ecx 4295 ; AVX2-NEXT: vpextrb $10, %xmm5, %edx 4296 ; AVX2-NEXT: andl $1, %edx 4297 ; AVX2-NEXT: shll $21, %edx 4298 ; AVX2-NEXT: orl %ecx, %edx 4299 ; AVX2-NEXT: vpextrb $12, %xmm5, %ecx 4300 ; AVX2-NEXT: andl $1, %ecx 4301 ; AVX2-NEXT: shll $22, %ecx 4302 ; AVX2-NEXT: orl %edx, %ecx 4303 ; AVX2-NEXT: vpextrb $14, %xmm5, %edx 4304 ; AVX2-NEXT: andl $1, %edx 4305 ; AVX2-NEXT: shll $23, %edx 4306 ; AVX2-NEXT: orl %ecx, %edx 4307 ; AVX2-NEXT: vpextrb $0, %xmm1, %ecx 4308 ; AVX2-NEXT: andl $1, %ecx 4309 ; AVX2-NEXT: shll $24, %ecx 4310 ; AVX2-NEXT: orl %edx, %ecx 4311 ; AVX2-NEXT: vpextrb $2, %xmm1, %edx 4312 ; AVX2-NEXT: andl $1, %edx 4313 ; AVX2-NEXT: shll $25, %edx 4314 ; AVX2-NEXT: orl %ecx, %edx 4315 ; AVX2-NEXT: vpextrb $4, %xmm1, %ecx 4316 ; AVX2-NEXT: andl $1, %ecx 4317 ; AVX2-NEXT: shll $26, %ecx 4318 ; AVX2-NEXT: orl %edx, %ecx 4319 ; AVX2-NEXT: vpextrb $6, %xmm1, %edx 4320 ; AVX2-NEXT: andl $1, %edx 4321 ; AVX2-NEXT: shll $27, %edx 4322 ; AVX2-NEXT: orl %ecx, %edx 4323 ; AVX2-NEXT: vpextrb $8, %xmm1, %ecx 4324 ; AVX2-NEXT: andl $1, %ecx 4325 ; AVX2-NEXT: shll $28, %ecx 4326 ; AVX2-NEXT: orl %edx, %ecx 4327 ; AVX2-NEXT: vpextrb $10, %xmm1, %edx 4328 ; AVX2-NEXT: andl $1, %edx 4329 ; AVX2-NEXT: shll $29, %edx 4330 ; AVX2-NEXT: orl %ecx, %edx 4331 ; AVX2-NEXT: vpextrb $12, %xmm1, %ecx 4332 ; AVX2-NEXT: andl $1, %ecx 4333 ; AVX2-NEXT: shll $30, %ecx 4334 ; AVX2-NEXT: orl %edx, %ecx 4335 ; AVX2-NEXT: vpextrb $14, %xmm1, %edx 4336 ; AVX2-NEXT: shll $31, %edx 4337 ; AVX2-NEXT: orl %ecx, %edx 4338 ; AVX2-NEXT: orl %eax, %edx 4339 ; AVX2-NEXT: movl %edx, (%rdi) 4340 ; AVX2-NEXT: movq %rdi, %rax 4341 ; AVX2-NEXT: vzeroupper 4342 ; AVX2-NEXT: retq 4343 ; 4344 ; AVX512F-LABEL: test_cmp_v64i16: 4345 ; AVX512F: # %bb.0: 4346 ; AVX512F-NEXT: vpcmpgtw %ymm7, %ymm3, %ymm3 4347 ; AVX512F-NEXT: vpcmpgtw %ymm6, %ymm2, %ymm2 4348 ; AVX512F-NEXT: vpcmpgtw %ymm5, %ymm1, %ymm1 4349 ; AVX512F-NEXT: vpcmpgtw %ymm4, %ymm0, %ymm0 4350 ; AVX512F-NEXT: vpmovsxwd %ymm0, %zmm0 4351 ; AVX512F-NEXT: vpmovdb %zmm0, %xmm0 4352 ; AVX512F-NEXT: vpmovsxwd %ymm1, %zmm1 4353 ; AVX512F-NEXT: vpmovdb %zmm1, %xmm1 4354 ; AVX512F-NEXT: vpmovsxwd %ymm2, %zmm2 4355 ; AVX512F-NEXT: vpmovdb %zmm2, %xmm2 4356 ; AVX512F-NEXT: vpmovsxwd %ymm3, %zmm3 4357 ; AVX512F-NEXT: vpmovdb %zmm3, %xmm3 4358 ; AVX512F-NEXT: vzeroupper 4359 ; AVX512F-NEXT: retq 4360 ; 4361 ; AVX512DQ-LABEL: test_cmp_v64i16: 4362 ; AVX512DQ: # %bb.0: 4363 ; AVX512DQ-NEXT: vpcmpgtw %ymm7, %ymm3, %ymm3 4364 ; AVX512DQ-NEXT: vpcmpgtw %ymm6, %ymm2, %ymm2 4365 ; AVX512DQ-NEXT: vpcmpgtw %ymm5, %ymm1, %ymm1 4366 ; AVX512DQ-NEXT: vpcmpgtw %ymm4, %ymm0, %ymm0 4367 ; AVX512DQ-NEXT: vpmovsxwd %ymm0, %zmm0 4368 ; AVX512DQ-NEXT: vpmovdb %zmm0, %xmm0 4369 ; AVX512DQ-NEXT: vpmovsxwd %ymm1, %zmm1 4370 ; AVX512DQ-NEXT: vpmovdb %zmm1, %xmm1 4371 ; AVX512DQ-NEXT: vpmovsxwd %ymm2, %zmm2 4372 ; AVX512DQ-NEXT: vpmovdb %zmm2, %xmm2 4373 ; AVX512DQ-NEXT: vpmovsxwd %ymm3, %zmm3 4374 ; AVX512DQ-NEXT: vpmovdb %zmm3, %xmm3 4375 ; AVX512DQ-NEXT: vzeroupper 4376 ; AVX512DQ-NEXT: retq 4377 ; 4378 ; AVX512BW-LABEL: test_cmp_v64i16: 4379 ; AVX512BW: # %bb.0: 4380 ; AVX512BW-NEXT: vpcmpgtw %zmm2, %zmm0, %k0 4381 ; AVX512BW-NEXT: vpcmpgtw %zmm3, %zmm1, %k1 4382 ; AVX512BW-NEXT: kunpckdq %k0, %k1, %k0 4383 ; AVX512BW-NEXT: vpmovm2b %k0, %zmm0 4384 ; AVX512BW-NEXT: retq 4385 %1 = icmp sgt <64 x i16> %a0, %a1 4386 ret <64 x i1> %1 4387 } 4388 4389 define <128 x i1> @test_cmp_v128i8(<128 x i8> %a0, <128 x i8> %a1) nounwind { 4390 ; SSE2-LABEL: test_cmp_v128i8: 4391 ; SSE2: # %bb.0: 4392 ; SSE2-NEXT: pushq %rax 4393 ; SSE2-NEXT: pcmpgtb {{[0-9]+}}(%rsp), %xmm0 4394 ; SSE2-NEXT: pcmpgtb {{[0-9]+}}(%rsp), %xmm1 4395 ; SSE2-NEXT: pcmpgtb {{[0-9]+}}(%rsp), %xmm2 4396 ; SSE2-NEXT: pcmpgtb {{[0-9]+}}(%rsp), %xmm3 4397 ; SSE2-NEXT: pcmpgtb {{[0-9]+}}(%rsp), %xmm4 4398 ; SSE2-NEXT: pcmpgtb {{[0-9]+}}(%rsp), %xmm5 4399 ; SSE2-NEXT: pcmpgtb {{[0-9]+}}(%rsp), %xmm6 4400 ; SSE2-NEXT: pcmpgtb {{[0-9]+}}(%rsp), %xmm7 4401 ; SSE2-NEXT: movdqa %xmm7, -{{[0-9]+}}(%rsp) 4402 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax 4403 ; SSE2-NEXT: andl $1, %eax 4404 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 4405 ; SSE2-NEXT: andl $1, %ecx 4406 ; SSE2-NEXT: leal (%rcx,%rax,2), %eax 4407 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 4408 ; SSE2-NEXT: andl $1, %ecx 4409 ; SSE2-NEXT: leal (%rax,%rcx,4), %eax 4410 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 4411 ; SSE2-NEXT: andl $1, %ecx 4412 ; SSE2-NEXT: leal (%rax,%rcx,8), %eax 4413 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 4414 ; SSE2-NEXT: andl $1, %ecx 4415 ; SSE2-NEXT: shll $4, %ecx 4416 ; SSE2-NEXT: orl %eax, %ecx 4417 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax 4418 ; SSE2-NEXT: andl $1, %eax 4419 ; SSE2-NEXT: shll $5, %eax 4420 ; SSE2-NEXT: orl %ecx, %eax 4421 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 4422 ; SSE2-NEXT: andl $1, %ecx 4423 ; SSE2-NEXT: shll $6, %ecx 4424 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 4425 ; SSE2-NEXT: andl $1, %edx 4426 ; SSE2-NEXT: shll $7, %edx 4427 ; SSE2-NEXT: orl %ecx, %edx 4428 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 4429 ; SSE2-NEXT: andl $1, %ecx 4430 ; SSE2-NEXT: shll $8, %ecx 4431 ; SSE2-NEXT: orl %edx, %ecx 4432 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 4433 ; SSE2-NEXT: andl $1, %edx 4434 ; SSE2-NEXT: shll $9, %edx 4435 ; SSE2-NEXT: orl %ecx, %edx 4436 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 4437 ; SSE2-NEXT: andl $1, %ecx 4438 ; SSE2-NEXT: shll $10, %ecx 4439 ; SSE2-NEXT: orl %edx, %ecx 4440 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 4441 ; SSE2-NEXT: andl $1, %edx 4442 ; SSE2-NEXT: shll $11, %edx 4443 ; SSE2-NEXT: orl %ecx, %edx 4444 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 4445 ; SSE2-NEXT: andl $1, %ecx 4446 ; SSE2-NEXT: shll $12, %ecx 4447 ; SSE2-NEXT: orl %edx, %ecx 4448 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 4449 ; SSE2-NEXT: andl $1, %edx 4450 ; SSE2-NEXT: shll $13, %edx 4451 ; SSE2-NEXT: orl %ecx, %edx 4452 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 4453 ; SSE2-NEXT: andl $1, %ecx 4454 ; SSE2-NEXT: shll $14, %ecx 4455 ; SSE2-NEXT: orl %edx, %ecx 4456 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 4457 ; SSE2-NEXT: shll $15, %edx 4458 ; SSE2-NEXT: orl %ecx, %edx 4459 ; SSE2-NEXT: orl %eax, %edx 4460 ; SSE2-NEXT: movw %dx, 14(%rdi) 4461 ; SSE2-NEXT: movdqa %xmm6, -{{[0-9]+}}(%rsp) 4462 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax 4463 ; SSE2-NEXT: andl $1, %eax 4464 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 4465 ; SSE2-NEXT: andl $1, %ecx 4466 ; SSE2-NEXT: leal (%rcx,%rax,2), %eax 4467 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 4468 ; SSE2-NEXT: andl $1, %ecx 4469 ; SSE2-NEXT: leal (%rax,%rcx,4), %eax 4470 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 4471 ; SSE2-NEXT: andl $1, %ecx 4472 ; SSE2-NEXT: leal (%rax,%rcx,8), %eax 4473 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 4474 ; SSE2-NEXT: andl $1, %ecx 4475 ; SSE2-NEXT: shll $4, %ecx 4476 ; SSE2-NEXT: orl %eax, %ecx 4477 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax 4478 ; SSE2-NEXT: andl $1, %eax 4479 ; SSE2-NEXT: shll $5, %eax 4480 ; SSE2-NEXT: orl %ecx, %eax 4481 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 4482 ; SSE2-NEXT: andl $1, %ecx 4483 ; SSE2-NEXT: shll $6, %ecx 4484 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 4485 ; SSE2-NEXT: andl $1, %edx 4486 ; SSE2-NEXT: shll $7, %edx 4487 ; SSE2-NEXT: orl %ecx, %edx 4488 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 4489 ; SSE2-NEXT: andl $1, %ecx 4490 ; SSE2-NEXT: shll $8, %ecx 4491 ; SSE2-NEXT: orl %edx, %ecx 4492 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 4493 ; SSE2-NEXT: andl $1, %edx 4494 ; SSE2-NEXT: shll $9, %edx 4495 ; SSE2-NEXT: orl %ecx, %edx 4496 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 4497 ; SSE2-NEXT: andl $1, %ecx 4498 ; SSE2-NEXT: shll $10, %ecx 4499 ; SSE2-NEXT: orl %edx, %ecx 4500 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 4501 ; SSE2-NEXT: andl $1, %edx 4502 ; SSE2-NEXT: shll $11, %edx 4503 ; SSE2-NEXT: orl %ecx, %edx 4504 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 4505 ; SSE2-NEXT: andl $1, %ecx 4506 ; SSE2-NEXT: shll $12, %ecx 4507 ; SSE2-NEXT: orl %edx, %ecx 4508 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 4509 ; SSE2-NEXT: andl $1, %edx 4510 ; SSE2-NEXT: shll $13, %edx 4511 ; SSE2-NEXT: orl %ecx, %edx 4512 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 4513 ; SSE2-NEXT: andl $1, %ecx 4514 ; SSE2-NEXT: shll $14, %ecx 4515 ; SSE2-NEXT: orl %edx, %ecx 4516 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 4517 ; SSE2-NEXT: shll $15, %edx 4518 ; SSE2-NEXT: orl %ecx, %edx 4519 ; SSE2-NEXT: orl %eax, %edx 4520 ; SSE2-NEXT: movw %dx, 12(%rdi) 4521 ; SSE2-NEXT: movdqa %xmm5, -{{[0-9]+}}(%rsp) 4522 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax 4523 ; SSE2-NEXT: andl $1, %eax 4524 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 4525 ; SSE2-NEXT: andl $1, %ecx 4526 ; SSE2-NEXT: leal (%rcx,%rax,2), %eax 4527 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 4528 ; SSE2-NEXT: andl $1, %ecx 4529 ; SSE2-NEXT: leal (%rax,%rcx,4), %eax 4530 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 4531 ; SSE2-NEXT: andl $1, %ecx 4532 ; SSE2-NEXT: leal (%rax,%rcx,8), %eax 4533 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 4534 ; SSE2-NEXT: andl $1, %ecx 4535 ; SSE2-NEXT: shll $4, %ecx 4536 ; SSE2-NEXT: orl %eax, %ecx 4537 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax 4538 ; SSE2-NEXT: andl $1, %eax 4539 ; SSE2-NEXT: shll $5, %eax 4540 ; SSE2-NEXT: orl %ecx, %eax 4541 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 4542 ; SSE2-NEXT: andl $1, %ecx 4543 ; SSE2-NEXT: shll $6, %ecx 4544 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 4545 ; SSE2-NEXT: andl $1, %edx 4546 ; SSE2-NEXT: shll $7, %edx 4547 ; SSE2-NEXT: orl %ecx, %edx 4548 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 4549 ; SSE2-NEXT: andl $1, %ecx 4550 ; SSE2-NEXT: shll $8, %ecx 4551 ; SSE2-NEXT: orl %edx, %ecx 4552 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 4553 ; SSE2-NEXT: andl $1, %edx 4554 ; SSE2-NEXT: shll $9, %edx 4555 ; SSE2-NEXT: orl %ecx, %edx 4556 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 4557 ; SSE2-NEXT: andl $1, %ecx 4558 ; SSE2-NEXT: shll $10, %ecx 4559 ; SSE2-NEXT: orl %edx, %ecx 4560 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 4561 ; SSE2-NEXT: andl $1, %edx 4562 ; SSE2-NEXT: shll $11, %edx 4563 ; SSE2-NEXT: orl %ecx, %edx 4564 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 4565 ; SSE2-NEXT: andl $1, %ecx 4566 ; SSE2-NEXT: shll $12, %ecx 4567 ; SSE2-NEXT: orl %edx, %ecx 4568 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 4569 ; SSE2-NEXT: andl $1, %edx 4570 ; SSE2-NEXT: shll $13, %edx 4571 ; SSE2-NEXT: orl %ecx, %edx 4572 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 4573 ; SSE2-NEXT: andl $1, %ecx 4574 ; SSE2-NEXT: shll $14, %ecx 4575 ; SSE2-NEXT: orl %edx, %ecx 4576 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 4577 ; SSE2-NEXT: shll $15, %edx 4578 ; SSE2-NEXT: orl %ecx, %edx 4579 ; SSE2-NEXT: orl %eax, %edx 4580 ; SSE2-NEXT: movw %dx, 10(%rdi) 4581 ; SSE2-NEXT: movdqa %xmm4, -{{[0-9]+}}(%rsp) 4582 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax 4583 ; SSE2-NEXT: andl $1, %eax 4584 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 4585 ; SSE2-NEXT: andl $1, %ecx 4586 ; SSE2-NEXT: leal (%rcx,%rax,2), %eax 4587 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 4588 ; SSE2-NEXT: andl $1, %ecx 4589 ; SSE2-NEXT: leal (%rax,%rcx,4), %eax 4590 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 4591 ; SSE2-NEXT: andl $1, %ecx 4592 ; SSE2-NEXT: leal (%rax,%rcx,8), %eax 4593 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 4594 ; SSE2-NEXT: andl $1, %ecx 4595 ; SSE2-NEXT: shll $4, %ecx 4596 ; SSE2-NEXT: orl %eax, %ecx 4597 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax 4598 ; SSE2-NEXT: andl $1, %eax 4599 ; SSE2-NEXT: shll $5, %eax 4600 ; SSE2-NEXT: orl %ecx, %eax 4601 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 4602 ; SSE2-NEXT: andl $1, %ecx 4603 ; SSE2-NEXT: shll $6, %ecx 4604 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 4605 ; SSE2-NEXT: andl $1, %edx 4606 ; SSE2-NEXT: shll $7, %edx 4607 ; SSE2-NEXT: orl %ecx, %edx 4608 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 4609 ; SSE2-NEXT: andl $1, %ecx 4610 ; SSE2-NEXT: shll $8, %ecx 4611 ; SSE2-NEXT: orl %edx, %ecx 4612 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 4613 ; SSE2-NEXT: andl $1, %edx 4614 ; SSE2-NEXT: shll $9, %edx 4615 ; SSE2-NEXT: orl %ecx, %edx 4616 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 4617 ; SSE2-NEXT: andl $1, %ecx 4618 ; SSE2-NEXT: shll $10, %ecx 4619 ; SSE2-NEXT: orl %edx, %ecx 4620 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 4621 ; SSE2-NEXT: andl $1, %edx 4622 ; SSE2-NEXT: shll $11, %edx 4623 ; SSE2-NEXT: orl %ecx, %edx 4624 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 4625 ; SSE2-NEXT: andl $1, %ecx 4626 ; SSE2-NEXT: shll $12, %ecx 4627 ; SSE2-NEXT: orl %edx, %ecx 4628 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 4629 ; SSE2-NEXT: andl $1, %edx 4630 ; SSE2-NEXT: shll $13, %edx 4631 ; SSE2-NEXT: orl %ecx, %edx 4632 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 4633 ; SSE2-NEXT: andl $1, %ecx 4634 ; SSE2-NEXT: shll $14, %ecx 4635 ; SSE2-NEXT: orl %edx, %ecx 4636 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 4637 ; SSE2-NEXT: shll $15, %edx 4638 ; SSE2-NEXT: orl %ecx, %edx 4639 ; SSE2-NEXT: orl %eax, %edx 4640 ; SSE2-NEXT: movw %dx, 8(%rdi) 4641 ; SSE2-NEXT: movdqa %xmm3, -{{[0-9]+}}(%rsp) 4642 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax 4643 ; SSE2-NEXT: andl $1, %eax 4644 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 4645 ; SSE2-NEXT: andl $1, %ecx 4646 ; SSE2-NEXT: leal (%rcx,%rax,2), %eax 4647 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 4648 ; SSE2-NEXT: andl $1, %ecx 4649 ; SSE2-NEXT: leal (%rax,%rcx,4), %eax 4650 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 4651 ; SSE2-NEXT: andl $1, %ecx 4652 ; SSE2-NEXT: leal (%rax,%rcx,8), %eax 4653 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 4654 ; SSE2-NEXT: andl $1, %ecx 4655 ; SSE2-NEXT: shll $4, %ecx 4656 ; SSE2-NEXT: orl %eax, %ecx 4657 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax 4658 ; SSE2-NEXT: andl $1, %eax 4659 ; SSE2-NEXT: shll $5, %eax 4660 ; SSE2-NEXT: orl %ecx, %eax 4661 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 4662 ; SSE2-NEXT: andl $1, %ecx 4663 ; SSE2-NEXT: shll $6, %ecx 4664 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 4665 ; SSE2-NEXT: andl $1, %edx 4666 ; SSE2-NEXT: shll $7, %edx 4667 ; SSE2-NEXT: orl %ecx, %edx 4668 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 4669 ; SSE2-NEXT: andl $1, %ecx 4670 ; SSE2-NEXT: shll $8, %ecx 4671 ; SSE2-NEXT: orl %edx, %ecx 4672 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 4673 ; SSE2-NEXT: andl $1, %edx 4674 ; SSE2-NEXT: shll $9, %edx 4675 ; SSE2-NEXT: orl %ecx, %edx 4676 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 4677 ; SSE2-NEXT: andl $1, %ecx 4678 ; SSE2-NEXT: shll $10, %ecx 4679 ; SSE2-NEXT: orl %edx, %ecx 4680 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 4681 ; SSE2-NEXT: andl $1, %edx 4682 ; SSE2-NEXT: shll $11, %edx 4683 ; SSE2-NEXT: orl %ecx, %edx 4684 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 4685 ; SSE2-NEXT: andl $1, %ecx 4686 ; SSE2-NEXT: shll $12, %ecx 4687 ; SSE2-NEXT: orl %edx, %ecx 4688 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 4689 ; SSE2-NEXT: andl $1, %edx 4690 ; SSE2-NEXT: shll $13, %edx 4691 ; SSE2-NEXT: orl %ecx, %edx 4692 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 4693 ; SSE2-NEXT: andl $1, %ecx 4694 ; SSE2-NEXT: shll $14, %ecx 4695 ; SSE2-NEXT: orl %edx, %ecx 4696 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 4697 ; SSE2-NEXT: shll $15, %edx 4698 ; SSE2-NEXT: orl %ecx, %edx 4699 ; SSE2-NEXT: orl %eax, %edx 4700 ; SSE2-NEXT: movw %dx, 6(%rdi) 4701 ; SSE2-NEXT: movdqa %xmm2, -{{[0-9]+}}(%rsp) 4702 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax 4703 ; SSE2-NEXT: andl $1, %eax 4704 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 4705 ; SSE2-NEXT: andl $1, %ecx 4706 ; SSE2-NEXT: leal (%rcx,%rax,2), %eax 4707 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 4708 ; SSE2-NEXT: andl $1, %ecx 4709 ; SSE2-NEXT: leal (%rax,%rcx,4), %eax 4710 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 4711 ; SSE2-NEXT: andl $1, %ecx 4712 ; SSE2-NEXT: leal (%rax,%rcx,8), %eax 4713 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 4714 ; SSE2-NEXT: andl $1, %ecx 4715 ; SSE2-NEXT: shll $4, %ecx 4716 ; SSE2-NEXT: orl %eax, %ecx 4717 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax 4718 ; SSE2-NEXT: andl $1, %eax 4719 ; SSE2-NEXT: shll $5, %eax 4720 ; SSE2-NEXT: orl %ecx, %eax 4721 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 4722 ; SSE2-NEXT: andl $1, %ecx 4723 ; SSE2-NEXT: shll $6, %ecx 4724 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 4725 ; SSE2-NEXT: andl $1, %edx 4726 ; SSE2-NEXT: shll $7, %edx 4727 ; SSE2-NEXT: orl %ecx, %edx 4728 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 4729 ; SSE2-NEXT: andl $1, %ecx 4730 ; SSE2-NEXT: shll $8, %ecx 4731 ; SSE2-NEXT: orl %edx, %ecx 4732 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 4733 ; SSE2-NEXT: andl $1, %edx 4734 ; SSE2-NEXT: shll $9, %edx 4735 ; SSE2-NEXT: orl %ecx, %edx 4736 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 4737 ; SSE2-NEXT: andl $1, %ecx 4738 ; SSE2-NEXT: shll $10, %ecx 4739 ; SSE2-NEXT: orl %edx, %ecx 4740 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 4741 ; SSE2-NEXT: andl $1, %edx 4742 ; SSE2-NEXT: shll $11, %edx 4743 ; SSE2-NEXT: orl %ecx, %edx 4744 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 4745 ; SSE2-NEXT: andl $1, %ecx 4746 ; SSE2-NEXT: shll $12, %ecx 4747 ; SSE2-NEXT: orl %edx, %ecx 4748 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 4749 ; SSE2-NEXT: andl $1, %edx 4750 ; SSE2-NEXT: shll $13, %edx 4751 ; SSE2-NEXT: orl %ecx, %edx 4752 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 4753 ; SSE2-NEXT: andl $1, %ecx 4754 ; SSE2-NEXT: shll $14, %ecx 4755 ; SSE2-NEXT: orl %edx, %ecx 4756 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 4757 ; SSE2-NEXT: shll $15, %edx 4758 ; SSE2-NEXT: orl %ecx, %edx 4759 ; SSE2-NEXT: orl %eax, %edx 4760 ; SSE2-NEXT: movw %dx, 4(%rdi) 4761 ; SSE2-NEXT: movdqa %xmm1, -{{[0-9]+}}(%rsp) 4762 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax 4763 ; SSE2-NEXT: andl $1, %eax 4764 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 4765 ; SSE2-NEXT: andl $1, %ecx 4766 ; SSE2-NEXT: leal (%rcx,%rax,2), %eax 4767 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 4768 ; SSE2-NEXT: andl $1, %ecx 4769 ; SSE2-NEXT: leal (%rax,%rcx,4), %eax 4770 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 4771 ; SSE2-NEXT: andl $1, %ecx 4772 ; SSE2-NEXT: leal (%rax,%rcx,8), %eax 4773 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 4774 ; SSE2-NEXT: andl $1, %ecx 4775 ; SSE2-NEXT: shll $4, %ecx 4776 ; SSE2-NEXT: orl %eax, %ecx 4777 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax 4778 ; SSE2-NEXT: andl $1, %eax 4779 ; SSE2-NEXT: shll $5, %eax 4780 ; SSE2-NEXT: orl %ecx, %eax 4781 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 4782 ; SSE2-NEXT: andl $1, %ecx 4783 ; SSE2-NEXT: shll $6, %ecx 4784 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 4785 ; SSE2-NEXT: andl $1, %edx 4786 ; SSE2-NEXT: shll $7, %edx 4787 ; SSE2-NEXT: orl %ecx, %edx 4788 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 4789 ; SSE2-NEXT: andl $1, %ecx 4790 ; SSE2-NEXT: shll $8, %ecx 4791 ; SSE2-NEXT: orl %edx, %ecx 4792 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 4793 ; SSE2-NEXT: andl $1, %edx 4794 ; SSE2-NEXT: shll $9, %edx 4795 ; SSE2-NEXT: orl %ecx, %edx 4796 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 4797 ; SSE2-NEXT: andl $1, %ecx 4798 ; SSE2-NEXT: shll $10, %ecx 4799 ; SSE2-NEXT: orl %edx, %ecx 4800 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 4801 ; SSE2-NEXT: andl $1, %edx 4802 ; SSE2-NEXT: shll $11, %edx 4803 ; SSE2-NEXT: orl %ecx, %edx 4804 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 4805 ; SSE2-NEXT: andl $1, %ecx 4806 ; SSE2-NEXT: shll $12, %ecx 4807 ; SSE2-NEXT: orl %edx, %ecx 4808 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 4809 ; SSE2-NEXT: andl $1, %edx 4810 ; SSE2-NEXT: shll $13, %edx 4811 ; SSE2-NEXT: orl %ecx, %edx 4812 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 4813 ; SSE2-NEXT: andl $1, %ecx 4814 ; SSE2-NEXT: shll $14, %ecx 4815 ; SSE2-NEXT: orl %edx, %ecx 4816 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 4817 ; SSE2-NEXT: shll $15, %edx 4818 ; SSE2-NEXT: orl %ecx, %edx 4819 ; SSE2-NEXT: orl %eax, %edx 4820 ; SSE2-NEXT: movw %dx, 2(%rdi) 4821 ; SSE2-NEXT: movdqa %xmm0, -{{[0-9]+}}(%rsp) 4822 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax 4823 ; SSE2-NEXT: andl $1, %eax 4824 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 4825 ; SSE2-NEXT: andl $1, %ecx 4826 ; SSE2-NEXT: leal (%rcx,%rax,2), %eax 4827 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 4828 ; SSE2-NEXT: andl $1, %ecx 4829 ; SSE2-NEXT: leal (%rax,%rcx,4), %eax 4830 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 4831 ; SSE2-NEXT: andl $1, %ecx 4832 ; SSE2-NEXT: leal (%rax,%rcx,8), %eax 4833 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 4834 ; SSE2-NEXT: andl $1, %ecx 4835 ; SSE2-NEXT: shll $4, %ecx 4836 ; SSE2-NEXT: orl %eax, %ecx 4837 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax 4838 ; SSE2-NEXT: andl $1, %eax 4839 ; SSE2-NEXT: shll $5, %eax 4840 ; SSE2-NEXT: orl %ecx, %eax 4841 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 4842 ; SSE2-NEXT: andl $1, %ecx 4843 ; SSE2-NEXT: shll $6, %ecx 4844 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 4845 ; SSE2-NEXT: andl $1, %edx 4846 ; SSE2-NEXT: shll $7, %edx 4847 ; SSE2-NEXT: orl %ecx, %edx 4848 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 4849 ; SSE2-NEXT: andl $1, %ecx 4850 ; SSE2-NEXT: shll $8, %ecx 4851 ; SSE2-NEXT: orl %edx, %ecx 4852 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 4853 ; SSE2-NEXT: andl $1, %edx 4854 ; SSE2-NEXT: shll $9, %edx 4855 ; SSE2-NEXT: orl %ecx, %edx 4856 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 4857 ; SSE2-NEXT: andl $1, %ecx 4858 ; SSE2-NEXT: shll $10, %ecx 4859 ; SSE2-NEXT: orl %edx, %ecx 4860 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 4861 ; SSE2-NEXT: andl $1, %edx 4862 ; SSE2-NEXT: shll $11, %edx 4863 ; SSE2-NEXT: orl %ecx, %edx 4864 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 4865 ; SSE2-NEXT: andl $1, %ecx 4866 ; SSE2-NEXT: shll $12, %ecx 4867 ; SSE2-NEXT: orl %edx, %ecx 4868 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 4869 ; SSE2-NEXT: andl $1, %edx 4870 ; SSE2-NEXT: shll $13, %edx 4871 ; SSE2-NEXT: orl %ecx, %edx 4872 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 4873 ; SSE2-NEXT: andl $1, %ecx 4874 ; SSE2-NEXT: shll $14, %ecx 4875 ; SSE2-NEXT: orl %edx, %ecx 4876 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 4877 ; SSE2-NEXT: shll $15, %edx 4878 ; SSE2-NEXT: orl %ecx, %edx 4879 ; SSE2-NEXT: orl %eax, %edx 4880 ; SSE2-NEXT: movw %dx, (%rdi) 4881 ; SSE2-NEXT: movq %rdi, %rax 4882 ; SSE2-NEXT: popq %rcx 4883 ; SSE2-NEXT: retq 4884 ; 4885 ; SSE42-LABEL: test_cmp_v128i8: 4886 ; SSE42: # %bb.0: 4887 ; SSE42-NEXT: pcmpgtb {{[0-9]+}}(%rsp), %xmm0 4888 ; SSE42-NEXT: pcmpgtb {{[0-9]+}}(%rsp), %xmm1 4889 ; SSE42-NEXT: pcmpgtb {{[0-9]+}}(%rsp), %xmm2 4890 ; SSE42-NEXT: pcmpgtb {{[0-9]+}}(%rsp), %xmm3 4891 ; SSE42-NEXT: pcmpgtb {{[0-9]+}}(%rsp), %xmm4 4892 ; SSE42-NEXT: pcmpgtb {{[0-9]+}}(%rsp), %xmm5 4893 ; SSE42-NEXT: pcmpgtb {{[0-9]+}}(%rsp), %xmm6 4894 ; SSE42-NEXT: pcmpgtb {{[0-9]+}}(%rsp), %xmm7 4895 ; SSE42-NEXT: pextrb $1, %xmm7, %eax 4896 ; SSE42-NEXT: andl $1, %eax 4897 ; SSE42-NEXT: pextrb $0, %xmm7, %ecx 4898 ; SSE42-NEXT: andl $1, %ecx 4899 ; SSE42-NEXT: leal (%rcx,%rax,2), %eax 4900 ; SSE42-NEXT: pextrb $2, %xmm7, %ecx 4901 ; SSE42-NEXT: andl $1, %ecx 4902 ; SSE42-NEXT: leal (%rax,%rcx,4), %eax 4903 ; SSE42-NEXT: pextrb $3, %xmm7, %ecx 4904 ; SSE42-NEXT: andl $1, %ecx 4905 ; SSE42-NEXT: leal (%rax,%rcx,8), %eax 4906 ; SSE42-NEXT: pextrb $4, %xmm7, %ecx 4907 ; SSE42-NEXT: andl $1, %ecx 4908 ; SSE42-NEXT: shll $4, %ecx 4909 ; SSE42-NEXT: orl %eax, %ecx 4910 ; SSE42-NEXT: pextrb $5, %xmm7, %eax 4911 ; SSE42-NEXT: andl $1, %eax 4912 ; SSE42-NEXT: shll $5, %eax 4913 ; SSE42-NEXT: orl %ecx, %eax 4914 ; SSE42-NEXT: pextrb $6, %xmm7, %ecx 4915 ; SSE42-NEXT: andl $1, %ecx 4916 ; SSE42-NEXT: shll $6, %ecx 4917 ; SSE42-NEXT: pextrb $7, %xmm7, %edx 4918 ; SSE42-NEXT: andl $1, %edx 4919 ; SSE42-NEXT: shll $7, %edx 4920 ; SSE42-NEXT: orl %ecx, %edx 4921 ; SSE42-NEXT: pextrb $8, %xmm7, %ecx 4922 ; SSE42-NEXT: andl $1, %ecx 4923 ; SSE42-NEXT: shll $8, %ecx 4924 ; SSE42-NEXT: orl %edx, %ecx 4925 ; SSE42-NEXT: pextrb $9, %xmm7, %edx 4926 ; SSE42-NEXT: andl $1, %edx 4927 ; SSE42-NEXT: shll $9, %edx 4928 ; SSE42-NEXT: orl %ecx, %edx 4929 ; SSE42-NEXT: pextrb $10, %xmm7, %ecx 4930 ; SSE42-NEXT: andl $1, %ecx 4931 ; SSE42-NEXT: shll $10, %ecx 4932 ; SSE42-NEXT: orl %edx, %ecx 4933 ; SSE42-NEXT: pextrb $11, %xmm7, %edx 4934 ; SSE42-NEXT: andl $1, %edx 4935 ; SSE42-NEXT: shll $11, %edx 4936 ; SSE42-NEXT: orl %ecx, %edx 4937 ; SSE42-NEXT: pextrb $12, %xmm7, %ecx 4938 ; SSE42-NEXT: andl $1, %ecx 4939 ; SSE42-NEXT: shll $12, %ecx 4940 ; SSE42-NEXT: orl %edx, %ecx 4941 ; SSE42-NEXT: pextrb $13, %xmm7, %edx 4942 ; SSE42-NEXT: andl $1, %edx 4943 ; SSE42-NEXT: shll $13, %edx 4944 ; SSE42-NEXT: orl %ecx, %edx 4945 ; SSE42-NEXT: pextrb $14, %xmm7, %ecx 4946 ; SSE42-NEXT: andl $1, %ecx 4947 ; SSE42-NEXT: shll $14, %ecx 4948 ; SSE42-NEXT: orl %edx, %ecx 4949 ; SSE42-NEXT: pextrb $15, %xmm7, %edx 4950 ; SSE42-NEXT: shll $15, %edx 4951 ; SSE42-NEXT: orl %ecx, %edx 4952 ; SSE42-NEXT: orl %eax, %edx 4953 ; SSE42-NEXT: movw %dx, 14(%rdi) 4954 ; SSE42-NEXT: pextrb $1, %xmm6, %eax 4955 ; SSE42-NEXT: andl $1, %eax 4956 ; SSE42-NEXT: pextrb $0, %xmm6, %ecx 4957 ; SSE42-NEXT: andl $1, %ecx 4958 ; SSE42-NEXT: leal (%rcx,%rax,2), %eax 4959 ; SSE42-NEXT: pextrb $2, %xmm6, %ecx 4960 ; SSE42-NEXT: andl $1, %ecx 4961 ; SSE42-NEXT: leal (%rax,%rcx,4), %eax 4962 ; SSE42-NEXT: pextrb $3, %xmm6, %ecx 4963 ; SSE42-NEXT: andl $1, %ecx 4964 ; SSE42-NEXT: leal (%rax,%rcx,8), %eax 4965 ; SSE42-NEXT: pextrb $4, %xmm6, %ecx 4966 ; SSE42-NEXT: andl $1, %ecx 4967 ; SSE42-NEXT: shll $4, %ecx 4968 ; SSE42-NEXT: orl %eax, %ecx 4969 ; SSE42-NEXT: pextrb $5, %xmm6, %eax 4970 ; SSE42-NEXT: andl $1, %eax 4971 ; SSE42-NEXT: shll $5, %eax 4972 ; SSE42-NEXT: orl %ecx, %eax 4973 ; SSE42-NEXT: pextrb $6, %xmm6, %ecx 4974 ; SSE42-NEXT: andl $1, %ecx 4975 ; SSE42-NEXT: shll $6, %ecx 4976 ; SSE42-NEXT: pextrb $7, %xmm6, %edx 4977 ; SSE42-NEXT: andl $1, %edx 4978 ; SSE42-NEXT: shll $7, %edx 4979 ; SSE42-NEXT: orl %ecx, %edx 4980 ; SSE42-NEXT: pextrb $8, %xmm6, %ecx 4981 ; SSE42-NEXT: andl $1, %ecx 4982 ; SSE42-NEXT: shll $8, %ecx 4983 ; SSE42-NEXT: orl %edx, %ecx 4984 ; SSE42-NEXT: pextrb $9, %xmm6, %edx 4985 ; SSE42-NEXT: andl $1, %edx 4986 ; SSE42-NEXT: shll $9, %edx 4987 ; SSE42-NEXT: orl %ecx, %edx 4988 ; SSE42-NEXT: pextrb $10, %xmm6, %ecx 4989 ; SSE42-NEXT: andl $1, %ecx 4990 ; SSE42-NEXT: shll $10, %ecx 4991 ; SSE42-NEXT: orl %edx, %ecx 4992 ; SSE42-NEXT: pextrb $11, %xmm6, %edx 4993 ; SSE42-NEXT: andl $1, %edx 4994 ; SSE42-NEXT: shll $11, %edx 4995 ; SSE42-NEXT: orl %ecx, %edx 4996 ; SSE42-NEXT: pextrb $12, %xmm6, %ecx 4997 ; SSE42-NEXT: andl $1, %ecx 4998 ; SSE42-NEXT: shll $12, %ecx 4999 ; SSE42-NEXT: orl %edx, %ecx 5000 ; SSE42-NEXT: pextrb $13, %xmm6, %edx 5001 ; SSE42-NEXT: andl $1, %edx 5002 ; SSE42-NEXT: shll $13, %edx 5003 ; SSE42-NEXT: orl %ecx, %edx 5004 ; SSE42-NEXT: pextrb $14, %xmm6, %ecx 5005 ; SSE42-NEXT: andl $1, %ecx 5006 ; SSE42-NEXT: shll $14, %ecx 5007 ; SSE42-NEXT: orl %edx, %ecx 5008 ; SSE42-NEXT: pextrb $15, %xmm6, %edx 5009 ; SSE42-NEXT: shll $15, %edx 5010 ; SSE42-NEXT: orl %ecx, %edx 5011 ; SSE42-NEXT: orl %eax, %edx 5012 ; SSE42-NEXT: movw %dx, 12(%rdi) 5013 ; SSE42-NEXT: pextrb $1, %xmm5, %eax 5014 ; SSE42-NEXT: andl $1, %eax 5015 ; SSE42-NEXT: pextrb $0, %xmm5, %ecx 5016 ; SSE42-NEXT: andl $1, %ecx 5017 ; SSE42-NEXT: leal (%rcx,%rax,2), %eax 5018 ; SSE42-NEXT: pextrb $2, %xmm5, %ecx 5019 ; SSE42-NEXT: andl $1, %ecx 5020 ; SSE42-NEXT: leal (%rax,%rcx,4), %eax 5021 ; SSE42-NEXT: pextrb $3, %xmm5, %ecx 5022 ; SSE42-NEXT: andl $1, %ecx 5023 ; SSE42-NEXT: leal (%rax,%rcx,8), %eax 5024 ; SSE42-NEXT: pextrb $4, %xmm5, %ecx 5025 ; SSE42-NEXT: andl $1, %ecx 5026 ; SSE42-NEXT: shll $4, %ecx 5027 ; SSE42-NEXT: orl %eax, %ecx 5028 ; SSE42-NEXT: pextrb $5, %xmm5, %eax 5029 ; SSE42-NEXT: andl $1, %eax 5030 ; SSE42-NEXT: shll $5, %eax 5031 ; SSE42-NEXT: orl %ecx, %eax 5032 ; SSE42-NEXT: pextrb $6, %xmm5, %ecx 5033 ; SSE42-NEXT: andl $1, %ecx 5034 ; SSE42-NEXT: shll $6, %ecx 5035 ; SSE42-NEXT: pextrb $7, %xmm5, %edx 5036 ; SSE42-NEXT: andl $1, %edx 5037 ; SSE42-NEXT: shll $7, %edx 5038 ; SSE42-NEXT: orl %ecx, %edx 5039 ; SSE42-NEXT: pextrb $8, %xmm5, %ecx 5040 ; SSE42-NEXT: andl $1, %ecx 5041 ; SSE42-NEXT: shll $8, %ecx 5042 ; SSE42-NEXT: orl %edx, %ecx 5043 ; SSE42-NEXT: pextrb $9, %xmm5, %edx 5044 ; SSE42-NEXT: andl $1, %edx 5045 ; SSE42-NEXT: shll $9, %edx 5046 ; SSE42-NEXT: orl %ecx, %edx 5047 ; SSE42-NEXT: pextrb $10, %xmm5, %ecx 5048 ; SSE42-NEXT: andl $1, %ecx 5049 ; SSE42-NEXT: shll $10, %ecx 5050 ; SSE42-NEXT: orl %edx, %ecx 5051 ; SSE42-NEXT: pextrb $11, %xmm5, %edx 5052 ; SSE42-NEXT: andl $1, %edx 5053 ; SSE42-NEXT: shll $11, %edx 5054 ; SSE42-NEXT: orl %ecx, %edx 5055 ; SSE42-NEXT: pextrb $12, %xmm5, %ecx 5056 ; SSE42-NEXT: andl $1, %ecx 5057 ; SSE42-NEXT: shll $12, %ecx 5058 ; SSE42-NEXT: orl %edx, %ecx 5059 ; SSE42-NEXT: pextrb $13, %xmm5, %edx 5060 ; SSE42-NEXT: andl $1, %edx 5061 ; SSE42-NEXT: shll $13, %edx 5062 ; SSE42-NEXT: orl %ecx, %edx 5063 ; SSE42-NEXT: pextrb $14, %xmm5, %ecx 5064 ; SSE42-NEXT: andl $1, %ecx 5065 ; SSE42-NEXT: shll $14, %ecx 5066 ; SSE42-NEXT: orl %edx, %ecx 5067 ; SSE42-NEXT: pextrb $15, %xmm5, %edx 5068 ; SSE42-NEXT: shll $15, %edx 5069 ; SSE42-NEXT: orl %ecx, %edx 5070 ; SSE42-NEXT: orl %eax, %edx 5071 ; SSE42-NEXT: movw %dx, 10(%rdi) 5072 ; SSE42-NEXT: pextrb $1, %xmm4, %eax 5073 ; SSE42-NEXT: andl $1, %eax 5074 ; SSE42-NEXT: pextrb $0, %xmm4, %ecx 5075 ; SSE42-NEXT: andl $1, %ecx 5076 ; SSE42-NEXT: leal (%rcx,%rax,2), %eax 5077 ; SSE42-NEXT: pextrb $2, %xmm4, %ecx 5078 ; SSE42-NEXT: andl $1, %ecx 5079 ; SSE42-NEXT: leal (%rax,%rcx,4), %eax 5080 ; SSE42-NEXT: pextrb $3, %xmm4, %ecx 5081 ; SSE42-NEXT: andl $1, %ecx 5082 ; SSE42-NEXT: leal (%rax,%rcx,8), %eax 5083 ; SSE42-NEXT: pextrb $4, %xmm4, %ecx 5084 ; SSE42-NEXT: andl $1, %ecx 5085 ; SSE42-NEXT: shll $4, %ecx 5086 ; SSE42-NEXT: orl %eax, %ecx 5087 ; SSE42-NEXT: pextrb $5, %xmm4, %eax 5088 ; SSE42-NEXT: andl $1, %eax 5089 ; SSE42-NEXT: shll $5, %eax 5090 ; SSE42-NEXT: orl %ecx, %eax 5091 ; SSE42-NEXT: pextrb $6, %xmm4, %ecx 5092 ; SSE42-NEXT: andl $1, %ecx 5093 ; SSE42-NEXT: shll $6, %ecx 5094 ; SSE42-NEXT: pextrb $7, %xmm4, %edx 5095 ; SSE42-NEXT: andl $1, %edx 5096 ; SSE42-NEXT: shll $7, %edx 5097 ; SSE42-NEXT: orl %ecx, %edx 5098 ; SSE42-NEXT: pextrb $8, %xmm4, %ecx 5099 ; SSE42-NEXT: andl $1, %ecx 5100 ; SSE42-NEXT: shll $8, %ecx 5101 ; SSE42-NEXT: orl %edx, %ecx 5102 ; SSE42-NEXT: pextrb $9, %xmm4, %edx 5103 ; SSE42-NEXT: andl $1, %edx 5104 ; SSE42-NEXT: shll $9, %edx 5105 ; SSE42-NEXT: orl %ecx, %edx 5106 ; SSE42-NEXT: pextrb $10, %xmm4, %ecx 5107 ; SSE42-NEXT: andl $1, %ecx 5108 ; SSE42-NEXT: shll $10, %ecx 5109 ; SSE42-NEXT: orl %edx, %ecx 5110 ; SSE42-NEXT: pextrb $11, %xmm4, %edx 5111 ; SSE42-NEXT: andl $1, %edx 5112 ; SSE42-NEXT: shll $11, %edx 5113 ; SSE42-NEXT: orl %ecx, %edx 5114 ; SSE42-NEXT: pextrb $12, %xmm4, %ecx 5115 ; SSE42-NEXT: andl $1, %ecx 5116 ; SSE42-NEXT: shll $12, %ecx 5117 ; SSE42-NEXT: orl %edx, %ecx 5118 ; SSE42-NEXT: pextrb $13, %xmm4, %edx 5119 ; SSE42-NEXT: andl $1, %edx 5120 ; SSE42-NEXT: shll $13, %edx 5121 ; SSE42-NEXT: orl %ecx, %edx 5122 ; SSE42-NEXT: pextrb $14, %xmm4, %ecx 5123 ; SSE42-NEXT: andl $1, %ecx 5124 ; SSE42-NEXT: shll $14, %ecx 5125 ; SSE42-NEXT: orl %edx, %ecx 5126 ; SSE42-NEXT: pextrb $15, %xmm4, %edx 5127 ; SSE42-NEXT: shll $15, %edx 5128 ; SSE42-NEXT: orl %ecx, %edx 5129 ; SSE42-NEXT: orl %eax, %edx 5130 ; SSE42-NEXT: movw %dx, 8(%rdi) 5131 ; SSE42-NEXT: pextrb $1, %xmm3, %eax 5132 ; SSE42-NEXT: andl $1, %eax 5133 ; SSE42-NEXT: pextrb $0, %xmm3, %ecx 5134 ; SSE42-NEXT: andl $1, %ecx 5135 ; SSE42-NEXT: leal (%rcx,%rax,2), %eax 5136 ; SSE42-NEXT: pextrb $2, %xmm3, %ecx 5137 ; SSE42-NEXT: andl $1, %ecx 5138 ; SSE42-NEXT: leal (%rax,%rcx,4), %eax 5139 ; SSE42-NEXT: pextrb $3, %xmm3, %ecx 5140 ; SSE42-NEXT: andl $1, %ecx 5141 ; SSE42-NEXT: leal (%rax,%rcx,8), %eax 5142 ; SSE42-NEXT: pextrb $4, %xmm3, %ecx 5143 ; SSE42-NEXT: andl $1, %ecx 5144 ; SSE42-NEXT: shll $4, %ecx 5145 ; SSE42-NEXT: orl %eax, %ecx 5146 ; SSE42-NEXT: pextrb $5, %xmm3, %eax 5147 ; SSE42-NEXT: andl $1, %eax 5148 ; SSE42-NEXT: shll $5, %eax 5149 ; SSE42-NEXT: orl %ecx, %eax 5150 ; SSE42-NEXT: pextrb $6, %xmm3, %ecx 5151 ; SSE42-NEXT: andl $1, %ecx 5152 ; SSE42-NEXT: shll $6, %ecx 5153 ; SSE42-NEXT: pextrb $7, %xmm3, %edx 5154 ; SSE42-NEXT: andl $1, %edx 5155 ; SSE42-NEXT: shll $7, %edx 5156 ; SSE42-NEXT: orl %ecx, %edx 5157 ; SSE42-NEXT: pextrb $8, %xmm3, %ecx 5158 ; SSE42-NEXT: andl $1, %ecx 5159 ; SSE42-NEXT: shll $8, %ecx 5160 ; SSE42-NEXT: orl %edx, %ecx 5161 ; SSE42-NEXT: pextrb $9, %xmm3, %edx 5162 ; SSE42-NEXT: andl $1, %edx 5163 ; SSE42-NEXT: shll $9, %edx 5164 ; SSE42-NEXT: orl %ecx, %edx 5165 ; SSE42-NEXT: pextrb $10, %xmm3, %ecx 5166 ; SSE42-NEXT: andl $1, %ecx 5167 ; SSE42-NEXT: shll $10, %ecx 5168 ; SSE42-NEXT: orl %edx, %ecx 5169 ; SSE42-NEXT: pextrb $11, %xmm3, %edx 5170 ; SSE42-NEXT: andl $1, %edx 5171 ; SSE42-NEXT: shll $11, %edx 5172 ; SSE42-NEXT: orl %ecx, %edx 5173 ; SSE42-NEXT: pextrb $12, %xmm3, %ecx 5174 ; SSE42-NEXT: andl $1, %ecx 5175 ; SSE42-NEXT: shll $12, %ecx 5176 ; SSE42-NEXT: orl %edx, %ecx 5177 ; SSE42-NEXT: pextrb $13, %xmm3, %edx 5178 ; SSE42-NEXT: andl $1, %edx 5179 ; SSE42-NEXT: shll $13, %edx 5180 ; SSE42-NEXT: orl %ecx, %edx 5181 ; SSE42-NEXT: pextrb $14, %xmm3, %ecx 5182 ; SSE42-NEXT: andl $1, %ecx 5183 ; SSE42-NEXT: shll $14, %ecx 5184 ; SSE42-NEXT: orl %edx, %ecx 5185 ; SSE42-NEXT: pextrb $15, %xmm3, %edx 5186 ; SSE42-NEXT: shll $15, %edx 5187 ; SSE42-NEXT: orl %ecx, %edx 5188 ; SSE42-NEXT: orl %eax, %edx 5189 ; SSE42-NEXT: movw %dx, 6(%rdi) 5190 ; SSE42-NEXT: pextrb $1, %xmm2, %eax 5191 ; SSE42-NEXT: andl $1, %eax 5192 ; SSE42-NEXT: pextrb $0, %xmm2, %ecx 5193 ; SSE42-NEXT: andl $1, %ecx 5194 ; SSE42-NEXT: leal (%rcx,%rax,2), %eax 5195 ; SSE42-NEXT: pextrb $2, %xmm2, %ecx 5196 ; SSE42-NEXT: andl $1, %ecx 5197 ; SSE42-NEXT: leal (%rax,%rcx,4), %eax 5198 ; SSE42-NEXT: pextrb $3, %xmm2, %ecx 5199 ; SSE42-NEXT: andl $1, %ecx 5200 ; SSE42-NEXT: leal (%rax,%rcx,8), %eax 5201 ; SSE42-NEXT: pextrb $4, %xmm2, %ecx 5202 ; SSE42-NEXT: andl $1, %ecx 5203 ; SSE42-NEXT: shll $4, %ecx 5204 ; SSE42-NEXT: orl %eax, %ecx 5205 ; SSE42-NEXT: pextrb $5, %xmm2, %eax 5206 ; SSE42-NEXT: andl $1, %eax 5207 ; SSE42-NEXT: shll $5, %eax 5208 ; SSE42-NEXT: orl %ecx, %eax 5209 ; SSE42-NEXT: pextrb $6, %xmm2, %ecx 5210 ; SSE42-NEXT: andl $1, %ecx 5211 ; SSE42-NEXT: shll $6, %ecx 5212 ; SSE42-NEXT: pextrb $7, %xmm2, %edx 5213 ; SSE42-NEXT: andl $1, %edx 5214 ; SSE42-NEXT: shll $7, %edx 5215 ; SSE42-NEXT: orl %ecx, %edx 5216 ; SSE42-NEXT: pextrb $8, %xmm2, %ecx 5217 ; SSE42-NEXT: andl $1, %ecx 5218 ; SSE42-NEXT: shll $8, %ecx 5219 ; SSE42-NEXT: orl %edx, %ecx 5220 ; SSE42-NEXT: pextrb $9, %xmm2, %edx 5221 ; SSE42-NEXT: andl $1, %edx 5222 ; SSE42-NEXT: shll $9, %edx 5223 ; SSE42-NEXT: orl %ecx, %edx 5224 ; SSE42-NEXT: pextrb $10, %xmm2, %ecx 5225 ; SSE42-NEXT: andl $1, %ecx 5226 ; SSE42-NEXT: shll $10, %ecx 5227 ; SSE42-NEXT: orl %edx, %ecx 5228 ; SSE42-NEXT: pextrb $11, %xmm2, %edx 5229 ; SSE42-NEXT: andl $1, %edx 5230 ; SSE42-NEXT: shll $11, %edx 5231 ; SSE42-NEXT: orl %ecx, %edx 5232 ; SSE42-NEXT: pextrb $12, %xmm2, %ecx 5233 ; SSE42-NEXT: andl $1, %ecx 5234 ; SSE42-NEXT: shll $12, %ecx 5235 ; SSE42-NEXT: orl %edx, %ecx 5236 ; SSE42-NEXT: pextrb $13, %xmm2, %edx 5237 ; SSE42-NEXT: andl $1, %edx 5238 ; SSE42-NEXT: shll $13, %edx 5239 ; SSE42-NEXT: orl %ecx, %edx 5240 ; SSE42-NEXT: pextrb $14, %xmm2, %ecx 5241 ; SSE42-NEXT: andl $1, %ecx 5242 ; SSE42-NEXT: shll $14, %ecx 5243 ; SSE42-NEXT: orl %edx, %ecx 5244 ; SSE42-NEXT: pextrb $15, %xmm2, %edx 5245 ; SSE42-NEXT: shll $15, %edx 5246 ; SSE42-NEXT: orl %ecx, %edx 5247 ; SSE42-NEXT: orl %eax, %edx 5248 ; SSE42-NEXT: movw %dx, 4(%rdi) 5249 ; SSE42-NEXT: pextrb $1, %xmm1, %eax 5250 ; SSE42-NEXT: andl $1, %eax 5251 ; SSE42-NEXT: pextrb $0, %xmm1, %ecx 5252 ; SSE42-NEXT: andl $1, %ecx 5253 ; SSE42-NEXT: leal (%rcx,%rax,2), %eax 5254 ; SSE42-NEXT: pextrb $2, %xmm1, %ecx 5255 ; SSE42-NEXT: andl $1, %ecx 5256 ; SSE42-NEXT: leal (%rax,%rcx,4), %eax 5257 ; SSE42-NEXT: pextrb $3, %xmm1, %ecx 5258 ; SSE42-NEXT: andl $1, %ecx 5259 ; SSE42-NEXT: leal (%rax,%rcx,8), %eax 5260 ; SSE42-NEXT: pextrb $4, %xmm1, %ecx 5261 ; SSE42-NEXT: andl $1, %ecx 5262 ; SSE42-NEXT: shll $4, %ecx 5263 ; SSE42-NEXT: orl %eax, %ecx 5264 ; SSE42-NEXT: pextrb $5, %xmm1, %eax 5265 ; SSE42-NEXT: andl $1, %eax 5266 ; SSE42-NEXT: shll $5, %eax 5267 ; SSE42-NEXT: orl %ecx, %eax 5268 ; SSE42-NEXT: pextrb $6, %xmm1, %ecx 5269 ; SSE42-NEXT: andl $1, %ecx 5270 ; SSE42-NEXT: shll $6, %ecx 5271 ; SSE42-NEXT: pextrb $7, %xmm1, %edx 5272 ; SSE42-NEXT: andl $1, %edx 5273 ; SSE42-NEXT: shll $7, %edx 5274 ; SSE42-NEXT: orl %ecx, %edx 5275 ; SSE42-NEXT: pextrb $8, %xmm1, %ecx 5276 ; SSE42-NEXT: andl $1, %ecx 5277 ; SSE42-NEXT: shll $8, %ecx 5278 ; SSE42-NEXT: orl %edx, %ecx 5279 ; SSE42-NEXT: pextrb $9, %xmm1, %edx 5280 ; SSE42-NEXT: andl $1, %edx 5281 ; SSE42-NEXT: shll $9, %edx 5282 ; SSE42-NEXT: orl %ecx, %edx 5283 ; SSE42-NEXT: pextrb $10, %xmm1, %ecx 5284 ; SSE42-NEXT: andl $1, %ecx 5285 ; SSE42-NEXT: shll $10, %ecx 5286 ; SSE42-NEXT: orl %edx, %ecx 5287 ; SSE42-NEXT: pextrb $11, %xmm1, %edx 5288 ; SSE42-NEXT: andl $1, %edx 5289 ; SSE42-NEXT: shll $11, %edx 5290 ; SSE42-NEXT: orl %ecx, %edx 5291 ; SSE42-NEXT: pextrb $12, %xmm1, %ecx 5292 ; SSE42-NEXT: andl $1, %ecx 5293 ; SSE42-NEXT: shll $12, %ecx 5294 ; SSE42-NEXT: orl %edx, %ecx 5295 ; SSE42-NEXT: pextrb $13, %xmm1, %edx 5296 ; SSE42-NEXT: andl $1, %edx 5297 ; SSE42-NEXT: shll $13, %edx 5298 ; SSE42-NEXT: orl %ecx, %edx 5299 ; SSE42-NEXT: pextrb $14, %xmm1, %ecx 5300 ; SSE42-NEXT: andl $1, %ecx 5301 ; SSE42-NEXT: shll $14, %ecx 5302 ; SSE42-NEXT: orl %edx, %ecx 5303 ; SSE42-NEXT: pextrb $15, %xmm1, %edx 5304 ; SSE42-NEXT: shll $15, %edx 5305 ; SSE42-NEXT: orl %ecx, %edx 5306 ; SSE42-NEXT: orl %eax, %edx 5307 ; SSE42-NEXT: movw %dx, 2(%rdi) 5308 ; SSE42-NEXT: pextrb $1, %xmm0, %eax 5309 ; SSE42-NEXT: andl $1, %eax 5310 ; SSE42-NEXT: pextrb $0, %xmm0, %ecx 5311 ; SSE42-NEXT: andl $1, %ecx 5312 ; SSE42-NEXT: leal (%rcx,%rax,2), %eax 5313 ; SSE42-NEXT: pextrb $2, %xmm0, %ecx 5314 ; SSE42-NEXT: andl $1, %ecx 5315 ; SSE42-NEXT: leal (%rax,%rcx,4), %eax 5316 ; SSE42-NEXT: pextrb $3, %xmm0, %ecx 5317 ; SSE42-NEXT: andl $1, %ecx 5318 ; SSE42-NEXT: leal (%rax,%rcx,8), %eax 5319 ; SSE42-NEXT: pextrb $4, %xmm0, %ecx 5320 ; SSE42-NEXT: andl $1, %ecx 5321 ; SSE42-NEXT: shll $4, %ecx 5322 ; SSE42-NEXT: orl %eax, %ecx 5323 ; SSE42-NEXT: pextrb $5, %xmm0, %eax 5324 ; SSE42-NEXT: andl $1, %eax 5325 ; SSE42-NEXT: shll $5, %eax 5326 ; SSE42-NEXT: orl %ecx, %eax 5327 ; SSE42-NEXT: pextrb $6, %xmm0, %ecx 5328 ; SSE42-NEXT: andl $1, %ecx 5329 ; SSE42-NEXT: shll $6, %ecx 5330 ; SSE42-NEXT: pextrb $7, %xmm0, %edx 5331 ; SSE42-NEXT: andl $1, %edx 5332 ; SSE42-NEXT: shll $7, %edx 5333 ; SSE42-NEXT: orl %ecx, %edx 5334 ; SSE42-NEXT: pextrb $8, %xmm0, %ecx 5335 ; SSE42-NEXT: andl $1, %ecx 5336 ; SSE42-NEXT: shll $8, %ecx 5337 ; SSE42-NEXT: orl %edx, %ecx 5338 ; SSE42-NEXT: pextrb $9, %xmm0, %edx 5339 ; SSE42-NEXT: andl $1, %edx 5340 ; SSE42-NEXT: shll $9, %edx 5341 ; SSE42-NEXT: orl %ecx, %edx 5342 ; SSE42-NEXT: pextrb $10, %xmm0, %ecx 5343 ; SSE42-NEXT: andl $1, %ecx 5344 ; SSE42-NEXT: shll $10, %ecx 5345 ; SSE42-NEXT: orl %edx, %ecx 5346 ; SSE42-NEXT: pextrb $11, %xmm0, %edx 5347 ; SSE42-NEXT: andl $1, %edx 5348 ; SSE42-NEXT: shll $11, %edx 5349 ; SSE42-NEXT: orl %ecx, %edx 5350 ; SSE42-NEXT: pextrb $12, %xmm0, %ecx 5351 ; SSE42-NEXT: andl $1, %ecx 5352 ; SSE42-NEXT: shll $12, %ecx 5353 ; SSE42-NEXT: orl %edx, %ecx 5354 ; SSE42-NEXT: pextrb $13, %xmm0, %edx 5355 ; SSE42-NEXT: andl $1, %edx 5356 ; SSE42-NEXT: shll $13, %edx 5357 ; SSE42-NEXT: orl %ecx, %edx 5358 ; SSE42-NEXT: pextrb $14, %xmm0, %ecx 5359 ; SSE42-NEXT: andl $1, %ecx 5360 ; SSE42-NEXT: shll $14, %ecx 5361 ; SSE42-NEXT: orl %edx, %ecx 5362 ; SSE42-NEXT: pextrb $15, %xmm0, %edx 5363 ; SSE42-NEXT: shll $15, %edx 5364 ; SSE42-NEXT: orl %ecx, %edx 5365 ; SSE42-NEXT: orl %eax, %edx 5366 ; SSE42-NEXT: movw %dx, (%rdi) 5367 ; SSE42-NEXT: movq %rdi, %rax 5368 ; SSE42-NEXT: retq 5369 ; 5370 ; AVX1-LABEL: test_cmp_v128i8: 5371 ; AVX1: # %bb.0: 5372 ; AVX1-NEXT: vextractf128 $1, %ymm4, %xmm8 5373 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm9 5374 ; AVX1-NEXT: vpcmpgtb %xmm8, %xmm9, %xmm8 5375 ; AVX1-NEXT: vpcmpgtb %xmm4, %xmm0, %xmm9 5376 ; AVX1-NEXT: vextractf128 $1, %ymm5, %xmm4 5377 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm0 5378 ; AVX1-NEXT: vpcmpgtb %xmm4, %xmm0, %xmm4 5379 ; AVX1-NEXT: vpcmpgtb %xmm5, %xmm1, %xmm1 5380 ; AVX1-NEXT: vextractf128 $1, %ymm6, %xmm0 5381 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm5 5382 ; AVX1-NEXT: vpcmpgtb %xmm0, %xmm5, %xmm5 5383 ; AVX1-NEXT: vpcmpgtb %xmm6, %xmm2, %xmm2 5384 ; AVX1-NEXT: vextractf128 $1, %ymm7, %xmm0 5385 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm6 5386 ; AVX1-NEXT: vpcmpgtb %xmm0, %xmm6, %xmm6 5387 ; AVX1-NEXT: vpcmpgtb %xmm7, %xmm3, %xmm3 5388 ; AVX1-NEXT: vpextrb $1, %xmm3, %eax 5389 ; AVX1-NEXT: andl $1, %eax 5390 ; AVX1-NEXT: vpextrb $0, %xmm3, %ecx 5391 ; AVX1-NEXT: andl $1, %ecx 5392 ; AVX1-NEXT: leal (%rcx,%rax,2), %eax 5393 ; AVX1-NEXT: vpextrb $2, %xmm3, %ecx 5394 ; AVX1-NEXT: andl $1, %ecx 5395 ; AVX1-NEXT: leal (%rax,%rcx,4), %eax 5396 ; AVX1-NEXT: vpextrb $3, %xmm3, %ecx 5397 ; AVX1-NEXT: andl $1, %ecx 5398 ; AVX1-NEXT: leal (%rax,%rcx,8), %eax 5399 ; AVX1-NEXT: vpextrb $4, %xmm3, %ecx 5400 ; AVX1-NEXT: andl $1, %ecx 5401 ; AVX1-NEXT: shll $4, %ecx 5402 ; AVX1-NEXT: orl %eax, %ecx 5403 ; AVX1-NEXT: vpextrb $5, %xmm3, %eax 5404 ; AVX1-NEXT: andl $1, %eax 5405 ; AVX1-NEXT: shll $5, %eax 5406 ; AVX1-NEXT: orl %ecx, %eax 5407 ; AVX1-NEXT: vpextrb $6, %xmm3, %ecx 5408 ; AVX1-NEXT: andl $1, %ecx 5409 ; AVX1-NEXT: shll $6, %ecx 5410 ; AVX1-NEXT: vpextrb $7, %xmm3, %edx 5411 ; AVX1-NEXT: andl $1, %edx 5412 ; AVX1-NEXT: shll $7, %edx 5413 ; AVX1-NEXT: orl %ecx, %edx 5414 ; AVX1-NEXT: vpextrb $8, %xmm3, %ecx 5415 ; AVX1-NEXT: andl $1, %ecx 5416 ; AVX1-NEXT: shll $8, %ecx 5417 ; AVX1-NEXT: orl %edx, %ecx 5418 ; AVX1-NEXT: vpextrb $9, %xmm3, %edx 5419 ; AVX1-NEXT: andl $1, %edx 5420 ; AVX1-NEXT: shll $9, %edx 5421 ; AVX1-NEXT: orl %ecx, %edx 5422 ; AVX1-NEXT: vpextrb $10, %xmm3, %ecx 5423 ; AVX1-NEXT: andl $1, %ecx 5424 ; AVX1-NEXT: shll $10, %ecx 5425 ; AVX1-NEXT: orl %edx, %ecx 5426 ; AVX1-NEXT: vpextrb $11, %xmm3, %edx 5427 ; AVX1-NEXT: andl $1, %edx 5428 ; AVX1-NEXT: shll $11, %edx 5429 ; AVX1-NEXT: orl %ecx, %edx 5430 ; AVX1-NEXT: vpextrb $12, %xmm3, %ecx 5431 ; AVX1-NEXT: andl $1, %ecx 5432 ; AVX1-NEXT: shll $12, %ecx 5433 ; AVX1-NEXT: orl %edx, %ecx 5434 ; AVX1-NEXT: vpextrb $13, %xmm3, %edx 5435 ; AVX1-NEXT: andl $1, %edx 5436 ; AVX1-NEXT: shll $13, %edx 5437 ; AVX1-NEXT: orl %ecx, %edx 5438 ; AVX1-NEXT: vpextrb $14, %xmm3, %ecx 5439 ; AVX1-NEXT: andl $1, %ecx 5440 ; AVX1-NEXT: shll $14, %ecx 5441 ; AVX1-NEXT: orl %edx, %ecx 5442 ; AVX1-NEXT: vpextrb $15, %xmm3, %edx 5443 ; AVX1-NEXT: andl $1, %edx 5444 ; AVX1-NEXT: shll $15, %edx 5445 ; AVX1-NEXT: orl %ecx, %edx 5446 ; AVX1-NEXT: vpextrb $0, %xmm6, %ecx 5447 ; AVX1-NEXT: andl $1, %ecx 5448 ; AVX1-NEXT: shll $16, %ecx 5449 ; AVX1-NEXT: orl %edx, %ecx 5450 ; AVX1-NEXT: vpextrb $1, %xmm6, %edx 5451 ; AVX1-NEXT: andl $1, %edx 5452 ; AVX1-NEXT: shll $17, %edx 5453 ; AVX1-NEXT: orl %ecx, %edx 5454 ; AVX1-NEXT: vpextrb $2, %xmm6, %ecx 5455 ; AVX1-NEXT: andl $1, %ecx 5456 ; AVX1-NEXT: shll $18, %ecx 5457 ; AVX1-NEXT: orl %edx, %ecx 5458 ; AVX1-NEXT: vpextrb $3, %xmm6, %edx 5459 ; AVX1-NEXT: andl $1, %edx 5460 ; AVX1-NEXT: shll $19, %edx 5461 ; AVX1-NEXT: orl %ecx, %edx 5462 ; AVX1-NEXT: vpextrb $4, %xmm6, %ecx 5463 ; AVX1-NEXT: andl $1, %ecx 5464 ; AVX1-NEXT: shll $20, %ecx 5465 ; AVX1-NEXT: orl %edx, %ecx 5466 ; AVX1-NEXT: vpextrb $5, %xmm6, %edx 5467 ; AVX1-NEXT: andl $1, %edx 5468 ; AVX1-NEXT: shll $21, %edx 5469 ; AVX1-NEXT: orl %ecx, %edx 5470 ; AVX1-NEXT: vpextrb $6, %xmm6, %ecx 5471 ; AVX1-NEXT: andl $1, %ecx 5472 ; AVX1-NEXT: shll $22, %ecx 5473 ; AVX1-NEXT: orl %edx, %ecx 5474 ; AVX1-NEXT: vpextrb $7, %xmm6, %edx 5475 ; AVX1-NEXT: andl $1, %edx 5476 ; AVX1-NEXT: shll $23, %edx 5477 ; AVX1-NEXT: orl %ecx, %edx 5478 ; AVX1-NEXT: vpextrb $8, %xmm6, %ecx 5479 ; AVX1-NEXT: andl $1, %ecx 5480 ; AVX1-NEXT: shll $24, %ecx 5481 ; AVX1-NEXT: orl %edx, %ecx 5482 ; AVX1-NEXT: vpextrb $9, %xmm6, %edx 5483 ; AVX1-NEXT: andl $1, %edx 5484 ; AVX1-NEXT: shll $25, %edx 5485 ; AVX1-NEXT: orl %ecx, %edx 5486 ; AVX1-NEXT: vpextrb $10, %xmm6, %ecx 5487 ; AVX1-NEXT: andl $1, %ecx 5488 ; AVX1-NEXT: shll $26, %ecx 5489 ; AVX1-NEXT: orl %edx, %ecx 5490 ; AVX1-NEXT: vpextrb $11, %xmm6, %edx 5491 ; AVX1-NEXT: andl $1, %edx 5492 ; AVX1-NEXT: shll $27, %edx 5493 ; AVX1-NEXT: orl %ecx, %edx 5494 ; AVX1-NEXT: vpextrb $12, %xmm6, %ecx 5495 ; AVX1-NEXT: andl $1, %ecx 5496 ; AVX1-NEXT: shll $28, %ecx 5497 ; AVX1-NEXT: orl %edx, %ecx 5498 ; AVX1-NEXT: vpextrb $13, %xmm6, %edx 5499 ; AVX1-NEXT: andl $1, %edx 5500 ; AVX1-NEXT: shll $29, %edx 5501 ; AVX1-NEXT: orl %ecx, %edx 5502 ; AVX1-NEXT: vpextrb $14, %xmm6, %ecx 5503 ; AVX1-NEXT: andl $1, %ecx 5504 ; AVX1-NEXT: shll $30, %ecx 5505 ; AVX1-NEXT: orl %edx, %ecx 5506 ; AVX1-NEXT: vpextrb $15, %xmm6, %edx 5507 ; AVX1-NEXT: shll $31, %edx 5508 ; AVX1-NEXT: orl %ecx, %edx 5509 ; AVX1-NEXT: orl %eax, %edx 5510 ; AVX1-NEXT: movl %edx, 12(%rdi) 5511 ; AVX1-NEXT: vpextrb $1, %xmm2, %eax 5512 ; AVX1-NEXT: andl $1, %eax 5513 ; AVX1-NEXT: vpextrb $0, %xmm2, %ecx 5514 ; AVX1-NEXT: andl $1, %ecx 5515 ; AVX1-NEXT: leal (%rcx,%rax,2), %eax 5516 ; AVX1-NEXT: vpextrb $2, %xmm2, %ecx 5517 ; AVX1-NEXT: andl $1, %ecx 5518 ; AVX1-NEXT: leal (%rax,%rcx,4), %eax 5519 ; AVX1-NEXT: vpextrb $3, %xmm2, %ecx 5520 ; AVX1-NEXT: andl $1, %ecx 5521 ; AVX1-NEXT: leal (%rax,%rcx,8), %eax 5522 ; AVX1-NEXT: vpextrb $4, %xmm2, %ecx 5523 ; AVX1-NEXT: andl $1, %ecx 5524 ; AVX1-NEXT: shll $4, %ecx 5525 ; AVX1-NEXT: orl %eax, %ecx 5526 ; AVX1-NEXT: vpextrb $5, %xmm2, %eax 5527 ; AVX1-NEXT: andl $1, %eax 5528 ; AVX1-NEXT: shll $5, %eax 5529 ; AVX1-NEXT: orl %ecx, %eax 5530 ; AVX1-NEXT: vpextrb $6, %xmm2, %ecx 5531 ; AVX1-NEXT: andl $1, %ecx 5532 ; AVX1-NEXT: shll $6, %ecx 5533 ; AVX1-NEXT: vpextrb $7, %xmm2, %edx 5534 ; AVX1-NEXT: andl $1, %edx 5535 ; AVX1-NEXT: shll $7, %edx 5536 ; AVX1-NEXT: orl %ecx, %edx 5537 ; AVX1-NEXT: vpextrb $8, %xmm2, %ecx 5538 ; AVX1-NEXT: andl $1, %ecx 5539 ; AVX1-NEXT: shll $8, %ecx 5540 ; AVX1-NEXT: orl %edx, %ecx 5541 ; AVX1-NEXT: vpextrb $9, %xmm2, %edx 5542 ; AVX1-NEXT: andl $1, %edx 5543 ; AVX1-NEXT: shll $9, %edx 5544 ; AVX1-NEXT: orl %ecx, %edx 5545 ; AVX1-NEXT: vpextrb $10, %xmm2, %ecx 5546 ; AVX1-NEXT: andl $1, %ecx 5547 ; AVX1-NEXT: shll $10, %ecx 5548 ; AVX1-NEXT: orl %edx, %ecx 5549 ; AVX1-NEXT: vpextrb $11, %xmm2, %edx 5550 ; AVX1-NEXT: andl $1, %edx 5551 ; AVX1-NEXT: shll $11, %edx 5552 ; AVX1-NEXT: orl %ecx, %edx 5553 ; AVX1-NEXT: vpextrb $12, %xmm2, %ecx 5554 ; AVX1-NEXT: andl $1, %ecx 5555 ; AVX1-NEXT: shll $12, %ecx 5556 ; AVX1-NEXT: orl %edx, %ecx 5557 ; AVX1-NEXT: vpextrb $13, %xmm2, %edx 5558 ; AVX1-NEXT: andl $1, %edx 5559 ; AVX1-NEXT: shll $13, %edx 5560 ; AVX1-NEXT: orl %ecx, %edx 5561 ; AVX1-NEXT: vpextrb $14, %xmm2, %ecx 5562 ; AVX1-NEXT: andl $1, %ecx 5563 ; AVX1-NEXT: shll $14, %ecx 5564 ; AVX1-NEXT: orl %edx, %ecx 5565 ; AVX1-NEXT: vpextrb $15, %xmm2, %edx 5566 ; AVX1-NEXT: andl $1, %edx 5567 ; AVX1-NEXT: shll $15, %edx 5568 ; AVX1-NEXT: orl %ecx, %edx 5569 ; AVX1-NEXT: vpextrb $0, %xmm5, %ecx 5570 ; AVX1-NEXT: andl $1, %ecx 5571 ; AVX1-NEXT: shll $16, %ecx 5572 ; AVX1-NEXT: orl %edx, %ecx 5573 ; AVX1-NEXT: vpextrb $1, %xmm5, %edx 5574 ; AVX1-NEXT: andl $1, %edx 5575 ; AVX1-NEXT: shll $17, %edx 5576 ; AVX1-NEXT: orl %ecx, %edx 5577 ; AVX1-NEXT: vpextrb $2, %xmm5, %ecx 5578 ; AVX1-NEXT: andl $1, %ecx 5579 ; AVX1-NEXT: shll $18, %ecx 5580 ; AVX1-NEXT: orl %edx, %ecx 5581 ; AVX1-NEXT: vpextrb $3, %xmm5, %edx 5582 ; AVX1-NEXT: andl $1, %edx 5583 ; AVX1-NEXT: shll $19, %edx 5584 ; AVX1-NEXT: orl %ecx, %edx 5585 ; AVX1-NEXT: vpextrb $4, %xmm5, %ecx 5586 ; AVX1-NEXT: andl $1, %ecx 5587 ; AVX1-NEXT: shll $20, %ecx 5588 ; AVX1-NEXT: orl %edx, %ecx 5589 ; AVX1-NEXT: vpextrb $5, %xmm5, %edx 5590 ; AVX1-NEXT: andl $1, %edx 5591 ; AVX1-NEXT: shll $21, %edx 5592 ; AVX1-NEXT: orl %ecx, %edx 5593 ; AVX1-NEXT: vpextrb $6, %xmm5, %ecx 5594 ; AVX1-NEXT: andl $1, %ecx 5595 ; AVX1-NEXT: shll $22, %ecx 5596 ; AVX1-NEXT: orl %edx, %ecx 5597 ; AVX1-NEXT: vpextrb $7, %xmm5, %edx 5598 ; AVX1-NEXT: andl $1, %edx 5599 ; AVX1-NEXT: shll $23, %edx 5600 ; AVX1-NEXT: orl %ecx, %edx 5601 ; AVX1-NEXT: vpextrb $8, %xmm5, %ecx 5602 ; AVX1-NEXT: andl $1, %ecx 5603 ; AVX1-NEXT: shll $24, %ecx 5604 ; AVX1-NEXT: orl %edx, %ecx 5605 ; AVX1-NEXT: vpextrb $9, %xmm5, %edx 5606 ; AVX1-NEXT: andl $1, %edx 5607 ; AVX1-NEXT: shll $25, %edx 5608 ; AVX1-NEXT: orl %ecx, %edx 5609 ; AVX1-NEXT: vpextrb $10, %xmm5, %ecx 5610 ; AVX1-NEXT: andl $1, %ecx 5611 ; AVX1-NEXT: shll $26, %ecx 5612 ; AVX1-NEXT: orl %edx, %ecx 5613 ; AVX1-NEXT: vpextrb $11, %xmm5, %edx 5614 ; AVX1-NEXT: andl $1, %edx 5615 ; AVX1-NEXT: shll $27, %edx 5616 ; AVX1-NEXT: orl %ecx, %edx 5617 ; AVX1-NEXT: vpextrb $12, %xmm5, %ecx 5618 ; AVX1-NEXT: andl $1, %ecx 5619 ; AVX1-NEXT: shll $28, %ecx 5620 ; AVX1-NEXT: orl %edx, %ecx 5621 ; AVX1-NEXT: vpextrb $13, %xmm5, %edx 5622 ; AVX1-NEXT: andl $1, %edx 5623 ; AVX1-NEXT: shll $29, %edx 5624 ; AVX1-NEXT: orl %ecx, %edx 5625 ; AVX1-NEXT: vpextrb $14, %xmm5, %ecx 5626 ; AVX1-NEXT: andl $1, %ecx 5627 ; AVX1-NEXT: shll $30, %ecx 5628 ; AVX1-NEXT: orl %edx, %ecx 5629 ; AVX1-NEXT: vpextrb $15, %xmm5, %edx 5630 ; AVX1-NEXT: shll $31, %edx 5631 ; AVX1-NEXT: orl %ecx, %edx 5632 ; AVX1-NEXT: orl %eax, %edx 5633 ; AVX1-NEXT: movl %edx, 8(%rdi) 5634 ; AVX1-NEXT: vpextrb $1, %xmm1, %eax 5635 ; AVX1-NEXT: andl $1, %eax 5636 ; AVX1-NEXT: vpextrb $0, %xmm1, %ecx 5637 ; AVX1-NEXT: andl $1, %ecx 5638 ; AVX1-NEXT: leal (%rcx,%rax,2), %eax 5639 ; AVX1-NEXT: vpextrb $2, %xmm1, %ecx 5640 ; AVX1-NEXT: andl $1, %ecx 5641 ; AVX1-NEXT: leal (%rax,%rcx,4), %eax 5642 ; AVX1-NEXT: vpextrb $3, %xmm1, %ecx 5643 ; AVX1-NEXT: andl $1, %ecx 5644 ; AVX1-NEXT: leal (%rax,%rcx,8), %eax 5645 ; AVX1-NEXT: vpextrb $4, %xmm1, %ecx 5646 ; AVX1-NEXT: andl $1, %ecx 5647 ; AVX1-NEXT: shll $4, %ecx 5648 ; AVX1-NEXT: orl %eax, %ecx 5649 ; AVX1-NEXT: vpextrb $5, %xmm1, %eax 5650 ; AVX1-NEXT: andl $1, %eax 5651 ; AVX1-NEXT: shll $5, %eax 5652 ; AVX1-NEXT: orl %ecx, %eax 5653 ; AVX1-NEXT: vpextrb $6, %xmm1, %ecx 5654 ; AVX1-NEXT: andl $1, %ecx 5655 ; AVX1-NEXT: shll $6, %ecx 5656 ; AVX1-NEXT: vpextrb $7, %xmm1, %edx 5657 ; AVX1-NEXT: andl $1, %edx 5658 ; AVX1-NEXT: shll $7, %edx 5659 ; AVX1-NEXT: orl %ecx, %edx 5660 ; AVX1-NEXT: vpextrb $8, %xmm1, %ecx 5661 ; AVX1-NEXT: andl $1, %ecx 5662 ; AVX1-NEXT: shll $8, %ecx 5663 ; AVX1-NEXT: orl %edx, %ecx 5664 ; AVX1-NEXT: vpextrb $9, %xmm1, %edx 5665 ; AVX1-NEXT: andl $1, %edx 5666 ; AVX1-NEXT: shll $9, %edx 5667 ; AVX1-NEXT: orl %ecx, %edx 5668 ; AVX1-NEXT: vpextrb $10, %xmm1, %ecx 5669 ; AVX1-NEXT: andl $1, %ecx 5670 ; AVX1-NEXT: shll $10, %ecx 5671 ; AVX1-NEXT: orl %edx, %ecx 5672 ; AVX1-NEXT: vpextrb $11, %xmm1, %edx 5673 ; AVX1-NEXT: andl $1, %edx 5674 ; AVX1-NEXT: shll $11, %edx 5675 ; AVX1-NEXT: orl %ecx, %edx 5676 ; AVX1-NEXT: vpextrb $12, %xmm1, %ecx 5677 ; AVX1-NEXT: andl $1, %ecx 5678 ; AVX1-NEXT: shll $12, %ecx 5679 ; AVX1-NEXT: orl %edx, %ecx 5680 ; AVX1-NEXT: vpextrb $13, %xmm1, %edx 5681 ; AVX1-NEXT: andl $1, %edx 5682 ; AVX1-NEXT: shll $13, %edx 5683 ; AVX1-NEXT: orl %ecx, %edx 5684 ; AVX1-NEXT: vpextrb $14, %xmm1, %ecx 5685 ; AVX1-NEXT: andl $1, %ecx 5686 ; AVX1-NEXT: shll $14, %ecx 5687 ; AVX1-NEXT: orl %edx, %ecx 5688 ; AVX1-NEXT: vpextrb $15, %xmm1, %edx 5689 ; AVX1-NEXT: andl $1, %edx 5690 ; AVX1-NEXT: shll $15, %edx 5691 ; AVX1-NEXT: orl %ecx, %edx 5692 ; AVX1-NEXT: vpextrb $0, %xmm4, %ecx 5693 ; AVX1-NEXT: andl $1, %ecx 5694 ; AVX1-NEXT: shll $16, %ecx 5695 ; AVX1-NEXT: orl %edx, %ecx 5696 ; AVX1-NEXT: vpextrb $1, %xmm4, %edx 5697 ; AVX1-NEXT: andl $1, %edx 5698 ; AVX1-NEXT: shll $17, %edx 5699 ; AVX1-NEXT: orl %ecx, %edx 5700 ; AVX1-NEXT: vpextrb $2, %xmm4, %ecx 5701 ; AVX1-NEXT: andl $1, %ecx 5702 ; AVX1-NEXT: shll $18, %ecx 5703 ; AVX1-NEXT: orl %edx, %ecx 5704 ; AVX1-NEXT: vpextrb $3, %xmm4, %edx 5705 ; AVX1-NEXT: andl $1, %edx 5706 ; AVX1-NEXT: shll $19, %edx 5707 ; AVX1-NEXT: orl %ecx, %edx 5708 ; AVX1-NEXT: vpextrb $4, %xmm4, %ecx 5709 ; AVX1-NEXT: andl $1, %ecx 5710 ; AVX1-NEXT: shll $20, %ecx 5711 ; AVX1-NEXT: orl %edx, %ecx 5712 ; AVX1-NEXT: vpextrb $5, %xmm4, %edx 5713 ; AVX1-NEXT: andl $1, %edx 5714 ; AVX1-NEXT: shll $21, %edx 5715 ; AVX1-NEXT: orl %ecx, %edx 5716 ; AVX1-NEXT: vpextrb $6, %xmm4, %ecx 5717 ; AVX1-NEXT: andl $1, %ecx 5718 ; AVX1-NEXT: shll $22, %ecx 5719 ; AVX1-NEXT: orl %edx, %ecx 5720 ; AVX1-NEXT: vpextrb $7, %xmm4, %edx 5721 ; AVX1-NEXT: andl $1, %edx 5722 ; AVX1-NEXT: shll $23, %edx 5723 ; AVX1-NEXT: orl %ecx, %edx 5724 ; AVX1-NEXT: vpextrb $8, %xmm4, %ecx 5725 ; AVX1-NEXT: andl $1, %ecx 5726 ; AVX1-NEXT: shll $24, %ecx 5727 ; AVX1-NEXT: orl %edx, %ecx 5728 ; AVX1-NEXT: vpextrb $9, %xmm4, %edx 5729 ; AVX1-NEXT: andl $1, %edx 5730 ; AVX1-NEXT: shll $25, %edx 5731 ; AVX1-NEXT: orl %ecx, %edx 5732 ; AVX1-NEXT: vpextrb $10, %xmm4, %ecx 5733 ; AVX1-NEXT: andl $1, %ecx 5734 ; AVX1-NEXT: shll $26, %ecx 5735 ; AVX1-NEXT: orl %edx, %ecx 5736 ; AVX1-NEXT: vpextrb $11, %xmm4, %edx 5737 ; AVX1-NEXT: andl $1, %edx 5738 ; AVX1-NEXT: shll $27, %edx 5739 ; AVX1-NEXT: orl %ecx, %edx 5740 ; AVX1-NEXT: vpextrb $12, %xmm4, %ecx 5741 ; AVX1-NEXT: andl $1, %ecx 5742 ; AVX1-NEXT: shll $28, %ecx 5743 ; AVX1-NEXT: orl %edx, %ecx 5744 ; AVX1-NEXT: vpextrb $13, %xmm4, %edx 5745 ; AVX1-NEXT: andl $1, %edx 5746 ; AVX1-NEXT: shll $29, %edx 5747 ; AVX1-NEXT: orl %ecx, %edx 5748 ; AVX1-NEXT: vpextrb $14, %xmm4, %ecx 5749 ; AVX1-NEXT: andl $1, %ecx 5750 ; AVX1-NEXT: shll $30, %ecx 5751 ; AVX1-NEXT: orl %edx, %ecx 5752 ; AVX1-NEXT: vpextrb $15, %xmm4, %edx 5753 ; AVX1-NEXT: shll $31, %edx 5754 ; AVX1-NEXT: orl %ecx, %edx 5755 ; AVX1-NEXT: orl %eax, %edx 5756 ; AVX1-NEXT: movl %edx, 4(%rdi) 5757 ; AVX1-NEXT: vpextrb $1, %xmm9, %eax 5758 ; AVX1-NEXT: andl $1, %eax 5759 ; AVX1-NEXT: vpextrb $0, %xmm9, %ecx 5760 ; AVX1-NEXT: andl $1, %ecx 5761 ; AVX1-NEXT: leal (%rcx,%rax,2), %eax 5762 ; AVX1-NEXT: vpextrb $2, %xmm9, %ecx 5763 ; AVX1-NEXT: andl $1, %ecx 5764 ; AVX1-NEXT: leal (%rax,%rcx,4), %eax 5765 ; AVX1-NEXT: vpextrb $3, %xmm9, %ecx 5766 ; AVX1-NEXT: andl $1, %ecx 5767 ; AVX1-NEXT: leal (%rax,%rcx,8), %eax 5768 ; AVX1-NEXT: vpextrb $4, %xmm9, %ecx 5769 ; AVX1-NEXT: andl $1, %ecx 5770 ; AVX1-NEXT: shll $4, %ecx 5771 ; AVX1-NEXT: orl %eax, %ecx 5772 ; AVX1-NEXT: vpextrb $5, %xmm9, %eax 5773 ; AVX1-NEXT: andl $1, %eax 5774 ; AVX1-NEXT: shll $5, %eax 5775 ; AVX1-NEXT: orl %ecx, %eax 5776 ; AVX1-NEXT: vpextrb $6, %xmm9, %ecx 5777 ; AVX1-NEXT: andl $1, %ecx 5778 ; AVX1-NEXT: shll $6, %ecx 5779 ; AVX1-NEXT: vpextrb $7, %xmm9, %edx 5780 ; AVX1-NEXT: andl $1, %edx 5781 ; AVX1-NEXT: shll $7, %edx 5782 ; AVX1-NEXT: orl %ecx, %edx 5783 ; AVX1-NEXT: vpextrb $8, %xmm9, %ecx 5784 ; AVX1-NEXT: andl $1, %ecx 5785 ; AVX1-NEXT: shll $8, %ecx 5786 ; AVX1-NEXT: orl %edx, %ecx 5787 ; AVX1-NEXT: vpextrb $9, %xmm9, %edx 5788 ; AVX1-NEXT: andl $1, %edx 5789 ; AVX1-NEXT: shll $9, %edx 5790 ; AVX1-NEXT: orl %ecx, %edx 5791 ; AVX1-NEXT: vpextrb $10, %xmm9, %ecx 5792 ; AVX1-NEXT: andl $1, %ecx 5793 ; AVX1-NEXT: shll $10, %ecx 5794 ; AVX1-NEXT: orl %edx, %ecx 5795 ; AVX1-NEXT: vpextrb $11, %xmm9, %edx 5796 ; AVX1-NEXT: andl $1, %edx 5797 ; AVX1-NEXT: shll $11, %edx 5798 ; AVX1-NEXT: orl %ecx, %edx 5799 ; AVX1-NEXT: vpextrb $12, %xmm9, %ecx 5800 ; AVX1-NEXT: andl $1, %ecx 5801 ; AVX1-NEXT: shll $12, %ecx 5802 ; AVX1-NEXT: orl %edx, %ecx 5803 ; AVX1-NEXT: vpextrb $13, %xmm9, %edx 5804 ; AVX1-NEXT: andl $1, %edx 5805 ; AVX1-NEXT: shll $13, %edx 5806 ; AVX1-NEXT: orl %ecx, %edx 5807 ; AVX1-NEXT: vpextrb $14, %xmm9, %ecx 5808 ; AVX1-NEXT: andl $1, %ecx 5809 ; AVX1-NEXT: shll $14, %ecx 5810 ; AVX1-NEXT: orl %edx, %ecx 5811 ; AVX1-NEXT: vpextrb $15, %xmm9, %edx 5812 ; AVX1-NEXT: andl $1, %edx 5813 ; AVX1-NEXT: shll $15, %edx 5814 ; AVX1-NEXT: orl %ecx, %edx 5815 ; AVX1-NEXT: vpextrb $0, %xmm8, %ecx 5816 ; AVX1-NEXT: andl $1, %ecx 5817 ; AVX1-NEXT: shll $16, %ecx 5818 ; AVX1-NEXT: orl %edx, %ecx 5819 ; AVX1-NEXT: vpextrb $1, %xmm8, %edx 5820 ; AVX1-NEXT: andl $1, %edx 5821 ; AVX1-NEXT: shll $17, %edx 5822 ; AVX1-NEXT: orl %ecx, %edx 5823 ; AVX1-NEXT: vpextrb $2, %xmm8, %ecx 5824 ; AVX1-NEXT: andl $1, %ecx 5825 ; AVX1-NEXT: shll $18, %ecx 5826 ; AVX1-NEXT: orl %edx, %ecx 5827 ; AVX1-NEXT: vpextrb $3, %xmm8, %edx 5828 ; AVX1-NEXT: andl $1, %edx 5829 ; AVX1-NEXT: shll $19, %edx 5830 ; AVX1-NEXT: orl %ecx, %edx 5831 ; AVX1-NEXT: vpextrb $4, %xmm8, %ecx 5832 ; AVX1-NEXT: andl $1, %ecx 5833 ; AVX1-NEXT: shll $20, %ecx 5834 ; AVX1-NEXT: orl %edx, %ecx 5835 ; AVX1-NEXT: vpextrb $5, %xmm8, %edx 5836 ; AVX1-NEXT: andl $1, %edx 5837 ; AVX1-NEXT: shll $21, %edx 5838 ; AVX1-NEXT: orl %ecx, %edx 5839 ; AVX1-NEXT: vpextrb $6, %xmm8, %ecx 5840 ; AVX1-NEXT: andl $1, %ecx 5841 ; AVX1-NEXT: shll $22, %ecx 5842 ; AVX1-NEXT: orl %edx, %ecx 5843 ; AVX1-NEXT: vpextrb $7, %xmm8, %edx 5844 ; AVX1-NEXT: andl $1, %edx 5845 ; AVX1-NEXT: shll $23, %edx 5846 ; AVX1-NEXT: orl %ecx, %edx 5847 ; AVX1-NEXT: vpextrb $8, %xmm8, %ecx 5848 ; AVX1-NEXT: andl $1, %ecx 5849 ; AVX1-NEXT: shll $24, %ecx 5850 ; AVX1-NEXT: orl %edx, %ecx 5851 ; AVX1-NEXT: vpextrb $9, %xmm8, %edx 5852 ; AVX1-NEXT: andl $1, %edx 5853 ; AVX1-NEXT: shll $25, %edx 5854 ; AVX1-NEXT: orl %ecx, %edx 5855 ; AVX1-NEXT: vpextrb $10, %xmm8, %ecx 5856 ; AVX1-NEXT: andl $1, %ecx 5857 ; AVX1-NEXT: shll $26, %ecx 5858 ; AVX1-NEXT: orl %edx, %ecx 5859 ; AVX1-NEXT: vpextrb $11, %xmm8, %edx 5860 ; AVX1-NEXT: andl $1, %edx 5861 ; AVX1-NEXT: shll $27, %edx 5862 ; AVX1-NEXT: orl %ecx, %edx 5863 ; AVX1-NEXT: vpextrb $12, %xmm8, %ecx 5864 ; AVX1-NEXT: andl $1, %ecx 5865 ; AVX1-NEXT: shll $28, %ecx 5866 ; AVX1-NEXT: orl %edx, %ecx 5867 ; AVX1-NEXT: vpextrb $13, %xmm8, %edx 5868 ; AVX1-NEXT: andl $1, %edx 5869 ; AVX1-NEXT: shll $29, %edx 5870 ; AVX1-NEXT: orl %ecx, %edx 5871 ; AVX1-NEXT: vpextrb $14, %xmm8, %ecx 5872 ; AVX1-NEXT: andl $1, %ecx 5873 ; AVX1-NEXT: shll $30, %ecx 5874 ; AVX1-NEXT: orl %edx, %ecx 5875 ; AVX1-NEXT: vpextrb $15, %xmm8, %edx 5876 ; AVX1-NEXT: shll $31, %edx 5877 ; AVX1-NEXT: orl %ecx, %edx 5878 ; AVX1-NEXT: orl %eax, %edx 5879 ; AVX1-NEXT: movl %edx, (%rdi) 5880 ; AVX1-NEXT: movq %rdi, %rax 5881 ; AVX1-NEXT: vzeroupper 5882 ; AVX1-NEXT: retq 5883 ; 5884 ; AVX2-LABEL: test_cmp_v128i8: 5885 ; AVX2: # %bb.0: 5886 ; AVX2-NEXT: vpcmpgtb %ymm4, %ymm0, %ymm0 5887 ; AVX2-NEXT: vpcmpgtb %ymm5, %ymm1, %ymm1 5888 ; AVX2-NEXT: vpcmpgtb %ymm6, %ymm2, %ymm2 5889 ; AVX2-NEXT: vpcmpgtb %ymm7, %ymm3, %ymm3 5890 ; AVX2-NEXT: vpextrb $1, %xmm3, %eax 5891 ; AVX2-NEXT: andl $1, %eax 5892 ; AVX2-NEXT: vpextrb $0, %xmm3, %ecx 5893 ; AVX2-NEXT: andl $1, %ecx 5894 ; AVX2-NEXT: leal (%rcx,%rax,2), %eax 5895 ; AVX2-NEXT: vpextrb $2, %xmm3, %ecx 5896 ; AVX2-NEXT: andl $1, %ecx 5897 ; AVX2-NEXT: leal (%rax,%rcx,4), %eax 5898 ; AVX2-NEXT: vpextrb $3, %xmm3, %ecx 5899 ; AVX2-NEXT: andl $1, %ecx 5900 ; AVX2-NEXT: leal (%rax,%rcx,8), %eax 5901 ; AVX2-NEXT: vpextrb $4, %xmm3, %ecx 5902 ; AVX2-NEXT: andl $1, %ecx 5903 ; AVX2-NEXT: shll $4, %ecx 5904 ; AVX2-NEXT: orl %eax, %ecx 5905 ; AVX2-NEXT: vpextrb $5, %xmm3, %eax 5906 ; AVX2-NEXT: andl $1, %eax 5907 ; AVX2-NEXT: shll $5, %eax 5908 ; AVX2-NEXT: orl %ecx, %eax 5909 ; AVX2-NEXT: vpextrb $6, %xmm3, %ecx 5910 ; AVX2-NEXT: andl $1, %ecx 5911 ; AVX2-NEXT: shll $6, %ecx 5912 ; AVX2-NEXT: vpextrb $7, %xmm3, %edx 5913 ; AVX2-NEXT: andl $1, %edx 5914 ; AVX2-NEXT: shll $7, %edx 5915 ; AVX2-NEXT: orl %ecx, %edx 5916 ; AVX2-NEXT: vpextrb $8, %xmm3, %ecx 5917 ; AVX2-NEXT: andl $1, %ecx 5918 ; AVX2-NEXT: shll $8, %ecx 5919 ; AVX2-NEXT: orl %edx, %ecx 5920 ; AVX2-NEXT: vpextrb $9, %xmm3, %edx 5921 ; AVX2-NEXT: andl $1, %edx 5922 ; AVX2-NEXT: shll $9, %edx 5923 ; AVX2-NEXT: orl %ecx, %edx 5924 ; AVX2-NEXT: vpextrb $10, %xmm3, %ecx 5925 ; AVX2-NEXT: andl $1, %ecx 5926 ; AVX2-NEXT: shll $10, %ecx 5927 ; AVX2-NEXT: orl %edx, %ecx 5928 ; AVX2-NEXT: vpextrb $11, %xmm3, %edx 5929 ; AVX2-NEXT: andl $1, %edx 5930 ; AVX2-NEXT: shll $11, %edx 5931 ; AVX2-NEXT: orl %ecx, %edx 5932 ; AVX2-NEXT: vpextrb $12, %xmm3, %ecx 5933 ; AVX2-NEXT: andl $1, %ecx 5934 ; AVX2-NEXT: shll $12, %ecx 5935 ; AVX2-NEXT: orl %edx, %ecx 5936 ; AVX2-NEXT: vpextrb $13, %xmm3, %edx 5937 ; AVX2-NEXT: andl $1, %edx 5938 ; AVX2-NEXT: shll $13, %edx 5939 ; AVX2-NEXT: orl %ecx, %edx 5940 ; AVX2-NEXT: vpextrb $14, %xmm3, %ecx 5941 ; AVX2-NEXT: andl $1, %ecx 5942 ; AVX2-NEXT: shll $14, %ecx 5943 ; AVX2-NEXT: orl %edx, %ecx 5944 ; AVX2-NEXT: vpextrb $15, %xmm3, %edx 5945 ; AVX2-NEXT: andl $1, %edx 5946 ; AVX2-NEXT: shll $15, %edx 5947 ; AVX2-NEXT: orl %ecx, %edx 5948 ; AVX2-NEXT: vextracti128 $1, %ymm3, %xmm3 5949 ; AVX2-NEXT: vpextrb $0, %xmm3, %ecx 5950 ; AVX2-NEXT: andl $1, %ecx 5951 ; AVX2-NEXT: shll $16, %ecx 5952 ; AVX2-NEXT: orl %edx, %ecx 5953 ; AVX2-NEXT: vpextrb $1, %xmm3, %edx 5954 ; AVX2-NEXT: andl $1, %edx 5955 ; AVX2-NEXT: shll $17, %edx 5956 ; AVX2-NEXT: orl %ecx, %edx 5957 ; AVX2-NEXT: vpextrb $2, %xmm3, %ecx 5958 ; AVX2-NEXT: andl $1, %ecx 5959 ; AVX2-NEXT: shll $18, %ecx 5960 ; AVX2-NEXT: orl %edx, %ecx 5961 ; AVX2-NEXT: vpextrb $3, %xmm3, %edx 5962 ; AVX2-NEXT: andl $1, %edx 5963 ; AVX2-NEXT: shll $19, %edx 5964 ; AVX2-NEXT: orl %ecx, %edx 5965 ; AVX2-NEXT: vpextrb $4, %xmm3, %ecx 5966 ; AVX2-NEXT: andl $1, %ecx 5967 ; AVX2-NEXT: shll $20, %ecx 5968 ; AVX2-NEXT: orl %edx, %ecx 5969 ; AVX2-NEXT: vpextrb $5, %xmm3, %edx 5970 ; AVX2-NEXT: andl $1, %edx 5971 ; AVX2-NEXT: shll $21, %edx 5972 ; AVX2-NEXT: orl %ecx, %edx 5973 ; AVX2-NEXT: vpextrb $6, %xmm3, %ecx 5974 ; AVX2-NEXT: andl $1, %ecx 5975 ; AVX2-NEXT: shll $22, %ecx 5976 ; AVX2-NEXT: orl %edx, %ecx 5977 ; AVX2-NEXT: vpextrb $7, %xmm3, %edx 5978 ; AVX2-NEXT: andl $1, %edx 5979 ; AVX2-NEXT: shll $23, %edx 5980 ; AVX2-NEXT: orl %ecx, %edx 5981 ; AVX2-NEXT: vpextrb $8, %xmm3, %ecx 5982 ; AVX2-NEXT: andl $1, %ecx 5983 ; AVX2-NEXT: shll $24, %ecx 5984 ; AVX2-NEXT: orl %edx, %ecx 5985 ; AVX2-NEXT: vpextrb $9, %xmm3, %edx 5986 ; AVX2-NEXT: andl $1, %edx 5987 ; AVX2-NEXT: shll $25, %edx 5988 ; AVX2-NEXT: orl %ecx, %edx 5989 ; AVX2-NEXT: vpextrb $10, %xmm3, %ecx 5990 ; AVX2-NEXT: andl $1, %ecx 5991 ; AVX2-NEXT: shll $26, %ecx 5992 ; AVX2-NEXT: orl %edx, %ecx 5993 ; AVX2-NEXT: vpextrb $11, %xmm3, %edx 5994 ; AVX2-NEXT: andl $1, %edx 5995 ; AVX2-NEXT: shll $27, %edx 5996 ; AVX2-NEXT: orl %ecx, %edx 5997 ; AVX2-NEXT: vpextrb $12, %xmm3, %ecx 5998 ; AVX2-NEXT: andl $1, %ecx 5999 ; AVX2-NEXT: shll $28, %ecx 6000 ; AVX2-NEXT: orl %edx, %ecx 6001 ; AVX2-NEXT: vpextrb $13, %xmm3, %edx 6002 ; AVX2-NEXT: andl $1, %edx 6003 ; AVX2-NEXT: shll $29, %edx 6004 ; AVX2-NEXT: orl %ecx, %edx 6005 ; AVX2-NEXT: vpextrb $14, %xmm3, %ecx 6006 ; AVX2-NEXT: andl $1, %ecx 6007 ; AVX2-NEXT: shll $30, %ecx 6008 ; AVX2-NEXT: orl %edx, %ecx 6009 ; AVX2-NEXT: vpextrb $15, %xmm3, %edx 6010 ; AVX2-NEXT: shll $31, %edx 6011 ; AVX2-NEXT: orl %ecx, %edx 6012 ; AVX2-NEXT: orl %eax, %edx 6013 ; AVX2-NEXT: movl %edx, 12(%rdi) 6014 ; AVX2-NEXT: vpextrb $1, %xmm2, %eax 6015 ; AVX2-NEXT: andl $1, %eax 6016 ; AVX2-NEXT: vpextrb $0, %xmm2, %ecx 6017 ; AVX2-NEXT: andl $1, %ecx 6018 ; AVX2-NEXT: leal (%rcx,%rax,2), %eax 6019 ; AVX2-NEXT: vpextrb $2, %xmm2, %ecx 6020 ; AVX2-NEXT: andl $1, %ecx 6021 ; AVX2-NEXT: leal (%rax,%rcx,4), %eax 6022 ; AVX2-NEXT: vpextrb $3, %xmm2, %ecx 6023 ; AVX2-NEXT: andl $1, %ecx 6024 ; AVX2-NEXT: leal (%rax,%rcx,8), %eax 6025 ; AVX2-NEXT: vpextrb $4, %xmm2, %ecx 6026 ; AVX2-NEXT: andl $1, %ecx 6027 ; AVX2-NEXT: shll $4, %ecx 6028 ; AVX2-NEXT: orl %eax, %ecx 6029 ; AVX2-NEXT: vpextrb $5, %xmm2, %eax 6030 ; AVX2-NEXT: andl $1, %eax 6031 ; AVX2-NEXT: shll $5, %eax 6032 ; AVX2-NEXT: orl %ecx, %eax 6033 ; AVX2-NEXT: vpextrb $6, %xmm2, %ecx 6034 ; AVX2-NEXT: andl $1, %ecx 6035 ; AVX2-NEXT: shll $6, %ecx 6036 ; AVX2-NEXT: vpextrb $7, %xmm2, %edx 6037 ; AVX2-NEXT: andl $1, %edx 6038 ; AVX2-NEXT: shll $7, %edx 6039 ; AVX2-NEXT: orl %ecx, %edx 6040 ; AVX2-NEXT: vpextrb $8, %xmm2, %ecx 6041 ; AVX2-NEXT: andl $1, %ecx 6042 ; AVX2-NEXT: shll $8, %ecx 6043 ; AVX2-NEXT: orl %edx, %ecx 6044 ; AVX2-NEXT: vpextrb $9, %xmm2, %edx 6045 ; AVX2-NEXT: andl $1, %edx 6046 ; AVX2-NEXT: shll $9, %edx 6047 ; AVX2-NEXT: orl %ecx, %edx 6048 ; AVX2-NEXT: vpextrb $10, %xmm2, %ecx 6049 ; AVX2-NEXT: andl $1, %ecx 6050 ; AVX2-NEXT: shll $10, %ecx 6051 ; AVX2-NEXT: orl %edx, %ecx 6052 ; AVX2-NEXT: vpextrb $11, %xmm2, %edx 6053 ; AVX2-NEXT: andl $1, %edx 6054 ; AVX2-NEXT: shll $11, %edx 6055 ; AVX2-NEXT: orl %ecx, %edx 6056 ; AVX2-NEXT: vpextrb $12, %xmm2, %ecx 6057 ; AVX2-NEXT: andl $1, %ecx 6058 ; AVX2-NEXT: shll $12, %ecx 6059 ; AVX2-NEXT: orl %edx, %ecx 6060 ; AVX2-NEXT: vpextrb $13, %xmm2, %edx 6061 ; AVX2-NEXT: andl $1, %edx 6062 ; AVX2-NEXT: shll $13, %edx 6063 ; AVX2-NEXT: orl %ecx, %edx 6064 ; AVX2-NEXT: vpextrb $14, %xmm2, %ecx 6065 ; AVX2-NEXT: andl $1, %ecx 6066 ; AVX2-NEXT: shll $14, %ecx 6067 ; AVX2-NEXT: orl %edx, %ecx 6068 ; AVX2-NEXT: vpextrb $15, %xmm2, %edx 6069 ; AVX2-NEXT: andl $1, %edx 6070 ; AVX2-NEXT: shll $15, %edx 6071 ; AVX2-NEXT: orl %ecx, %edx 6072 ; AVX2-NEXT: vextracti128 $1, %ymm2, %xmm2 6073 ; AVX2-NEXT: vpextrb $0, %xmm2, %ecx 6074 ; AVX2-NEXT: andl $1, %ecx 6075 ; AVX2-NEXT: shll $16, %ecx 6076 ; AVX2-NEXT: orl %edx, %ecx 6077 ; AVX2-NEXT: vpextrb $1, %xmm2, %edx 6078 ; AVX2-NEXT: andl $1, %edx 6079 ; AVX2-NEXT: shll $17, %edx 6080 ; AVX2-NEXT: orl %ecx, %edx 6081 ; AVX2-NEXT: vpextrb $2, %xmm2, %ecx 6082 ; AVX2-NEXT: andl $1, %ecx 6083 ; AVX2-NEXT: shll $18, %ecx 6084 ; AVX2-NEXT: orl %edx, %ecx 6085 ; AVX2-NEXT: vpextrb $3, %xmm2, %edx 6086 ; AVX2-NEXT: andl $1, %edx 6087 ; AVX2-NEXT: shll $19, %edx 6088 ; AVX2-NEXT: orl %ecx, %edx 6089 ; AVX2-NEXT: vpextrb $4, %xmm2, %ecx 6090 ; AVX2-NEXT: andl $1, %ecx 6091 ; AVX2-NEXT: shll $20, %ecx 6092 ; AVX2-NEXT: orl %edx, %ecx 6093 ; AVX2-NEXT: vpextrb $5, %xmm2, %edx 6094 ; AVX2-NEXT: andl $1, %edx 6095 ; AVX2-NEXT: shll $21, %edx 6096 ; AVX2-NEXT: orl %ecx, %edx 6097 ; AVX2-NEXT: vpextrb $6, %xmm2, %ecx 6098 ; AVX2-NEXT: andl $1, %ecx 6099 ; AVX2-NEXT: shll $22, %ecx 6100 ; AVX2-NEXT: orl %edx, %ecx 6101 ; AVX2-NEXT: vpextrb $7, %xmm2, %edx 6102 ; AVX2-NEXT: andl $1, %edx 6103 ; AVX2-NEXT: shll $23, %edx 6104 ; AVX2-NEXT: orl %ecx, %edx 6105 ; AVX2-NEXT: vpextrb $8, %xmm2, %ecx 6106 ; AVX2-NEXT: andl $1, %ecx 6107 ; AVX2-NEXT: shll $24, %ecx 6108 ; AVX2-NEXT: orl %edx, %ecx 6109 ; AVX2-NEXT: vpextrb $9, %xmm2, %edx 6110 ; AVX2-NEXT: andl $1, %edx 6111 ; AVX2-NEXT: shll $25, %edx 6112 ; AVX2-NEXT: orl %ecx, %edx 6113 ; AVX2-NEXT: vpextrb $10, %xmm2, %ecx 6114 ; AVX2-NEXT: andl $1, %ecx 6115 ; AVX2-NEXT: shll $26, %ecx 6116 ; AVX2-NEXT: orl %edx, %ecx 6117 ; AVX2-NEXT: vpextrb $11, %xmm2, %edx 6118 ; AVX2-NEXT: andl $1, %edx 6119 ; AVX2-NEXT: shll $27, %edx 6120 ; AVX2-NEXT: orl %ecx, %edx 6121 ; AVX2-NEXT: vpextrb $12, %xmm2, %ecx 6122 ; AVX2-NEXT: andl $1, %ecx 6123 ; AVX2-NEXT: shll $28, %ecx 6124 ; AVX2-NEXT: orl %edx, %ecx 6125 ; AVX2-NEXT: vpextrb $13, %xmm2, %edx 6126 ; AVX2-NEXT: andl $1, %edx 6127 ; AVX2-NEXT: shll $29, %edx 6128 ; AVX2-NEXT: orl %ecx, %edx 6129 ; AVX2-NEXT: vpextrb $14, %xmm2, %ecx 6130 ; AVX2-NEXT: andl $1, %ecx 6131 ; AVX2-NEXT: shll $30, %ecx 6132 ; AVX2-NEXT: orl %edx, %ecx 6133 ; AVX2-NEXT: vpextrb $15, %xmm2, %edx 6134 ; AVX2-NEXT: shll $31, %edx 6135 ; AVX2-NEXT: orl %ecx, %edx 6136 ; AVX2-NEXT: orl %eax, %edx 6137 ; AVX2-NEXT: movl %edx, 8(%rdi) 6138 ; AVX2-NEXT: vpextrb $1, %xmm1, %eax 6139 ; AVX2-NEXT: andl $1, %eax 6140 ; AVX2-NEXT: vpextrb $0, %xmm1, %ecx 6141 ; AVX2-NEXT: andl $1, %ecx 6142 ; AVX2-NEXT: leal (%rcx,%rax,2), %eax 6143 ; AVX2-NEXT: vpextrb $2, %xmm1, %ecx 6144 ; AVX2-NEXT: andl $1, %ecx 6145 ; AVX2-NEXT: leal (%rax,%rcx,4), %eax 6146 ; AVX2-NEXT: vpextrb $3, %xmm1, %ecx 6147 ; AVX2-NEXT: andl $1, %ecx 6148 ; AVX2-NEXT: leal (%rax,%rcx,8), %eax 6149 ; AVX2-NEXT: vpextrb $4, %xmm1, %ecx 6150 ; AVX2-NEXT: andl $1, %ecx 6151 ; AVX2-NEXT: shll $4, %ecx 6152 ; AVX2-NEXT: orl %eax, %ecx 6153 ; AVX2-NEXT: vpextrb $5, %xmm1, %eax 6154 ; AVX2-NEXT: andl $1, %eax 6155 ; AVX2-NEXT: shll $5, %eax 6156 ; AVX2-NEXT: orl %ecx, %eax 6157 ; AVX2-NEXT: vpextrb $6, %xmm1, %ecx 6158 ; AVX2-NEXT: andl $1, %ecx 6159 ; AVX2-NEXT: shll $6, %ecx 6160 ; AVX2-NEXT: vpextrb $7, %xmm1, %edx 6161 ; AVX2-NEXT: andl $1, %edx 6162 ; AVX2-NEXT: shll $7, %edx 6163 ; AVX2-NEXT: orl %ecx, %edx 6164 ; AVX2-NEXT: vpextrb $8, %xmm1, %ecx 6165 ; AVX2-NEXT: andl $1, %ecx 6166 ; AVX2-NEXT: shll $8, %ecx 6167 ; AVX2-NEXT: orl %edx, %ecx 6168 ; AVX2-NEXT: vpextrb $9, %xmm1, %edx 6169 ; AVX2-NEXT: andl $1, %edx 6170 ; AVX2-NEXT: shll $9, %edx 6171 ; AVX2-NEXT: orl %ecx, %edx 6172 ; AVX2-NEXT: vpextrb $10, %xmm1, %ecx 6173 ; AVX2-NEXT: andl $1, %ecx 6174 ; AVX2-NEXT: shll $10, %ecx 6175 ; AVX2-NEXT: orl %edx, %ecx 6176 ; AVX2-NEXT: vpextrb $11, %xmm1, %edx 6177 ; AVX2-NEXT: andl $1, %edx 6178 ; AVX2-NEXT: shll $11, %edx 6179 ; AVX2-NEXT: orl %ecx, %edx 6180 ; AVX2-NEXT: vpextrb $12, %xmm1, %ecx 6181 ; AVX2-NEXT: andl $1, %ecx 6182 ; AVX2-NEXT: shll $12, %ecx 6183 ; AVX2-NEXT: orl %edx, %ecx 6184 ; AVX2-NEXT: vpextrb $13, %xmm1, %edx 6185 ; AVX2-NEXT: andl $1, %edx 6186 ; AVX2-NEXT: shll $13, %edx 6187 ; AVX2-NEXT: orl %ecx, %edx 6188 ; AVX2-NEXT: vpextrb $14, %xmm1, %ecx 6189 ; AVX2-NEXT: andl $1, %ecx 6190 ; AVX2-NEXT: shll $14, %ecx 6191 ; AVX2-NEXT: orl %edx, %ecx 6192 ; AVX2-NEXT: vpextrb $15, %xmm1, %edx 6193 ; AVX2-NEXT: andl $1, %edx 6194 ; AVX2-NEXT: shll $15, %edx 6195 ; AVX2-NEXT: orl %ecx, %edx 6196 ; AVX2-NEXT: vextracti128 $1, %ymm1, %xmm1 6197 ; AVX2-NEXT: vpextrb $0, %xmm1, %ecx 6198 ; AVX2-NEXT: andl $1, %ecx 6199 ; AVX2-NEXT: shll $16, %ecx 6200 ; AVX2-NEXT: orl %edx, %ecx 6201 ; AVX2-NEXT: vpextrb $1, %xmm1, %edx 6202 ; AVX2-NEXT: andl $1, %edx 6203 ; AVX2-NEXT: shll $17, %edx 6204 ; AVX2-NEXT: orl %ecx, %edx 6205 ; AVX2-NEXT: vpextrb $2, %xmm1, %ecx 6206 ; AVX2-NEXT: andl $1, %ecx 6207 ; AVX2-NEXT: shll $18, %ecx 6208 ; AVX2-NEXT: orl %edx, %ecx 6209 ; AVX2-NEXT: vpextrb $3, %xmm1, %edx 6210 ; AVX2-NEXT: andl $1, %edx 6211 ; AVX2-NEXT: shll $19, %edx 6212 ; AVX2-NEXT: orl %ecx, %edx 6213 ; AVX2-NEXT: vpextrb $4, %xmm1, %ecx 6214 ; AVX2-NEXT: andl $1, %ecx 6215 ; AVX2-NEXT: shll $20, %ecx 6216 ; AVX2-NEXT: orl %edx, %ecx 6217 ; AVX2-NEXT: vpextrb $5, %xmm1, %edx 6218 ; AVX2-NEXT: andl $1, %edx 6219 ; AVX2-NEXT: shll $21, %edx 6220 ; AVX2-NEXT: orl %ecx, %edx 6221 ; AVX2-NEXT: vpextrb $6, %xmm1, %ecx 6222 ; AVX2-NEXT: andl $1, %ecx 6223 ; AVX2-NEXT: shll $22, %ecx 6224 ; AVX2-NEXT: orl %edx, %ecx 6225 ; AVX2-NEXT: vpextrb $7, %xmm1, %edx 6226 ; AVX2-NEXT: andl $1, %edx 6227 ; AVX2-NEXT: shll $23, %edx 6228 ; AVX2-NEXT: orl %ecx, %edx 6229 ; AVX2-NEXT: vpextrb $8, %xmm1, %ecx 6230 ; AVX2-NEXT: andl $1, %ecx 6231 ; AVX2-NEXT: shll $24, %ecx 6232 ; AVX2-NEXT: orl %edx, %ecx 6233 ; AVX2-NEXT: vpextrb $9, %xmm1, %edx 6234 ; AVX2-NEXT: andl $1, %edx 6235 ; AVX2-NEXT: shll $25, %edx 6236 ; AVX2-NEXT: orl %ecx, %edx 6237 ; AVX2-NEXT: vpextrb $10, %xmm1, %ecx 6238 ; AVX2-NEXT: andl $1, %ecx 6239 ; AVX2-NEXT: shll $26, %ecx 6240 ; AVX2-NEXT: orl %edx, %ecx 6241 ; AVX2-NEXT: vpextrb $11, %xmm1, %edx 6242 ; AVX2-NEXT: andl $1, %edx 6243 ; AVX2-NEXT: shll $27, %edx 6244 ; AVX2-NEXT: orl %ecx, %edx 6245 ; AVX2-NEXT: vpextrb $12, %xmm1, %ecx 6246 ; AVX2-NEXT: andl $1, %ecx 6247 ; AVX2-NEXT: shll $28, %ecx 6248 ; AVX2-NEXT: orl %edx, %ecx 6249 ; AVX2-NEXT: vpextrb $13, %xmm1, %edx 6250 ; AVX2-NEXT: andl $1, %edx 6251 ; AVX2-NEXT: shll $29, %edx 6252 ; AVX2-NEXT: orl %ecx, %edx 6253 ; AVX2-NEXT: vpextrb $14, %xmm1, %ecx 6254 ; AVX2-NEXT: andl $1, %ecx 6255 ; AVX2-NEXT: shll $30, %ecx 6256 ; AVX2-NEXT: orl %edx, %ecx 6257 ; AVX2-NEXT: vpextrb $15, %xmm1, %edx 6258 ; AVX2-NEXT: shll $31, %edx 6259 ; AVX2-NEXT: orl %ecx, %edx 6260 ; AVX2-NEXT: orl %eax, %edx 6261 ; AVX2-NEXT: movl %edx, 4(%rdi) 6262 ; AVX2-NEXT: vpextrb $1, %xmm0, %eax 6263 ; AVX2-NEXT: andl $1, %eax 6264 ; AVX2-NEXT: vpextrb $0, %xmm0, %ecx 6265 ; AVX2-NEXT: andl $1, %ecx 6266 ; AVX2-NEXT: leal (%rcx,%rax,2), %eax 6267 ; AVX2-NEXT: vpextrb $2, %xmm0, %ecx 6268 ; AVX2-NEXT: andl $1, %ecx 6269 ; AVX2-NEXT: leal (%rax,%rcx,4), %eax 6270 ; AVX2-NEXT: vpextrb $3, %xmm0, %ecx 6271 ; AVX2-NEXT: andl $1, %ecx 6272 ; AVX2-NEXT: leal (%rax,%rcx,8), %eax 6273 ; AVX2-NEXT: vpextrb $4, %xmm0, %ecx 6274 ; AVX2-NEXT: andl $1, %ecx 6275 ; AVX2-NEXT: shll $4, %ecx 6276 ; AVX2-NEXT: orl %eax, %ecx 6277 ; AVX2-NEXT: vpextrb $5, %xmm0, %eax 6278 ; AVX2-NEXT: andl $1, %eax 6279 ; AVX2-NEXT: shll $5, %eax 6280 ; AVX2-NEXT: orl %ecx, %eax 6281 ; AVX2-NEXT: vpextrb $6, %xmm0, %ecx 6282 ; AVX2-NEXT: andl $1, %ecx 6283 ; AVX2-NEXT: shll $6, %ecx 6284 ; AVX2-NEXT: vpextrb $7, %xmm0, %edx 6285 ; AVX2-NEXT: andl $1, %edx 6286 ; AVX2-NEXT: shll $7, %edx 6287 ; AVX2-NEXT: orl %ecx, %edx 6288 ; AVX2-NEXT: vpextrb $8, %xmm0, %ecx 6289 ; AVX2-NEXT: andl $1, %ecx 6290 ; AVX2-NEXT: shll $8, %ecx 6291 ; AVX2-NEXT: orl %edx, %ecx 6292 ; AVX2-NEXT: vpextrb $9, %xmm0, %edx 6293 ; AVX2-NEXT: andl $1, %edx 6294 ; AVX2-NEXT: shll $9, %edx 6295 ; AVX2-NEXT: orl %ecx, %edx 6296 ; AVX2-NEXT: vpextrb $10, %xmm0, %ecx 6297 ; AVX2-NEXT: andl $1, %ecx 6298 ; AVX2-NEXT: shll $10, %ecx 6299 ; AVX2-NEXT: orl %edx, %ecx 6300 ; AVX2-NEXT: vpextrb $11, %xmm0, %edx 6301 ; AVX2-NEXT: andl $1, %edx 6302 ; AVX2-NEXT: shll $11, %edx 6303 ; AVX2-NEXT: orl %ecx, %edx 6304 ; AVX2-NEXT: vpextrb $12, %xmm0, %ecx 6305 ; AVX2-NEXT: andl $1, %ecx 6306 ; AVX2-NEXT: shll $12, %ecx 6307 ; AVX2-NEXT: orl %edx, %ecx 6308 ; AVX2-NEXT: vpextrb $13, %xmm0, %edx 6309 ; AVX2-NEXT: andl $1, %edx 6310 ; AVX2-NEXT: shll $13, %edx 6311 ; AVX2-NEXT: orl %ecx, %edx 6312 ; AVX2-NEXT: vpextrb $14, %xmm0, %ecx 6313 ; AVX2-NEXT: andl $1, %ecx 6314 ; AVX2-NEXT: shll $14, %ecx 6315 ; AVX2-NEXT: orl %edx, %ecx 6316 ; AVX2-NEXT: vpextrb $15, %xmm0, %edx 6317 ; AVX2-NEXT: andl $1, %edx 6318 ; AVX2-NEXT: shll $15, %edx 6319 ; AVX2-NEXT: orl %ecx, %edx 6320 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm0 6321 ; AVX2-NEXT: vpextrb $0, %xmm0, %ecx 6322 ; AVX2-NEXT: andl $1, %ecx 6323 ; AVX2-NEXT: shll $16, %ecx 6324 ; AVX2-NEXT: orl %edx, %ecx 6325 ; AVX2-NEXT: vpextrb $1, %xmm0, %edx 6326 ; AVX2-NEXT: andl $1, %edx 6327 ; AVX2-NEXT: shll $17, %edx 6328 ; AVX2-NEXT: orl %ecx, %edx 6329 ; AVX2-NEXT: vpextrb $2, %xmm0, %ecx 6330 ; AVX2-NEXT: andl $1, %ecx 6331 ; AVX2-NEXT: shll $18, %ecx 6332 ; AVX2-NEXT: orl %edx, %ecx 6333 ; AVX2-NEXT: vpextrb $3, %xmm0, %edx 6334 ; AVX2-NEXT: andl $1, %edx 6335 ; AVX2-NEXT: shll $19, %edx 6336 ; AVX2-NEXT: orl %ecx, %edx 6337 ; AVX2-NEXT: vpextrb $4, %xmm0, %ecx 6338 ; AVX2-NEXT: andl $1, %ecx 6339 ; AVX2-NEXT: shll $20, %ecx 6340 ; AVX2-NEXT: orl %edx, %ecx 6341 ; AVX2-NEXT: vpextrb $5, %xmm0, %edx 6342 ; AVX2-NEXT: andl $1, %edx 6343 ; AVX2-NEXT: shll $21, %edx 6344 ; AVX2-NEXT: orl %ecx, %edx 6345 ; AVX2-NEXT: vpextrb $6, %xmm0, %ecx 6346 ; AVX2-NEXT: andl $1, %ecx 6347 ; AVX2-NEXT: shll $22, %ecx 6348 ; AVX2-NEXT: orl %edx, %ecx 6349 ; AVX2-NEXT: vpextrb $7, %xmm0, %edx 6350 ; AVX2-NEXT: andl $1, %edx 6351 ; AVX2-NEXT: shll $23, %edx 6352 ; AVX2-NEXT: orl %ecx, %edx 6353 ; AVX2-NEXT: vpextrb $8, %xmm0, %ecx 6354 ; AVX2-NEXT: andl $1, %ecx 6355 ; AVX2-NEXT: shll $24, %ecx 6356 ; AVX2-NEXT: orl %edx, %ecx 6357 ; AVX2-NEXT: vpextrb $9, %xmm0, %edx 6358 ; AVX2-NEXT: andl $1, %edx 6359 ; AVX2-NEXT: shll $25, %edx 6360 ; AVX2-NEXT: orl %ecx, %edx 6361 ; AVX2-NEXT: vpextrb $10, %xmm0, %ecx 6362 ; AVX2-NEXT: andl $1, %ecx 6363 ; AVX2-NEXT: shll $26, %ecx 6364 ; AVX2-NEXT: orl %edx, %ecx 6365 ; AVX2-NEXT: vpextrb $11, %xmm0, %edx 6366 ; AVX2-NEXT: andl $1, %edx 6367 ; AVX2-NEXT: shll $27, %edx 6368 ; AVX2-NEXT: orl %ecx, %edx 6369 ; AVX2-NEXT: vpextrb $12, %xmm0, %ecx 6370 ; AVX2-NEXT: andl $1, %ecx 6371 ; AVX2-NEXT: shll $28, %ecx 6372 ; AVX2-NEXT: orl %edx, %ecx 6373 ; AVX2-NEXT: vpextrb $13, %xmm0, %edx 6374 ; AVX2-NEXT: andl $1, %edx 6375 ; AVX2-NEXT: shll $29, %edx 6376 ; AVX2-NEXT: orl %ecx, %edx 6377 ; AVX2-NEXT: vpextrb $14, %xmm0, %ecx 6378 ; AVX2-NEXT: andl $1, %ecx 6379 ; AVX2-NEXT: shll $30, %ecx 6380 ; AVX2-NEXT: orl %edx, %ecx 6381 ; AVX2-NEXT: vpextrb $15, %xmm0, %edx 6382 ; AVX2-NEXT: shll $31, %edx 6383 ; AVX2-NEXT: orl %ecx, %edx 6384 ; AVX2-NEXT: orl %eax, %edx 6385 ; AVX2-NEXT: movl %edx, (%rdi) 6386 ; AVX2-NEXT: movq %rdi, %rax 6387 ; AVX2-NEXT: vzeroupper 6388 ; AVX2-NEXT: retq 6389 ; 6390 ; AVX512F-LABEL: test_cmp_v128i8: 6391 ; AVX512F: # %bb.0: 6392 ; AVX512F-NEXT: vpcmpgtb %ymm4, %ymm0, %ymm0 6393 ; AVX512F-NEXT: vpmovsxbd %xmm0, %zmm4 6394 ; AVX512F-NEXT: vptestmd %zmm4, %zmm4, %k0 6395 ; AVX512F-NEXT: vextracti128 $1, %ymm0, %xmm0 6396 ; AVX512F-NEXT: vpmovsxbd %xmm0, %zmm0 6397 ; AVX512F-NEXT: vptestmd %zmm0, %zmm0, %k1 6398 ; AVX512F-NEXT: vpcmpgtb %ymm5, %ymm1, %ymm0 6399 ; AVX512F-NEXT: vpmovsxbd %xmm0, %zmm1 6400 ; AVX512F-NEXT: vptestmd %zmm1, %zmm1, %k2 6401 ; AVX512F-NEXT: vextracti128 $1, %ymm0, %xmm0 6402 ; AVX512F-NEXT: vpmovsxbd %xmm0, %zmm0 6403 ; AVX512F-NEXT: vptestmd %zmm0, %zmm0, %k3 6404 ; AVX512F-NEXT: vpcmpgtb %ymm6, %ymm2, %ymm0 6405 ; AVX512F-NEXT: vpmovsxbd %xmm0, %zmm1 6406 ; AVX512F-NEXT: vptestmd %zmm1, %zmm1, %k4 6407 ; AVX512F-NEXT: vextracti128 $1, %ymm0, %xmm0 6408 ; AVX512F-NEXT: vpmovsxbd %xmm0, %zmm0 6409 ; AVX512F-NEXT: vptestmd %zmm0, %zmm0, %k5 6410 ; AVX512F-NEXT: vpcmpgtb %ymm7, %ymm3, %ymm0 6411 ; AVX512F-NEXT: vpmovsxbd %xmm0, %zmm1 6412 ; AVX512F-NEXT: vptestmd %zmm1, %zmm1, %k6 6413 ; AVX512F-NEXT: vextracti128 $1, %ymm0, %xmm0 6414 ; AVX512F-NEXT: vpmovsxbd %xmm0, %zmm0 6415 ; AVX512F-NEXT: vptestmd %zmm0, %zmm0, %k7 6416 ; AVX512F-NEXT: kmovw %k7, 14(%rdi) 6417 ; AVX512F-NEXT: kmovw %k6, 12(%rdi) 6418 ; AVX512F-NEXT: kmovw %k5, 10(%rdi) 6419 ; AVX512F-NEXT: kmovw %k4, 8(%rdi) 6420 ; AVX512F-NEXT: kmovw %k3, 6(%rdi) 6421 ; AVX512F-NEXT: kmovw %k2, 4(%rdi) 6422 ; AVX512F-NEXT: kmovw %k1, 2(%rdi) 6423 ; AVX512F-NEXT: kmovw %k0, (%rdi) 6424 ; AVX512F-NEXT: movq %rdi, %rax 6425 ; AVX512F-NEXT: vzeroupper 6426 ; AVX512F-NEXT: retq 6427 ; 6428 ; AVX512DQ-LABEL: test_cmp_v128i8: 6429 ; AVX512DQ: # %bb.0: 6430 ; AVX512DQ-NEXT: vpcmpgtb %ymm4, %ymm0, %ymm0 6431 ; AVX512DQ-NEXT: vpmovsxbd %xmm0, %zmm4 6432 ; AVX512DQ-NEXT: vpmovd2m %zmm4, %k0 6433 ; AVX512DQ-NEXT: vextracti128 $1, %ymm0, %xmm0 6434 ; AVX512DQ-NEXT: vpmovsxbd %xmm0, %zmm0 6435 ; AVX512DQ-NEXT: vpmovd2m %zmm0, %k1 6436 ; AVX512DQ-NEXT: vpcmpgtb %ymm5, %ymm1, %ymm0 6437 ; AVX512DQ-NEXT: vpmovsxbd %xmm0, %zmm1 6438 ; AVX512DQ-NEXT: vpmovd2m %zmm1, %k2 6439 ; AVX512DQ-NEXT: vextracti128 $1, %ymm0, %xmm0 6440 ; AVX512DQ-NEXT: vpmovsxbd %xmm0, %zmm0 6441 ; AVX512DQ-NEXT: vpmovd2m %zmm0, %k3 6442 ; AVX512DQ-NEXT: vpcmpgtb %ymm6, %ymm2, %ymm0 6443 ; AVX512DQ-NEXT: vpmovsxbd %xmm0, %zmm1 6444 ; AVX512DQ-NEXT: vpmovd2m %zmm1, %k4 6445 ; AVX512DQ-NEXT: vextracti128 $1, %ymm0, %xmm0 6446 ; AVX512DQ-NEXT: vpmovsxbd %xmm0, %zmm0 6447 ; AVX512DQ-NEXT: vpmovd2m %zmm0, %k5 6448 ; AVX512DQ-NEXT: vpcmpgtb %ymm7, %ymm3, %ymm0 6449 ; AVX512DQ-NEXT: vpmovsxbd %xmm0, %zmm1 6450 ; AVX512DQ-NEXT: vpmovd2m %zmm1, %k6 6451 ; AVX512DQ-NEXT: vextracti128 $1, %ymm0, %xmm0 6452 ; AVX512DQ-NEXT: vpmovsxbd %xmm0, %zmm0 6453 ; AVX512DQ-NEXT: vpmovd2m %zmm0, %k7 6454 ; AVX512DQ-NEXT: kmovw %k7, 14(%rdi) 6455 ; AVX512DQ-NEXT: kmovw %k6, 12(%rdi) 6456 ; AVX512DQ-NEXT: kmovw %k5, 10(%rdi) 6457 ; AVX512DQ-NEXT: kmovw %k4, 8(%rdi) 6458 ; AVX512DQ-NEXT: kmovw %k3, 6(%rdi) 6459 ; AVX512DQ-NEXT: kmovw %k2, 4(%rdi) 6460 ; AVX512DQ-NEXT: kmovw %k1, 2(%rdi) 6461 ; AVX512DQ-NEXT: kmovw %k0, (%rdi) 6462 ; AVX512DQ-NEXT: movq %rdi, %rax 6463 ; AVX512DQ-NEXT: vzeroupper 6464 ; AVX512DQ-NEXT: retq 6465 ; 6466 ; AVX512BW-LABEL: test_cmp_v128i8: 6467 ; AVX512BW: # %bb.0: 6468 ; AVX512BW-NEXT: vpcmpgtb %zmm3, %zmm1, %k0 6469 ; AVX512BW-NEXT: vpcmpgtb %zmm2, %zmm0, %k1 6470 ; AVX512BW-NEXT: vpmovm2b %k1, %zmm0 6471 ; AVX512BW-NEXT: vpmovm2b %k0, %zmm1 6472 ; AVX512BW-NEXT: retq 6473 %1 = icmp sgt <128 x i8> %a0, %a1 6474 ret <128 x i1> %1 6475 } 6476 6477 ; 6478 ; 2048-bit vector comparisons 6479 ; 6480 6481 define <32 x i1> @test_cmp_v32f64(<32 x double> %a0, <32 x double> %a1) nounwind { 6482 ; SSE2-LABEL: test_cmp_v32f64: 6483 ; SSE2: # %bb.0: 6484 ; SSE2-NEXT: movapd {{[0-9]+}}(%rsp), %xmm8 6485 ; SSE2-NEXT: cmpltpd %xmm1, %xmm8 6486 ; SSE2-NEXT: movapd {{[0-9]+}}(%rsp), %xmm1 6487 ; SSE2-NEXT: cmpltpd %xmm0, %xmm1 6488 ; SSE2-NEXT: movapd {{.*#+}} xmm9 = [255,255] 6489 ; SSE2-NEXT: andpd %xmm9, %xmm8 6490 ; SSE2-NEXT: andpd %xmm9, %xmm1 6491 ; SSE2-NEXT: packuswb %xmm8, %xmm1 6492 ; SSE2-NEXT: movapd {{[0-9]+}}(%rsp), %xmm0 6493 ; SSE2-NEXT: cmpltpd %xmm3, %xmm0 6494 ; SSE2-NEXT: movapd {{[0-9]+}}(%rsp), %xmm3 6495 ; SSE2-NEXT: cmpltpd %xmm2, %xmm3 6496 ; SSE2-NEXT: andpd %xmm9, %xmm0 6497 ; SSE2-NEXT: andpd %xmm9, %xmm3 6498 ; SSE2-NEXT: packuswb %xmm0, %xmm3 6499 ; SSE2-NEXT: packuswb %xmm1, %xmm1 6500 ; SSE2-NEXT: packuswb %xmm1, %xmm1 6501 ; SSE2-NEXT: packuswb %xmm3, %xmm3 6502 ; SSE2-NEXT: packuswb %xmm3, %xmm3 6503 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm3[1,1,2,3] 6504 ; SSE2-NEXT: punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1] 6505 ; SSE2-NEXT: movapd {{[0-9]+}}(%rsp), %xmm0 6506 ; SSE2-NEXT: cmpltpd %xmm7, %xmm0 6507 ; SSE2-NEXT: movapd {{[0-9]+}}(%rsp), %xmm3 6508 ; SSE2-NEXT: cmpltpd %xmm6, %xmm3 6509 ; SSE2-NEXT: andpd %xmm9, %xmm0 6510 ; SSE2-NEXT: andpd %xmm9, %xmm3 6511 ; SSE2-NEXT: packuswb %xmm0, %xmm3 6512 ; SSE2-NEXT: movapd {{[0-9]+}}(%rsp), %xmm0 6513 ; SSE2-NEXT: cmpltpd %xmm5, %xmm0 6514 ; SSE2-NEXT: movapd {{[0-9]+}}(%rsp), %xmm6 6515 ; SSE2-NEXT: cmpltpd %xmm4, %xmm6 6516 ; SSE2-NEXT: movapd {{[0-9]+}}(%rsp), %xmm2 6517 ; SSE2-NEXT: andpd %xmm9, %xmm0 6518 ; SSE2-NEXT: andpd %xmm9, %xmm6 6519 ; SSE2-NEXT: packuswb %xmm0, %xmm6 6520 ; SSE2-NEXT: movapd {{[0-9]+}}(%rsp), %xmm5 6521 ; SSE2-NEXT: packuswb %xmm3, %xmm3 6522 ; SSE2-NEXT: packuswb %xmm3, %xmm3 6523 ; SSE2-NEXT: packuswb %xmm6, %xmm6 6524 ; SSE2-NEXT: packuswb %xmm6, %xmm6 6525 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm6[0,1,2,2] 6526 ; SSE2-NEXT: punpckhdq {{.*#+}} xmm4 = xmm4[2],xmm3[2],xmm4[3],xmm3[3] 6527 ; SSE2-NEXT: movapd {{[0-9]+}}(%rsp), %xmm3 6528 ; SSE2-NEXT: movsd {{.*#+}} xmm4 = xmm1[0],xmm4[1] 6529 ; SSE2-NEXT: movapd {{[0-9]+}}(%rsp), %xmm0 6530 ; SSE2-NEXT: cmpltpd {{[0-9]+}}(%rsp), %xmm0 6531 ; SSE2-NEXT: andpd %xmm9, %xmm0 6532 ; SSE2-NEXT: cmpltpd {{[0-9]+}}(%rsp), %xmm3 6533 ; SSE2-NEXT: andpd %xmm9, %xmm3 6534 ; SSE2-NEXT: packuswb %xmm0, %xmm3 6535 ; SSE2-NEXT: movapd {{[0-9]+}}(%rsp), %xmm0 6536 ; SSE2-NEXT: cmpltpd {{[0-9]+}}(%rsp), %xmm0 6537 ; SSE2-NEXT: andpd %xmm9, %xmm0 6538 ; SSE2-NEXT: cmpltpd {{[0-9]+}}(%rsp), %xmm5 6539 ; SSE2-NEXT: andpd %xmm9, %xmm5 6540 ; SSE2-NEXT: packuswb %xmm0, %xmm5 6541 ; SSE2-NEXT: movapd {{[0-9]+}}(%rsp), %xmm1 6542 ; SSE2-NEXT: packuswb %xmm3, %xmm3 6543 ; SSE2-NEXT: packuswb %xmm3, %xmm3 6544 ; SSE2-NEXT: packuswb %xmm5, %xmm5 6545 ; SSE2-NEXT: packuswb %xmm5, %xmm5 6546 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm5[1,1,2,3] 6547 ; SSE2-NEXT: punpckldq {{.*#+}} xmm3 = xmm3[0],xmm0[0],xmm3[1],xmm0[1] 6548 ; SSE2-NEXT: movapd {{[0-9]+}}(%rsp), %xmm0 6549 ; SSE2-NEXT: cmpltpd {{[0-9]+}}(%rsp), %xmm0 6550 ; SSE2-NEXT: andpd %xmm9, %xmm0 6551 ; SSE2-NEXT: cmpltpd {{[0-9]+}}(%rsp), %xmm1 6552 ; SSE2-NEXT: andpd %xmm9, %xmm1 6553 ; SSE2-NEXT: packuswb %xmm0, %xmm1 6554 ; SSE2-NEXT: movapd {{[0-9]+}}(%rsp), %xmm0 6555 ; SSE2-NEXT: cmpltpd {{[0-9]+}}(%rsp), %xmm0 6556 ; SSE2-NEXT: andpd %xmm9, %xmm0 6557 ; SSE2-NEXT: cmpltpd {{[0-9]+}}(%rsp), %xmm2 6558 ; SSE2-NEXT: andpd %xmm9, %xmm2 6559 ; SSE2-NEXT: packuswb %xmm0, %xmm2 6560 ; SSE2-NEXT: packuswb %xmm1, %xmm1 6561 ; SSE2-NEXT: packuswb %xmm1, %xmm1 6562 ; SSE2-NEXT: packuswb %xmm2, %xmm2 6563 ; SSE2-NEXT: packuswb %xmm2, %xmm2 6564 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm2[0,1,2,2] 6565 ; SSE2-NEXT: punpckhdq {{.*#+}} xmm0 = xmm0[2],xmm1[2],xmm0[3],xmm1[3] 6566 ; SSE2-NEXT: movsd {{.*#+}} xmm0 = xmm3[0],xmm0[1] 6567 ; SSE2-NEXT: movapd %xmm0, -{{[0-9]+}}(%rsp) 6568 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax 6569 ; SSE2-NEXT: andl $1, %eax 6570 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 6571 ; SSE2-NEXT: andl $1, %ecx 6572 ; SSE2-NEXT: leal (%rcx,%rax,2), %eax 6573 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 6574 ; SSE2-NEXT: andl $1, %ecx 6575 ; SSE2-NEXT: leal (%rax,%rcx,4), %eax 6576 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 6577 ; SSE2-NEXT: andl $1, %ecx 6578 ; SSE2-NEXT: leal (%rax,%rcx,8), %eax 6579 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 6580 ; SSE2-NEXT: andl $1, %ecx 6581 ; SSE2-NEXT: shll $4, %ecx 6582 ; SSE2-NEXT: orl %eax, %ecx 6583 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax 6584 ; SSE2-NEXT: andl $1, %eax 6585 ; SSE2-NEXT: shll $5, %eax 6586 ; SSE2-NEXT: orl %ecx, %eax 6587 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 6588 ; SSE2-NEXT: andl $1, %ecx 6589 ; SSE2-NEXT: shll $6, %ecx 6590 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 6591 ; SSE2-NEXT: andl $1, %edx 6592 ; SSE2-NEXT: shll $7, %edx 6593 ; SSE2-NEXT: orl %ecx, %edx 6594 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 6595 ; SSE2-NEXT: andl $1, %ecx 6596 ; SSE2-NEXT: shll $8, %ecx 6597 ; SSE2-NEXT: orl %edx, %ecx 6598 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 6599 ; SSE2-NEXT: andl $1, %edx 6600 ; SSE2-NEXT: shll $9, %edx 6601 ; SSE2-NEXT: orl %ecx, %edx 6602 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 6603 ; SSE2-NEXT: andl $1, %ecx 6604 ; SSE2-NEXT: shll $10, %ecx 6605 ; SSE2-NEXT: orl %edx, %ecx 6606 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 6607 ; SSE2-NEXT: andl $1, %edx 6608 ; SSE2-NEXT: shll $11, %edx 6609 ; SSE2-NEXT: orl %ecx, %edx 6610 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 6611 ; SSE2-NEXT: andl $1, %ecx 6612 ; SSE2-NEXT: shll $12, %ecx 6613 ; SSE2-NEXT: orl %edx, %ecx 6614 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 6615 ; SSE2-NEXT: andl $1, %edx 6616 ; SSE2-NEXT: shll $13, %edx 6617 ; SSE2-NEXT: orl %ecx, %edx 6618 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 6619 ; SSE2-NEXT: andl $1, %ecx 6620 ; SSE2-NEXT: shll $14, %ecx 6621 ; SSE2-NEXT: orl %edx, %ecx 6622 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 6623 ; SSE2-NEXT: shll $15, %edx 6624 ; SSE2-NEXT: orl %ecx, %edx 6625 ; SSE2-NEXT: orl %eax, %edx 6626 ; SSE2-NEXT: movw %dx, 2(%rdi) 6627 ; SSE2-NEXT: movapd %xmm4, -{{[0-9]+}}(%rsp) 6628 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax 6629 ; SSE2-NEXT: andl $1, %eax 6630 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 6631 ; SSE2-NEXT: andl $1, %ecx 6632 ; SSE2-NEXT: leal (%rcx,%rax,2), %eax 6633 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 6634 ; SSE2-NEXT: andl $1, %ecx 6635 ; SSE2-NEXT: leal (%rax,%rcx,4), %eax 6636 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 6637 ; SSE2-NEXT: andl $1, %ecx 6638 ; SSE2-NEXT: leal (%rax,%rcx,8), %eax 6639 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 6640 ; SSE2-NEXT: andl $1, %ecx 6641 ; SSE2-NEXT: shll $4, %ecx 6642 ; SSE2-NEXT: orl %eax, %ecx 6643 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax 6644 ; SSE2-NEXT: andl $1, %eax 6645 ; SSE2-NEXT: shll $5, %eax 6646 ; SSE2-NEXT: orl %ecx, %eax 6647 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 6648 ; SSE2-NEXT: andl $1, %ecx 6649 ; SSE2-NEXT: shll $6, %ecx 6650 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 6651 ; SSE2-NEXT: andl $1, %edx 6652 ; SSE2-NEXT: shll $7, %edx 6653 ; SSE2-NEXT: orl %ecx, %edx 6654 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 6655 ; SSE2-NEXT: andl $1, %ecx 6656 ; SSE2-NEXT: shll $8, %ecx 6657 ; SSE2-NEXT: orl %edx, %ecx 6658 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 6659 ; SSE2-NEXT: andl $1, %edx 6660 ; SSE2-NEXT: shll $9, %edx 6661 ; SSE2-NEXT: orl %ecx, %edx 6662 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 6663 ; SSE2-NEXT: andl $1, %ecx 6664 ; SSE2-NEXT: shll $10, %ecx 6665 ; SSE2-NEXT: orl %edx, %ecx 6666 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 6667 ; SSE2-NEXT: andl $1, %edx 6668 ; SSE2-NEXT: shll $11, %edx 6669 ; SSE2-NEXT: orl %ecx, %edx 6670 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 6671 ; SSE2-NEXT: andl $1, %ecx 6672 ; SSE2-NEXT: shll $12, %ecx 6673 ; SSE2-NEXT: orl %edx, %ecx 6674 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 6675 ; SSE2-NEXT: andl $1, %edx 6676 ; SSE2-NEXT: shll $13, %edx 6677 ; SSE2-NEXT: orl %ecx, %edx 6678 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 6679 ; SSE2-NEXT: andl $1, %ecx 6680 ; SSE2-NEXT: shll $14, %ecx 6681 ; SSE2-NEXT: orl %edx, %ecx 6682 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 6683 ; SSE2-NEXT: shll $15, %edx 6684 ; SSE2-NEXT: orl %ecx, %edx 6685 ; SSE2-NEXT: orl %eax, %edx 6686 ; SSE2-NEXT: movw %dx, (%rdi) 6687 ; SSE2-NEXT: movq %rdi, %rax 6688 ; SSE2-NEXT: retq 6689 ; 6690 ; SSE42-LABEL: test_cmp_v32f64: 6691 ; SSE42: # %bb.0: 6692 ; SSE42-NEXT: pushq %rbp 6693 ; SSE42-NEXT: pushq %r15 6694 ; SSE42-NEXT: pushq %r14 6695 ; SSE42-NEXT: pushq %r13 6696 ; SSE42-NEXT: pushq %r12 6697 ; SSE42-NEXT: pushq %rbx 6698 ; SSE42-NEXT: movq %rdi, -{{[0-9]+}}(%rsp) # 8-byte Spill 6699 ; SSE42-NEXT: movapd {{[0-9]+}}(%rsp), %xmm8 6700 ; SSE42-NEXT: cmpltpd %xmm7, %xmm8 6701 ; SSE42-NEXT: movapd {{[0-9]+}}(%rsp), %xmm7 6702 ; SSE42-NEXT: cmpltpd %xmm6, %xmm7 6703 ; SSE42-NEXT: movapd {{[0-9]+}}(%rsp), %xmm6 6704 ; SSE42-NEXT: cmpltpd %xmm5, %xmm6 6705 ; SSE42-NEXT: movapd {{[0-9]+}}(%rsp), %xmm5 6706 ; SSE42-NEXT: cmpltpd %xmm4, %xmm5 6707 ; SSE42-NEXT: movapd {{[0-9]+}}(%rsp), %xmm4 6708 ; SSE42-NEXT: cmpltpd %xmm3, %xmm4 6709 ; SSE42-NEXT: movapd {{[0-9]+}}(%rsp), %xmm3 6710 ; SSE42-NEXT: cmpltpd %xmm2, %xmm3 6711 ; SSE42-NEXT: movapd {{[0-9]+}}(%rsp), %xmm2 6712 ; SSE42-NEXT: cmpltpd %xmm1, %xmm2 6713 ; SSE42-NEXT: movapd {{[0-9]+}}(%rsp), %xmm1 6714 ; SSE42-NEXT: cmpltpd %xmm0, %xmm1 6715 ; SSE42-NEXT: movapd {{[0-9]+}}(%rsp), %xmm0 6716 ; SSE42-NEXT: cmpltpd {{[0-9]+}}(%rsp), %xmm0 6717 ; SSE42-NEXT: pextrb $8, %xmm0, %r8d 6718 ; SSE42-NEXT: pextrb $0, %xmm0, %r10d 6719 ; SSE42-NEXT: movapd {{[0-9]+}}(%rsp), %xmm0 6720 ; SSE42-NEXT: cmpltpd {{[0-9]+}}(%rsp), %xmm0 6721 ; SSE42-NEXT: pextrb $0, %xmm0, %ebp 6722 ; SSE42-NEXT: pextrb $8, %xmm0, %edi 6723 ; SSE42-NEXT: movapd {{[0-9]+}}(%rsp), %xmm0 6724 ; SSE42-NEXT: cmpltpd {{[0-9]+}}(%rsp), %xmm0 6725 ; SSE42-NEXT: pextrb $0, %xmm0, %r15d 6726 ; SSE42-NEXT: pextrb $8, %xmm0, %r11d 6727 ; SSE42-NEXT: movapd {{[0-9]+}}(%rsp), %xmm0 6728 ; SSE42-NEXT: cmpltpd {{[0-9]+}}(%rsp), %xmm0 6729 ; SSE42-NEXT: pextrb $0, %xmm0, %r14d 6730 ; SSE42-NEXT: pextrb $8, %xmm0, %r9d 6731 ; SSE42-NEXT: movapd {{[0-9]+}}(%rsp), %xmm0 6732 ; SSE42-NEXT: cmpltpd {{[0-9]+}}(%rsp), %xmm0 6733 ; SSE42-NEXT: pextrb $0, %xmm0, %esi 6734 ; SSE42-NEXT: pextrb $8, %xmm0, %r12d 6735 ; SSE42-NEXT: movapd {{[0-9]+}}(%rsp), %xmm0 6736 ; SSE42-NEXT: cmpltpd {{[0-9]+}}(%rsp), %xmm0 6737 ; SSE42-NEXT: pextrb $0, %xmm0, %edx 6738 ; SSE42-NEXT: pextrb $8, %xmm0, %ebx 6739 ; SSE42-NEXT: movapd {{[0-9]+}}(%rsp), %xmm0 6740 ; SSE42-NEXT: cmpltpd {{[0-9]+}}(%rsp), %xmm0 6741 ; SSE42-NEXT: pextrb $0, %xmm0, %eax 6742 ; SSE42-NEXT: pextrb $8, %xmm0, %r13d 6743 ; SSE42-NEXT: movapd {{[0-9]+}}(%rsp), %xmm0 6744 ; SSE42-NEXT: cmpltpd {{[0-9]+}}(%rsp), %xmm0 6745 ; SSE42-NEXT: andl $1, %r8d 6746 ; SSE42-NEXT: andl $1, %r10d 6747 ; SSE42-NEXT: leal (%r10,%r8,2), %ecx 6748 ; SSE42-NEXT: andl $1, %ebp 6749 ; SSE42-NEXT: leal (%rcx,%rbp,4), %r8d 6750 ; SSE42-NEXT: pextrb $0, %xmm0, %ecx 6751 ; SSE42-NEXT: pextrb $8, %xmm0, %ebp 6752 ; SSE42-NEXT: andl $1, %edi 6753 ; SSE42-NEXT: leal (%r8,%rdi,8), %r8d 6754 ; SSE42-NEXT: andl $1, %r15d 6755 ; SSE42-NEXT: shll $4, %r15d 6756 ; SSE42-NEXT: orl %r8d, %r15d 6757 ; SSE42-NEXT: pextrb $8, %xmm1, %edi 6758 ; SSE42-NEXT: movq %rdi, -{{[0-9]+}}(%rsp) # 8-byte Spill 6759 ; SSE42-NEXT: pextrb $0, %xmm1, %r10d 6760 ; SSE42-NEXT: andl $1, %r11d 6761 ; SSE42-NEXT: shll $5, %r11d 6762 ; SSE42-NEXT: orl %r15d, %r11d 6763 ; SSE42-NEXT: andl $1, %r14d 6764 ; SSE42-NEXT: shll $6, %r14d 6765 ; SSE42-NEXT: andl $1, %r9d 6766 ; SSE42-NEXT: shll $7, %r9d 6767 ; SSE42-NEXT: orl %r14d, %r9d 6768 ; SSE42-NEXT: pextrb $0, %xmm2, %r14d 6769 ; SSE42-NEXT: pextrb $8, %xmm2, %edi 6770 ; SSE42-NEXT: movq %rdi, -{{[0-9]+}}(%rsp) # 8-byte Spill 6771 ; SSE42-NEXT: andl $1, %esi 6772 ; SSE42-NEXT: shll $8, %esi 6773 ; SSE42-NEXT: orl %r9d, %esi 6774 ; SSE42-NEXT: andl $1, %r12d 6775 ; SSE42-NEXT: shll $9, %r12d 6776 ; SSE42-NEXT: orl %esi, %r12d 6777 ; SSE42-NEXT: pextrb $0, %xmm3, %r8d 6778 ; SSE42-NEXT: pextrb $8, %xmm3, %r15d 6779 ; SSE42-NEXT: andl $1, %edx 6780 ; SSE42-NEXT: shll $10, %edx 6781 ; SSE42-NEXT: orl %r12d, %edx 6782 ; SSE42-NEXT: andl $1, %ebx 6783 ; SSE42-NEXT: shll $11, %ebx 6784 ; SSE42-NEXT: orl %edx, %ebx 6785 ; SSE42-NEXT: pextrb $0, %xmm4, %r12d 6786 ; SSE42-NEXT: pextrb $8, %xmm4, %edi 6787 ; SSE42-NEXT: andl $1, %eax 6788 ; SSE42-NEXT: shll $12, %eax 6789 ; SSE42-NEXT: orl %ebx, %eax 6790 ; SSE42-NEXT: andl $1, %r13d 6791 ; SSE42-NEXT: shll $13, %r13d 6792 ; SSE42-NEXT: orl %eax, %r13d 6793 ; SSE42-NEXT: pextrb $0, %xmm5, %eax 6794 ; SSE42-NEXT: pextrb $8, %xmm5, %ebx 6795 ; SSE42-NEXT: andl $1, %ecx 6796 ; SSE42-NEXT: shll $14, %ecx 6797 ; SSE42-NEXT: orl %r13d, %ecx 6798 ; SSE42-NEXT: shll $15, %ebp 6799 ; SSE42-NEXT: orl %ecx, %ebp 6800 ; SSE42-NEXT: pextrb $0, %xmm6, %r13d 6801 ; SSE42-NEXT: pextrb $8, %xmm6, %edx 6802 ; SSE42-NEXT: orl %r11d, %ebp 6803 ; SSE42-NEXT: movq -{{[0-9]+}}(%rsp), %r9 # 8-byte Reload 6804 ; SSE42-NEXT: movw %bp, 2(%r9) 6805 ; SSE42-NEXT: pextrb $0, %xmm7, %r11d 6806 ; SSE42-NEXT: pextrb $8, %xmm7, %ecx 6807 ; SSE42-NEXT: movq -{{[0-9]+}}(%rsp), %rsi # 8-byte Reload 6808 ; SSE42-NEXT: andl $1, %esi 6809 ; SSE42-NEXT: andl $1, %r10d 6810 ; SSE42-NEXT: leal (%r10,%rsi,2), %esi 6811 ; SSE42-NEXT: andl $1, %r14d 6812 ; SSE42-NEXT: leal (%rsi,%r14,4), %r14d 6813 ; SSE42-NEXT: pextrb $0, %xmm8, %r10d 6814 ; SSE42-NEXT: pextrb $8, %xmm8, %ebp 6815 ; SSE42-NEXT: movq -{{[0-9]+}}(%rsp), %rsi # 8-byte Reload 6816 ; SSE42-NEXT: andl $1, %esi 6817 ; SSE42-NEXT: leal (%r14,%rsi,8), %esi 6818 ; SSE42-NEXT: andl $1, %r8d 6819 ; SSE42-NEXT: shll $4, %r8d 6820 ; SSE42-NEXT: orl %esi, %r8d 6821 ; SSE42-NEXT: andl $1, %r15d 6822 ; SSE42-NEXT: shll $5, %r15d 6823 ; SSE42-NEXT: orl %r8d, %r15d 6824 ; SSE42-NEXT: andl $1, %r12d 6825 ; SSE42-NEXT: shll $6, %r12d 6826 ; SSE42-NEXT: andl $1, %edi 6827 ; SSE42-NEXT: shll $7, %edi 6828 ; SSE42-NEXT: orl %r12d, %edi 6829 ; SSE42-NEXT: andl $1, %eax 6830 ; SSE42-NEXT: shll $8, %eax 6831 ; SSE42-NEXT: orl %edi, %eax 6832 ; SSE42-NEXT: andl $1, %ebx 6833 ; SSE42-NEXT: shll $9, %ebx 6834 ; SSE42-NEXT: orl %eax, %ebx 6835 ; SSE42-NEXT: andl $1, %r13d 6836 ; SSE42-NEXT: shll $10, %r13d 6837 ; SSE42-NEXT: orl %ebx, %r13d 6838 ; SSE42-NEXT: andl $1, %edx 6839 ; SSE42-NEXT: shll $11, %edx 6840 ; SSE42-NEXT: orl %r13d, %edx 6841 ; SSE42-NEXT: andl $1, %r11d 6842 ; SSE42-NEXT: shll $12, %r11d 6843 ; SSE42-NEXT: orl %edx, %r11d 6844 ; SSE42-NEXT: andl $1, %ecx 6845 ; SSE42-NEXT: shll $13, %ecx 6846 ; SSE42-NEXT: orl %r11d, %ecx 6847 ; SSE42-NEXT: andl $1, %r10d 6848 ; SSE42-NEXT: shll $14, %r10d 6849 ; SSE42-NEXT: orl %ecx, %r10d 6850 ; SSE42-NEXT: shll $15, %ebp 6851 ; SSE42-NEXT: orl %r10d, %ebp 6852 ; SSE42-NEXT: orl %r15d, %ebp 6853 ; SSE42-NEXT: movw %bp, (%r9) 6854 ; SSE42-NEXT: movq %r9, %rax 6855 ; SSE42-NEXT: popq %rbx 6856 ; SSE42-NEXT: popq %r12 6857 ; SSE42-NEXT: popq %r13 6858 ; SSE42-NEXT: popq %r14 6859 ; SSE42-NEXT: popq %r15 6860 ; SSE42-NEXT: popq %rbp 6861 ; SSE42-NEXT: retq 6862 ; 6863 ; AVX1-LABEL: test_cmp_v32f64: 6864 ; AVX1: # %bb.0: 6865 ; AVX1-NEXT: pushq %rbp 6866 ; AVX1-NEXT: movq %rsp, %rbp 6867 ; AVX1-NEXT: andq $-32, %rsp 6868 ; AVX1-NEXT: subq $32, %rsp 6869 ; AVX1-NEXT: vmovapd 16(%rbp), %ymm8 6870 ; AVX1-NEXT: vmovapd 48(%rbp), %ymm9 6871 ; AVX1-NEXT: vmovapd 80(%rbp), %ymm10 6872 ; AVX1-NEXT: vmovapd 112(%rbp), %ymm11 6873 ; AVX1-NEXT: vmovapd 144(%rbp), %ymm12 6874 ; AVX1-NEXT: vmovapd 176(%rbp), %ymm13 6875 ; AVX1-NEXT: vmovapd 208(%rbp), %ymm14 6876 ; AVX1-NEXT: vmovapd 240(%rbp), %ymm15 6877 ; AVX1-NEXT: vcmpltpd %ymm7, %ymm15, %ymm15 6878 ; AVX1-NEXT: vextractf128 $1, %ymm15, %xmm7 6879 ; AVX1-NEXT: vpackssdw %xmm7, %xmm15, %xmm15 6880 ; AVX1-NEXT: vcmpltpd %ymm6, %ymm14, %ymm6 6881 ; AVX1-NEXT: vextractf128 $1, %ymm6, %xmm7 6882 ; AVX1-NEXT: vpackssdw %xmm7, %xmm6, %xmm6 6883 ; AVX1-NEXT: vpackssdw %xmm15, %xmm6, %xmm6 6884 ; AVX1-NEXT: vcmpltpd %ymm5, %ymm13, %ymm5 6885 ; AVX1-NEXT: vextractf128 $1, %ymm5, %xmm7 6886 ; AVX1-NEXT: vpackssdw %xmm7, %xmm5, %xmm5 6887 ; AVX1-NEXT: vcmpltpd %ymm4, %ymm12, %ymm4 6888 ; AVX1-NEXT: vextractf128 $1, %ymm4, %xmm7 6889 ; AVX1-NEXT: vpackssdw %xmm7, %xmm4, %xmm4 6890 ; AVX1-NEXT: vpackssdw %xmm5, %xmm4, %xmm4 6891 ; AVX1-NEXT: vpacksswb %xmm6, %xmm4, %xmm4 6892 ; AVX1-NEXT: vcmpltpd %ymm3, %ymm11, %ymm3 6893 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm5 6894 ; AVX1-NEXT: vpackssdw %xmm5, %xmm3, %xmm3 6895 ; AVX1-NEXT: vcmpltpd %ymm2, %ymm10, %ymm2 6896 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm5 6897 ; AVX1-NEXT: vpackssdw %xmm5, %xmm2, %xmm2 6898 ; AVX1-NEXT: vpackssdw %xmm3, %xmm2, %xmm2 6899 ; AVX1-NEXT: vcmpltpd %ymm1, %ymm9, %ymm1 6900 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3 6901 ; AVX1-NEXT: vpackssdw %xmm3, %xmm1, %xmm1 6902 ; AVX1-NEXT: vcmpltpd %ymm0, %ymm8, %ymm0 6903 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 6904 ; AVX1-NEXT: vpackssdw %xmm3, %xmm0, %xmm0 6905 ; AVX1-NEXT: vpackssdw %xmm1, %xmm0, %xmm0 6906 ; AVX1-NEXT: vpacksswb %xmm2, %xmm0, %xmm0 6907 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6908 ; AVX1-NEXT: movq %rbp, %rsp 6909 ; AVX1-NEXT: popq %rbp 6910 ; AVX1-NEXT: retq 6911 ; 6912 ; AVX2-LABEL: test_cmp_v32f64: 6913 ; AVX2: # %bb.0: 6914 ; AVX2-NEXT: pushq %rbp 6915 ; AVX2-NEXT: movq %rsp, %rbp 6916 ; AVX2-NEXT: andq $-32, %rsp 6917 ; AVX2-NEXT: subq $32, %rsp 6918 ; AVX2-NEXT: vmovapd 16(%rbp), %ymm8 6919 ; AVX2-NEXT: vmovapd 48(%rbp), %ymm9 6920 ; AVX2-NEXT: vmovapd 80(%rbp), %ymm10 6921 ; AVX2-NEXT: vmovapd 112(%rbp), %ymm11 6922 ; AVX2-NEXT: vmovapd 144(%rbp), %ymm12 6923 ; AVX2-NEXT: vmovapd 176(%rbp), %ymm13 6924 ; AVX2-NEXT: vmovapd 208(%rbp), %ymm14 6925 ; AVX2-NEXT: vmovapd 240(%rbp), %ymm15 6926 ; AVX2-NEXT: vcmpltpd %ymm7, %ymm15, %ymm7 6927 ; AVX2-NEXT: vcmpltpd %ymm6, %ymm14, %ymm6 6928 ; AVX2-NEXT: vpackssdw %ymm7, %ymm6, %ymm6 6929 ; AVX2-NEXT: vpermq {{.*#+}} ymm6 = ymm6[0,2,1,3] 6930 ; AVX2-NEXT: vcmpltpd %ymm5, %ymm13, %ymm5 6931 ; AVX2-NEXT: vcmpltpd %ymm4, %ymm12, %ymm4 6932 ; AVX2-NEXT: vpackssdw %ymm5, %ymm4, %ymm4 6933 ; AVX2-NEXT: vpermq {{.*#+}} ymm4 = ymm4[0,2,1,3] 6934 ; AVX2-NEXT: vpackssdw %ymm6, %ymm4, %ymm4 6935 ; AVX2-NEXT: vpermq {{.*#+}} ymm4 = ymm4[0,2,1,3] 6936 ; AVX2-NEXT: vcmpltpd %ymm3, %ymm11, %ymm3 6937 ; AVX2-NEXT: vcmpltpd %ymm2, %ymm10, %ymm2 6938 ; AVX2-NEXT: vpackssdw %ymm3, %ymm2, %ymm2 6939 ; AVX2-NEXT: vpermq {{.*#+}} ymm2 = ymm2[0,2,1,3] 6940 ; AVX2-NEXT: vcmpltpd %ymm1, %ymm9, %ymm1 6941 ; AVX2-NEXT: vcmpltpd %ymm0, %ymm8, %ymm0 6942 ; AVX2-NEXT: vpackssdw %ymm1, %ymm0, %ymm0 6943 ; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3] 6944 ; AVX2-NEXT: vpackssdw %ymm2, %ymm0, %ymm0 6945 ; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3] 6946 ; AVX2-NEXT: vpacksswb %ymm4, %ymm0, %ymm0 6947 ; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3] 6948 ; AVX2-NEXT: movq %rbp, %rsp 6949 ; AVX2-NEXT: popq %rbp 6950 ; AVX2-NEXT: retq 6951 ; 6952 ; AVX512F-LABEL: test_cmp_v32f64: 6953 ; AVX512F: # %bb.0: 6954 ; AVX512F-NEXT: vcmpltpd %zmm2, %zmm6, %k0 6955 ; AVX512F-NEXT: vcmpltpd %zmm3, %zmm7, %k1 6956 ; AVX512F-NEXT: kunpckbw %k0, %k1, %k1 6957 ; AVX512F-NEXT: vcmpltpd %zmm0, %zmm4, %k0 6958 ; AVX512F-NEXT: vcmpltpd %zmm1, %zmm5, %k2 6959 ; AVX512F-NEXT: kunpckbw %k0, %k2, %k2 6960 ; AVX512F-NEXT: vpternlogd $255, %zmm0, %zmm0, %zmm0 {%k2} {z} 6961 ; AVX512F-NEXT: vpmovdb %zmm0, %xmm0 6962 ; AVX512F-NEXT: vpternlogd $255, %zmm1, %zmm1, %zmm1 {%k1} {z} 6963 ; AVX512F-NEXT: vpmovdb %zmm1, %xmm1 6964 ; AVX512F-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm0 6965 ; AVX512F-NEXT: retq 6966 ; 6967 ; AVX512DQ-LABEL: test_cmp_v32f64: 6968 ; AVX512DQ: # %bb.0: 6969 ; AVX512DQ-NEXT: vcmpltpd %zmm2, %zmm6, %k0 6970 ; AVX512DQ-NEXT: vcmpltpd %zmm3, %zmm7, %k1 6971 ; AVX512DQ-NEXT: kunpckbw %k0, %k1, %k0 6972 ; AVX512DQ-NEXT: vcmpltpd %zmm0, %zmm4, %k1 6973 ; AVX512DQ-NEXT: vcmpltpd %zmm1, %zmm5, %k2 6974 ; AVX512DQ-NEXT: kunpckbw %k1, %k2, %k1 6975 ; AVX512DQ-NEXT: vpmovm2d %k1, %zmm0 6976 ; AVX512DQ-NEXT: vpmovdb %zmm0, %xmm0 6977 ; AVX512DQ-NEXT: vpmovm2d %k0, %zmm1 6978 ; AVX512DQ-NEXT: vpmovdb %zmm1, %xmm1 6979 ; AVX512DQ-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm0 6980 ; AVX512DQ-NEXT: retq 6981 ; 6982 ; AVX512BW-LABEL: test_cmp_v32f64: 6983 ; AVX512BW: # %bb.0: 6984 ; AVX512BW-NEXT: vcmpltpd %zmm0, %zmm4, %k0 6985 ; AVX512BW-NEXT: vcmpltpd %zmm1, %zmm5, %k1 6986 ; AVX512BW-NEXT: kunpckbw %k0, %k1, %k0 6987 ; AVX512BW-NEXT: vcmpltpd %zmm2, %zmm6, %k1 6988 ; AVX512BW-NEXT: vcmpltpd %zmm3, %zmm7, %k2 6989 ; AVX512BW-NEXT: kunpckbw %k1, %k2, %k1 6990 ; AVX512BW-NEXT: kunpckwd %k0, %k1, %k0 6991 ; AVX512BW-NEXT: vpmovm2b %k0, %zmm0 6992 ; AVX512BW-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 6993 ; AVX512BW-NEXT: retq 6994 %1 = fcmp ogt <32 x double> %a0, %a1 6995 ret <32 x i1> %1 6996 } 6997 6998 define <32 x i1> @test_cmp_v32i64(<32 x i64> %a0, <32 x i64> %a1) nounwind { 6999 ; SSE2-LABEL: test_cmp_v32i64: 7000 ; SSE2: # %bb.0: 7001 ; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [2147483648,0,2147483648,0] 7002 ; SSE2-NEXT: pxor %xmm8, %xmm1 7003 ; SSE2-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm9 7004 ; SSE2-NEXT: pxor %xmm8, %xmm9 7005 ; SSE2-NEXT: movdqa %xmm1, %xmm10 7006 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm10 7007 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2] 7008 ; SSE2-NEXT: pcmpeqd %xmm1, %xmm9 7009 ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm9[1,1,3,3] 7010 ; SSE2-NEXT: pand %xmm11, %xmm1 7011 ; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3] 7012 ; SSE2-NEXT: por %xmm1, %xmm9 7013 ; SSE2-NEXT: movdqa {{.*#+}} xmm10 = [255,255] 7014 ; SSE2-NEXT: pand %xmm10, %xmm9 7015 ; SSE2-NEXT: pxor %xmm8, %xmm0 7016 ; SSE2-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm1 7017 ; SSE2-NEXT: pxor %xmm8, %xmm1 7018 ; SSE2-NEXT: movdqa %xmm0, %xmm11 7019 ; SSE2-NEXT: pcmpgtd %xmm1, %xmm11 7020 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2] 7021 ; SSE2-NEXT: pcmpeqd %xmm0, %xmm1 7022 ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3] 7023 ; SSE2-NEXT: pand %xmm12, %xmm1 7024 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm11[1,1,3,3] 7025 ; SSE2-NEXT: por %xmm1, %xmm11 7026 ; SSE2-NEXT: pand %xmm10, %xmm11 7027 ; SSE2-NEXT: packuswb %xmm9, %xmm11 7028 ; SSE2-NEXT: packuswb %xmm11, %xmm11 7029 ; SSE2-NEXT: packuswb %xmm11, %xmm11 7030 ; SSE2-NEXT: pxor %xmm8, %xmm3 7031 ; SSE2-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm1 7032 ; SSE2-NEXT: pxor %xmm8, %xmm1 7033 ; SSE2-NEXT: movdqa %xmm3, %xmm0 7034 ; SSE2-NEXT: pcmpgtd %xmm1, %xmm0 7035 ; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm0[0,0,2,2] 7036 ; SSE2-NEXT: pcmpeqd %xmm3, %xmm1 7037 ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3] 7038 ; SSE2-NEXT: pand %xmm9, %xmm1 7039 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 7040 ; SSE2-NEXT: por %xmm1, %xmm0 7041 ; SSE2-NEXT: pand %xmm10, %xmm0 7042 ; SSE2-NEXT: pxor %xmm8, %xmm2 7043 ; SSE2-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm1 7044 ; SSE2-NEXT: pxor %xmm8, %xmm1 7045 ; SSE2-NEXT: movdqa %xmm2, %xmm3 7046 ; SSE2-NEXT: pcmpgtd %xmm1, %xmm3 7047 ; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm3[0,0,2,2] 7048 ; SSE2-NEXT: pcmpeqd %xmm2, %xmm1 7049 ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3] 7050 ; SSE2-NEXT: pand %xmm9, %xmm1 7051 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm3[1,1,3,3] 7052 ; SSE2-NEXT: por %xmm1, %xmm2 7053 ; SSE2-NEXT: pand %xmm10, %xmm2 7054 ; SSE2-NEXT: packuswb %xmm0, %xmm2 7055 ; SSE2-NEXT: packuswb %xmm2, %xmm2 7056 ; SSE2-NEXT: packuswb %xmm2, %xmm2 7057 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm2[1,1,2,3] 7058 ; SSE2-NEXT: punpckldq {{.*#+}} xmm11 = xmm11[0],xmm0[0],xmm11[1],xmm0[1] 7059 ; SSE2-NEXT: pxor %xmm8, %xmm7 7060 ; SSE2-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm0 7061 ; SSE2-NEXT: pxor %xmm8, %xmm0 7062 ; SSE2-NEXT: movdqa %xmm7, %xmm1 7063 ; SSE2-NEXT: pcmpgtd %xmm0, %xmm1 7064 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm1[0,0,2,2] 7065 ; SSE2-NEXT: pcmpeqd %xmm7, %xmm0 7066 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 7067 ; SSE2-NEXT: pand %xmm2, %xmm0 7068 ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3] 7069 ; SSE2-NEXT: por %xmm0, %xmm1 7070 ; SSE2-NEXT: pand %xmm10, %xmm1 7071 ; SSE2-NEXT: pxor %xmm8, %xmm6 7072 ; SSE2-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm0 7073 ; SSE2-NEXT: pxor %xmm8, %xmm0 7074 ; SSE2-NEXT: movdqa %xmm6, %xmm2 7075 ; SSE2-NEXT: pcmpgtd %xmm0, %xmm2 7076 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2] 7077 ; SSE2-NEXT: pcmpeqd %xmm6, %xmm0 7078 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 7079 ; SSE2-NEXT: pand %xmm3, %xmm0 7080 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 7081 ; SSE2-NEXT: por %xmm0, %xmm2 7082 ; SSE2-NEXT: pand %xmm10, %xmm2 7083 ; SSE2-NEXT: packuswb %xmm1, %xmm2 7084 ; SSE2-NEXT: packuswb %xmm2, %xmm2 7085 ; SSE2-NEXT: packuswb %xmm2, %xmm2 7086 ; SSE2-NEXT: pxor %xmm8, %xmm5 7087 ; SSE2-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm0 7088 ; SSE2-NEXT: pxor %xmm8, %xmm0 7089 ; SSE2-NEXT: movdqa %xmm5, %xmm1 7090 ; SSE2-NEXT: pcmpgtd %xmm0, %xmm1 7091 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm1[0,0,2,2] 7092 ; SSE2-NEXT: pcmpeqd %xmm5, %xmm0 7093 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 7094 ; SSE2-NEXT: pand %xmm3, %xmm0 7095 ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3] 7096 ; SSE2-NEXT: por %xmm0, %xmm1 7097 ; SSE2-NEXT: pand %xmm10, %xmm1 7098 ; SSE2-NEXT: pxor %xmm8, %xmm4 7099 ; SSE2-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm0 7100 ; SSE2-NEXT: pxor %xmm8, %xmm0 7101 ; SSE2-NEXT: movdqa %xmm4, %xmm3 7102 ; SSE2-NEXT: pcmpgtd %xmm0, %xmm3 7103 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm3[0,0,2,2] 7104 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm0 7105 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 7106 ; SSE2-NEXT: pand %xmm5, %xmm0 7107 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3] 7108 ; SSE2-NEXT: por %xmm0, %xmm3 7109 ; SSE2-NEXT: pand %xmm10, %xmm3 7110 ; SSE2-NEXT: packuswb %xmm1, %xmm3 7111 ; SSE2-NEXT: packuswb %xmm3, %xmm3 7112 ; SSE2-NEXT: packuswb %xmm3, %xmm3 7113 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm3[0,1,2,2] 7114 ; SSE2-NEXT: punpckhdq {{.*#+}} xmm3 = xmm3[2],xmm2[2],xmm3[3],xmm2[3] 7115 ; SSE2-NEXT: movsd {{.*#+}} xmm3 = xmm11[0],xmm3[1] 7116 ; SSE2-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm0 7117 ; SSE2-NEXT: pxor %xmm8, %xmm0 7118 ; SSE2-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm1 7119 ; SSE2-NEXT: pxor %xmm8, %xmm1 7120 ; SSE2-NEXT: movdqa %xmm1, %xmm2 7121 ; SSE2-NEXT: pcmpgtd %xmm0, %xmm2 7122 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm2[0,0,2,2] 7123 ; SSE2-NEXT: pcmpeqd %xmm0, %xmm1 7124 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm1[1,1,3,3] 7125 ; SSE2-NEXT: pand %xmm4, %xmm0 7126 ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm2[1,1,3,3] 7127 ; SSE2-NEXT: por %xmm0, %xmm1 7128 ; SSE2-NEXT: pand %xmm10, %xmm1 7129 ; SSE2-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm0 7130 ; SSE2-NEXT: pxor %xmm8, %xmm0 7131 ; SSE2-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm2 7132 ; SSE2-NEXT: pxor %xmm8, %xmm2 7133 ; SSE2-NEXT: movdqa %xmm2, %xmm4 7134 ; SSE2-NEXT: pcmpgtd %xmm0, %xmm4 7135 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 7136 ; SSE2-NEXT: pcmpeqd %xmm0, %xmm2 7137 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm2[1,1,3,3] 7138 ; SSE2-NEXT: pand %xmm5, %xmm0 7139 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3] 7140 ; SSE2-NEXT: por %xmm0, %xmm2 7141 ; SSE2-NEXT: pand %xmm10, %xmm2 7142 ; SSE2-NEXT: packuswb %xmm1, %xmm2 7143 ; SSE2-NEXT: packuswb %xmm2, %xmm2 7144 ; SSE2-NEXT: packuswb %xmm2, %xmm2 7145 ; SSE2-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm0 7146 ; SSE2-NEXT: pxor %xmm8, %xmm0 7147 ; SSE2-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm1 7148 ; SSE2-NEXT: pxor %xmm8, %xmm1 7149 ; SSE2-NEXT: movdqa %xmm1, %xmm4 7150 ; SSE2-NEXT: pcmpgtd %xmm0, %xmm4 7151 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 7152 ; SSE2-NEXT: pcmpeqd %xmm0, %xmm1 7153 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm1[1,1,3,3] 7154 ; SSE2-NEXT: pand %xmm5, %xmm0 7155 ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm4[1,1,3,3] 7156 ; SSE2-NEXT: por %xmm0, %xmm1 7157 ; SSE2-NEXT: pand %xmm10, %xmm1 7158 ; SSE2-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm0 7159 ; SSE2-NEXT: pxor %xmm8, %xmm0 7160 ; SSE2-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm4 7161 ; SSE2-NEXT: pxor %xmm8, %xmm4 7162 ; SSE2-NEXT: movdqa %xmm4, %xmm5 7163 ; SSE2-NEXT: pcmpgtd %xmm0, %xmm5 7164 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 7165 ; SSE2-NEXT: pcmpeqd %xmm0, %xmm4 7166 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm4[1,1,3,3] 7167 ; SSE2-NEXT: pand %xmm6, %xmm0 7168 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 7169 ; SSE2-NEXT: por %xmm0, %xmm4 7170 ; SSE2-NEXT: pand %xmm10, %xmm4 7171 ; SSE2-NEXT: packuswb %xmm1, %xmm4 7172 ; SSE2-NEXT: packuswb %xmm4, %xmm4 7173 ; SSE2-NEXT: packuswb %xmm4, %xmm4 7174 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm4[1,1,2,3] 7175 ; SSE2-NEXT: punpckldq {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1] 7176 ; SSE2-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm0 7177 ; SSE2-NEXT: pxor %xmm8, %xmm0 7178 ; SSE2-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm1 7179 ; SSE2-NEXT: pxor %xmm8, %xmm1 7180 ; SSE2-NEXT: movdqa %xmm1, %xmm4 7181 ; SSE2-NEXT: pcmpgtd %xmm0, %xmm4 7182 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 7183 ; SSE2-NEXT: pcmpeqd %xmm0, %xmm1 7184 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm1[1,1,3,3] 7185 ; SSE2-NEXT: pand %xmm5, %xmm0 7186 ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm4[1,1,3,3] 7187 ; SSE2-NEXT: por %xmm0, %xmm1 7188 ; SSE2-NEXT: pand %xmm10, %xmm1 7189 ; SSE2-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm0 7190 ; SSE2-NEXT: pxor %xmm8, %xmm0 7191 ; SSE2-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm4 7192 ; SSE2-NEXT: pxor %xmm8, %xmm4 7193 ; SSE2-NEXT: movdqa %xmm4, %xmm5 7194 ; SSE2-NEXT: pcmpgtd %xmm0, %xmm5 7195 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 7196 ; SSE2-NEXT: pcmpeqd %xmm0, %xmm4 7197 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3] 7198 ; SSE2-NEXT: pand %xmm6, %xmm4 7199 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm5[1,1,3,3] 7200 ; SSE2-NEXT: por %xmm4, %xmm0 7201 ; SSE2-NEXT: pand %xmm10, %xmm0 7202 ; SSE2-NEXT: packuswb %xmm1, %xmm0 7203 ; SSE2-NEXT: packuswb %xmm0, %xmm0 7204 ; SSE2-NEXT: packuswb %xmm0, %xmm0 7205 ; SSE2-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm1 7206 ; SSE2-NEXT: pxor %xmm8, %xmm1 7207 ; SSE2-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm4 7208 ; SSE2-NEXT: pxor %xmm8, %xmm4 7209 ; SSE2-NEXT: movdqa %xmm4, %xmm5 7210 ; SSE2-NEXT: pcmpgtd %xmm1, %xmm5 7211 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 7212 ; SSE2-NEXT: pcmpeqd %xmm1, %xmm4 7213 ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm4[1,1,3,3] 7214 ; SSE2-NEXT: pand %xmm6, %xmm1 7215 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 7216 ; SSE2-NEXT: por %xmm1, %xmm4 7217 ; SSE2-NEXT: pand %xmm10, %xmm4 7218 ; SSE2-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm1 7219 ; SSE2-NEXT: pxor %xmm8, %xmm1 7220 ; SSE2-NEXT: pxor {{[0-9]+}}(%rsp), %xmm8 7221 ; SSE2-NEXT: movdqa %xmm8, %xmm5 7222 ; SSE2-NEXT: pcmpgtd %xmm1, %xmm5 7223 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 7224 ; SSE2-NEXT: pcmpeqd %xmm1, %xmm8 7225 ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm8[1,1,3,3] 7226 ; SSE2-NEXT: pand %xmm6, %xmm1 7227 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3] 7228 ; SSE2-NEXT: por %xmm1, %xmm5 7229 ; SSE2-NEXT: pand %xmm10, %xmm5 7230 ; SSE2-NEXT: packuswb %xmm4, %xmm5 7231 ; SSE2-NEXT: packuswb %xmm5, %xmm5 7232 ; SSE2-NEXT: packuswb %xmm5, %xmm5 7233 ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm5[0,1,2,2] 7234 ; SSE2-NEXT: punpckhdq {{.*#+}} xmm1 = xmm1[2],xmm0[2],xmm1[3],xmm0[3] 7235 ; SSE2-NEXT: movsd {{.*#+}} xmm1 = xmm2[0],xmm1[1] 7236 ; SSE2-NEXT: movapd %xmm1, -{{[0-9]+}}(%rsp) 7237 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax 7238 ; SSE2-NEXT: andl $1, %eax 7239 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 7240 ; SSE2-NEXT: andl $1, %ecx 7241 ; SSE2-NEXT: leal (%rcx,%rax,2), %eax 7242 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 7243 ; SSE2-NEXT: andl $1, %ecx 7244 ; SSE2-NEXT: leal (%rax,%rcx,4), %eax 7245 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 7246 ; SSE2-NEXT: andl $1, %ecx 7247 ; SSE2-NEXT: leal (%rax,%rcx,8), %eax 7248 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 7249 ; SSE2-NEXT: andl $1, %ecx 7250 ; SSE2-NEXT: shll $4, %ecx 7251 ; SSE2-NEXT: orl %eax, %ecx 7252 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax 7253 ; SSE2-NEXT: andl $1, %eax 7254 ; SSE2-NEXT: shll $5, %eax 7255 ; SSE2-NEXT: orl %ecx, %eax 7256 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 7257 ; SSE2-NEXT: andl $1, %ecx 7258 ; SSE2-NEXT: shll $6, %ecx 7259 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 7260 ; SSE2-NEXT: andl $1, %edx 7261 ; SSE2-NEXT: shll $7, %edx 7262 ; SSE2-NEXT: orl %ecx, %edx 7263 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 7264 ; SSE2-NEXT: andl $1, %ecx 7265 ; SSE2-NEXT: shll $8, %ecx 7266 ; SSE2-NEXT: orl %edx, %ecx 7267 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 7268 ; SSE2-NEXT: andl $1, %edx 7269 ; SSE2-NEXT: shll $9, %edx 7270 ; SSE2-NEXT: orl %ecx, %edx 7271 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 7272 ; SSE2-NEXT: andl $1, %ecx 7273 ; SSE2-NEXT: shll $10, %ecx 7274 ; SSE2-NEXT: orl %edx, %ecx 7275 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 7276 ; SSE2-NEXT: andl $1, %edx 7277 ; SSE2-NEXT: shll $11, %edx 7278 ; SSE2-NEXT: orl %ecx, %edx 7279 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 7280 ; SSE2-NEXT: andl $1, %ecx 7281 ; SSE2-NEXT: shll $12, %ecx 7282 ; SSE2-NEXT: orl %edx, %ecx 7283 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 7284 ; SSE2-NEXT: andl $1, %edx 7285 ; SSE2-NEXT: shll $13, %edx 7286 ; SSE2-NEXT: orl %ecx, %edx 7287 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 7288 ; SSE2-NEXT: andl $1, %ecx 7289 ; SSE2-NEXT: shll $14, %ecx 7290 ; SSE2-NEXT: orl %edx, %ecx 7291 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 7292 ; SSE2-NEXT: shll $15, %edx 7293 ; SSE2-NEXT: orl %ecx, %edx 7294 ; SSE2-NEXT: orl %eax, %edx 7295 ; SSE2-NEXT: movw %dx, 2(%rdi) 7296 ; SSE2-NEXT: movapd %xmm3, -{{[0-9]+}}(%rsp) 7297 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax 7298 ; SSE2-NEXT: andl $1, %eax 7299 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 7300 ; SSE2-NEXT: andl $1, %ecx 7301 ; SSE2-NEXT: leal (%rcx,%rax,2), %eax 7302 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 7303 ; SSE2-NEXT: andl $1, %ecx 7304 ; SSE2-NEXT: leal (%rax,%rcx,4), %eax 7305 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 7306 ; SSE2-NEXT: andl $1, %ecx 7307 ; SSE2-NEXT: leal (%rax,%rcx,8), %eax 7308 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 7309 ; SSE2-NEXT: andl $1, %ecx 7310 ; SSE2-NEXT: shll $4, %ecx 7311 ; SSE2-NEXT: orl %eax, %ecx 7312 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax 7313 ; SSE2-NEXT: andl $1, %eax 7314 ; SSE2-NEXT: shll $5, %eax 7315 ; SSE2-NEXT: orl %ecx, %eax 7316 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 7317 ; SSE2-NEXT: andl $1, %ecx 7318 ; SSE2-NEXT: shll $6, %ecx 7319 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 7320 ; SSE2-NEXT: andl $1, %edx 7321 ; SSE2-NEXT: shll $7, %edx 7322 ; SSE2-NEXT: orl %ecx, %edx 7323 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 7324 ; SSE2-NEXT: andl $1, %ecx 7325 ; SSE2-NEXT: shll $8, %ecx 7326 ; SSE2-NEXT: orl %edx, %ecx 7327 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 7328 ; SSE2-NEXT: andl $1, %edx 7329 ; SSE2-NEXT: shll $9, %edx 7330 ; SSE2-NEXT: orl %ecx, %edx 7331 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 7332 ; SSE2-NEXT: andl $1, %ecx 7333 ; SSE2-NEXT: shll $10, %ecx 7334 ; SSE2-NEXT: orl %edx, %ecx 7335 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 7336 ; SSE2-NEXT: andl $1, %edx 7337 ; SSE2-NEXT: shll $11, %edx 7338 ; SSE2-NEXT: orl %ecx, %edx 7339 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 7340 ; SSE2-NEXT: andl $1, %ecx 7341 ; SSE2-NEXT: shll $12, %ecx 7342 ; SSE2-NEXT: orl %edx, %ecx 7343 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 7344 ; SSE2-NEXT: andl $1, %edx 7345 ; SSE2-NEXT: shll $13, %edx 7346 ; SSE2-NEXT: orl %ecx, %edx 7347 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx 7348 ; SSE2-NEXT: andl $1, %ecx 7349 ; SSE2-NEXT: shll $14, %ecx 7350 ; SSE2-NEXT: orl %edx, %ecx 7351 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx 7352 ; SSE2-NEXT: shll $15, %edx 7353 ; SSE2-NEXT: orl %ecx, %edx 7354 ; SSE2-NEXT: orl %eax, %edx 7355 ; SSE2-NEXT: movw %dx, (%rdi) 7356 ; SSE2-NEXT: movq %rdi, %rax 7357 ; SSE2-NEXT: retq 7358 ; 7359 ; SSE42-LABEL: test_cmp_v32i64: 7360 ; SSE42: # %bb.0: 7361 ; SSE42-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm15 7362 ; SSE42-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm14 7363 ; SSE42-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm13 7364 ; SSE42-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm12 7365 ; SSE42-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm11 7366 ; SSE42-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm10 7367 ; SSE42-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm9 7368 ; SSE42-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm8 7369 ; SSE42-NEXT: pcmpgtq {{[0-9]+}}(%rsp), %xmm7 7370 ; SSE42-NEXT: pcmpgtq {{[0-9]+}}(%rsp), %xmm6 7371 ; SSE42-NEXT: pcmpgtq {{[0-9]+}}(%rsp), %xmm5 7372 ; SSE42-NEXT: pcmpgtq {{[0-9]+}}(%rsp), %xmm4 7373 ; SSE42-NEXT: pcmpgtq {{[0-9]+}}(%rsp), %xmm3 7374 ; SSE42-NEXT: pcmpgtq {{[0-9]+}}(%rsp), %xmm2 7375 ; SSE42-NEXT: pcmpgtq {{[0-9]+}}(%rsp), %xmm1 7376 ; SSE42-NEXT: pcmpgtq {{[0-9]+}}(%rsp), %xmm0 7377 ; SSE42-NEXT: pcmpgtq {{[0-9]+}}(%rsp), %xmm8 7378 ; SSE42-NEXT: pcmpgtq {{[0-9]+}}(%rsp), %xmm9 7379 ; SSE42-NEXT: pcmpgtq {{[0-9]+}}(%rsp), %xmm10 7380 ; SSE42-NEXT: pcmpgtq {{[0-9]+}}(%rsp), %xmm11 7381 ; SSE42-NEXT: pcmpgtq {{[0-9]+}}(%rsp), %xmm12 7382 ; SSE42-NEXT: pcmpgtq {{[0-9]+}}(%rsp), %xmm13 7383 ; SSE42-NEXT: pcmpgtq {{[0-9]+}}(%rsp), %xmm14 7384 ; SSE42-NEXT: pcmpgtq {{[0-9]+}}(%rsp), %xmm15 7385 ; SSE42-NEXT: pextrb $8, %xmm15, %eax 7386 ; SSE42-NEXT: andl $1, %eax 7387 ; SSE42-NEXT: pextrb $0, %xmm15, %ecx 7388 ; SSE42-NEXT: andl $1, %ecx 7389 ; SSE42-NEXT: leal (%rcx,%rax,2), %eax 7390 ; SSE42-NEXT: pextrb $0, %xmm14, %ecx 7391 ; SSE42-NEXT: andl $1, %ecx 7392 ; SSE42-NEXT: leal (%rax,%rcx,4), %eax 7393 ; SSE42-NEXT: pextrb $8, %xmm14, %ecx 7394 ; SSE42-NEXT: andl $1, %ecx 7395 ; SSE42-NEXT: leal (%rax,%rcx,8), %eax 7396 ; SSE42-NEXT: pextrb $0, %xmm13, %ecx 7397 ; SSE42-NEXT: andl $1, %ecx 7398 ; SSE42-NEXT: shll $4, %ecx 7399 ; SSE42-NEXT: orl %eax, %ecx 7400 ; SSE42-NEXT: pextrb $8, %xmm13, %eax 7401 ; SSE42-NEXT: andl $1, %eax 7402 ; SSE42-NEXT: shll $5, %eax 7403 ; SSE42-NEXT: orl %ecx, %eax 7404 ; SSE42-NEXT: pextrb $0, %xmm12, %ecx 7405 ; SSE42-NEXT: andl $1, %ecx 7406 ; SSE42-NEXT: shll $6, %ecx 7407 ; SSE42-NEXT: pextrb $8, %xmm12, %edx 7408 ; SSE42-NEXT: andl $1, %edx 7409 ; SSE42-NEXT: shll $7, %edx 7410 ; SSE42-NEXT: orl %ecx, %edx 7411 ; SSE42-NEXT: pextrb $0, %xmm11, %ecx 7412 ; SSE42-NEXT: andl $1, %ecx 7413 ; SSE42-NEXT: shll $8, %ecx 7414 ; SSE42-NEXT: orl %edx, %ecx 7415 ; SSE42-NEXT: pextrb $8, %xmm11, %edx 7416 ; SSE42-NEXT: andl $1, %edx 7417 ; SSE42-NEXT: shll $9, %edx 7418 ; SSE42-NEXT: orl %ecx, %edx 7419 ; SSE42-NEXT: pextrb $0, %xmm10, %ecx 7420 ; SSE42-NEXT: andl $1, %ecx 7421 ; SSE42-NEXT: shll $10, %ecx 7422 ; SSE42-NEXT: orl %edx, %ecx 7423 ; SSE42-NEXT: pextrb $8, %xmm10, %edx 7424 ; SSE42-NEXT: andl $1, %edx 7425 ; SSE42-NEXT: shll $11, %edx 7426 ; SSE42-NEXT: orl %ecx, %edx 7427 ; SSE42-NEXT: pextrb $0, %xmm9, %ecx 7428 ; SSE42-NEXT: andl $1, %ecx 7429 ; SSE42-NEXT: shll $12, %ecx 7430 ; SSE42-NEXT: orl %edx, %ecx 7431 ; SSE42-NEXT: pextrb $8, %xmm9, %edx 7432 ; SSE42-NEXT: andl $1, %edx 7433 ; SSE42-NEXT: shll $13, %edx 7434 ; SSE42-NEXT: orl %ecx, %edx 7435 ; SSE42-NEXT: pextrb $0, %xmm8, %ecx 7436 ; SSE42-NEXT: andl $1, %ecx 7437 ; SSE42-NEXT: shll $14, %ecx 7438 ; SSE42-NEXT: orl %edx, %ecx 7439 ; SSE42-NEXT: pextrb $8, %xmm8, %edx 7440 ; SSE42-NEXT: shll $15, %edx 7441 ; SSE42-NEXT: orl %ecx, %edx 7442 ; SSE42-NEXT: orl %eax, %edx 7443 ; SSE42-NEXT: movw %dx, 2(%rdi) 7444 ; SSE42-NEXT: pextrb $8, %xmm0, %eax 7445 ; SSE42-NEXT: andl $1, %eax 7446 ; SSE42-NEXT: pextrb $0, %xmm0, %ecx 7447 ; SSE42-NEXT: andl $1, %ecx 7448 ; SSE42-NEXT: leal (%rcx,%rax,2), %eax 7449 ; SSE42-NEXT: pextrb $0, %xmm1, %ecx 7450 ; SSE42-NEXT: andl $1, %ecx 7451 ; SSE42-NEXT: leal (%rax,%rcx,4), %eax 7452 ; SSE42-NEXT: pextrb $8, %xmm1, %ecx 7453 ; SSE42-NEXT: andl $1, %ecx 7454 ; SSE42-NEXT: leal (%rax,%rcx,8), %eax 7455 ; SSE42-NEXT: pextrb $0, %xmm2, %ecx 7456 ; SSE42-NEXT: andl $1, %ecx 7457 ; SSE42-NEXT: shll $4, %ecx 7458 ; SSE42-NEXT: orl %eax, %ecx 7459 ; SSE42-NEXT: pextrb $8, %xmm2, %eax 7460 ; SSE42-NEXT: andl $1, %eax 7461 ; SSE42-NEXT: shll $5, %eax 7462 ; SSE42-NEXT: orl %ecx, %eax 7463 ; SSE42-NEXT: pextrb $0, %xmm3, %ecx 7464 ; SSE42-NEXT: andl $1, %ecx 7465 ; SSE42-NEXT: shll $6, %ecx 7466 ; SSE42-NEXT: pextrb $8, %xmm3, %edx 7467 ; SSE42-NEXT: andl $1, %edx 7468 ; SSE42-NEXT: shll $7, %edx 7469 ; SSE42-NEXT: orl %ecx, %edx 7470 ; SSE42-NEXT: pextrb $0, %xmm4, %ecx 7471 ; SSE42-NEXT: andl $1, %ecx 7472 ; SSE42-NEXT: shll $8, %ecx 7473 ; SSE42-NEXT: orl %edx, %ecx 7474 ; SSE42-NEXT: pextrb $8, %xmm4, %edx 7475 ; SSE42-NEXT: andl $1, %edx 7476 ; SSE42-NEXT: shll $9, %edx 7477 ; SSE42-NEXT: orl %ecx, %edx 7478 ; SSE42-NEXT: pextrb $0, %xmm5, %ecx 7479 ; SSE42-NEXT: andl $1, %ecx 7480 ; SSE42-NEXT: shll $10, %ecx 7481 ; SSE42-NEXT: orl %edx, %ecx 7482 ; SSE42-NEXT: pextrb $8, %xmm5, %edx 7483 ; SSE42-NEXT: andl $1, %edx 7484 ; SSE42-NEXT: shll $11, %edx 7485 ; SSE42-NEXT: orl %ecx, %edx 7486 ; SSE42-NEXT: pextrb $0, %xmm6, %ecx 7487 ; SSE42-NEXT: andl $1, %ecx 7488 ; SSE42-NEXT: shll $12, %ecx 7489 ; SSE42-NEXT: orl %edx, %ecx 7490 ; SSE42-NEXT: pextrb $8, %xmm6, %edx 7491 ; SSE42-NEXT: andl $1, %edx 7492 ; SSE42-NEXT: shll $13, %edx 7493 ; SSE42-NEXT: orl %ecx, %edx 7494 ; SSE42-NEXT: pextrb $0, %xmm7, %ecx 7495 ; SSE42-NEXT: andl $1, %ecx 7496 ; SSE42-NEXT: shll $14, %ecx 7497 ; SSE42-NEXT: orl %edx, %ecx 7498 ; SSE42-NEXT: pextrb $8, %xmm7, %edx 7499 ; SSE42-NEXT: shll $15, %edx 7500 ; SSE42-NEXT: orl %ecx, %edx 7501 ; SSE42-NEXT: orl %eax, %edx 7502 ; SSE42-NEXT: movw %dx, (%rdi) 7503 ; SSE42-NEXT: movq %rdi, %rax 7504 ; SSE42-NEXT: retq 7505 ; 7506 ; AVX1-LABEL: test_cmp_v32i64: 7507 ; AVX1: # %bb.0: 7508 ; AVX1-NEXT: pushq %rbp 7509 ; AVX1-NEXT: movq %rsp, %rbp 7510 ; AVX1-NEXT: andq $-32, %rsp 7511 ; AVX1-NEXT: subq $32, %rsp 7512 ; AVX1-NEXT: vmovdqa 240(%rbp), %ymm8 7513 ; AVX1-NEXT: vextractf128 $1, %ymm8, %xmm9 7514 ; AVX1-NEXT: vextractf128 $1, %ymm7, %xmm10 7515 ; AVX1-NEXT: vpcmpgtq %xmm9, %xmm10, %xmm9 7516 ; AVX1-NEXT: vmovdqa 208(%rbp), %ymm10 7517 ; AVX1-NEXT: vpcmpgtq %xmm8, %xmm7, %xmm7 7518 ; AVX1-NEXT: vpackssdw %xmm9, %xmm7, %xmm8 7519 ; AVX1-NEXT: vextractf128 $1, %ymm10, %xmm9 7520 ; AVX1-NEXT: vextractf128 $1, %ymm6, %xmm7 7521 ; AVX1-NEXT: vpcmpgtq %xmm9, %xmm7, %xmm7 7522 ; AVX1-NEXT: vpcmpgtq %xmm10, %xmm6, %xmm6 7523 ; AVX1-NEXT: vmovdqa 176(%rbp), %ymm9 7524 ; AVX1-NEXT: vpackssdw %xmm7, %xmm6, %xmm6 7525 ; AVX1-NEXT: vpackssdw %xmm8, %xmm6, %xmm8 7526 ; AVX1-NEXT: vextractf128 $1, %ymm9, %xmm7 7527 ; AVX1-NEXT: vextractf128 $1, %ymm5, %xmm6 7528 ; AVX1-NEXT: vpcmpgtq %xmm7, %xmm6, %xmm6 7529 ; AVX1-NEXT: vmovdqa 144(%rbp), %ymm10 7530 ; AVX1-NEXT: vpcmpgtq %xmm9, %xmm5, %xmm5 7531 ; AVX1-NEXT: vpackssdw %xmm6, %xmm5, %xmm5 7532 ; AVX1-NEXT: vextractf128 $1, %ymm10, %xmm6 7533 ; AVX1-NEXT: vextractf128 $1, %ymm4, %xmm7 7534 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6 7535 ; AVX1-NEXT: vpcmpgtq %xmm10, %xmm4, %xmm4 7536 ; AVX1-NEXT: vpackssdw %xmm6, %xmm4, %xmm4 7537 ; AVX1-NEXT: vmovdqa 112(%rbp), %ymm6 7538 ; AVX1-NEXT: vpackssdw %xmm5, %xmm4, %xmm4 7539 ; AVX1-NEXT: vpacksswb %xmm8, %xmm4, %xmm4 7540 ; AVX1-NEXT: vextractf128 $1, %ymm6, %xmm5 7541 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm7 7542 ; AVX1-NEXT: vpcmpgtq %xmm5, %xmm7, %xmm5 7543 ; AVX1-NEXT: vmovdqa 80(%rbp), %ymm7 7544 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm3, %xmm3 7545 ; AVX1-NEXT: vpackssdw %xmm5, %xmm3, %xmm3 7546 ; AVX1-NEXT: vextractf128 $1, %ymm7, %xmm5 7547 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm6 7548 ; AVX1-NEXT: vpcmpgtq %xmm5, %xmm6, %xmm5 7549 ; AVX1-NEXT: vpcmpgtq %xmm7, %xmm2, %xmm2 7550 ; AVX1-NEXT: vmovdqa 48(%rbp), %ymm6 7551 ; AVX1-NEXT: vpackssdw %xmm5, %xmm2, %xmm2 7552 ; AVX1-NEXT: vpackssdw %xmm3, %xmm2, %xmm2 7553 ; AVX1-NEXT: vextractf128 $1, %ymm6, %xmm3 7554 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm5 7555 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm5, %xmm3 7556 ; AVX1-NEXT: vmovdqa 16(%rbp), %ymm5 7557 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm1, %xmm1 7558 ; AVX1-NEXT: vpackssdw %xmm3, %xmm1, %xmm1 7559 ; AVX1-NEXT: vextractf128 $1, %ymm5, %xmm3 7560 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm6 7561 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm6, %xmm3 7562 ; AVX1-NEXT: vpcmpgtq %xmm5, %xmm0, %xmm0 7563 ; AVX1-NEXT: vpackssdw %xmm3, %xmm0, %xmm0 7564 ; AVX1-NEXT: vpackssdw %xmm1, %xmm0, %xmm0 7565 ; AVX1-NEXT: vpacksswb %xmm2, %xmm0, %xmm0 7566 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 7567 ; AVX1-NEXT: movq %rbp, %rsp 7568 ; AVX1-NEXT: popq %rbp 7569 ; AVX1-NEXT: retq 7570 ; 7571 ; AVX2-LABEL: test_cmp_v32i64: 7572 ; AVX2: # %bb.0: 7573 ; AVX2-NEXT: pushq %rbp 7574 ; AVX2-NEXT: movq %rsp, %rbp 7575 ; AVX2-NEXT: andq $-32, %rsp 7576 ; AVX2-NEXT: subq $32, %rsp 7577 ; AVX2-NEXT: vpcmpgtq 240(%rbp), %ymm7, %ymm7 7578 ; AVX2-NEXT: vpcmpgtq 208(%rbp), %ymm6, %ymm6 7579 ; AVX2-NEXT: vpackssdw %ymm7, %ymm6, %ymm6 7580 ; AVX2-NEXT: vpermq {{.*#+}} ymm6 = ymm6[0,2,1,3] 7581 ; AVX2-NEXT: vpcmpgtq 176(%rbp), %ymm5, %ymm5 7582 ; AVX2-NEXT: vpcmpgtq 144(%rbp), %ymm4, %ymm4 7583 ; AVX2-NEXT: vpackssdw %ymm5, %ymm4, %ymm4 7584 ; AVX2-NEXT: vpermq {{.*#+}} ymm4 = ymm4[0,2,1,3] 7585 ; AVX2-NEXT: vpackssdw %ymm6, %ymm4, %ymm4 7586 ; AVX2-NEXT: vpermq {{.*#+}} ymm4 = ymm4[0,2,1,3] 7587 ; AVX2-NEXT: vpcmpgtq 112(%rbp), %ymm3, %ymm3 7588 ; AVX2-NEXT: vpcmpgtq 80(%rbp), %ymm2, %ymm2 7589 ; AVX2-NEXT: vpackssdw %ymm3, %ymm2, %ymm2 7590 ; AVX2-NEXT: vpermq {{.*#+}} ymm2 = ymm2[0,2,1,3] 7591 ; AVX2-NEXT: vpcmpgtq 48(%rbp), %ymm1, %ymm1 7592 ; AVX2-NEXT: vpcmpgtq 16(%rbp), %ymm0, %ymm0 7593 ; AVX2-NEXT: vpackssdw %ymm1, %ymm0, %ymm0 7594 ; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3] 7595 ; AVX2-NEXT: vpackssdw %ymm2, %ymm0, %ymm0 7596 ; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3] 7597 ; AVX2-NEXT: vpacksswb %ymm4, %ymm0, %ymm0 7598 ; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3] 7599 ; AVX2-NEXT: movq %rbp, %rsp 7600 ; AVX2-NEXT: popq %rbp 7601 ; AVX2-NEXT: retq 7602 ; 7603 ; AVX512F-LABEL: test_cmp_v32i64: 7604 ; AVX512F: # %bb.0: 7605 ; AVX512F-NEXT: vpcmpgtq %zmm6, %zmm2, %k0 7606 ; AVX512F-NEXT: vpcmpgtq %zmm7, %zmm3, %k1 7607 ; AVX512F-NEXT: kunpckbw %k0, %k1, %k1 7608 ; AVX512F-NEXT: vpcmpgtq %zmm4, %zmm0, %k0 7609 ; AVX512F-NEXT: vpcmpgtq %zmm5, %zmm1, %k2 7610 ; AVX512F-NEXT: kunpckbw %k0, %k2, %k2 7611 ; AVX512F-NEXT: vpternlogd $255, %zmm0, %zmm0, %zmm0 {%k2} {z} 7612 ; AVX512F-NEXT: vpmovdb %zmm0, %xmm0 7613 ; AVX512F-NEXT: vpternlogd $255, %zmm1, %zmm1, %zmm1 {%k1} {z} 7614 ; AVX512F-NEXT: vpmovdb %zmm1, %xmm1 7615 ; AVX512F-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm0 7616 ; AVX512F-NEXT: retq 7617 ; 7618 ; AVX512DQ-LABEL: test_cmp_v32i64: 7619 ; AVX512DQ: # %bb.0: 7620 ; AVX512DQ-NEXT: vpcmpgtq %zmm6, %zmm2, %k0 7621 ; AVX512DQ-NEXT: vpcmpgtq %zmm7, %zmm3, %k1 7622 ; AVX512DQ-NEXT: kunpckbw %k0, %k1, %k0 7623 ; AVX512DQ-NEXT: vpcmpgtq %zmm4, %zmm0, %k1 7624 ; AVX512DQ-NEXT: vpcmpgtq %zmm5, %zmm1, %k2 7625 ; AVX512DQ-NEXT: kunpckbw %k1, %k2, %k1 7626 ; AVX512DQ-NEXT: vpmovm2d %k1, %zmm0 7627 ; AVX512DQ-NEXT: vpmovdb %zmm0, %xmm0 7628 ; AVX512DQ-NEXT: vpmovm2d %k0, %zmm1 7629 ; AVX512DQ-NEXT: vpmovdb %zmm1, %xmm1 7630 ; AVX512DQ-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm0 7631 ; AVX512DQ-NEXT: retq 7632 ; 7633 ; AVX512BW-LABEL: test_cmp_v32i64: 7634 ; AVX512BW: # %bb.0: 7635 ; AVX512BW-NEXT: vpcmpgtq %zmm4, %zmm0, %k0 7636 ; AVX512BW-NEXT: vpcmpgtq %zmm5, %zmm1, %k1 7637 ; AVX512BW-NEXT: kunpckbw %k0, %k1, %k0 7638 ; AVX512BW-NEXT: vpcmpgtq %zmm6, %zmm2, %k1 7639 ; AVX512BW-NEXT: vpcmpgtq %zmm7, %zmm3, %k2 7640 ; AVX512BW-NEXT: kunpckbw %k1, %k2, %k1 7641 ; AVX512BW-NEXT: kunpckwd %k0, %k1, %k0 7642 ; AVX512BW-NEXT: vpmovm2b %k0, %zmm0 7643 ; AVX512BW-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 7644 ; AVX512BW-NEXT: retq 7645 %1 = icmp sgt <32 x i64> %a0, %a1 7646 ret <32 x i1> %1 7647 } 7648