brintos

brintos / llvm-project-archived public Read only

0
0
Text · 24.6 KiB · eb8bff2 Raw
533 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=i686-apple-darwin -mcpu=knl | FileCheck %s -check-prefix=X323; RUN: llc < %s -mtriple=i686-apple-darwin -mcpu=skx | FileCheck %s -check-prefix=X324; RUN: llc < %s -mtriple=i386-pc-win32 -mcpu=knl | FileCheck %s -check-prefix=WIN325; RUN: llc < %s -mtriple=i386-pc-win32 -mcpu=skx | FileCheck %s -check-prefix=WIN326; RUN: llc < %s -mtriple=x86_64-win32 -mcpu=knl | FileCheck %s -check-prefixes=WIN64,WIN64-KNL7; RUN: llc < %s -mtriple=x86_64-win32 -mcpu=skx | FileCheck %s -check-prefixes=WIN64,WIN64-SKX8; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=knl | FileCheck %s -check-prefixes=X64,X64-KNL9; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=skx | FileCheck %s -check-prefixes=X64,X64-SKX10 11declare <16 x float> @func_float16_ptr(<16 x float>, ptr)12declare <16 x float> @func_float16(<16 x float>, <16 x float>)13declare i32 @func_int(i32, i32)14 15;test calling conventions - input parameters16define <16 x float> @testf16_inp(<16 x float> %a, <16 x float> %b) nounwind {17; X32-LABEL: testf16_inp:18; X32:       ## %bb.0:19; X32-NEXT:    pushl %ebp20; X32-NEXT:    movl %esp, %ebp21; X32-NEXT:    andl $-64, %esp22; X32-NEXT:    subl $192, %esp23; X32-NEXT:    vaddps %zmm1, %zmm0, %zmm024; X32-NEXT:    leal {{[0-9]+}}(%esp), %eax25; X32-NEXT:    movl %eax, (%esp)26; X32-NEXT:    calll _func_float16_ptr27; X32-NEXT:    vaddps {{[0-9]+}}(%esp), %zmm0, %zmm028; X32-NEXT:    movl %ebp, %esp29; X32-NEXT:    popl %ebp30; X32-NEXT:    retl31;32; WIN32-LABEL: testf16_inp:33; WIN32:       # %bb.0:34; WIN32-NEXT:    pushl %ebp35; WIN32-NEXT:    movl %esp, %ebp36; WIN32-NEXT:    andl $-64, %esp37; WIN32-NEXT:    subl $128, %esp38; WIN32-NEXT:    vaddps %zmm1, %zmm0, %zmm039; WIN32-NEXT:    movl %esp, %eax40; WIN32-NEXT:    pushl %eax41; WIN32-NEXT:    calll _func_float16_ptr42; WIN32-NEXT:    addl $4, %esp43; WIN32-NEXT:    vaddps (%esp), %zmm0, %zmm044; WIN32-NEXT:    movl %ebp, %esp45; WIN32-NEXT:    popl %ebp46; WIN32-NEXT:    retl47;48; WIN64-LABEL: testf16_inp:49; WIN64:       # %bb.0:50; WIN64-NEXT:    pushq %rbp51; WIN64-NEXT:    subq $176, %rsp52; WIN64-NEXT:    leaq {{[0-9]+}}(%rsp), %rbp53; WIN64-NEXT:    andq $-64, %rsp54; WIN64-NEXT:    vmovaps (%rcx), %zmm055; WIN64-NEXT:    vaddps (%rdx), %zmm0, %zmm056; WIN64-NEXT:    leaq {{[0-9]+}}(%rsp), %rcx57; WIN64-NEXT:    callq func_float16_ptr58; WIN64-NEXT:    vaddps {{[0-9]+}}(%rsp), %zmm0, %zmm059; WIN64-NEXT:    leaq 48(%rbp), %rsp60; WIN64-NEXT:    popq %rbp61; WIN64-NEXT:    retq62;63; X64-LABEL: testf16_inp:64; X64:       ## %bb.0:65; X64-NEXT:    pushq %rbp66; X64-NEXT:    movq %rsp, %rbp67; X64-NEXT:    pushq %r1368; X64-NEXT:    pushq %r1269; X64-NEXT:    andq $-64, %rsp70; X64-NEXT:    subq $128, %rsp71; X64-NEXT:    vaddps %zmm1, %zmm0, %zmm072; X64-NEXT:    movq %rsp, %rdi73; X64-NEXT:    pushq %rbp74; X64-NEXT:    pushq %rax75; X64-NEXT:    callq _func_float16_ptr76; X64-NEXT:    addq $8, %rsp77; X64-NEXT:    popq %rbp78; X64-NEXT:    vaddps (%rsp), %zmm0, %zmm079; X64-NEXT:    leaq -16(%rbp), %rsp80; X64-NEXT:    popq %r1281; X64-NEXT:    popq %r1382; X64-NEXT:    popq %rbp83; X64-NEXT:    retq84  %y = alloca <16 x float>, align 6485  %x = fadd <16 x float> %a, %b86  %1 = call intel_ocl_bicc <16 x float> @func_float16_ptr(<16 x float> %x, ptr %y)87  %2 = load <16 x float>, ptr %y, align 1688  %3 = fadd <16 x float> %2, %189  ret <16 x float> %390}91 92;test calling conventions - preserved registers93 94define <16 x float> @testf16_regs(<16 x float> %a, <16 x float> %b) nounwind {95; X32-LABEL: testf16_regs:96; X32:       ## %bb.0:97; X32-NEXT:    pushl %ebp98; X32-NEXT:    movl %esp, %ebp99; X32-NEXT:    andl $-64, %esp100; X32-NEXT:    subl $256, %esp ## imm = 0x100101; X32-NEXT:    vmovaps %zmm1, {{[-0-9]+}}(%e{{[sb]}}p) ## 64-byte Spill102; X32-NEXT:    vaddps %zmm1, %zmm0, %zmm0103; X32-NEXT:    leal {{[0-9]+}}(%esp), %eax104; X32-NEXT:    movl %eax, (%esp)105; X32-NEXT:    calll _func_float16_ptr106; X32-NEXT:    vaddps {{[-0-9]+}}(%e{{[sb]}}p), %zmm0, %zmm0 ## 64-byte Folded Reload107; X32-NEXT:    vaddps {{[0-9]+}}(%esp), %zmm0, %zmm0108; X32-NEXT:    movl %ebp, %esp109; X32-NEXT:    popl %ebp110; X32-NEXT:    retl111;112; WIN32-LABEL: testf16_regs:113; WIN32:       # %bb.0:114; WIN32-NEXT:    pushl %ebp115; WIN32-NEXT:    movl %esp, %ebp116; WIN32-NEXT:    andl $-64, %esp117; WIN32-NEXT:    subl $192, %esp118; WIN32-NEXT:    vmovaps %zmm1, (%esp) # 64-byte Spill119; WIN32-NEXT:    vaddps %zmm1, %zmm0, %zmm0120; WIN32-NEXT:    leal {{[0-9]+}}(%esp), %eax121; WIN32-NEXT:    pushl %eax122; WIN32-NEXT:    calll _func_float16_ptr123; WIN32-NEXT:    addl $4, %esp124; WIN32-NEXT:    vaddps (%esp), %zmm0, %zmm0 # 64-byte Folded Reload125; WIN32-NEXT:    vaddps {{[0-9]+}}(%esp), %zmm0, %zmm0126; WIN32-NEXT:    movl %ebp, %esp127; WIN32-NEXT:    popl %ebp128; WIN32-NEXT:    retl129;130; WIN64-LABEL: testf16_regs:131; WIN64:       # %bb.0:132; WIN64-NEXT:    pushq %rbp133; WIN64-NEXT:    subq $176, %rsp134; WIN64-NEXT:    leaq {{[0-9]+}}(%rsp), %rbp135; WIN64-NEXT:    andq $-64, %rsp136; WIN64-NEXT:    vmovaps (%rdx), %zmm16137; WIN64-NEXT:    vaddps (%rcx), %zmm16, %zmm0138; WIN64-NEXT:    leaq {{[0-9]+}}(%rsp), %rcx139; WIN64-NEXT:    callq func_float16_ptr140; WIN64-NEXT:    vaddps %zmm16, %zmm0, %zmm0141; WIN64-NEXT:    vaddps {{[0-9]+}}(%rsp), %zmm0, %zmm0142; WIN64-NEXT:    leaq 48(%rbp), %rsp143; WIN64-NEXT:    popq %rbp144; WIN64-NEXT:    retq145;146; X64-LABEL: testf16_regs:147; X64:       ## %bb.0:148; X64-NEXT:    pushq %rbp149; X64-NEXT:    movq %rsp, %rbp150; X64-NEXT:    pushq %r13151; X64-NEXT:    pushq %r12152; X64-NEXT:    andq $-64, %rsp153; X64-NEXT:    subq $128, %rsp154; X64-NEXT:    vmovaps %zmm1, %zmm16155; X64-NEXT:    vaddps %zmm1, %zmm0, %zmm0156; X64-NEXT:    movq %rsp, %rdi157; X64-NEXT:    pushq %rbp158; X64-NEXT:    pushq %rax159; X64-NEXT:    callq _func_float16_ptr160; X64-NEXT:    addq $8, %rsp161; X64-NEXT:    popq %rbp162; X64-NEXT:    vaddps %zmm16, %zmm0, %zmm0163; X64-NEXT:    vaddps (%rsp), %zmm0, %zmm0164; X64-NEXT:    leaq -16(%rbp), %rsp165; X64-NEXT:    popq %r12166; X64-NEXT:    popq %r13167; X64-NEXT:    popq %rbp168; X64-NEXT:    retq169  %y = alloca <16 x float>, align 64170  %x = fadd <16 x float> %a, %b171  %1 = call intel_ocl_bicc <16 x float> @func_float16_ptr(<16 x float> %x, ptr %y)172  %2 = load <16 x float>, ptr %y, align 16173  %3 = fadd <16 x float> %1, %b174  %4 = fadd <16 x float> %2, %3175  ret <16 x float> %4176}177 178; test calling conventions - prolog and epilog179define intel_ocl_bicc <16 x float> @test_prolog_epilog(<16 x float> %a, <16 x float> %b) nounwind {180; X32-LABEL: test_prolog_epilog:181; X32:       ## %bb.0:182; X32-NEXT:    subl $12, %esp183; X32-NEXT:    calll _func_float16184; X32-NEXT:    addl $12, %esp185; X32-NEXT:    retl186;187; WIN32-LABEL: test_prolog_epilog:188; WIN32:       # %bb.0:189; WIN32-NEXT:    calll _func_float16190; WIN32-NEXT:    retl191;192; WIN64-KNL-LABEL: test_prolog_epilog:193; WIN64-KNL:       # %bb.0:194; WIN64-KNL-NEXT:    pushq %rbp195; WIN64-KNL-NEXT:    subq $1264, %rsp # imm = 0x4F0196; WIN64-KNL-NEXT:    leaq {{[0-9]+}}(%rsp), %rbp197; WIN64-KNL-NEXT:    kmovw %k7, {{[-0-9]+}}(%r{{[sb]}}p) # 2-byte Spill198; WIN64-KNL-NEXT:    kmovw %k6, {{[-0-9]+}}(%r{{[sb]}}p) # 2-byte Spill199; WIN64-KNL-NEXT:    kmovw %k5, {{[-0-9]+}}(%r{{[sb]}}p) # 2-byte Spill200; WIN64-KNL-NEXT:    kmovw %k4, {{[-0-9]+}}(%r{{[sb]}}p) # 2-byte Spill201; WIN64-KNL-NEXT:    vmovups %zmm21, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill202; WIN64-KNL-NEXT:    vmovups %zmm20, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill203; WIN64-KNL-NEXT:    vmovups %zmm19, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill204; WIN64-KNL-NEXT:    vmovups %zmm18, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill205; WIN64-KNL-NEXT:    vmovups %zmm17, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill206; WIN64-KNL-NEXT:    vmovups %zmm16, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill207; WIN64-KNL-NEXT:    vmovups %zmm15, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill208; WIN64-KNL-NEXT:    vmovups %zmm14, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill209; WIN64-KNL-NEXT:    vmovups %zmm13, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill210; WIN64-KNL-NEXT:    vmovups %zmm12, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill211; WIN64-KNL-NEXT:    vmovups %zmm11, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill212; WIN64-KNL-NEXT:    vmovups %zmm10, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill213; WIN64-KNL-NEXT:    vmovups %zmm9, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill214; WIN64-KNL-NEXT:    vmovups %zmm8, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill215; WIN64-KNL-NEXT:    vmovups %zmm7, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill216; WIN64-KNL-NEXT:    vmovups %zmm6, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill217; WIN64-KNL-NEXT:    andq $-64, %rsp218; WIN64-KNL-NEXT:    vmovaps %zmm1, {{[0-9]+}}(%rsp)219; WIN64-KNL-NEXT:    vmovaps %zmm0, {{[0-9]+}}(%rsp)220; WIN64-KNL-NEXT:    leaq {{[0-9]+}}(%rsp), %rcx221; WIN64-KNL-NEXT:    leaq {{[0-9]+}}(%rsp), %rdx222; WIN64-KNL-NEXT:    callq func_float16223; WIN64-KNL-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm6 # 64-byte Reload224; WIN64-KNL-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm7 # 64-byte Reload225; WIN64-KNL-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm8 # 64-byte Reload226; WIN64-KNL-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm9 # 64-byte Reload227; WIN64-KNL-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm10 # 64-byte Reload228; WIN64-KNL-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm11 # 64-byte Reload229; WIN64-KNL-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm12 # 64-byte Reload230; WIN64-KNL-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm13 # 64-byte Reload231; WIN64-KNL-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm14 # 64-byte Reload232; WIN64-KNL-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm15 # 64-byte Reload233; WIN64-KNL-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm16 # 64-byte Reload234; WIN64-KNL-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm17 # 64-byte Reload235; WIN64-KNL-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm18 # 64-byte Reload236; WIN64-KNL-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm19 # 64-byte Reload237; WIN64-KNL-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm20 # 64-byte Reload238; WIN64-KNL-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm21 # 64-byte Reload239; WIN64-KNL-NEXT:    kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k4 # 2-byte Reload240; WIN64-KNL-NEXT:    kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k5 # 2-byte Reload241; WIN64-KNL-NEXT:    kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k6 # 2-byte Reload242; WIN64-KNL-NEXT:    kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k7 # 2-byte Reload243; WIN64-KNL-NEXT:    leaq 1136(%rbp), %rsp244; WIN64-KNL-NEXT:    popq %rbp245; WIN64-KNL-NEXT:    retq246;247; WIN64-SKX-LABEL: test_prolog_epilog:248; WIN64-SKX:       # %bb.0:249; WIN64-SKX-NEXT:    pushq %rbp250; WIN64-SKX-NEXT:    subq $1264, %rsp # imm = 0x4F0251; WIN64-SKX-NEXT:    leaq {{[0-9]+}}(%rsp), %rbp252; WIN64-SKX-NEXT:    kmovq %k7, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill253; WIN64-SKX-NEXT:    kmovq %k6, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill254; WIN64-SKX-NEXT:    kmovq %k5, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill255; WIN64-SKX-NEXT:    kmovq %k4, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill256; WIN64-SKX-NEXT:    vmovups %zmm21, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill257; WIN64-SKX-NEXT:    vmovups %zmm20, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill258; WIN64-SKX-NEXT:    vmovups %zmm19, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill259; WIN64-SKX-NEXT:    vmovups %zmm18, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill260; WIN64-SKX-NEXT:    vmovups %zmm17, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill261; WIN64-SKX-NEXT:    vmovups %zmm16, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill262; WIN64-SKX-NEXT:    vmovups %zmm15, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill263; WIN64-SKX-NEXT:    vmovups %zmm14, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill264; WIN64-SKX-NEXT:    vmovups %zmm13, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill265; WIN64-SKX-NEXT:    vmovups %zmm12, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill266; WIN64-SKX-NEXT:    vmovups %zmm11, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill267; WIN64-SKX-NEXT:    vmovups %zmm10, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill268; WIN64-SKX-NEXT:    vmovups %zmm9, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill269; WIN64-SKX-NEXT:    vmovups %zmm8, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill270; WIN64-SKX-NEXT:    vmovups %zmm7, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill271; WIN64-SKX-NEXT:    vmovups %zmm6, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill272; WIN64-SKX-NEXT:    andq $-64, %rsp273; WIN64-SKX-NEXT:    vmovaps %zmm1, {{[0-9]+}}(%rsp)274; WIN64-SKX-NEXT:    vmovaps %zmm0, {{[0-9]+}}(%rsp)275; WIN64-SKX-NEXT:    leaq {{[0-9]+}}(%rsp), %rcx276; WIN64-SKX-NEXT:    leaq {{[0-9]+}}(%rsp), %rdx277; WIN64-SKX-NEXT:    callq func_float16278; WIN64-SKX-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm6 # 64-byte Reload279; WIN64-SKX-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm7 # 64-byte Reload280; WIN64-SKX-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm8 # 64-byte Reload281; WIN64-SKX-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm9 # 64-byte Reload282; WIN64-SKX-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm10 # 64-byte Reload283; WIN64-SKX-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm11 # 64-byte Reload284; WIN64-SKX-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm12 # 64-byte Reload285; WIN64-SKX-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm13 # 64-byte Reload286; WIN64-SKX-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm14 # 64-byte Reload287; WIN64-SKX-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm15 # 64-byte Reload288; WIN64-SKX-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm16 # 64-byte Reload289; WIN64-SKX-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm17 # 64-byte Reload290; WIN64-SKX-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm18 # 64-byte Reload291; WIN64-SKX-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm19 # 64-byte Reload292; WIN64-SKX-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm20 # 64-byte Reload293; WIN64-SKX-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm21 # 64-byte Reload294; WIN64-SKX-NEXT:    kmovq {{[-0-9]+}}(%r{{[sb]}}p), %k4 # 8-byte Reload295; WIN64-SKX-NEXT:    kmovq {{[-0-9]+}}(%r{{[sb]}}p), %k5 # 8-byte Reload296; WIN64-SKX-NEXT:    kmovq {{[-0-9]+}}(%r{{[sb]}}p), %k6 # 8-byte Reload297; WIN64-SKX-NEXT:    kmovq {{[-0-9]+}}(%r{{[sb]}}p), %k7 # 8-byte Reload298; WIN64-SKX-NEXT:    leaq 1136(%rbp), %rsp299; WIN64-SKX-NEXT:    popq %rbp300; WIN64-SKX-NEXT:    retq301;302; X64-KNL-LABEL: test_prolog_epilog:303; X64-KNL:       ## %bb.0:304; X64-KNL-NEXT:    pushq %rsi305; X64-KNL-NEXT:    subq $1072, %rsp ## imm = 0x430306; X64-KNL-NEXT:    kmovw %k7, {{[-0-9]+}}(%r{{[sb]}}p) ## 2-byte Spill307; X64-KNL-NEXT:    kmovw %k6, {{[-0-9]+}}(%r{{[sb]}}p) ## 2-byte Spill308; X64-KNL-NEXT:    kmovw %k5, {{[-0-9]+}}(%r{{[sb]}}p) ## 2-byte Spill309; X64-KNL-NEXT:    kmovw %k4, {{[-0-9]+}}(%r{{[sb]}}p) ## 2-byte Spill310; X64-KNL-NEXT:    vmovups %zmm31, {{[-0-9]+}}(%r{{[sb]}}p) ## 64-byte Spill311; X64-KNL-NEXT:    vmovups %zmm30, {{[-0-9]+}}(%r{{[sb]}}p) ## 64-byte Spill312; X64-KNL-NEXT:    vmovups %zmm29, {{[-0-9]+}}(%r{{[sb]}}p) ## 64-byte Spill313; X64-KNL-NEXT:    vmovups %zmm28, {{[-0-9]+}}(%r{{[sb]}}p) ## 64-byte Spill314; X64-KNL-NEXT:    vmovups %zmm27, {{[-0-9]+}}(%r{{[sb]}}p) ## 64-byte Spill315; X64-KNL-NEXT:    vmovups %zmm26, {{[-0-9]+}}(%r{{[sb]}}p) ## 64-byte Spill316; X64-KNL-NEXT:    vmovups %zmm25, {{[-0-9]+}}(%r{{[sb]}}p) ## 64-byte Spill317; X64-KNL-NEXT:    vmovups %zmm24, {{[-0-9]+}}(%r{{[sb]}}p) ## 64-byte Spill318; X64-KNL-NEXT:    vmovups %zmm23, {{[-0-9]+}}(%r{{[sb]}}p) ## 64-byte Spill319; X64-KNL-NEXT:    vmovups %zmm22, {{[-0-9]+}}(%r{{[sb]}}p) ## 64-byte Spill320; X64-KNL-NEXT:    vmovups %zmm21, {{[-0-9]+}}(%r{{[sb]}}p) ## 64-byte Spill321; X64-KNL-NEXT:    vmovups %zmm20, {{[-0-9]+}}(%r{{[sb]}}p) ## 64-byte Spill322; X64-KNL-NEXT:    vmovups %zmm19, {{[-0-9]+}}(%r{{[sb]}}p) ## 64-byte Spill323; X64-KNL-NEXT:    vmovups %zmm18, {{[-0-9]+}}(%r{{[sb]}}p) ## 64-byte Spill324; X64-KNL-NEXT:    vmovups %zmm17, {{[-0-9]+}}(%r{{[sb]}}p) ## 64-byte Spill325; X64-KNL-NEXT:    vmovups %zmm16, (%rsp) ## 64-byte Spill326; X64-KNL-NEXT:    callq _func_float16327; X64-KNL-NEXT:    vmovups (%rsp), %zmm16 ## 64-byte Reload328; X64-KNL-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm17 ## 64-byte Reload329; X64-KNL-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm18 ## 64-byte Reload330; X64-KNL-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm19 ## 64-byte Reload331; X64-KNL-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm20 ## 64-byte Reload332; X64-KNL-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm21 ## 64-byte Reload333; X64-KNL-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm22 ## 64-byte Reload334; X64-KNL-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm23 ## 64-byte Reload335; X64-KNL-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm24 ## 64-byte Reload336; X64-KNL-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm25 ## 64-byte Reload337; X64-KNL-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm26 ## 64-byte Reload338; X64-KNL-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm27 ## 64-byte Reload339; X64-KNL-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm28 ## 64-byte Reload340; X64-KNL-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm29 ## 64-byte Reload341; X64-KNL-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm30 ## 64-byte Reload342; X64-KNL-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm31 ## 64-byte Reload343; X64-KNL-NEXT:    kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k4 ## 2-byte Reload344; X64-KNL-NEXT:    kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k5 ## 2-byte Reload345; X64-KNL-NEXT:    kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k6 ## 2-byte Reload346; X64-KNL-NEXT:    kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k7 ## 2-byte Reload347; X64-KNL-NEXT:    addq $1072, %rsp ## imm = 0x430348; X64-KNL-NEXT:    popq %rsi349; X64-KNL-NEXT:    retq350;351; X64-SKX-LABEL: test_prolog_epilog:352; X64-SKX:       ## %bb.0:353; X64-SKX-NEXT:    pushq %rsi354; X64-SKX-NEXT:    subq $1072, %rsp ## imm = 0x430355; X64-SKX-NEXT:    kmovq %k7, {{[-0-9]+}}(%r{{[sb]}}p) ## 8-byte Spill356; X64-SKX-NEXT:    kmovq %k6, {{[-0-9]+}}(%r{{[sb]}}p) ## 8-byte Spill357; X64-SKX-NEXT:    kmovq %k5, {{[-0-9]+}}(%r{{[sb]}}p) ## 8-byte Spill358; X64-SKX-NEXT:    kmovq %k4, {{[-0-9]+}}(%r{{[sb]}}p) ## 8-byte Spill359; X64-SKX-NEXT:    vmovups %zmm31, {{[-0-9]+}}(%r{{[sb]}}p) ## 64-byte Spill360; X64-SKX-NEXT:    vmovups %zmm30, {{[-0-9]+}}(%r{{[sb]}}p) ## 64-byte Spill361; X64-SKX-NEXT:    vmovups %zmm29, {{[-0-9]+}}(%r{{[sb]}}p) ## 64-byte Spill362; X64-SKX-NEXT:    vmovups %zmm28, {{[-0-9]+}}(%r{{[sb]}}p) ## 64-byte Spill363; X64-SKX-NEXT:    vmovups %zmm27, {{[-0-9]+}}(%r{{[sb]}}p) ## 64-byte Spill364; X64-SKX-NEXT:    vmovups %zmm26, {{[-0-9]+}}(%r{{[sb]}}p) ## 64-byte Spill365; X64-SKX-NEXT:    vmovups %zmm25, {{[-0-9]+}}(%r{{[sb]}}p) ## 64-byte Spill366; X64-SKX-NEXT:    vmovups %zmm24, {{[-0-9]+}}(%r{{[sb]}}p) ## 64-byte Spill367; X64-SKX-NEXT:    vmovups %zmm23, {{[-0-9]+}}(%r{{[sb]}}p) ## 64-byte Spill368; X64-SKX-NEXT:    vmovups %zmm22, {{[-0-9]+}}(%r{{[sb]}}p) ## 64-byte Spill369; X64-SKX-NEXT:    vmovups %zmm21, {{[-0-9]+}}(%r{{[sb]}}p) ## 64-byte Spill370; X64-SKX-NEXT:    vmovups %zmm20, {{[-0-9]+}}(%r{{[sb]}}p) ## 64-byte Spill371; X64-SKX-NEXT:    vmovups %zmm19, {{[-0-9]+}}(%r{{[sb]}}p) ## 64-byte Spill372; X64-SKX-NEXT:    vmovups %zmm18, {{[-0-9]+}}(%r{{[sb]}}p) ## 64-byte Spill373; X64-SKX-NEXT:    vmovups %zmm17, {{[-0-9]+}}(%r{{[sb]}}p) ## 64-byte Spill374; X64-SKX-NEXT:    vmovups %zmm16, (%rsp) ## 64-byte Spill375; X64-SKX-NEXT:    callq _func_float16376; X64-SKX-NEXT:    vmovups (%rsp), %zmm16 ## 64-byte Reload377; X64-SKX-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm17 ## 64-byte Reload378; X64-SKX-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm18 ## 64-byte Reload379; X64-SKX-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm19 ## 64-byte Reload380; X64-SKX-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm20 ## 64-byte Reload381; X64-SKX-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm21 ## 64-byte Reload382; X64-SKX-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm22 ## 64-byte Reload383; X64-SKX-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm23 ## 64-byte Reload384; X64-SKX-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm24 ## 64-byte Reload385; X64-SKX-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm25 ## 64-byte Reload386; X64-SKX-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm26 ## 64-byte Reload387; X64-SKX-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm27 ## 64-byte Reload388; X64-SKX-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm28 ## 64-byte Reload389; X64-SKX-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm29 ## 64-byte Reload390; X64-SKX-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm30 ## 64-byte Reload391; X64-SKX-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm31 ## 64-byte Reload392; X64-SKX-NEXT:    kmovq {{[-0-9]+}}(%r{{[sb]}}p), %k4 ## 8-byte Reload393; X64-SKX-NEXT:    kmovq {{[-0-9]+}}(%r{{[sb]}}p), %k5 ## 8-byte Reload394; X64-SKX-NEXT:    kmovq {{[-0-9]+}}(%r{{[sb]}}p), %k6 ## 8-byte Reload395; X64-SKX-NEXT:    kmovq {{[-0-9]+}}(%r{{[sb]}}p), %k7 ## 8-byte Reload396; X64-SKX-NEXT:    addq $1072, %rsp ## imm = 0x430397; X64-SKX-NEXT:    popq %rsi398; X64-SKX-NEXT:    retq399   %c = call <16 x float> @func_float16(<16 x float> %a, <16 x float> %b)400   ret <16 x float> %c401}402 403 404declare <16 x float> @func_float16_mask(<16 x float>, <16 x i1>)405 406define <16 x float> @testf16_inp_mask(<16 x float> %a, i16 %mask)  {407; X32-LABEL: testf16_inp_mask:408; X32:       ## %bb.0:409; X32-NEXT:    subl $12, %esp410; X32-NEXT:    .cfi_def_cfa_offset 16411; X32-NEXT:    kmovw {{[0-9]+}}(%esp), %k1412; X32-NEXT:    calll _func_float16_mask413; X32-NEXT:    addl $12, %esp414; X32-NEXT:    retl415;416; WIN32-LABEL: testf16_inp_mask:417; WIN32:       # %bb.0:418; WIN32-NEXT:    kmovw {{[0-9]+}}(%esp), %k1419; WIN32-NEXT:    calll _func_float16_mask420; WIN32-NEXT:    retl421;422; WIN64-KNL-LABEL: testf16_inp_mask:423; WIN64-KNL:       # %bb.0:424; WIN64-KNL-NEXT:    subq $40, %rsp425; WIN64-KNL-NEXT:    .seh_stackalloc 40426; WIN64-KNL-NEXT:    .seh_endprologue427; WIN64-KNL-NEXT:    # kill: def $dx killed $dx def $edx428; WIN64-KNL-NEXT:    vmovaps (%rcx), %zmm0429; WIN64-KNL-NEXT:    kmovw %edx, %k1430; WIN64-KNL-NEXT:    callq func_float16_mask431; WIN64-KNL-NEXT:    nop432; WIN64-KNL-NEXT:    .seh_startepilogue433; WIN64-KNL-NEXT:    addq $40, %rsp434; WIN64-KNL-NEXT:    .seh_endepilogue435; WIN64-KNL-NEXT:    retq436; WIN64-KNL-NEXT:    .seh_endproc437;438; WIN64-SKX-LABEL: testf16_inp_mask:439; WIN64-SKX:       # %bb.0:440; WIN64-SKX-NEXT:    subq $40, %rsp441; WIN64-SKX-NEXT:    .seh_stackalloc 40442; WIN64-SKX-NEXT:    .seh_endprologue443; WIN64-SKX-NEXT:    # kill: def $dx killed $dx def $edx444; WIN64-SKX-NEXT:    vmovaps (%rcx), %zmm0445; WIN64-SKX-NEXT:    kmovd %edx, %k1446; WIN64-SKX-NEXT:    callq func_float16_mask447; WIN64-SKX-NEXT:    nop448; WIN64-SKX-NEXT:    .seh_startepilogue449; WIN64-SKX-NEXT:    addq $40, %rsp450; WIN64-SKX-NEXT:    .seh_endepilogue451; WIN64-SKX-NEXT:    retq452; WIN64-SKX-NEXT:    .seh_endproc453;454; X64-KNL-LABEL: testf16_inp_mask:455; X64-KNL:       ## %bb.0:456; X64-KNL-NEXT:    pushq %rbp457; X64-KNL-NEXT:    .cfi_def_cfa_offset 16458; X64-KNL-NEXT:    pushq %r13459; X64-KNL-NEXT:    .cfi_def_cfa_offset 24460; X64-KNL-NEXT:    pushq %r12461; X64-KNL-NEXT:    .cfi_def_cfa_offset 32462; X64-KNL-NEXT:    .cfi_offset %r12, -32463; X64-KNL-NEXT:    .cfi_offset %r13, -24464; X64-KNL-NEXT:    .cfi_offset %rbp, -16465; X64-KNL-NEXT:    kmovw %edi, %k1466; X64-KNL-NEXT:    callq _func_float16_mask467; X64-KNL-NEXT:    popq %r12468; X64-KNL-NEXT:    popq %r13469; X64-KNL-NEXT:    popq %rbp470; X64-KNL-NEXT:    retq471;472; X64-SKX-LABEL: testf16_inp_mask:473; X64-SKX:       ## %bb.0:474; X64-SKX-NEXT:    pushq %rbp475; X64-SKX-NEXT:    .cfi_def_cfa_offset 16476; X64-SKX-NEXT:    pushq %r13477; X64-SKX-NEXT:    .cfi_def_cfa_offset 24478; X64-SKX-NEXT:    pushq %r12479; X64-SKX-NEXT:    .cfi_def_cfa_offset 32480; X64-SKX-NEXT:    .cfi_offset %r12, -32481; X64-SKX-NEXT:    .cfi_offset %r13, -24482; X64-SKX-NEXT:    .cfi_offset %rbp, -16483; X64-SKX-NEXT:    kmovd %edi, %k1484; X64-SKX-NEXT:    callq _func_float16_mask485; X64-SKX-NEXT:    popq %r12486; X64-SKX-NEXT:    popq %r13487; X64-SKX-NEXT:    popq %rbp488; X64-SKX-NEXT:    retq489  %imask = bitcast i16 %mask to <16 x i1>490  %1 = call intel_ocl_bicc <16 x float> @func_float16_mask(<16 x float> %a, <16 x i1> %imask)491  ret <16 x float> %1492}493 494define intel_ocl_bicc <16 x float> @test_prolog_epilog_with_mask(<16 x float> %a, <16 x i32> %x1, <16 x i32>%x2, <16 x i1> %mask) nounwind {495; X32-LABEL: test_prolog_epilog_with_mask:496; X32:       ## %bb.0:497; X32-NEXT:    subl $12, %esp498; X32-NEXT:    vpcmpeqd %zmm2, %zmm1, %k0499; X32-NEXT:    kxorw %k1, %k0, %k1500; X32-NEXT:    calll _func_float16_mask501; X32-NEXT:    addl $12, %esp502; X32-NEXT:    retl503;504; WIN32-LABEL: test_prolog_epilog_with_mask:505; WIN32:       # %bb.0:506; WIN32-NEXT:    vpcmpeqd %zmm2, %zmm1, %k0507; WIN32-NEXT:    kxorw %k1, %k0, %k1508; WIN32-NEXT:    calll _func_float16_mask509; WIN32-NEXT:    retl510;511; WIN64-LABEL: test_prolog_epilog_with_mask:512; WIN64:       # %bb.0:513; WIN64-NEXT:    subq $40, %rsp514; WIN64-NEXT:    vpcmpeqd %zmm2, %zmm1, %k0515; WIN64-NEXT:    kxorw %k1, %k0, %k1516; WIN64-NEXT:    callq func_float16_mask517; WIN64-NEXT:    addq $40, %rsp518; WIN64-NEXT:    retq519;520; X64-LABEL: test_prolog_epilog_with_mask:521; X64:       ## %bb.0:522; X64-NEXT:    pushq %rax523; X64-NEXT:    vpcmpeqd %zmm2, %zmm1, %k0524; X64-NEXT:    kxorw %k1, %k0, %k1525; X64-NEXT:    callq _func_float16_mask526; X64-NEXT:    popq %rax527; X64-NEXT:    retq528   %cmp_res = icmp eq <16 x i32>%x1, %x2529   %mask1 = xor <16 x i1> %cmp_res, %mask530   %c = call intel_ocl_bicc <16 x float> @func_float16_mask(<16 x float> %a, <16 x i1>%mask1)531   ret <16 x float> %c532}533