brintos

brintos / llvm-project-archived public Read only

0
0
Text · 29.5 KiB · 721ffbe Raw
785 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=avx512f | FileCheck %s --check-prefixes=X86,X86-AVX512F3; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=avx512f | FileCheck %s --check-prefixes=X64,X64-AVX512F4; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=avx512bw | FileCheck %s --check-prefixes=X86,X86-AVX512BW5; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=avx512bw | FileCheck %s --check-prefixes=X64,X64-AVX512BW6 7define <16 x i32> @select00(i32 %a, <16 x i32> %b) nounwind {8; X86-LABEL: select00:9; X86:       # %bb.0:10; X86-NEXT:    cmpl $255, {{[0-9]+}}(%esp)11; X86-NEXT:    vpxor %xmm1, %xmm1, %xmm112; X86-NEXT:    je .LBB0_213; X86-NEXT:  # %bb.1:14; X86-NEXT:    vmovdqa64 %zmm0, %zmm115; X86-NEXT:  .LBB0_2:16; X86-NEXT:    vpxord %zmm1, %zmm0, %zmm017; X86-NEXT:    retl18;19; X64-LABEL: select00:20; X64:       # %bb.0:21; X64-NEXT:    cmpl $255, %edi22; X64-NEXT:    vpxor %xmm1, %xmm1, %xmm123; X64-NEXT:    je .LBB0_224; X64-NEXT:  # %bb.1:25; X64-NEXT:    vmovdqa64 %zmm0, %zmm126; X64-NEXT:  .LBB0_2:27; X64-NEXT:    vpxord %zmm1, %zmm0, %zmm028; X64-NEXT:    retq29  %cmpres = icmp eq i32 %a, 25530  %selres = select i1 %cmpres, <16 x i32> zeroinitializer, <16 x i32> %b31  %res = xor <16 x i32> %b, %selres32  ret <16 x i32> %res33}34 35define <8 x i64> @select01(i32 %a, <8 x i64> %b) nounwind {36; X86-LABEL: select01:37; X86:       # %bb.0:38; X86-NEXT:    cmpl $255, {{[0-9]+}}(%esp)39; X86-NEXT:    vpxor %xmm1, %xmm1, %xmm140; X86-NEXT:    je .LBB1_241; X86-NEXT:  # %bb.1:42; X86-NEXT:    vmovdqa64 %zmm0, %zmm143; X86-NEXT:  .LBB1_2:44; X86-NEXT:    vpxorq %zmm1, %zmm0, %zmm045; X86-NEXT:    retl46;47; X64-LABEL: select01:48; X64:       # %bb.0:49; X64-NEXT:    cmpl $255, %edi50; X64-NEXT:    vpxor %xmm1, %xmm1, %xmm151; X64-NEXT:    je .LBB1_252; X64-NEXT:  # %bb.1:53; X64-NEXT:    vmovdqa64 %zmm0, %zmm154; X64-NEXT:  .LBB1_2:55; X64-NEXT:    vpxorq %zmm1, %zmm0, %zmm056; X64-NEXT:    retq57  %cmpres = icmp eq i32 %a, 25558  %selres = select i1 %cmpres, <8 x i64> zeroinitializer, <8 x i64> %b59  %res = xor <8 x i64> %b, %selres60  ret <8 x i64> %res61}62 63define float @select02(float %a, float %b, float %c, float %eps) {64; X86-LABEL: select02:65; X86:       # %bb.0:66; X86-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero67; X86-NEXT:    vucomiss {{[0-9]+}}(%esp), %xmm068; X86-NEXT:    leal {{[0-9]+}}(%esp), %eax69; X86-NEXT:    leal {{[0-9]+}}(%esp), %ecx70; X86-NEXT:    cmovael %eax, %ecx71; X86-NEXT:    flds (%ecx)72; X86-NEXT:    retl73;74; X64-LABEL: select02:75; X64:       # %bb.0:76; X64-NEXT:    vcmpless %xmm0, %xmm3, %k177; X64-NEXT:    vmovss %xmm2, %xmm1, %xmm1 {%k1}78; X64-NEXT:    vmovaps %xmm1, %xmm079; X64-NEXT:    retq80  %cmp = fcmp oge float %a, %eps81  %cond = select i1 %cmp, float %c, float %b82  ret float %cond83}84 85define double @select03(double %a, double %b, double %c, double %eps) {86; X86-LABEL: select03:87; X86:       # %bb.0:88; X86-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero89; X86-NEXT:    vucomisd {{[0-9]+}}(%esp), %xmm090; X86-NEXT:    leal {{[0-9]+}}(%esp), %eax91; X86-NEXT:    leal {{[0-9]+}}(%esp), %ecx92; X86-NEXT:    cmovael %eax, %ecx93; X86-NEXT:    fldl (%ecx)94; X86-NEXT:    retl95;96; X64-LABEL: select03:97; X64:       # %bb.0:98; X64-NEXT:    vcmplesd %xmm0, %xmm3, %k199; X64-NEXT:    vmovsd %xmm2, %xmm1, %xmm1 {%k1}100; X64-NEXT:    vmovapd %xmm1, %xmm0101; X64-NEXT:    retq102  %cmp = fcmp oge double %a, %eps103  %cond = select i1 %cmp, double %c, double %b104  ret double %cond105}106 107define <16 x double> @select04(<16 x double> %a, <16 x double> %b) {108; X86-LABEL: select04:109; X86:       # %bb.0:110; X86-NEXT:    pushl %ebp111; X86-NEXT:    .cfi_def_cfa_offset 8112; X86-NEXT:    .cfi_offset %ebp, -8113; X86-NEXT:    movl %esp, %ebp114; X86-NEXT:    .cfi_def_cfa_register %ebp115; X86-NEXT:    andl $-64, %esp116; X86-NEXT:    subl $64, %esp117; X86-NEXT:    vmovaps 8(%ebp), %zmm1118; X86-NEXT:    movl %ebp, %esp119; X86-NEXT:    popl %ebp120; X86-NEXT:    .cfi_def_cfa %esp, 4121; X86-NEXT:    retl122;123; X64-LABEL: select04:124; X64:       # %bb.0:125; X64-NEXT:    vmovaps %zmm3, %zmm1126; X64-NEXT:    retq127  %sel = select <16 x i1> <i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false>, <16 x double> %a, <16 x double> %b128  ret <16 x double> %sel129}130 131define i8 @select05(i8 %a.0, i8 %m) {132; X86-LABEL: select05:133; X86:       # %bb.0:134; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax135; X86-NEXT:    orb {{[0-9]+}}(%esp), %al136; X86-NEXT:    retl137;138; X64-LABEL: select05:139; X64:       # %bb.0:140; X64-NEXT:    movl %edi, %eax141; X64-NEXT:    orl %esi, %eax142; X64-NEXT:    # kill: def $al killed $al killed $eax143; X64-NEXT:    retq144  %mask = bitcast i8 %m to <8 x i1>145  %a = bitcast i8 %a.0 to <8 x i1>146  %r = select <8 x i1> %mask, <8 x i1> <i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1>, <8 x i1> %a147  %res = bitcast <8 x i1> %r to i8148  ret i8 %res;149}150 151define i8 @select05_mem(ptr %a.0, ptr %m) {152; X86-AVX512F-LABEL: select05_mem:153; X86-AVX512F:       # %bb.0:154; X86-AVX512F-NEXT:    movl {{[0-9]+}}(%esp), %eax155; X86-AVX512F-NEXT:    movl {{[0-9]+}}(%esp), %ecx156; X86-AVX512F-NEXT:    movzbl (%ecx), %ecx157; X86-AVX512F-NEXT:    kmovw %ecx, %k0158; X86-AVX512F-NEXT:    movzbl (%eax), %eax159; X86-AVX512F-NEXT:    kmovw %eax, %k1160; X86-AVX512F-NEXT:    korw %k1, %k0, %k0161; X86-AVX512F-NEXT:    kmovw %k0, %eax162; X86-AVX512F-NEXT:    # kill: def $al killed $al killed $eax163; X86-AVX512F-NEXT:    retl164;165; X64-AVX512F-LABEL: select05_mem:166; X64-AVX512F:       # %bb.0:167; X64-AVX512F-NEXT:    movzbl (%rsi), %eax168; X64-AVX512F-NEXT:    kmovw %eax, %k0169; X64-AVX512F-NEXT:    movzbl (%rdi), %eax170; X64-AVX512F-NEXT:    kmovw %eax, %k1171; X64-AVX512F-NEXT:    korw %k1, %k0, %k0172; X64-AVX512F-NEXT:    kmovw %k0, %eax173; X64-AVX512F-NEXT:    # kill: def $al killed $al killed $eax174; X64-AVX512F-NEXT:    retq175;176; X86-AVX512BW-LABEL: select05_mem:177; X86-AVX512BW:       # %bb.0:178; X86-AVX512BW-NEXT:    movl {{[0-9]+}}(%esp), %eax179; X86-AVX512BW-NEXT:    movl {{[0-9]+}}(%esp), %ecx180; X86-AVX512BW-NEXT:    movzbl (%ecx), %ecx181; X86-AVX512BW-NEXT:    kmovd %ecx, %k0182; X86-AVX512BW-NEXT:    movzbl (%eax), %eax183; X86-AVX512BW-NEXT:    kmovd %eax, %k1184; X86-AVX512BW-NEXT:    korw %k1, %k0, %k0185; X86-AVX512BW-NEXT:    kmovd %k0, %eax186; X86-AVX512BW-NEXT:    # kill: def $al killed $al killed $eax187; X86-AVX512BW-NEXT:    retl188;189; X64-AVX512BW-LABEL: select05_mem:190; X64-AVX512BW:       # %bb.0:191; X64-AVX512BW-NEXT:    movzbl (%rsi), %eax192; X64-AVX512BW-NEXT:    kmovd %eax, %k0193; X64-AVX512BW-NEXT:    movzbl (%rdi), %eax194; X64-AVX512BW-NEXT:    kmovd %eax, %k1195; X64-AVX512BW-NEXT:    korw %k1, %k0, %k0196; X64-AVX512BW-NEXT:    kmovd %k0, %eax197; X64-AVX512BW-NEXT:    # kill: def $al killed $al killed $eax198; X64-AVX512BW-NEXT:    retq199  %mask = load <8 x i1> , ptr %m200  %a = load <8 x i1> , ptr %a.0201  %r = select <8 x i1> %mask, <8 x i1> <i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1>, <8 x i1> %a202  %res = bitcast <8 x i1> %r to i8203  ret i8 %res;204}205 206define i8 @select06(i8 %a.0, i8 %m) {207; X86-LABEL: select06:208; X86:       # %bb.0:209; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax210; X86-NEXT:    andb {{[0-9]+}}(%esp), %al211; X86-NEXT:    retl212;213; X64-LABEL: select06:214; X64:       # %bb.0:215; X64-NEXT:    movl %edi, %eax216; X64-NEXT:    andl %esi, %eax217; X64-NEXT:    # kill: def $al killed $al killed $eax218; X64-NEXT:    retq219  %mask = bitcast i8 %m to <8 x i1>220  %a = bitcast i8 %a.0 to <8 x i1>221  %r = select <8 x i1> %mask, <8 x i1> %a, <8 x i1> zeroinitializer222  %res = bitcast <8 x i1> %r to i8223  ret i8 %res;224}225 226define i8 @select06_mem(ptr %a.0, ptr %m) {227; X86-AVX512F-LABEL: select06_mem:228; X86-AVX512F:       # %bb.0:229; X86-AVX512F-NEXT:    movl {{[0-9]+}}(%esp), %eax230; X86-AVX512F-NEXT:    movl {{[0-9]+}}(%esp), %ecx231; X86-AVX512F-NEXT:    movzbl (%ecx), %ecx232; X86-AVX512F-NEXT:    kmovw %ecx, %k0233; X86-AVX512F-NEXT:    movzbl (%eax), %eax234; X86-AVX512F-NEXT:    kmovw %eax, %k1235; X86-AVX512F-NEXT:    kandw %k1, %k0, %k0236; X86-AVX512F-NEXT:    kmovw %k0, %eax237; X86-AVX512F-NEXT:    # kill: def $al killed $al killed $eax238; X86-AVX512F-NEXT:    retl239;240; X64-AVX512F-LABEL: select06_mem:241; X64-AVX512F:       # %bb.0:242; X64-AVX512F-NEXT:    movzbl (%rsi), %eax243; X64-AVX512F-NEXT:    kmovw %eax, %k0244; X64-AVX512F-NEXT:    movzbl (%rdi), %eax245; X64-AVX512F-NEXT:    kmovw %eax, %k1246; X64-AVX512F-NEXT:    kandw %k1, %k0, %k0247; X64-AVX512F-NEXT:    kmovw %k0, %eax248; X64-AVX512F-NEXT:    # kill: def $al killed $al killed $eax249; X64-AVX512F-NEXT:    retq250;251; X86-AVX512BW-LABEL: select06_mem:252; X86-AVX512BW:       # %bb.0:253; X86-AVX512BW-NEXT:    movl {{[0-9]+}}(%esp), %eax254; X86-AVX512BW-NEXT:    movl {{[0-9]+}}(%esp), %ecx255; X86-AVX512BW-NEXT:    movzbl (%ecx), %ecx256; X86-AVX512BW-NEXT:    kmovd %ecx, %k0257; X86-AVX512BW-NEXT:    movzbl (%eax), %eax258; X86-AVX512BW-NEXT:    kmovd %eax, %k1259; X86-AVX512BW-NEXT:    kandw %k1, %k0, %k0260; X86-AVX512BW-NEXT:    kmovd %k0, %eax261; X86-AVX512BW-NEXT:    # kill: def $al killed $al killed $eax262; X86-AVX512BW-NEXT:    retl263;264; X64-AVX512BW-LABEL: select06_mem:265; X64-AVX512BW:       # %bb.0:266; X64-AVX512BW-NEXT:    movzbl (%rsi), %eax267; X64-AVX512BW-NEXT:    kmovd %eax, %k0268; X64-AVX512BW-NEXT:    movzbl (%rdi), %eax269; X64-AVX512BW-NEXT:    kmovd %eax, %k1270; X64-AVX512BW-NEXT:    kandw %k1, %k0, %k0271; X64-AVX512BW-NEXT:    kmovd %k0, %eax272; X64-AVX512BW-NEXT:    # kill: def $al killed $al killed $eax273; X64-AVX512BW-NEXT:    retq274  %mask = load <8 x i1> , ptr %m275  %a = load <8 x i1> , ptr %a.0276  %r = select <8 x i1> %mask, <8 x i1> %a, <8 x i1> zeroinitializer277  %res = bitcast <8 x i1> %r to i8278  ret i8 %res;279}280define i8 @select07(i8 %a.0, i8 %b.0, i8 %m) {281; X86-AVX512F-LABEL: select07:282; X86-AVX512F:       # %bb.0:283; X86-AVX512F-NEXT:    movzbl {{[0-9]+}}(%esp), %eax284; X86-AVX512F-NEXT:    kmovw %eax, %k0285; X86-AVX512F-NEXT:    movzbl {{[0-9]+}}(%esp), %eax286; X86-AVX512F-NEXT:    kmovw %eax, %k1287; X86-AVX512F-NEXT:    movzbl {{[0-9]+}}(%esp), %eax288; X86-AVX512F-NEXT:    kmovw %eax, %k2289; X86-AVX512F-NEXT:    kandnw %k2, %k0, %k2290; X86-AVX512F-NEXT:    kandw %k0, %k1, %k0291; X86-AVX512F-NEXT:    korw %k2, %k0, %k0292; X86-AVX512F-NEXT:    kmovw %k0, %eax293; X86-AVX512F-NEXT:    # kill: def $al killed $al killed $eax294; X86-AVX512F-NEXT:    retl295;296; X64-AVX512F-LABEL: select07:297; X64-AVX512F:       # %bb.0:298; X64-AVX512F-NEXT:    kmovw %edx, %k0299; X64-AVX512F-NEXT:    kmovw %edi, %k1300; X64-AVX512F-NEXT:    kmovw %esi, %k2301; X64-AVX512F-NEXT:    kandnw %k2, %k0, %k2302; X64-AVX512F-NEXT:    kandw %k0, %k1, %k0303; X64-AVX512F-NEXT:    korw %k2, %k0, %k0304; X64-AVX512F-NEXT:    kmovw %k0, %eax305; X64-AVX512F-NEXT:    # kill: def $al killed $al killed $eax306; X64-AVX512F-NEXT:    retq307;308; X86-AVX512BW-LABEL: select07:309; X86-AVX512BW:       # %bb.0:310; X86-AVX512BW-NEXT:    movzbl {{[0-9]+}}(%esp), %eax311; X86-AVX512BW-NEXT:    kmovd %eax, %k0312; X86-AVX512BW-NEXT:    movzbl {{[0-9]+}}(%esp), %eax313; X86-AVX512BW-NEXT:    kmovd %eax, %k1314; X86-AVX512BW-NEXT:    movzbl {{[0-9]+}}(%esp), %eax315; X86-AVX512BW-NEXT:    kmovd %eax, %k2316; X86-AVX512BW-NEXT:    kandnw %k2, %k0, %k2317; X86-AVX512BW-NEXT:    kandw %k0, %k1, %k0318; X86-AVX512BW-NEXT:    korw %k2, %k0, %k0319; X86-AVX512BW-NEXT:    kmovd %k0, %eax320; X86-AVX512BW-NEXT:    # kill: def $al killed $al killed $eax321; X86-AVX512BW-NEXT:    retl322;323; X64-AVX512BW-LABEL: select07:324; X64-AVX512BW:       # %bb.0:325; X64-AVX512BW-NEXT:    kmovd %edx, %k0326; X64-AVX512BW-NEXT:    kmovd %edi, %k1327; X64-AVX512BW-NEXT:    kmovd %esi, %k2328; X64-AVX512BW-NEXT:    kandnw %k2, %k0, %k2329; X64-AVX512BW-NEXT:    kandw %k0, %k1, %k0330; X64-AVX512BW-NEXT:    korw %k2, %k0, %k0331; X64-AVX512BW-NEXT:    kmovd %k0, %eax332; X64-AVX512BW-NEXT:    # kill: def $al killed $al killed $eax333; X64-AVX512BW-NEXT:    retq334  %mask = bitcast i8 %m to <8 x i1>335  %a = bitcast i8 %a.0 to <8 x i1>336  %b = bitcast i8 %b.0 to <8 x i1>337  %r = select <8 x i1> %mask, <8 x i1> %a, <8 x i1> %b338  %res = bitcast <8 x i1> %r to i8339  ret i8 %res;340}341 342define i64 @pr30249() {343; X86-LABEL: pr30249:344; X86:       # %bb.0:345; X86-NEXT:    movl $1, %eax346; X86-NEXT:    xorl %edx, %edx347; X86-NEXT:    retl348;349; X64-LABEL: pr30249:350; X64:       # %bb.0:351; X64-NEXT:    movl $1, %eax352; X64-NEXT:    retq353  %v = select i1 undef , i64 1, i64 2354  ret i64 %v355}356 357define double @pr30561_f64(double %b, double %a, i1 %c) {358; X86-LABEL: pr30561_f64:359; X86:       # %bb.0:360; X86-NEXT:    testb $1, {{[0-9]+}}(%esp)361; X86-NEXT:    leal {{[0-9]+}}(%esp), %eax362; X86-NEXT:    leal {{[0-9]+}}(%esp), %ecx363; X86-NEXT:    cmovnel %eax, %ecx364; X86-NEXT:    fldl (%ecx)365; X86-NEXT:    retl366;367; X64-AVX512F-LABEL: pr30561_f64:368; X64-AVX512F:       # %bb.0:369; X64-AVX512F-NEXT:    kmovw %edi, %k1370; X64-AVX512F-NEXT:    vmovsd %xmm1, %xmm0, %xmm0 {%k1}371; X64-AVX512F-NEXT:    retq372;373; X64-AVX512BW-LABEL: pr30561_f64:374; X64-AVX512BW:       # %bb.0:375; X64-AVX512BW-NEXT:    kmovd %edi, %k1376; X64-AVX512BW-NEXT:    vmovsd %xmm1, %xmm0, %xmm0 {%k1}377; X64-AVX512BW-NEXT:    retq378  %cond = select i1 %c, double %a, double %b379  ret double %cond380}381 382define float @pr30561_f32(float %b, float %a, i1 %c) {383; X86-LABEL: pr30561_f32:384; X86:       # %bb.0:385; X86-NEXT:    testb $1, {{[0-9]+}}(%esp)386; X86-NEXT:    leal {{[0-9]+}}(%esp), %eax387; X86-NEXT:    leal {{[0-9]+}}(%esp), %ecx388; X86-NEXT:    cmovnel %eax, %ecx389; X86-NEXT:    flds (%ecx)390; X86-NEXT:    retl391;392; X64-AVX512F-LABEL: pr30561_f32:393; X64-AVX512F:       # %bb.0:394; X64-AVX512F-NEXT:    kmovw %edi, %k1395; X64-AVX512F-NEXT:    vmovss %xmm1, %xmm0, %xmm0 {%k1}396; X64-AVX512F-NEXT:    retq397;398; X64-AVX512BW-LABEL: pr30561_f32:399; X64-AVX512BW:       # %bb.0:400; X64-AVX512BW-NEXT:    kmovd %edi, %k1401; X64-AVX512BW-NEXT:    vmovss %xmm1, %xmm0, %xmm0 {%k1}402; X64-AVX512BW-NEXT:    retq403  %cond = select i1 %c, float %a, float %b404  ret float %cond405}406 407define <16 x i16> @pr31515(<16 x i1> %a, <16 x i1> %b, <16 x i16> %c) nounwind {408; X86-AVX512F-LABEL: pr31515:409; X86-AVX512F:       # %bb.0:410; X86-AVX512F-NEXT:    vpand %xmm1, %xmm0, %xmm0411; X86-AVX512F-NEXT:    vpmovzxbw {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero,xmm0[8],zero,xmm0[9],zero,xmm0[10],zero,xmm0[11],zero,xmm0[12],zero,xmm0[13],zero,xmm0[14],zero,xmm0[15],zero412; X86-AVX512F-NEXT:    vpsllw $15, %ymm0, %ymm0413; X86-AVX512F-NEXT:    vpsraw $15, %ymm0, %ymm0414; X86-AVX512F-NEXT:    vpandn %ymm2, %ymm0, %ymm0415; X86-AVX512F-NEXT:    retl416;417; X64-AVX512F-LABEL: pr31515:418; X64-AVX512F:       # %bb.0:419; X64-AVX512F-NEXT:    vpand %xmm1, %xmm0, %xmm0420; X64-AVX512F-NEXT:    vpmovzxbw {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero,xmm0[8],zero,xmm0[9],zero,xmm0[10],zero,xmm0[11],zero,xmm0[12],zero,xmm0[13],zero,xmm0[14],zero,xmm0[15],zero421; X64-AVX512F-NEXT:    vpsllw $15, %ymm0, %ymm0422; X64-AVX512F-NEXT:    vpsraw $15, %ymm0, %ymm0423; X64-AVX512F-NEXT:    vpandn %ymm2, %ymm0, %ymm0424; X64-AVX512F-NEXT:    retq425;426; X86-AVX512BW-LABEL: pr31515:427; X86-AVX512BW:       # %bb.0:428; X86-AVX512BW-NEXT:    # kill: def $ymm2 killed $ymm2 def $zmm2429; X86-AVX512BW-NEXT:    vpand %xmm1, %xmm0, %xmm0430; X86-AVX512BW-NEXT:    vpsllw $7, %xmm0, %xmm0431; X86-AVX512BW-NEXT:    vpmovb2m %zmm0, %k0432; X86-AVX512BW-NEXT:    knotw %k0, %k1433; X86-AVX512BW-NEXT:    vmovdqu16 %zmm2, %zmm0 {%k1} {z}434; X86-AVX512BW-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0435; X86-AVX512BW-NEXT:    retl436;437; X64-AVX512BW-LABEL: pr31515:438; X64-AVX512BW:       # %bb.0:439; X64-AVX512BW-NEXT:    # kill: def $ymm2 killed $ymm2 def $zmm2440; X64-AVX512BW-NEXT:    vpand %xmm1, %xmm0, %xmm0441; X64-AVX512BW-NEXT:    vpsllw $7, %xmm0, %xmm0442; X64-AVX512BW-NEXT:    vpmovb2m %zmm0, %k0443; X64-AVX512BW-NEXT:    knotw %k0, %k1444; X64-AVX512BW-NEXT:    vmovdqu16 %zmm2, %zmm0 {%k1} {z}445; X64-AVX512BW-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0446; X64-AVX512BW-NEXT:    retq447  %mask = and <16 x i1> %a, %b448  %res = select <16 x i1> %mask, <16 x i16> zeroinitializer, <16 x i16> %c449  ret <16 x i16> %res450}451 452define <32 x i16> @pr42355_v32i16(i1 %c, <32 x i16> %x, <32 x i16> %y) {453; X86-LABEL: pr42355_v32i16:454; X86:       # %bb.0:455; X86-NEXT:    testb $1, {{[0-9]+}}(%esp)456; X86-NEXT:    jne .LBB14_2457; X86-NEXT:  # %bb.1:458; X86-NEXT:    vmovaps %zmm1, %zmm0459; X86-NEXT:  .LBB14_2:460; X86-NEXT:    retl461;462; X64-LABEL: pr42355_v32i16:463; X64:       # %bb.0:464; X64-NEXT:    testb $1, %dil465; X64-NEXT:    jne .LBB14_2466; X64-NEXT:  # %bb.1:467; X64-NEXT:    vmovaps %zmm1, %zmm0468; X64-NEXT:  .LBB14_2:469; X64-NEXT:    retq470  %a = select i1 %c, <32 x i16> %x, <32 x i16> %y471  ret <32 x i16> %a472}473 474define <64 x i8> @pr42355_v64i8(i1 %c, <64 x i8> %x, <64 x i8> %y) {475; X86-LABEL: pr42355_v64i8:476; X86:       # %bb.0:477; X86-NEXT:    testb $1, {{[0-9]+}}(%esp)478; X86-NEXT:    jne .LBB15_2479; X86-NEXT:  # %bb.1:480; X86-NEXT:    vmovaps %zmm1, %zmm0481; X86-NEXT:  .LBB15_2:482; X86-NEXT:    retl483;484; X64-LABEL: pr42355_v64i8:485; X64:       # %bb.0:486; X64-NEXT:    testb $1, %dil487; X64-NEXT:    jne .LBB15_2488; X64-NEXT:  # %bb.1:489; X64-NEXT:    vmovaps %zmm1, %zmm0490; X64-NEXT:  .LBB15_2:491; X64-NEXT:    retq492  %a = select i1 %c, <64 x i8> %x, <64 x i8> %y493  ret <64 x i8> %a494}495 496; This would crash because AVX512 has legal vector select497; condition values that are not 256/512-bit vectors.498 499define <16 x i64> @narrowExtractedVectorSelect_crash(<16 x i64> %arg, <16 x i16> %arg1) #0 {500; X86-AVX512F-LABEL: narrowExtractedVectorSelect_crash:501; X86-AVX512F:       # %bb.0:502; X86-AVX512F-NEXT:    vptestmq %zmm0, %zmm0, %k0503; X86-AVX512F-NEXT:    vptestmq %zmm1, %zmm1, %k1504; X86-AVX512F-NEXT:    kunpckbw %k0, %k1, %k1505; X86-AVX512F-NEXT:    vpternlogd {{.*#+}} zmm0 {%k1} {z} = -1506; X86-AVX512F-NEXT:    vpmovdw %zmm0, %ymm0507; X86-AVX512F-NEXT:    vpand %ymm2, %ymm0, %ymm1508; X86-AVX512F-NEXT:    vpmovzxwq {{.*#+}} zmm0 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero,xmm1[2],zero,zero,zero,xmm1[3],zero,zero,zero,xmm1[4],zero,zero,zero,xmm1[5],zero,zero,zero,xmm1[6],zero,zero,zero,xmm1[7],zero,zero,zero509; X86-AVX512F-NEXT:    vextracti128 $1, %ymm1, %xmm1510; X86-AVX512F-NEXT:    vpmovzxwq {{.*#+}} zmm1 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero,xmm1[2],zero,zero,zero,xmm1[3],zero,zero,zero,xmm1[4],zero,zero,zero,xmm1[5],zero,zero,zero,xmm1[6],zero,zero,zero,xmm1[7],zero,zero,zero511; X86-AVX512F-NEXT:    retl512;513; X64-AVX512F-LABEL: narrowExtractedVectorSelect_crash:514; X64-AVX512F:       # %bb.0:515; X64-AVX512F-NEXT:    vptestmq %zmm0, %zmm0, %k0516; X64-AVX512F-NEXT:    vptestmq %zmm1, %zmm1, %k1517; X64-AVX512F-NEXT:    kunpckbw %k0, %k1, %k1518; X64-AVX512F-NEXT:    vpternlogd {{.*#+}} zmm0 {%k1} {z} = -1519; X64-AVX512F-NEXT:    vpmovdw %zmm0, %ymm0520; X64-AVX512F-NEXT:    vpand %ymm2, %ymm0, %ymm1521; X64-AVX512F-NEXT:    vpmovzxwq {{.*#+}} zmm0 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero,xmm1[2],zero,zero,zero,xmm1[3],zero,zero,zero,xmm1[4],zero,zero,zero,xmm1[5],zero,zero,zero,xmm1[6],zero,zero,zero,xmm1[7],zero,zero,zero522; X64-AVX512F-NEXT:    vextracti128 $1, %ymm1, %xmm1523; X64-AVX512F-NEXT:    vpmovzxwq {{.*#+}} zmm1 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero,xmm1[2],zero,zero,zero,xmm1[3],zero,zero,zero,xmm1[4],zero,zero,zero,xmm1[5],zero,zero,zero,xmm1[6],zero,zero,zero,xmm1[7],zero,zero,zero524; X64-AVX512F-NEXT:    retq525;526; X86-AVX512BW-LABEL: narrowExtractedVectorSelect_crash:527; X86-AVX512BW:       # %bb.0:528; X86-AVX512BW-NEXT:    # kill: def $ymm2 killed $ymm2 def $zmm2529; X86-AVX512BW-NEXT:    vptestmq %zmm0, %zmm0, %k0530; X86-AVX512BW-NEXT:    vptestmq %zmm1, %zmm1, %k1531; X86-AVX512BW-NEXT:    kunpckbw %k0, %k1, %k1532; X86-AVX512BW-NEXT:    vmovdqu16 %zmm2, %zmm1 {%k1} {z}533; X86-AVX512BW-NEXT:    vpmovzxwq {{.*#+}} zmm0 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero,xmm1[2],zero,zero,zero,xmm1[3],zero,zero,zero,xmm1[4],zero,zero,zero,xmm1[5],zero,zero,zero,xmm1[6],zero,zero,zero,xmm1[7],zero,zero,zero534; X86-AVX512BW-NEXT:    vextracti128 $1, %ymm1, %xmm1535; X86-AVX512BW-NEXT:    vpmovzxwq {{.*#+}} zmm1 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero,xmm1[2],zero,zero,zero,xmm1[3],zero,zero,zero,xmm1[4],zero,zero,zero,xmm1[5],zero,zero,zero,xmm1[6],zero,zero,zero,xmm1[7],zero,zero,zero536; X86-AVX512BW-NEXT:    retl537;538; X64-AVX512BW-LABEL: narrowExtractedVectorSelect_crash:539; X64-AVX512BW:       # %bb.0:540; X64-AVX512BW-NEXT:    # kill: def $ymm2 killed $ymm2 def $zmm2541; X64-AVX512BW-NEXT:    vptestmq %zmm0, %zmm0, %k0542; X64-AVX512BW-NEXT:    vptestmq %zmm1, %zmm1, %k1543; X64-AVX512BW-NEXT:    kunpckbw %k0, %k1, %k1544; X64-AVX512BW-NEXT:    vmovdqu16 %zmm2, %zmm1 {%k1} {z}545; X64-AVX512BW-NEXT:    vpmovzxwq {{.*#+}} zmm0 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero,xmm1[2],zero,zero,zero,xmm1[3],zero,zero,zero,xmm1[4],zero,zero,zero,xmm1[5],zero,zero,zero,xmm1[6],zero,zero,zero,xmm1[7],zero,zero,zero546; X64-AVX512BW-NEXT:    vextracti128 $1, %ymm1, %xmm1547; X64-AVX512BW-NEXT:    vpmovzxwq {{.*#+}} zmm1 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero,xmm1[2],zero,zero,zero,xmm1[3],zero,zero,zero,xmm1[4],zero,zero,zero,xmm1[5],zero,zero,zero,xmm1[6],zero,zero,zero,xmm1[7],zero,zero,zero548; X64-AVX512BW-NEXT:    retq549  %tmp = icmp ne <16 x i64> %arg, zeroinitializer550  %tmp2 = select <16 x i1> %tmp, <16 x i16> %arg1, <16 x i16> zeroinitializer551  %tmp3 = zext <16 x i16> %tmp2 to <16 x i64>552  ret <16 x i64> %tmp3553}554 555define void @vselect_v1i1(ptr %w, ptr %x, ptr %y) nounwind {556; X86-AVX512F-LABEL: vselect_v1i1:557; X86-AVX512F:       # %bb.0:558; X86-AVX512F-NEXT:    pushl %esi559; X86-AVX512F-NEXT:    movl {{[0-9]+}}(%esp), %ecx560; X86-AVX512F-NEXT:    movl {{[0-9]+}}(%esp), %edx561; X86-AVX512F-NEXT:    movl {{[0-9]+}}(%esp), %eax562; X86-AVX512F-NEXT:    movzbl (%eax), %esi563; X86-AVX512F-NEXT:    kmovw %esi, %k0564; X86-AVX512F-NEXT:    movzbl (%edx), %edx565; X86-AVX512F-NEXT:    kmovw %edx, %k1566; X86-AVX512F-NEXT:    movzbl (%ecx), %ecx567; X86-AVX512F-NEXT:    kmovw %ecx, %k2568; X86-AVX512F-NEXT:    kandnw %k1, %k2, %k1569; X86-AVX512F-NEXT:    kandw %k2, %k0, %k0570; X86-AVX512F-NEXT:    korw %k1, %k0, %k0571; X86-AVX512F-NEXT:    kshiftlw $15, %k0, %k0572; X86-AVX512F-NEXT:    kshiftrw $15, %k0, %k0573; X86-AVX512F-NEXT:    kmovw %k0, %ecx574; X86-AVX512F-NEXT:    movb %cl, (%eax)575; X86-AVX512F-NEXT:    popl %esi576; X86-AVX512F-NEXT:    retl577;578; X64-AVX512F-LABEL: vselect_v1i1:579; X64-AVX512F:       # %bb.0:580; X64-AVX512F-NEXT:    movzbl (%rsi), %eax581; X64-AVX512F-NEXT:    kmovw %eax, %k0582; X64-AVX512F-NEXT:    movzbl (%rdx), %eax583; X64-AVX512F-NEXT:    kmovw %eax, %k1584; X64-AVX512F-NEXT:    movzbl (%rdi), %eax585; X64-AVX512F-NEXT:    kmovw %eax, %k2586; X64-AVX512F-NEXT:    kandnw %k1, %k2, %k1587; X64-AVX512F-NEXT:    kandw %k2, %k0, %k0588; X64-AVX512F-NEXT:    korw %k1, %k0, %k0589; X64-AVX512F-NEXT:    kshiftlw $15, %k0, %k0590; X64-AVX512F-NEXT:    kshiftrw $15, %k0, %k0591; X64-AVX512F-NEXT:    kmovw %k0, %eax592; X64-AVX512F-NEXT:    movb %al, (%rsi)593; X64-AVX512F-NEXT:    retq594;595; X86-AVX512BW-LABEL: vselect_v1i1:596; X86-AVX512BW:       # %bb.0:597; X86-AVX512BW-NEXT:    pushl %esi598; X86-AVX512BW-NEXT:    movl {{[0-9]+}}(%esp), %ecx599; X86-AVX512BW-NEXT:    movl {{[0-9]+}}(%esp), %edx600; X86-AVX512BW-NEXT:    movl {{[0-9]+}}(%esp), %eax601; X86-AVX512BW-NEXT:    movzbl (%eax), %esi602; X86-AVX512BW-NEXT:    kmovd %esi, %k0603; X86-AVX512BW-NEXT:    movzbl (%edx), %edx604; X86-AVX512BW-NEXT:    kmovd %edx, %k1605; X86-AVX512BW-NEXT:    movzbl (%ecx), %ecx606; X86-AVX512BW-NEXT:    kmovd %ecx, %k2607; X86-AVX512BW-NEXT:    kandnw %k1, %k2, %k1608; X86-AVX512BW-NEXT:    kandw %k2, %k0, %k0609; X86-AVX512BW-NEXT:    korw %k1, %k0, %k0610; X86-AVX512BW-NEXT:    kshiftlw $15, %k0, %k0611; X86-AVX512BW-NEXT:    kshiftrw $15, %k0, %k0612; X86-AVX512BW-NEXT:    kmovd %k0, %ecx613; X86-AVX512BW-NEXT:    movb %cl, (%eax)614; X86-AVX512BW-NEXT:    popl %esi615; X86-AVX512BW-NEXT:    retl616;617; X64-AVX512BW-LABEL: vselect_v1i1:618; X64-AVX512BW:       # %bb.0:619; X64-AVX512BW-NEXT:    movzbl (%rsi), %eax620; X64-AVX512BW-NEXT:    kmovd %eax, %k0621; X64-AVX512BW-NEXT:    movzbl (%rdx), %eax622; X64-AVX512BW-NEXT:    kmovd %eax, %k1623; X64-AVX512BW-NEXT:    movzbl (%rdi), %eax624; X64-AVX512BW-NEXT:    kmovd %eax, %k2625; X64-AVX512BW-NEXT:    kandnw %k1, %k2, %k1626; X64-AVX512BW-NEXT:    kandw %k2, %k0, %k0627; X64-AVX512BW-NEXT:    korw %k1, %k0, %k0628; X64-AVX512BW-NEXT:    kshiftlw $15, %k0, %k0629; X64-AVX512BW-NEXT:    kshiftrw $15, %k0, %k0630; X64-AVX512BW-NEXT:    kmovd %k0, %eax631; X64-AVX512BW-NEXT:    movb %al, (%rsi)632; X64-AVX512BW-NEXT:    retq633  %a = load <1 x i1>, ptr %x634  %b = load <1 x i1>, ptr %y635  %b2 = load <1 x i1>, ptr %w636  %c = select <1 x i1> %b2, <1 x i1> %a, <1 x i1> %b637  store <1 x i1> %c, ptr %x638  ret void639}640 641; Scalar condition with v1i1 operands642define void @select_v1i1(ptr %w, ptr %x, ptr %y, i1 %z) nounwind {643; X86-AVX512F-LABEL: select_v1i1:644; X86-AVX512F:       # %bb.0:645; X86-AVX512F-NEXT:    movl {{[0-9]+}}(%esp), %eax646; X86-AVX512F-NEXT:    testb $1, {{[0-9]+}}(%esp)647; X86-AVX512F-NEXT:    jne .LBB18_1648; X86-AVX512F-NEXT:  # %bb.2:649; X86-AVX512F-NEXT:    movl {{[0-9]+}}(%esp), %ecx650; X86-AVX512F-NEXT:    movl {{[0-9]+}}(%esp), %edx651; X86-AVX512F-NEXT:    movzbl (%edx), %edx652; X86-AVX512F-NEXT:    kmovw %edx, %k0653; X86-AVX512F-NEXT:    movzbl (%ecx), %ecx654; X86-AVX512F-NEXT:    kmovw %ecx, %k1655; X86-AVX512F-NEXT:    kxorw %k1, %k0, %k0656; X86-AVX512F-NEXT:    jmp .LBB18_3657; X86-AVX512F-NEXT:  .LBB18_1:658; X86-AVX512F-NEXT:    movzbl (%eax), %ecx659; X86-AVX512F-NEXT:    kmovw %ecx, %k0660; X86-AVX512F-NEXT:  .LBB18_3:661; X86-AVX512F-NEXT:    kshiftlw $15, %k0, %k0662; X86-AVX512F-NEXT:    kshiftrw $15, %k0, %k0663; X86-AVX512F-NEXT:    kmovw %k0, %ecx664; X86-AVX512F-NEXT:    movb %cl, (%eax)665; X86-AVX512F-NEXT:    retl666;667; X64-AVX512F-LABEL: select_v1i1:668; X64-AVX512F:       # %bb.0:669; X64-AVX512F-NEXT:    testb $1, %cl670; X64-AVX512F-NEXT:    jne .LBB18_1671; X64-AVX512F-NEXT:  # %bb.2:672; X64-AVX512F-NEXT:    movzbl (%rdx), %eax673; X64-AVX512F-NEXT:    kmovw %eax, %k0674; X64-AVX512F-NEXT:    movzbl (%rdi), %eax675; X64-AVX512F-NEXT:    kmovw %eax, %k1676; X64-AVX512F-NEXT:    kxorw %k1, %k0, %k0677; X64-AVX512F-NEXT:    jmp .LBB18_3678; X64-AVX512F-NEXT:  .LBB18_1:679; X64-AVX512F-NEXT:    movzbl (%rsi), %eax680; X64-AVX512F-NEXT:    kmovw %eax, %k0681; X64-AVX512F-NEXT:  .LBB18_3:682; X64-AVX512F-NEXT:    kshiftlw $15, %k0, %k0683; X64-AVX512F-NEXT:    kshiftrw $15, %k0, %k0684; X64-AVX512F-NEXT:    kmovw %k0, %eax685; X64-AVX512F-NEXT:    movb %al, (%rsi)686; X64-AVX512F-NEXT:    retq687;688; X86-AVX512BW-LABEL: select_v1i1:689; X86-AVX512BW:       # %bb.0:690; X86-AVX512BW-NEXT:    movl {{[0-9]+}}(%esp), %eax691; X86-AVX512BW-NEXT:    testb $1, {{[0-9]+}}(%esp)692; X86-AVX512BW-NEXT:    jne .LBB18_1693; X86-AVX512BW-NEXT:  # %bb.2:694; X86-AVX512BW-NEXT:    movl {{[0-9]+}}(%esp), %ecx695; X86-AVX512BW-NEXT:    movl {{[0-9]+}}(%esp), %edx696; X86-AVX512BW-NEXT:    movzbl (%edx), %edx697; X86-AVX512BW-NEXT:    kmovd %edx, %k0698; X86-AVX512BW-NEXT:    movzbl (%ecx), %ecx699; X86-AVX512BW-NEXT:    kmovd %ecx, %k1700; X86-AVX512BW-NEXT:    kxorw %k1, %k0, %k0701; X86-AVX512BW-NEXT:    jmp .LBB18_3702; X86-AVX512BW-NEXT:  .LBB18_1:703; X86-AVX512BW-NEXT:    movzbl (%eax), %ecx704; X86-AVX512BW-NEXT:    kmovd %ecx, %k0705; X86-AVX512BW-NEXT:  .LBB18_3:706; X86-AVX512BW-NEXT:    kshiftlw $15, %k0, %k0707; X86-AVX512BW-NEXT:    kshiftrw $15, %k0, %k0708; X86-AVX512BW-NEXT:    kmovd %k0, %ecx709; X86-AVX512BW-NEXT:    movb %cl, (%eax)710; X86-AVX512BW-NEXT:    retl711;712; X64-AVX512BW-LABEL: select_v1i1:713; X64-AVX512BW:       # %bb.0:714; X64-AVX512BW-NEXT:    testb $1, %cl715; X64-AVX512BW-NEXT:    jne .LBB18_1716; X64-AVX512BW-NEXT:  # %bb.2:717; X64-AVX512BW-NEXT:    movzbl (%rdx), %eax718; X64-AVX512BW-NEXT:    kmovd %eax, %k0719; X64-AVX512BW-NEXT:    movzbl (%rdi), %eax720; X64-AVX512BW-NEXT:    kmovd %eax, %k1721; X64-AVX512BW-NEXT:    kxorw %k1, %k0, %k0722; X64-AVX512BW-NEXT:    jmp .LBB18_3723; X64-AVX512BW-NEXT:  .LBB18_1:724; X64-AVX512BW-NEXT:    movzbl (%rsi), %eax725; X64-AVX512BW-NEXT:    kmovd %eax, %k0726; X64-AVX512BW-NEXT:  .LBB18_3:727; X64-AVX512BW-NEXT:    kshiftlw $15, %k0, %k0728; X64-AVX512BW-NEXT:    kshiftrw $15, %k0, %k0729; X64-AVX512BW-NEXT:    kmovd %k0, %eax730; X64-AVX512BW-NEXT:    movb %al, (%rsi)731; X64-AVX512BW-NEXT:    retq732  %a = load <1 x i1>, ptr %x733  %b = load <1 x i1>, ptr %y734  %b2 = load <1 x i1>, ptr %w735  %b3 = xor <1 x i1> %b, %b2736  %c = select i1 %z, <1 x i1> %a, <1 x i1> %b3737  store <1 x i1> %c, ptr %x738  ret void739}740 741; Regression test from https://github.com/JuliaLang/julia/issues/36955742define i8 @julia_issue36955(<8 x i1> %mask, <8 x double> %a) {743; X86-AVX512F-LABEL: julia_issue36955:744; X86-AVX512F:       # %bb.0:745; X86-AVX512F-NEXT:    vxorpd %xmm0, %xmm0, %xmm0746; X86-AVX512F-NEXT:    vcmplepd %zmm0, %zmm1, %k0747; X86-AVX512F-NEXT:    kmovw %k0, %eax748; X86-AVX512F-NEXT:    # kill: def $al killed $al killed $eax749; X86-AVX512F-NEXT:    vzeroupper750; X86-AVX512F-NEXT:    retl751;752; X64-AVX512F-LABEL: julia_issue36955:753; X64-AVX512F:       # %bb.0:754; X64-AVX512F-NEXT:    vxorpd %xmm0, %xmm0, %xmm0755; X64-AVX512F-NEXT:    vcmplepd %zmm0, %zmm1, %k0756; X64-AVX512F-NEXT:    kmovw %k0, %eax757; X64-AVX512F-NEXT:    # kill: def $al killed $al killed $eax758; X64-AVX512F-NEXT:    vzeroupper759; X64-AVX512F-NEXT:    retq760;761; X86-AVX512BW-LABEL: julia_issue36955:762; X86-AVX512BW:       # %bb.0:763; X86-AVX512BW-NEXT:    vxorpd %xmm0, %xmm0, %xmm0764; X86-AVX512BW-NEXT:    vcmplepd %zmm0, %zmm1, %k0765; X86-AVX512BW-NEXT:    kmovd %k0, %eax766; X86-AVX512BW-NEXT:    # kill: def $al killed $al killed $eax767; X86-AVX512BW-NEXT:    vzeroupper768; X86-AVX512BW-NEXT:    retl769;770; X64-AVX512BW-LABEL: julia_issue36955:771; X64-AVX512BW:       # %bb.0:772; X64-AVX512BW-NEXT:    vxorpd %xmm0, %xmm0, %xmm0773; X64-AVX512BW-NEXT:    vcmplepd %zmm0, %zmm1, %k0774; X64-AVX512BW-NEXT:    kmovd %k0, %eax775; X64-AVX512BW-NEXT:    # kill: def $al killed $al killed $eax776; X64-AVX512BW-NEXT:    vzeroupper777; X64-AVX512BW-NEXT:    retq778  %fcmp = fcmp ugt <8 x double> %a, zeroinitializer779  %xor = xor <8 x i1> %fcmp, <i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true>780  %select1 = select <8 x i1> %fcmp, <8 x i1> zeroinitializer, <8 x i1> %mask781  %select2 = select <8 x i1> %xor, <8 x i1> <i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true>, <8 x i1> %select1782  %ret = bitcast <8 x i1> %select2 to i8783  ret i8 %ret784}785