brintos

brintos / llvm-project-archived public Read only

0
0
Text · 17.3 KiB · d1513b5 Raw
553 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=x86_64-unknown-unknown -mattr=+avx512f,+avx512bw,+avx512dq < %s | FileCheck %s --check-prefix=X86-643; RUN: llc -mtriple=i386-unknown-unknown -mattr=+avx512f,+avx512bw,+avx512dq < %s | FileCheck %s --check-prefix=X86-324 5define void @test_fcmp_storefloat(i1 %cond, ptr %fptr, float %f1, float %f2, float %f3, float %f4, float %f5, float %f6) {6; X86-64-LABEL: test_fcmp_storefloat:7; X86-64:       # %bb.0: # %entry8; X86-64-NEXT:    testb $1, %dil9; X86-64-NEXT:    je .LBB0_210; X86-64-NEXT:  # %bb.1: # %if11; X86-64-NEXT:    vcmpeqss %xmm3, %xmm2, %k112; X86-64-NEXT:    jmp .LBB0_313; X86-64-NEXT:  .LBB0_2: # %else14; X86-64-NEXT:    vcmpeqss %xmm5, %xmm4, %k115; X86-64-NEXT:  .LBB0_3: # %exit16; X86-64-NEXT:    vmovss %xmm0, %xmm1, %xmm1 {%k1}17; X86-64-NEXT:    vmovss %xmm1, (%rsi)18; X86-64-NEXT:    retq19;20; X86-32-LABEL: test_fcmp_storefloat:21; X86-32:       # %bb.0: # %entry22; X86-32-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero23; X86-32-NEXT:    vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero24; X86-32-NEXT:    movl {{[0-9]+}}(%esp), %eax25; X86-32-NEXT:    testb $1, {{[0-9]+}}(%esp)26; X86-32-NEXT:    je .LBB0_227; X86-32-NEXT:  # %bb.1: # %if28; X86-32-NEXT:    vmovss {{.*#+}} xmm2 = mem[0],zero,zero,zero29; X86-32-NEXT:    vcmpeqss {{[0-9]+}}(%esp), %xmm2, %k130; X86-32-NEXT:    jmp .LBB0_331; X86-32-NEXT:  .LBB0_2: # %else32; X86-32-NEXT:    vmovss {{.*#+}} xmm2 = mem[0],zero,zero,zero33; X86-32-NEXT:    vcmpeqss {{[0-9]+}}(%esp), %xmm2, %k134; X86-32-NEXT:  .LBB0_3: # %exit35; X86-32-NEXT:    vmovss %xmm1, %xmm0, %xmm0 {%k1}36; X86-32-NEXT:    vmovss %xmm0, (%eax)37; X86-32-NEXT:    retl38entry:39  br i1 %cond, label %if, label %else40 41if:42  %cmp1 = fcmp oeq float %f3, %f443  br label %exit44 45else:46  %cmp2 = fcmp oeq float %f5, %f647  br label %exit48 49exit:50  %val = phi i1 [%cmp1, %if], [%cmp2, %else]51  %selected = select i1 %val, float %f1, float %f252  store float %selected, ptr %fptr53  ret void54}55 56define void @test_fcmp_storei1(i1 %cond, ptr %fptr, ptr %iptr, float %f1, float %f2, float %f3, float %f4) {57; X86-64-LABEL: test_fcmp_storei1:58; X86-64:       # %bb.0: # %entry59; X86-64-NEXT:    testb $1, %dil60; X86-64-NEXT:    je .LBB1_261; X86-64-NEXT:  # %bb.1: # %if62; X86-64-NEXT:    vcmpeqss %xmm1, %xmm0, %k063; X86-64-NEXT:    kmovb %k0, (%rdx)64; X86-64-NEXT:    retq65; X86-64-NEXT:  .LBB1_2: # %else66; X86-64-NEXT:    vcmpeqss %xmm3, %xmm2, %k067; X86-64-NEXT:    kmovb %k0, (%rdx)68; X86-64-NEXT:    retq69;70; X86-32-LABEL: test_fcmp_storei1:71; X86-32:       # %bb.0: # %entry72; X86-32-NEXT:    movl {{[0-9]+}}(%esp), %eax73; X86-32-NEXT:    testb $1, {{[0-9]+}}(%esp)74; X86-32-NEXT:    je .LBB1_275; X86-32-NEXT:  # %bb.1: # %if76; X86-32-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero77; X86-32-NEXT:    vcmpeqss {{[0-9]+}}(%esp), %xmm0, %k078; X86-32-NEXT:    kmovb %k0, (%eax)79; X86-32-NEXT:    retl80; X86-32-NEXT:  .LBB1_2: # %else81; X86-32-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero82; X86-32-NEXT:    vcmpeqss {{[0-9]+}}(%esp), %xmm0, %k083; X86-32-NEXT:    kmovb %k0, (%eax)84; X86-32-NEXT:    retl85entry:86  br i1 %cond, label %if, label %else87 88if:89  %cmp1 = fcmp oeq float %f1, %f290  br label %exit91 92else:93  %cmp2 = fcmp oeq float %f3, %f494  br label %exit95 96exit:97  %val = phi i1 [%cmp1, %if], [%cmp2, %else]98  store i1 %val, ptr %iptr99  ret void100}101 102define void @test_load_add(i1 %cond, ptr %fptr, ptr %iptr1, ptr %iptr2, float %f1, float %f2)  {103; X86-64-LABEL: test_load_add:104; X86-64:       # %bb.0: # %entry105; X86-64-NEXT:    testb $1, %dil106; X86-64-NEXT:    je .LBB2_2107; X86-64-NEXT:  # %bb.1: # %if108; X86-64-NEXT:    movzbl (%rdx), %eax109; X86-64-NEXT:    xorb (%rcx), %al110; X86-64-NEXT:    jmp .LBB2_3111; X86-64-NEXT:  .LBB2_2: # %else112; X86-64-NEXT:    movzbl (%rcx), %eax113; X86-64-NEXT:  .LBB2_3: # %exit114; X86-64-NEXT:    kmovd %eax, %k1115; X86-64-NEXT:    vmovss %xmm0, %xmm1, %xmm1 {%k1}116; X86-64-NEXT:    vmovss %xmm1, (%rsi)117; X86-64-NEXT:    retq118;119; X86-32-LABEL: test_load_add:120; X86-32:       # %bb.0: # %entry121; X86-32-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero122; X86-32-NEXT:    vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero123; X86-32-NEXT:    movl {{[0-9]+}}(%esp), %ecx124; X86-32-NEXT:    movl {{[0-9]+}}(%esp), %eax125; X86-32-NEXT:    testb $1, {{[0-9]+}}(%esp)126; X86-32-NEXT:    je .LBB2_2127; X86-32-NEXT:  # %bb.1: # %if128; X86-32-NEXT:    movl {{[0-9]+}}(%esp), %edx129; X86-32-NEXT:    movzbl (%edx), %edx130; X86-32-NEXT:    xorb (%ecx), %dl131; X86-32-NEXT:    jmp .LBB2_3132; X86-32-NEXT:  .LBB2_2: # %else133; X86-32-NEXT:    movzbl (%ecx), %edx134; X86-32-NEXT:  .LBB2_3: # %exit135; X86-32-NEXT:    kmovd %edx, %k1136; X86-32-NEXT:    vmovss %xmm1, %xmm0, %xmm0 {%k1}137; X86-32-NEXT:    vmovss %xmm0, (%eax)138; X86-32-NEXT:    retl139entry:140  br i1 %cond, label %if, label %else141 142if:143  %loaded1 = load i1, ptr %iptr1144  %loaded2if = load i1, ptr %iptr2145  %added = add i1 %loaded1, %loaded2if146  br label %exit147 148else:149  %loaded2else = load i1, ptr %iptr2150  br label %exit151 152exit:153  %val = phi i1 [%added, %if], [%loaded2else, %else]154  %selected = select i1 %val, float %f1, float %f2155  store float %selected, ptr %fptr156  ret void157}158 159define void @test_load_i1(i1 %cond, ptr %fptr, ptr %iptr1, ptr %iptr2, float %f1, float %f2)  {160; X86-64-LABEL: test_load_i1:161; X86-64:       # %bb.0: # %entry162; X86-64-NEXT:    testb $1, %dil163; X86-64-NEXT:    je .LBB3_2164; X86-64-NEXT:  # %bb.1: # %if165; X86-64-NEXT:    kmovb (%rdx), %k1166; X86-64-NEXT:    jmp .LBB3_3167; X86-64-NEXT:  .LBB3_2: # %else168; X86-64-NEXT:    kmovb (%rcx), %k1169; X86-64-NEXT:  .LBB3_3: # %exit170; X86-64-NEXT:    vmovss %xmm0, %xmm1, %xmm1 {%k1}171; X86-64-NEXT:    vmovss %xmm1, (%rsi)172; X86-64-NEXT:    retq173;174; X86-32-LABEL: test_load_i1:175; X86-32:       # %bb.0: # %entry176; X86-32-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero177; X86-32-NEXT:    vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero178; X86-32-NEXT:    movl {{[0-9]+}}(%esp), %eax179; X86-32-NEXT:    testb $1, {{[0-9]+}}(%esp)180; X86-32-NEXT:    je .LBB3_2181; X86-32-NEXT:  # %bb.1: # %if182; X86-32-NEXT:    movl {{[0-9]+}}(%esp), %ecx183; X86-32-NEXT:    jmp .LBB3_3184; X86-32-NEXT:  .LBB3_2: # %else185; X86-32-NEXT:    movl {{[0-9]+}}(%esp), %ecx186; X86-32-NEXT:  .LBB3_3: # %exit187; X86-32-NEXT:    kmovb (%ecx), %k1188; X86-32-NEXT:    vmovss %xmm1, %xmm0, %xmm0 {%k1}189; X86-32-NEXT:    vmovss %xmm0, (%eax)190; X86-32-NEXT:    retl191entry:192  br i1 %cond, label %if, label %else193 194if:195  %loaded1 = load i1, ptr %iptr1196  br label %exit197 198else:199  %loaded2 = load i1, ptr %iptr2200  br label %exit201 202exit:203  %val = phi i1 [%loaded1, %if], [%loaded2, %else]204  %selected = select i1 %val, float %f1, float %f2205  store float %selected, ptr %fptr206  ret void207}208 209define void @test_loadi1_storei1(i1 %cond, ptr %iptr1, ptr %iptr2, ptr %iptr3)  {210; X86-64-LABEL: test_loadi1_storei1:211; X86-64:       # %bb.0: # %entry212; X86-64-NEXT:    testb $1, %dil213; X86-64-NEXT:    je .LBB4_2214; X86-64-NEXT:  # %bb.1: # %if215; X86-64-NEXT:    movzbl (%rsi), %eax216; X86-64-NEXT:    jmp .LBB4_3217; X86-64-NEXT:  .LBB4_2: # %else218; X86-64-NEXT:    movzbl (%rdx), %eax219; X86-64-NEXT:  .LBB4_3: # %exit220; X86-64-NEXT:    andb $1, %al221; X86-64-NEXT:    movb %al, (%rcx)222; X86-64-NEXT:    retq223;224; X86-32-LABEL: test_loadi1_storei1:225; X86-32:       # %bb.0: # %entry226; X86-32-NEXT:    movl {{[0-9]+}}(%esp), %eax227; X86-32-NEXT:    testb $1, {{[0-9]+}}(%esp)228; X86-32-NEXT:    je .LBB4_2229; X86-32-NEXT:  # %bb.1: # %if230; X86-32-NEXT:    movl {{[0-9]+}}(%esp), %ecx231; X86-32-NEXT:    jmp .LBB4_3232; X86-32-NEXT:  .LBB4_2: # %else233; X86-32-NEXT:    movl {{[0-9]+}}(%esp), %ecx234; X86-32-NEXT:  .LBB4_3: # %exit235; X86-32-NEXT:    movzbl (%ecx), %ecx236; X86-32-NEXT:    andb $1, %cl237; X86-32-NEXT:    movb %cl, (%eax)238; X86-32-NEXT:    retl239entry:240  br i1 %cond, label %if, label %else241 242if:243  %loaded1 = load i1, ptr %iptr1244  br label %exit245 246else:247  %loaded2 = load i1, ptr %iptr2248  br label %exit249 250exit:251  %val = phi i1 [%loaded1, %if], [%loaded2, %else]252  store i1 %val, ptr %iptr3253  ret void254}255 256define void @test_shl1(i1 %cond, ptr %ptr1, ptr %ptr2, <8 x float> %fvec1, <8 x float> %fvec2, ptr %fptrvec) {257; X86-64-LABEL: test_shl1:258; X86-64:       # %bb.0: # %entry259; X86-64-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1260; X86-64-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0261; X86-64-NEXT:    testb $1, %dil262; X86-64-NEXT:    je .LBB5_2263; X86-64-NEXT:  # %bb.1: # %if264; X86-64-NEXT:    kmovb (%rsi), %k0265; X86-64-NEXT:    kaddb %k0, %k0, %k1266; X86-64-NEXT:    jmp .LBB5_3267; X86-64-NEXT:  .LBB5_2: # %else268; X86-64-NEXT:    kmovb (%rdx), %k1269; X86-64-NEXT:  .LBB5_3: # %exit270; X86-64-NEXT:    vmovaps %zmm0, %zmm1 {%k1}271; X86-64-NEXT:    vmovaps %ymm1, (%rcx)272; X86-64-NEXT:    vzeroupper273; X86-64-NEXT:    retq274;275; X86-32-LABEL: test_shl1:276; X86-32:       # %bb.0: # %entry277; X86-32-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1278; X86-32-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0279; X86-32-NEXT:    movl {{[0-9]+}}(%esp), %eax280; X86-32-NEXT:    testb $1, {{[0-9]+}}(%esp)281; X86-32-NEXT:    je .LBB5_2282; X86-32-NEXT:  # %bb.1: # %if283; X86-32-NEXT:    movl {{[0-9]+}}(%esp), %ecx284; X86-32-NEXT:    kmovb (%ecx), %k0285; X86-32-NEXT:    kaddb %k0, %k0, %k1286; X86-32-NEXT:    jmp .LBB5_3287; X86-32-NEXT:  .LBB5_2: # %else288; X86-32-NEXT:    movl {{[0-9]+}}(%esp), %ecx289; X86-32-NEXT:    kmovb (%ecx), %k1290; X86-32-NEXT:  .LBB5_3: # %exit291; X86-32-NEXT:    vmovaps %zmm0, %zmm1 {%k1}292; X86-32-NEXT:    vmovaps %ymm1, (%eax)293; X86-32-NEXT:    vzeroupper294; X86-32-NEXT:    retl295entry:296  br i1 %cond, label %if, label %else297 298if:299  %loaded1 = load i8, ptr %ptr1300  %shifted = shl i8 %loaded1, 1301  br label %exit302 303else:304  %loaded2 = load i8, ptr %ptr2305  br label %exit306 307exit:308  %val = phi i8 [%shifted, %if], [%loaded2, %else]309  %mask = bitcast i8 %val to <8 x i1>310  %selected = select <8 x i1> %mask, <8 x float> %fvec1, <8 x float> %fvec2311  store <8 x float> %selected, ptr %fptrvec312  ret void313}314 315define void @test_shr1(i1 %cond, ptr %ptr1, ptr %ptr2, <8 x float> %fvec1, <8 x float> %fvec2, ptr %fptrvec) {316; X86-64-LABEL: test_shr1:317; X86-64:       # %bb.0: # %entry318; X86-64-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1319; X86-64-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0320; X86-64-NEXT:    testb $1, %dil321; X86-64-NEXT:    je .LBB6_2322; X86-64-NEXT:  # %bb.1: # %if323; X86-64-NEXT:    kmovb (%rsi), %k0324; X86-64-NEXT:    kshiftrb $1, %k0, %k1325; X86-64-NEXT:    jmp .LBB6_3326; X86-64-NEXT:  .LBB6_2: # %else327; X86-64-NEXT:    kmovb (%rdx), %k1328; X86-64-NEXT:  .LBB6_3: # %exit329; X86-64-NEXT:    vmovaps %zmm0, %zmm1 {%k1}330; X86-64-NEXT:    vmovaps %ymm1, (%rcx)331; X86-64-NEXT:    vzeroupper332; X86-64-NEXT:    retq333;334; X86-32-LABEL: test_shr1:335; X86-32:       # %bb.0: # %entry336; X86-32-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1337; X86-32-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0338; X86-32-NEXT:    movl {{[0-9]+}}(%esp), %eax339; X86-32-NEXT:    testb $1, {{[0-9]+}}(%esp)340; X86-32-NEXT:    je .LBB6_2341; X86-32-NEXT:  # %bb.1: # %if342; X86-32-NEXT:    movl {{[0-9]+}}(%esp), %ecx343; X86-32-NEXT:    kmovb (%ecx), %k0344; X86-32-NEXT:    kshiftrb $1, %k0, %k1345; X86-32-NEXT:    jmp .LBB6_3346; X86-32-NEXT:  .LBB6_2: # %else347; X86-32-NEXT:    movl {{[0-9]+}}(%esp), %ecx348; X86-32-NEXT:    kmovb (%ecx), %k1349; X86-32-NEXT:  .LBB6_3: # %exit350; X86-32-NEXT:    vmovaps %zmm0, %zmm1 {%k1}351; X86-32-NEXT:    vmovaps %ymm1, (%eax)352; X86-32-NEXT:    vzeroupper353; X86-32-NEXT:    retl354entry:355  br i1 %cond, label %if, label %else356 357if:358  %loaded1 = load i8, ptr %ptr1359  %shifted = lshr i8 %loaded1, 1360  br label %exit361 362else:363  %loaded2 = load i8, ptr %ptr2364  br label %exit365 366exit:367  %val = phi i8 [%shifted, %if], [%loaded2, %else]368  %mask = bitcast i8 %val to <8 x i1>369  %selected = select <8 x i1> %mask, <8 x float> %fvec1, <8 x float> %fvec2370  store <8 x float> %selected, ptr %fptrvec371  ret void372}373 374define void @test_shr2(i1 %cond, ptr %ptr1, ptr %ptr2, <8 x float> %fvec1, <8 x float> %fvec2, ptr %fptrvec) {375; X86-64-LABEL: test_shr2:376; X86-64:       # %bb.0: # %entry377; X86-64-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1378; X86-64-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0379; X86-64-NEXT:    testb $1, %dil380; X86-64-NEXT:    je .LBB7_2381; X86-64-NEXT:  # %bb.1: # %if382; X86-64-NEXT:    kmovb (%rsi), %k0383; X86-64-NEXT:    kshiftrb $2, %k0, %k1384; X86-64-NEXT:    jmp .LBB7_3385; X86-64-NEXT:  .LBB7_2: # %else386; X86-64-NEXT:    kmovb (%rdx), %k1387; X86-64-NEXT:  .LBB7_3: # %exit388; X86-64-NEXT:    vmovaps %zmm0, %zmm1 {%k1}389; X86-64-NEXT:    vmovaps %ymm1, (%rcx)390; X86-64-NEXT:    vzeroupper391; X86-64-NEXT:    retq392;393; X86-32-LABEL: test_shr2:394; X86-32:       # %bb.0: # %entry395; X86-32-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1396; X86-32-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0397; X86-32-NEXT:    movl {{[0-9]+}}(%esp), %eax398; X86-32-NEXT:    testb $1, {{[0-9]+}}(%esp)399; X86-32-NEXT:    je .LBB7_2400; X86-32-NEXT:  # %bb.1: # %if401; X86-32-NEXT:    movl {{[0-9]+}}(%esp), %ecx402; X86-32-NEXT:    kmovb (%ecx), %k0403; X86-32-NEXT:    kshiftrb $2, %k0, %k1404; X86-32-NEXT:    jmp .LBB7_3405; X86-32-NEXT:  .LBB7_2: # %else406; X86-32-NEXT:    movl {{[0-9]+}}(%esp), %ecx407; X86-32-NEXT:    kmovb (%ecx), %k1408; X86-32-NEXT:  .LBB7_3: # %exit409; X86-32-NEXT:    vmovaps %zmm0, %zmm1 {%k1}410; X86-32-NEXT:    vmovaps %ymm1, (%eax)411; X86-32-NEXT:    vzeroupper412; X86-32-NEXT:    retl413entry:414  br i1 %cond, label %if, label %else415 416if:417  %loaded1 = load i8, ptr %ptr1418  %shifted = lshr i8 %loaded1, 2419  br label %exit420 421else:422  %loaded2 = load i8, ptr %ptr2423  br label %exit424 425exit:426  %val = phi i8 [%shifted, %if], [%loaded2, %else]427  %mask = bitcast i8 %val to <8 x i1>428  %selected = select <8 x i1> %mask, <8 x float> %fvec1, <8 x float> %fvec2429  store <8 x float> %selected, ptr %fptrvec430  ret void431}432 433define void @test_shl(i1 %cond, ptr %ptr1, ptr %ptr2, <8 x float> %fvec1, <8 x float> %fvec2, ptr %fptrvec) {434; X86-64-LABEL: test_shl:435; X86-64:       # %bb.0: # %entry436; X86-64-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1437; X86-64-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0438; X86-64-NEXT:    testb $1, %dil439; X86-64-NEXT:    je .LBB8_2440; X86-64-NEXT:  # %bb.1: # %if441; X86-64-NEXT:    kmovb (%rsi), %k0442; X86-64-NEXT:    kshiftlb $6, %k0, %k1443; X86-64-NEXT:    jmp .LBB8_3444; X86-64-NEXT:  .LBB8_2: # %else445; X86-64-NEXT:    kmovb (%rdx), %k1446; X86-64-NEXT:  .LBB8_3: # %exit447; X86-64-NEXT:    vmovaps %zmm0, %zmm1 {%k1}448; X86-64-NEXT:    vmovaps %ymm1, (%rcx)449; X86-64-NEXT:    vzeroupper450; X86-64-NEXT:    retq451;452; X86-32-LABEL: test_shl:453; X86-32:       # %bb.0: # %entry454; X86-32-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1455; X86-32-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0456; X86-32-NEXT:    movl {{[0-9]+}}(%esp), %eax457; X86-32-NEXT:    testb $1, {{[0-9]+}}(%esp)458; X86-32-NEXT:    je .LBB8_2459; X86-32-NEXT:  # %bb.1: # %if460; X86-32-NEXT:    movl {{[0-9]+}}(%esp), %ecx461; X86-32-NEXT:    kmovb (%ecx), %k0462; X86-32-NEXT:    kshiftlb $6, %k0, %k1463; X86-32-NEXT:    jmp .LBB8_3464; X86-32-NEXT:  .LBB8_2: # %else465; X86-32-NEXT:    movl {{[0-9]+}}(%esp), %ecx466; X86-32-NEXT:    kmovb (%ecx), %k1467; X86-32-NEXT:  .LBB8_3: # %exit468; X86-32-NEXT:    vmovaps %zmm0, %zmm1 {%k1}469; X86-32-NEXT:    vmovaps %ymm1, (%eax)470; X86-32-NEXT:    vzeroupper471; X86-32-NEXT:    retl472entry:473  br i1 %cond, label %if, label %else474 475if:476  %loaded1 = load i8, ptr %ptr1477  %shifted = shl i8 %loaded1, 6478  br label %exit479 480else:481  %loaded2 = load i8, ptr %ptr2482  br label %exit483 484exit:485  %val = phi i8 [%shifted, %if], [%loaded2, %else]486  %mask = bitcast i8 %val to <8 x i1>487  %selected = select <8 x i1> %mask, <8 x float> %fvec1, <8 x float> %fvec2488  store <8 x float> %selected, ptr %fptrvec489  ret void490}491 492define void @test_add(i1 %cond, ptr %ptr1, ptr %ptr2, <8 x float> %fvec1, <8 x float> %fvec2, ptr %fptrvec) {493; X86-64-LABEL: test_add:494; X86-64:       # %bb.0: # %entry495; X86-64-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1496; X86-64-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0497; X86-64-NEXT:    kmovb (%rsi), %k0498; X86-64-NEXT:    kmovb (%rdx), %k1499; X86-64-NEXT:    testb $1, %dil500; X86-64-NEXT:    je .LBB9_2501; X86-64-NEXT:  # %bb.1: # %if502; X86-64-NEXT:    kandb %k1, %k0, %k1503; X86-64-NEXT:    jmp .LBB9_3504; X86-64-NEXT:  .LBB9_2: # %else505; X86-64-NEXT:    kaddb %k1, %k0, %k1506; X86-64-NEXT:  .LBB9_3: # %exit507; X86-64-NEXT:    vmovaps %zmm0, %zmm1 {%k1}508; X86-64-NEXT:    vmovaps %ymm1, (%rcx)509; X86-64-NEXT:    vzeroupper510; X86-64-NEXT:    retq511;512; X86-32-LABEL: test_add:513; X86-32:       # %bb.0: # %entry514; X86-32-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1515; X86-32-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0516; X86-32-NEXT:    movl {{[0-9]+}}(%esp), %eax517; X86-32-NEXT:    movl {{[0-9]+}}(%esp), %ecx518; X86-32-NEXT:    movl {{[0-9]+}}(%esp), %edx519; X86-32-NEXT:    kmovb (%edx), %k0520; X86-32-NEXT:    kmovb (%ecx), %k1521; X86-32-NEXT:    testb $1, {{[0-9]+}}(%esp)522; X86-32-NEXT:    je .LBB9_2523; X86-32-NEXT:  # %bb.1: # %if524; X86-32-NEXT:    kandb %k1, %k0, %k1525; X86-32-NEXT:    jmp .LBB9_3526; X86-32-NEXT:  .LBB9_2: # %else527; X86-32-NEXT:    kaddb %k1, %k0, %k1528; X86-32-NEXT:  .LBB9_3: # %exit529; X86-32-NEXT:    vmovaps %zmm0, %zmm1 {%k1}530; X86-32-NEXT:    vmovaps %ymm1, (%eax)531; X86-32-NEXT:    vzeroupper532; X86-32-NEXT:    retl533entry:534  %loaded1 = load i8, ptr %ptr1535  %loaded2 = load i8, ptr %ptr2536  br i1 %cond, label %if, label %else537 538if:539  %and = and i8 %loaded1, %loaded2540  br label %exit541 542else:543  %add = add i8 %loaded1, %loaded2544  br label %exit545 546exit:547  %val = phi i8 [%and, %if], [%add, %else]548  %mask = bitcast i8 %val to <8 x i1>549  %selected = select <8 x i1> %mask, <8 x float> %fvec1, <8 x float> %fvec2550  store <8 x float> %selected, ptr %fptrvec551  ret void552}553