brintos

brintos / llvm-project-archived public Read only

0
0
Text · 96.3 KiB · b6a4a12 Raw
2100 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -mattr=-f16c -fixup-byte-word-insts=1 -verify-machineinstrs \3; RUN:   | FileCheck %s -check-prefixes=CHECK,CHECK-LIBCALL,BWON4; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -mattr=-f16c  -fixup-byte-word-insts=0 -verify-machineinstrs \5; RUN:   | FileCheck %s -check-prefixes=CHECK,CHECK-LIBCALL,BWOFF6; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -mattr=+f16c -fixup-byte-word-insts=1 -verify-machineinstrs \7; RUN:    | FileCheck %s -check-prefixes=CHECK,BWON,BWON-F16C8; RUN: llc < %s -mtriple=i686-unknown-linux-gnu -mattr +sse2 -fixup-byte-word-insts=0 -verify-machineinstrs \9; RUN:    | FileCheck %s -check-prefixes=CHECK-I68610 11define void @test_load_store(ptr %in, ptr %out) #0 {12; CHECK-LIBCALL-LABEL: test_load_store:13; CHECK-LIBCALL:       # %bb.0:14; CHECK-LIBCALL-NEXT:    pinsrw $0, (%rdi), %xmm015; CHECK-LIBCALL-NEXT:    pextrw $0, %xmm0, %eax16; CHECK-LIBCALL-NEXT:    movw %ax, (%rsi)17; CHECK-LIBCALL-NEXT:    retq18;19; BWON-F16C-LABEL: test_load_store:20; BWON-F16C:       # %bb.0:21; BWON-F16C-NEXT:    vpinsrw $0, (%rdi), %xmm0, %xmm022; BWON-F16C-NEXT:    vpextrw $0, %xmm0, (%rsi)23; BWON-F16C-NEXT:    retq24;25; CHECK-I686-LABEL: test_load_store:26; CHECK-I686:       # %bb.0:27; CHECK-I686-NEXT:    movl {{[0-9]+}}(%esp), %eax28; CHECK-I686-NEXT:    movl {{[0-9]+}}(%esp), %ecx29; CHECK-I686-NEXT:    pinsrw $0, (%ecx), %xmm030; CHECK-I686-NEXT:    pextrw $0, %xmm0, %ecx31; CHECK-I686-NEXT:    movw %cx, (%eax)32; CHECK-I686-NEXT:    retl33  %val = load half, ptr %in34  store half %val, ptr %out35  ret void36}37 38define i16 @test_bitcast_from_half(ptr %addr) #0 {39; BWON-LABEL: test_bitcast_from_half:40; BWON:       # %bb.0:41; BWON-NEXT:    movzwl (%rdi), %eax42; BWON-NEXT:    retq43;44; BWOFF-LABEL: test_bitcast_from_half:45; BWOFF:       # %bb.0:46; BWOFF-NEXT:    movw (%rdi), %ax47; BWOFF-NEXT:    retq48;49; CHECK-I686-LABEL: test_bitcast_from_half:50; CHECK-I686:       # %bb.0:51; CHECK-I686-NEXT:    movl {{[0-9]+}}(%esp), %eax52; CHECK-I686-NEXT:    movw (%eax), %ax53; CHECK-I686-NEXT:    retl54  %val = load half, ptr %addr55  %val_int = bitcast half %val to i1656  ret i16 %val_int57}58 59define void @test_bitcast_to_half(ptr %addr, i16 %in) #0 {60; CHECK-LABEL: test_bitcast_to_half:61; CHECK:       # %bb.0:62; CHECK-NEXT:    movw %si, (%rdi)63; CHECK-NEXT:    retq64;65; CHECK-I686-LABEL: test_bitcast_to_half:66; CHECK-I686:       # %bb.0:67; CHECK-I686-NEXT:    movw {{[0-9]+}}(%esp), %ax68; CHECK-I686-NEXT:    movl {{[0-9]+}}(%esp), %ecx69; CHECK-I686-NEXT:    movw %ax, (%ecx)70; CHECK-I686-NEXT:    retl71  %val_fp = bitcast i16 %in to half72  store half %val_fp, ptr %addr73  ret void74}75 76define float @test_extend32(ptr %addr) #0 {77; CHECK-LIBCALL-LABEL: test_extend32:78; CHECK-LIBCALL:       # %bb.0:79; CHECK-LIBCALL-NEXT:    pinsrw $0, (%rdi), %xmm080; CHECK-LIBCALL-NEXT:    jmp __extendhfsf2@PLT # TAILCALL81;82; BWON-F16C-LABEL: test_extend32:83; BWON-F16C:       # %bb.0:84; BWON-F16C-NEXT:    vpinsrw $0, (%rdi), %xmm0, %xmm085; BWON-F16C-NEXT:    vcvtph2ps %xmm0, %xmm086; BWON-F16C-NEXT:    retq87;88; CHECK-I686-LABEL: test_extend32:89; CHECK-I686:       # %bb.0:90; CHECK-I686-NEXT:    subl $12, %esp91; CHECK-I686-NEXT:    movl {{[0-9]+}}(%esp), %eax92; CHECK-I686-NEXT:    pinsrw $0, (%eax), %xmm093; CHECK-I686-NEXT:    pextrw $0, %xmm0, %eax94; CHECK-I686-NEXT:    movw %ax, (%esp)95; CHECK-I686-NEXT:    calll __extendhfsf296; CHECK-I686-NEXT:    addl $12, %esp97; CHECK-I686-NEXT:    retl98  %val16 = load half, ptr %addr99  %val32 = fpext half %val16 to float100  ret float %val32101}102 103define double @test_extend64(ptr %addr) #0 {104; CHECK-LIBCALL-LABEL: test_extend64:105; CHECK-LIBCALL:       # %bb.0:106; CHECK-LIBCALL-NEXT:    pushq %rax107; CHECK-LIBCALL-NEXT:    pinsrw $0, (%rdi), %xmm0108; CHECK-LIBCALL-NEXT:    callq __extendhfsf2@PLT109; CHECK-LIBCALL-NEXT:    cvtss2sd %xmm0, %xmm0110; CHECK-LIBCALL-NEXT:    popq %rax111; CHECK-LIBCALL-NEXT:    retq112;113; BWON-F16C-LABEL: test_extend64:114; BWON-F16C:       # %bb.0:115; BWON-F16C-NEXT:    vpinsrw $0, (%rdi), %xmm0, %xmm0116; BWON-F16C-NEXT:    vcvtph2ps %xmm0, %xmm0117; BWON-F16C-NEXT:    vcvtss2sd %xmm0, %xmm0, %xmm0118; BWON-F16C-NEXT:    retq119;120; CHECK-I686-LABEL: test_extend64:121; CHECK-I686:       # %bb.0:122; CHECK-I686-NEXT:    subl $12, %esp123; CHECK-I686-NEXT:    movl {{[0-9]+}}(%esp), %eax124; CHECK-I686-NEXT:    pinsrw $0, (%eax), %xmm0125; CHECK-I686-NEXT:    pextrw $0, %xmm0, %eax126; CHECK-I686-NEXT:    movw %ax, (%esp)127; CHECK-I686-NEXT:    calll __extendhfsf2128; CHECK-I686-NEXT:    addl $12, %esp129; CHECK-I686-NEXT:    retl130  %val16 = load half, ptr %addr131  %val32 = fpext half %val16 to double132  ret double %val32133}134 135define void @test_trunc32(float %in, ptr %addr) #0 {136; CHECK-LIBCALL-LABEL: test_trunc32:137; CHECK-LIBCALL:       # %bb.0:138; CHECK-LIBCALL-NEXT:    pushq %rbx139; CHECK-LIBCALL-NEXT:    movq %rdi, %rbx140; CHECK-LIBCALL-NEXT:    callq __truncsfhf2@PLT141; CHECK-LIBCALL-NEXT:    pextrw $0, %xmm0, %eax142; CHECK-LIBCALL-NEXT:    movw %ax, (%rbx)143; CHECK-LIBCALL-NEXT:    popq %rbx144; CHECK-LIBCALL-NEXT:    retq145;146; BWON-F16C-LABEL: test_trunc32:147; BWON-F16C:       # %bb.0:148; BWON-F16C-NEXT:    vcvtps2ph $4, %xmm0, %xmm0149; BWON-F16C-NEXT:    vpextrw $0, %xmm0, (%rdi)150; BWON-F16C-NEXT:    retq151;152; CHECK-I686-LABEL: test_trunc32:153; CHECK-I686:       # %bb.0:154; CHECK-I686-NEXT:    pushl %esi155; CHECK-I686-NEXT:    subl $8, %esp156; CHECK-I686-NEXT:    movl {{[0-9]+}}(%esp), %esi157; CHECK-I686-NEXT:    movd {{.*#+}} xmm0 = mem[0],zero,zero,zero158; CHECK-I686-NEXT:    movd %xmm0, (%esp)159; CHECK-I686-NEXT:    calll __truncsfhf2160; CHECK-I686-NEXT:    pextrw $0, %xmm0, %eax161; CHECK-I686-NEXT:    movw %ax, (%esi)162; CHECK-I686-NEXT:    addl $8, %esp163; CHECK-I686-NEXT:    popl %esi164; CHECK-I686-NEXT:    retl165  %val16 = fptrunc float %in to half166  store half %val16, ptr %addr167  ret void168}169 170define void @test_trunc64(double %in, ptr %addr) #0 {171; CHECK-LIBCALL-LABEL: test_trunc64:172; CHECK-LIBCALL:       # %bb.0:173; CHECK-LIBCALL-NEXT:    pushq %rbx174; CHECK-LIBCALL-NEXT:    movq %rdi, %rbx175; CHECK-LIBCALL-NEXT:    callq __truncdfhf2@PLT176; CHECK-LIBCALL-NEXT:    pextrw $0, %xmm0, %eax177; CHECK-LIBCALL-NEXT:    movw %ax, (%rbx)178; CHECK-LIBCALL-NEXT:    popq %rbx179; CHECK-LIBCALL-NEXT:    retq180;181; BWON-F16C-LABEL: test_trunc64:182; BWON-F16C:       # %bb.0:183; BWON-F16C-NEXT:    pushq %rbx184; BWON-F16C-NEXT:    movq %rdi, %rbx185; BWON-F16C-NEXT:    callq __truncdfhf2@PLT186; BWON-F16C-NEXT:    vpextrw $0, %xmm0, (%rbx)187; BWON-F16C-NEXT:    popq %rbx188; BWON-F16C-NEXT:    retq189;190; CHECK-I686-LABEL: test_trunc64:191; CHECK-I686:       # %bb.0:192; CHECK-I686-NEXT:    pushl %esi193; CHECK-I686-NEXT:    subl $8, %esp194; CHECK-I686-NEXT:    movl {{[0-9]+}}(%esp), %esi195; CHECK-I686-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero196; CHECK-I686-NEXT:    movq %xmm0, (%esp)197; CHECK-I686-NEXT:    calll __truncdfhf2198; CHECK-I686-NEXT:    pextrw $0, %xmm0, %eax199; CHECK-I686-NEXT:    movw %ax, (%esi)200; CHECK-I686-NEXT:    addl $8, %esp201; CHECK-I686-NEXT:    popl %esi202; CHECK-I686-NEXT:    retl203  %val16 = fptrunc double %in to half204  store half %val16, ptr %addr205  ret void206}207 208define i64 @test_fptosi_i64(ptr %p) #0 {209; CHECK-LIBCALL-LABEL: test_fptosi_i64:210; CHECK-LIBCALL:       # %bb.0:211; CHECK-LIBCALL-NEXT:    pushq %rax212; CHECK-LIBCALL-NEXT:    pinsrw $0, (%rdi), %xmm0213; CHECK-LIBCALL-NEXT:    callq __extendhfsf2@PLT214; CHECK-LIBCALL-NEXT:    cvttss2si %xmm0, %rax215; CHECK-LIBCALL-NEXT:    popq %rcx216; CHECK-LIBCALL-NEXT:    retq217;218; BWON-F16C-LABEL: test_fptosi_i64:219; BWON-F16C:       # %bb.0:220; BWON-F16C-NEXT:    vpinsrw $0, (%rdi), %xmm0, %xmm0221; BWON-F16C-NEXT:    vcvtph2ps %xmm0, %xmm0222; BWON-F16C-NEXT:    vcvttss2si %xmm0, %rax223; BWON-F16C-NEXT:    retq224;225; CHECK-I686-LABEL: test_fptosi_i64:226; CHECK-I686:       # %bb.0:227; CHECK-I686-NEXT:    subl $28, %esp228; CHECK-I686-NEXT:    movl {{[0-9]+}}(%esp), %eax229; CHECK-I686-NEXT:    pinsrw $0, (%eax), %xmm0230; CHECK-I686-NEXT:    pextrw $0, %xmm0, %eax231; CHECK-I686-NEXT:    movw %ax, (%esp)232; CHECK-I686-NEXT:    calll __extendhfsf2233; CHECK-I686-NEXT:    fstps {{[0-9]+}}(%esp)234; CHECK-I686-NEXT:    flds {{[0-9]+}}(%esp)235; CHECK-I686-NEXT:    fnstcw {{[0-9]+}}(%esp)236; CHECK-I686-NEXT:    movzwl {{[0-9]+}}(%esp), %eax237; CHECK-I686-NEXT:    orl $3072, %eax # imm = 0xC00238; CHECK-I686-NEXT:    movw %ax, {{[0-9]+}}(%esp)239; CHECK-I686-NEXT:    fldcw {{[0-9]+}}(%esp)240; CHECK-I686-NEXT:    fistpll {{[0-9]+}}(%esp)241; CHECK-I686-NEXT:    fldcw {{[0-9]+}}(%esp)242; CHECK-I686-NEXT:    movl {{[0-9]+}}(%esp), %eax243; CHECK-I686-NEXT:    movl {{[0-9]+}}(%esp), %edx244; CHECK-I686-NEXT:    addl $28, %esp245; CHECK-I686-NEXT:    retl246  %a = load half, ptr %p, align 2247  %r = fptosi half %a to i64248  ret i64 %r249}250 251define void @test_sitofp_i64(i64 %a, ptr %p) #0 {252; CHECK-LIBCALL-LABEL: test_sitofp_i64:253; CHECK-LIBCALL:       # %bb.0:254; CHECK-LIBCALL-NEXT:    pushq %rbx255; CHECK-LIBCALL-NEXT:    movq %rsi, %rbx256; CHECK-LIBCALL-NEXT:    cvtsi2ss %rdi, %xmm0257; CHECK-LIBCALL-NEXT:    callq __truncsfhf2@PLT258; CHECK-LIBCALL-NEXT:    pextrw $0, %xmm0, %eax259; CHECK-LIBCALL-NEXT:    movw %ax, (%rbx)260; CHECK-LIBCALL-NEXT:    popq %rbx261; CHECK-LIBCALL-NEXT:    retq262;263; BWON-F16C-LABEL: test_sitofp_i64:264; BWON-F16C:       # %bb.0:265; BWON-F16C-NEXT:    vcvtsi2ss %rdi, %xmm15, %xmm0266; BWON-F16C-NEXT:    vcvtps2ph $4, %xmm0, %xmm0267; BWON-F16C-NEXT:    vpextrw $0, %xmm0, (%rsi)268; BWON-F16C-NEXT:    retq269;270; CHECK-I686-LABEL: test_sitofp_i64:271; CHECK-I686:       # %bb.0:272; CHECK-I686-NEXT:    pushl %esi273; CHECK-I686-NEXT:    subl $24, %esp274; CHECK-I686-NEXT:    movl {{[0-9]+}}(%esp), %esi275; CHECK-I686-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero276; CHECK-I686-NEXT:    movlps %xmm0, {{[0-9]+}}(%esp)277; CHECK-I686-NEXT:    fildll {{[0-9]+}}(%esp)278; CHECK-I686-NEXT:    fstps {{[0-9]+}}(%esp)279; CHECK-I686-NEXT:    movd {{.*#+}} xmm0 = mem[0],zero,zero,zero280; CHECK-I686-NEXT:    movd %xmm0, (%esp)281; CHECK-I686-NEXT:    calll __truncsfhf2282; CHECK-I686-NEXT:    pextrw $0, %xmm0, %eax283; CHECK-I686-NEXT:    movw %ax, (%esi)284; CHECK-I686-NEXT:    addl $24, %esp285; CHECK-I686-NEXT:    popl %esi286; CHECK-I686-NEXT:    retl287  %r = sitofp i64 %a to half288  store half %r, ptr %p289  ret void290}291 292define i64 @test_fptoui_i64(ptr %p) #0 {293; CHECK-LIBCALL-LABEL: test_fptoui_i64:294; CHECK-LIBCALL:       # %bb.0:295; CHECK-LIBCALL-NEXT:    pushq %rax296; CHECK-LIBCALL-NEXT:    pinsrw $0, (%rdi), %xmm0297; CHECK-LIBCALL-NEXT:    callq __extendhfsf2@PLT298; CHECK-LIBCALL-NEXT:    cvttss2si %xmm0, %rcx299; CHECK-LIBCALL-NEXT:    movq %rcx, %rdx300; CHECK-LIBCALL-NEXT:    sarq $63, %rdx301; CHECK-LIBCALL-NEXT:    subss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0302; CHECK-LIBCALL-NEXT:    cvttss2si %xmm0, %rax303; CHECK-LIBCALL-NEXT:    andq %rdx, %rax304; CHECK-LIBCALL-NEXT:    orq %rcx, %rax305; CHECK-LIBCALL-NEXT:    popq %rcx306; CHECK-LIBCALL-NEXT:    retq307;308; BWON-F16C-LABEL: test_fptoui_i64:309; BWON-F16C:       # %bb.0:310; BWON-F16C-NEXT:    vpinsrw $0, (%rdi), %xmm0, %xmm0311; BWON-F16C-NEXT:    vcvtph2ps %xmm0, %xmm0312; BWON-F16C-NEXT:    vcvttss2si %xmm0, %rcx313; BWON-F16C-NEXT:    movq %rcx, %rdx314; BWON-F16C-NEXT:    sarq $63, %rdx315; BWON-F16C-NEXT:    vsubss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0316; BWON-F16C-NEXT:    vcvttss2si %xmm0, %rax317; BWON-F16C-NEXT:    andq %rdx, %rax318; BWON-F16C-NEXT:    orq %rcx, %rax319; BWON-F16C-NEXT:    retq320;321; CHECK-I686-LABEL: test_fptoui_i64:322; CHECK-I686:       # %bb.0:323; CHECK-I686-NEXT:    subl $28, %esp324; CHECK-I686-NEXT:    movl {{[0-9]+}}(%esp), %eax325; CHECK-I686-NEXT:    pinsrw $0, (%eax), %xmm0326; CHECK-I686-NEXT:    pextrw $0, %xmm0, %eax327; CHECK-I686-NEXT:    movw %ax, (%esp)328; CHECK-I686-NEXT:    calll __extendhfsf2329; CHECK-I686-NEXT:    fstps {{[0-9]+}}(%esp)330; CHECK-I686-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero331; CHECK-I686-NEXT:    movss {{.*#+}} xmm1 = [9.22337203E+18,0.0E+0,0.0E+0,0.0E+0]332; CHECK-I686-NEXT:    ucomiss %xmm1, %xmm0333; CHECK-I686-NEXT:    jae .LBB9_2334; CHECK-I686-NEXT:  # %bb.1:335; CHECK-I686-NEXT:    xorps %xmm1, %xmm1336; CHECK-I686-NEXT:  .LBB9_2:337; CHECK-I686-NEXT:    subss %xmm1, %xmm0338; CHECK-I686-NEXT:    movss %xmm0, {{[0-9]+}}(%esp)339; CHECK-I686-NEXT:    setae %al340; CHECK-I686-NEXT:    flds {{[0-9]+}}(%esp)341; CHECK-I686-NEXT:    fnstcw {{[0-9]+}}(%esp)342; CHECK-I686-NEXT:    movzwl {{[0-9]+}}(%esp), %ecx343; CHECK-I686-NEXT:    orl $3072, %ecx # imm = 0xC00344; CHECK-I686-NEXT:    movw %cx, {{[0-9]+}}(%esp)345; CHECK-I686-NEXT:    fldcw {{[0-9]+}}(%esp)346; CHECK-I686-NEXT:    fistpll {{[0-9]+}}(%esp)347; CHECK-I686-NEXT:    fldcw {{[0-9]+}}(%esp)348; CHECK-I686-NEXT:    movzbl %al, %edx349; CHECK-I686-NEXT:    shll $31, %edx350; CHECK-I686-NEXT:    xorl {{[0-9]+}}(%esp), %edx351; CHECK-I686-NEXT:    movl {{[0-9]+}}(%esp), %eax352; CHECK-I686-NEXT:    addl $28, %esp353; CHECK-I686-NEXT:    retl354  %a = load half, ptr %p, align 2355  %r = fptoui half %a to i64356  ret i64 %r357}358 359define void @test_uitofp_i64(i64 %a, ptr %p) #0 {360; CHECK-LIBCALL-LABEL: test_uitofp_i64:361; CHECK-LIBCALL:       # %bb.0:362; CHECK-LIBCALL-NEXT:    pushq %rbx363; CHECK-LIBCALL-NEXT:    movq %rsi, %rbx364; CHECK-LIBCALL-NEXT:    testq %rdi, %rdi365; CHECK-LIBCALL-NEXT:    js .LBB10_1366; CHECK-LIBCALL-NEXT:  # %bb.2:367; CHECK-LIBCALL-NEXT:    cvtsi2ss %rdi, %xmm0368; CHECK-LIBCALL-NEXT:    jmp .LBB10_3369; CHECK-LIBCALL-NEXT:  .LBB10_1:370; CHECK-LIBCALL-NEXT:    movq %rdi, %rax371; CHECK-LIBCALL-NEXT:    shrq %rax372; CHECK-LIBCALL-NEXT:    andl $1, %edi373; CHECK-LIBCALL-NEXT:    orq %rax, %rdi374; CHECK-LIBCALL-NEXT:    cvtsi2ss %rdi, %xmm0375; CHECK-LIBCALL-NEXT:    addss %xmm0, %xmm0376; CHECK-LIBCALL-NEXT:  .LBB10_3:377; CHECK-LIBCALL-NEXT:    callq __truncsfhf2@PLT378; CHECK-LIBCALL-NEXT:    pextrw $0, %xmm0, %eax379; CHECK-LIBCALL-NEXT:    movw %ax, (%rbx)380; CHECK-LIBCALL-NEXT:    popq %rbx381; CHECK-LIBCALL-NEXT:    retq382;383; BWON-F16C-LABEL: test_uitofp_i64:384; BWON-F16C:       # %bb.0:385; BWON-F16C-NEXT:    testq %rdi, %rdi386; BWON-F16C-NEXT:    js .LBB10_1387; BWON-F16C-NEXT:  # %bb.2:388; BWON-F16C-NEXT:    vcvtsi2ss %rdi, %xmm15, %xmm0389; BWON-F16C-NEXT:    jmp .LBB10_3390; BWON-F16C-NEXT:  .LBB10_1:391; BWON-F16C-NEXT:    movq %rdi, %rax392; BWON-F16C-NEXT:    shrq %rax393; BWON-F16C-NEXT:    andl $1, %edi394; BWON-F16C-NEXT:    orq %rax, %rdi395; BWON-F16C-NEXT:    vcvtsi2ss %rdi, %xmm15, %xmm0396; BWON-F16C-NEXT:    vaddss %xmm0, %xmm0, %xmm0397; BWON-F16C-NEXT:  .LBB10_3:398; BWON-F16C-NEXT:    vcvtps2ph $4, %xmm0, %xmm0399; BWON-F16C-NEXT:    vpextrw $0, %xmm0, (%rsi)400; BWON-F16C-NEXT:    retq401;402; CHECK-I686-LABEL: test_uitofp_i64:403; CHECK-I686:       # %bb.0:404; CHECK-I686-NEXT:    pushl %esi405; CHECK-I686-NEXT:    subl $24, %esp406; CHECK-I686-NEXT:    movl {{[0-9]+}}(%esp), %esi407; CHECK-I686-NEXT:    movl {{[0-9]+}}(%esp), %eax408; CHECK-I686-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero409; CHECK-I686-NEXT:    movq %xmm0, {{[0-9]+}}(%esp)410; CHECK-I686-NEXT:    shrl $31, %eax411; CHECK-I686-NEXT:    fildll {{[0-9]+}}(%esp)412; CHECK-I686-NEXT:    fadds {{\.?LCPI[0-9]+_[0-9]+}}(,%eax,4)413; CHECK-I686-NEXT:    fstps (%esp)414; CHECK-I686-NEXT:    calll __truncsfhf2415; CHECK-I686-NEXT:    pextrw $0, %xmm0, %eax416; CHECK-I686-NEXT:    movw %ax, (%esi)417; CHECK-I686-NEXT:    addl $24, %esp418; CHECK-I686-NEXT:    popl %esi419; CHECK-I686-NEXT:    retl420  %r = uitofp i64 %a to half421  store half %r, ptr %p422  ret void423}424 425define <4 x float> @test_extend32_vec4(ptr %p) #0 {426; CHECK-LIBCALL-LABEL: test_extend32_vec4:427; CHECK-LIBCALL:       # %bb.0:428; CHECK-LIBCALL-NEXT:    subq $72, %rsp429; CHECK-LIBCALL-NEXT:    pinsrw $0, (%rdi), %xmm0430; CHECK-LIBCALL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill431; CHECK-LIBCALL-NEXT:    pinsrw $0, 2(%rdi), %xmm0432; CHECK-LIBCALL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill433; CHECK-LIBCALL-NEXT:    pinsrw $0, 4(%rdi), %xmm0434; CHECK-LIBCALL-NEXT:    movdqa %xmm0, (%rsp) # 16-byte Spill435; CHECK-LIBCALL-NEXT:    pinsrw $0, 6(%rdi), %xmm0436; CHECK-LIBCALL-NEXT:    callq __extendhfsf2@PLT437; CHECK-LIBCALL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill438; CHECK-LIBCALL-NEXT:    movaps (%rsp), %xmm0 # 16-byte Reload439; CHECK-LIBCALL-NEXT:    callq __extendhfsf2@PLT440; CHECK-LIBCALL-NEXT:    unpcklps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload441; CHECK-LIBCALL-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]442; CHECK-LIBCALL-NEXT:    movaps %xmm0, (%rsp) # 16-byte Spill443; CHECK-LIBCALL-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload444; CHECK-LIBCALL-NEXT:    callq __extendhfsf2@PLT445; CHECK-LIBCALL-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill446; CHECK-LIBCALL-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload447; CHECK-LIBCALL-NEXT:    callq __extendhfsf2@PLT448; CHECK-LIBCALL-NEXT:    unpcklps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload449; CHECK-LIBCALL-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]450; CHECK-LIBCALL-NEXT:    unpcklpd (%rsp), %xmm0 # 16-byte Folded Reload451; CHECK-LIBCALL-NEXT:    # xmm0 = xmm0[0],mem[0]452; CHECK-LIBCALL-NEXT:    addq $72, %rsp453; CHECK-LIBCALL-NEXT:    retq454;455; BWON-F16C-LABEL: test_extend32_vec4:456; BWON-F16C:       # %bb.0:457; BWON-F16C-NEXT:    vcvtph2ps (%rdi), %xmm0458; BWON-F16C-NEXT:    retq459;460; CHECK-I686-LABEL: test_extend32_vec4:461; CHECK-I686:       # %bb.0:462; CHECK-I686-NEXT:    pushl %esi463; CHECK-I686-NEXT:    subl $88, %esp464; CHECK-I686-NEXT:    movl {{[0-9]+}}(%esp), %eax465; CHECK-I686-NEXT:    pinsrw $0, (%eax), %xmm0466; CHECK-I686-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%e{{[sb]}}p) # 16-byte Spill467; CHECK-I686-NEXT:    pinsrw $0, 6(%eax), %xmm0468; CHECK-I686-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%e{{[sb]}}p) # 16-byte Spill469; CHECK-I686-NEXT:    pinsrw $0, 4(%eax), %xmm0470; CHECK-I686-NEXT:    pinsrw $0, 2(%eax), %xmm1471; CHECK-I686-NEXT:    pextrw $0, %xmm1, %eax472; CHECK-I686-NEXT:    movw %ax, (%esp)473; CHECK-I686-NEXT:    pextrw $0, %xmm0, %esi474; CHECK-I686-NEXT:    calll __extendhfsf2475; CHECK-I686-NEXT:    fstpt {{[-0-9]+}}(%e{{[sb]}}p) # 10-byte Folded Spill476; CHECK-I686-NEXT:    movw %si, (%esp)477; CHECK-I686-NEXT:    movdqa {{[-0-9]+}}(%e{{[sb]}}p), %xmm0 # 16-byte Reload478; CHECK-I686-NEXT:    pextrw $0, %xmm0, %esi479; CHECK-I686-NEXT:    calll __extendhfsf2480; CHECK-I686-NEXT:    fstpt {{[-0-9]+}}(%e{{[sb]}}p) # 10-byte Folded Spill481; CHECK-I686-NEXT:    movw %si, (%esp)482; CHECK-I686-NEXT:    movdqa {{[-0-9]+}}(%e{{[sb]}}p), %xmm0 # 16-byte Reload483; CHECK-I686-NEXT:    pextrw $0, %xmm0, %esi484; CHECK-I686-NEXT:    calll __extendhfsf2485; CHECK-I686-NEXT:    movw %si, (%esp)486; CHECK-I686-NEXT:    fstps {{[0-9]+}}(%esp)487; CHECK-I686-NEXT:    fldt {{[-0-9]+}}(%e{{[sb]}}p) # 10-byte Folded Reload488; CHECK-I686-NEXT:    fstps {{[0-9]+}}(%esp)489; CHECK-I686-NEXT:    fldt {{[-0-9]+}}(%e{{[sb]}}p) # 10-byte Folded Reload490; CHECK-I686-NEXT:    fstps {{[0-9]+}}(%esp)491; CHECK-I686-NEXT:    calll __extendhfsf2492; CHECK-I686-NEXT:    fstps {{[0-9]+}}(%esp)493; CHECK-I686-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero494; CHECK-I686-NEXT:    movss {{.*#+}} xmm1 = mem[0],zero,zero,zero495; CHECK-I686-NEXT:    unpcklps {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]496; CHECK-I686-NEXT:    movss {{.*#+}} xmm2 = mem[0],zero,zero,zero497; CHECK-I686-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero498; CHECK-I686-NEXT:    unpcklps {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1]499; CHECK-I686-NEXT:    movlhps {{.*#+}} xmm0 = xmm0[0],xmm1[0]500; CHECK-I686-NEXT:    addl $88, %esp501; CHECK-I686-NEXT:    popl %esi502; CHECK-I686-NEXT:    retl503  %a = load <4 x half>, ptr %p, align 8504  %b = fpext <4 x half> %a to <4 x float>505  ret <4 x float> %b506}507 508define <4 x double> @test_extend64_vec4(ptr %p) #0 {509; CHECK-LIBCALL-LABEL: test_extend64_vec4:510; CHECK-LIBCALL:       # %bb.0:511; CHECK-LIBCALL-NEXT:    subq $72, %rsp512; CHECK-LIBCALL-NEXT:    pinsrw $0, 4(%rdi), %xmm0513; CHECK-LIBCALL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill514; CHECK-LIBCALL-NEXT:    pinsrw $0, 6(%rdi), %xmm0515; CHECK-LIBCALL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill516; CHECK-LIBCALL-NEXT:    pinsrw $0, (%rdi), %xmm0517; CHECK-LIBCALL-NEXT:    movdqa %xmm0, (%rsp) # 16-byte Spill518; CHECK-LIBCALL-NEXT:    pinsrw $0, 2(%rdi), %xmm0519; CHECK-LIBCALL-NEXT:    callq __extendhfsf2@PLT520; CHECK-LIBCALL-NEXT:    cvtss2sd %xmm0, %xmm0521; CHECK-LIBCALL-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill522; CHECK-LIBCALL-NEXT:    movaps (%rsp), %xmm0 # 16-byte Reload523; CHECK-LIBCALL-NEXT:    callq __extendhfsf2@PLT524; CHECK-LIBCALL-NEXT:    cvtss2sd %xmm0, %xmm0525; CHECK-LIBCALL-NEXT:    unpcklpd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload526; CHECK-LIBCALL-NEXT:    # xmm0 = xmm0[0],mem[0]527; CHECK-LIBCALL-NEXT:    movaps %xmm0, (%rsp) # 16-byte Spill528; CHECK-LIBCALL-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload529; CHECK-LIBCALL-NEXT:    callq __extendhfsf2@PLT530; CHECK-LIBCALL-NEXT:    cvtss2sd %xmm0, %xmm0531; CHECK-LIBCALL-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill532; CHECK-LIBCALL-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload533; CHECK-LIBCALL-NEXT:    callq __extendhfsf2@PLT534; CHECK-LIBCALL-NEXT:    cvtss2sd %xmm0, %xmm1535; CHECK-LIBCALL-NEXT:    unpcklpd {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Folded Reload536; CHECK-LIBCALL-NEXT:    # xmm1 = xmm1[0],mem[0]537; CHECK-LIBCALL-NEXT:    movaps (%rsp), %xmm0 # 16-byte Reload538; CHECK-LIBCALL-NEXT:    addq $72, %rsp539; CHECK-LIBCALL-NEXT:    retq540;541; BWON-F16C-LABEL: test_extend64_vec4:542; BWON-F16C:       # %bb.0:543; BWON-F16C-NEXT:    vcvtph2ps (%rdi), %xmm0544; BWON-F16C-NEXT:    vcvtps2pd %xmm0, %ymm0545; BWON-F16C-NEXT:    retq546;547; CHECK-I686-LABEL: test_extend64_vec4:548; CHECK-I686:       # %bb.0:549; CHECK-I686-NEXT:    pushl %esi550; CHECK-I686-NEXT:    subl $104, %esp551; CHECK-I686-NEXT:    movl {{[0-9]+}}(%esp), %eax552; CHECK-I686-NEXT:    pinsrw $0, 6(%eax), %xmm0553; CHECK-I686-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%e{{[sb]}}p) # 16-byte Spill554; CHECK-I686-NEXT:    pinsrw $0, (%eax), %xmm0555; CHECK-I686-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%e{{[sb]}}p) # 16-byte Spill556; CHECK-I686-NEXT:    pinsrw $0, 2(%eax), %xmm0557; CHECK-I686-NEXT:    pinsrw $0, 4(%eax), %xmm1558; CHECK-I686-NEXT:    pextrw $0, %xmm1, %eax559; CHECK-I686-NEXT:    movw %ax, (%esp)560; CHECK-I686-NEXT:    pextrw $0, %xmm0, %esi561; CHECK-I686-NEXT:    calll __extendhfsf2562; CHECK-I686-NEXT:    fstpt {{[-0-9]+}}(%e{{[sb]}}p) # 10-byte Folded Spill563; CHECK-I686-NEXT:    movw %si, (%esp)564; CHECK-I686-NEXT:    movdqa {{[-0-9]+}}(%e{{[sb]}}p), %xmm0 # 16-byte Reload565; CHECK-I686-NEXT:    pextrw $0, %xmm0, %esi566; CHECK-I686-NEXT:    calll __extendhfsf2567; CHECK-I686-NEXT:    fstpt {{[-0-9]+}}(%e{{[sb]}}p) # 10-byte Folded Spill568; CHECK-I686-NEXT:    movw %si, (%esp)569; CHECK-I686-NEXT:    movdqa {{[-0-9]+}}(%e{{[sb]}}p), %xmm0 # 16-byte Reload570; CHECK-I686-NEXT:    pextrw $0, %xmm0, %esi571; CHECK-I686-NEXT:    calll __extendhfsf2572; CHECK-I686-NEXT:    movw %si, (%esp)573; CHECK-I686-NEXT:    fstpl {{[0-9]+}}(%esp)574; CHECK-I686-NEXT:    fldt {{[-0-9]+}}(%e{{[sb]}}p) # 10-byte Folded Reload575; CHECK-I686-NEXT:    fstpl {{[0-9]+}}(%esp)576; CHECK-I686-NEXT:    fldt {{[-0-9]+}}(%e{{[sb]}}p) # 10-byte Folded Reload577; CHECK-I686-NEXT:    fstpl {{[0-9]+}}(%esp)578; CHECK-I686-NEXT:    calll __extendhfsf2579; CHECK-I686-NEXT:    fstpl {{[0-9]+}}(%esp)580; CHECK-I686-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero581; CHECK-I686-NEXT:    movhps {{.*#+}} xmm0 = xmm0[0,1],mem[0,1]582; CHECK-I686-NEXT:    movsd {{.*#+}} xmm1 = mem[0],zero583; CHECK-I686-NEXT:    movhps {{.*#+}} xmm1 = xmm1[0,1],mem[0,1]584; CHECK-I686-NEXT:    addl $104, %esp585; CHECK-I686-NEXT:    popl %esi586; CHECK-I686-NEXT:    retl587  %a = load <4 x half>, ptr %p, align 8588  %b = fpext <4 x half> %a to <4 x double>589  ret <4 x double> %b590}591 592define void @test_trunc32_vec4(<4 x float> %a, ptr %p) #0 {593; CHECK-LIBCALL-LABEL: test_trunc32_vec4:594; CHECK-LIBCALL:       # %bb.0:595; CHECK-LIBCALL-NEXT:    pushq %rbx596; CHECK-LIBCALL-NEXT:    subq $64, %rsp597; CHECK-LIBCALL-NEXT:    movq %rdi, %rbx598; CHECK-LIBCALL-NEXT:    movaps %xmm0, (%rsp) # 16-byte Spill599; CHECK-LIBCALL-NEXT:    shufps {{.*#+}} xmm0 = xmm0[1,1,1,1]600; CHECK-LIBCALL-NEXT:    callq __truncsfhf2@PLT601; CHECK-LIBCALL-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill602; CHECK-LIBCALL-NEXT:    movaps (%rsp), %xmm0 # 16-byte Reload603; CHECK-LIBCALL-NEXT:    movhlps {{.*#+}} xmm0 = xmm0[1,1]604; CHECK-LIBCALL-NEXT:    callq __truncsfhf2@PLT605; CHECK-LIBCALL-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill606; CHECK-LIBCALL-NEXT:    movaps (%rsp), %xmm0 # 16-byte Reload607; CHECK-LIBCALL-NEXT:    shufps {{.*#+}} xmm0 = xmm0[3,3,3,3]608; CHECK-LIBCALL-NEXT:    callq __truncsfhf2@PLT609; CHECK-LIBCALL-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill610; CHECK-LIBCALL-NEXT:    movdqa (%rsp), %xmm0 # 16-byte Reload611; CHECK-LIBCALL-NEXT:    callq __truncsfhf2@PLT612; CHECK-LIBCALL-NEXT:    pextrw $0, %xmm0, %eax613; CHECK-LIBCALL-NEXT:    movw %ax, (%rbx)614; CHECK-LIBCALL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload615; CHECK-LIBCALL-NEXT:    pextrw $0, %xmm0, %eax616; CHECK-LIBCALL-NEXT:    movw %ax, 6(%rbx)617; CHECK-LIBCALL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload618; CHECK-LIBCALL-NEXT:    pextrw $0, %xmm0, %eax619; CHECK-LIBCALL-NEXT:    movw %ax, 4(%rbx)620; CHECK-LIBCALL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload621; CHECK-LIBCALL-NEXT:    pextrw $0, %xmm0, %eax622; CHECK-LIBCALL-NEXT:    movw %ax, 2(%rbx)623; CHECK-LIBCALL-NEXT:    addq $64, %rsp624; CHECK-LIBCALL-NEXT:    popq %rbx625; CHECK-LIBCALL-NEXT:    retq626;627; BWON-F16C-LABEL: test_trunc32_vec4:628; BWON-F16C:       # %bb.0:629; BWON-F16C-NEXT:    vcvtps2ph $4, %xmm0, (%rdi)630; BWON-F16C-NEXT:    retq631;632; CHECK-I686-LABEL: test_trunc32_vec4:633; CHECK-I686:       # %bb.0:634; CHECK-I686-NEXT:    pushl %esi635; CHECK-I686-NEXT:    subl $88, %esp636; CHECK-I686-NEXT:    movaps %xmm0, {{[-0-9]+}}(%e{{[sb]}}p) # 16-byte Spill637; CHECK-I686-NEXT:    movl {{[0-9]+}}(%esp), %esi638; CHECK-I686-NEXT:    movaps %xmm0, %xmm1639; CHECK-I686-NEXT:    shufps {{.*#+}} xmm1 = xmm1[1,1],xmm0[1,1]640; CHECK-I686-NEXT:    movss %xmm1, (%esp)641; CHECK-I686-NEXT:    calll __truncsfhf2642; CHECK-I686-NEXT:    movaps %xmm0, {{[-0-9]+}}(%e{{[sb]}}p) # 16-byte Spill643; CHECK-I686-NEXT:    movaps {{[-0-9]+}}(%e{{[sb]}}p), %xmm0 # 16-byte Reload644; CHECK-I686-NEXT:    movhlps {{.*#+}} xmm0 = xmm0[1,1]645; CHECK-I686-NEXT:    movss %xmm0, (%esp)646; CHECK-I686-NEXT:    calll __truncsfhf2647; CHECK-I686-NEXT:    movaps %xmm0, {{[-0-9]+}}(%e{{[sb]}}p) # 16-byte Spill648; CHECK-I686-NEXT:    movaps {{[-0-9]+}}(%e{{[sb]}}p), %xmm0 # 16-byte Reload649; CHECK-I686-NEXT:    shufps {{.*#+}} xmm0 = xmm0[3,3,3,3]650; CHECK-I686-NEXT:    movss %xmm0, (%esp)651; CHECK-I686-NEXT:    calll __truncsfhf2652; CHECK-I686-NEXT:    movaps %xmm0, {{[-0-9]+}}(%e{{[sb]}}p) # 16-byte Spill653; CHECK-I686-NEXT:    movdqa {{[-0-9]+}}(%e{{[sb]}}p), %xmm0 # 16-byte Reload654; CHECK-I686-NEXT:    movd %xmm0, (%esp)655; CHECK-I686-NEXT:    calll __truncsfhf2656; CHECK-I686-NEXT:    pextrw $0, %xmm0, %eax657; CHECK-I686-NEXT:    movw %ax, (%esi)658; CHECK-I686-NEXT:    movdqa {{[-0-9]+}}(%e{{[sb]}}p), %xmm0 # 16-byte Reload659; CHECK-I686-NEXT:    pextrw $0, %xmm0, %eax660; CHECK-I686-NEXT:    movw %ax, 6(%esi)661; CHECK-I686-NEXT:    movdqa {{[-0-9]+}}(%e{{[sb]}}p), %xmm0 # 16-byte Reload662; CHECK-I686-NEXT:    pextrw $0, %xmm0, %eax663; CHECK-I686-NEXT:    movw %ax, 4(%esi)664; CHECK-I686-NEXT:    movdqa {{[-0-9]+}}(%e{{[sb]}}p), %xmm0 # 16-byte Reload665; CHECK-I686-NEXT:    pextrw $0, %xmm0, %eax666; CHECK-I686-NEXT:    movw %ax, 2(%esi)667; CHECK-I686-NEXT:    addl $88, %esp668; CHECK-I686-NEXT:    popl %esi669; CHECK-I686-NEXT:    retl670  %v = fptrunc <4 x float> %a to <4 x half>671  store <4 x half> %v, ptr %p672  ret void673}674 675define void @test_trunc64_vec4(<4 x double> %a, ptr %p) #0 {676; CHECK-LIBCALL-LABEL: test_trunc64_vec4:677; CHECK-LIBCALL:       # %bb.0:678; CHECK-LIBCALL-NEXT:    pushq %rbx679; CHECK-LIBCALL-NEXT:    subq $64, %rsp680; CHECK-LIBCALL-NEXT:    movq %rdi, %rbx681; CHECK-LIBCALL-NEXT:    movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill682; CHECK-LIBCALL-NEXT:    movaps %xmm0, (%rsp) # 16-byte Spill683; CHECK-LIBCALL-NEXT:    movhlps {{.*#+}} xmm0 = xmm0[1,1]684; CHECK-LIBCALL-NEXT:    callq __truncdfhf2@PLT685; CHECK-LIBCALL-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill686; CHECK-LIBCALL-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload687; CHECK-LIBCALL-NEXT:    movhlps {{.*#+}} xmm0 = xmm0[1,1]688; CHECK-LIBCALL-NEXT:    callq __truncdfhf2@PLT689; CHECK-LIBCALL-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill690; CHECK-LIBCALL-NEXT:    movaps (%rsp), %xmm0 # 16-byte Reload691; CHECK-LIBCALL-NEXT:    callq __truncdfhf2@PLT692; CHECK-LIBCALL-NEXT:    movaps %xmm0, (%rsp) # 16-byte Spill693; CHECK-LIBCALL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload694; CHECK-LIBCALL-NEXT:    callq __truncdfhf2@PLT695; CHECK-LIBCALL-NEXT:    pextrw $0, %xmm0, %eax696; CHECK-LIBCALL-NEXT:    movw %ax, 4(%rbx)697; CHECK-LIBCALL-NEXT:    movdqa (%rsp), %xmm0 # 16-byte Reload698; CHECK-LIBCALL-NEXT:    pextrw $0, %xmm0, %eax699; CHECK-LIBCALL-NEXT:    movw %ax, (%rbx)700; CHECK-LIBCALL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload701; CHECK-LIBCALL-NEXT:    pextrw $0, %xmm0, %eax702; CHECK-LIBCALL-NEXT:    movw %ax, 6(%rbx)703; CHECK-LIBCALL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload704; CHECK-LIBCALL-NEXT:    pextrw $0, %xmm0, %eax705; CHECK-LIBCALL-NEXT:    movw %ax, 2(%rbx)706; CHECK-LIBCALL-NEXT:    addq $64, %rsp707; CHECK-LIBCALL-NEXT:    popq %rbx708; CHECK-LIBCALL-NEXT:    retq709;710; BWON-F16C-LABEL: test_trunc64_vec4:711; BWON-F16C:       # %bb.0:712; BWON-F16C-NEXT:    pushq %rbx713; BWON-F16C-NEXT:    subq $64, %rsp714; BWON-F16C-NEXT:    movq %rdi, %rbx715; BWON-F16C-NEXT:    vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill716; BWON-F16C-NEXT:    vextractf128 $1, %ymm0, %xmm0717; BWON-F16C-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill718; BWON-F16C-NEXT:    vzeroupper719; BWON-F16C-NEXT:    callq __truncdfhf2@PLT720; BWON-F16C-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill721; BWON-F16C-NEXT:    vpermilpd $1, (%rsp), %xmm0 # 16-byte Folded Reload722; BWON-F16C-NEXT:    # xmm0 = mem[1,0]723; BWON-F16C-NEXT:    callq __truncdfhf2@PLT724; BWON-F16C-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload725; BWON-F16C-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]726; BWON-F16C-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill727; BWON-F16C-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload728; BWON-F16C-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm0729; BWON-F16C-NEXT:    vzeroupper730; BWON-F16C-NEXT:    callq __truncdfhf2@PLT731; BWON-F16C-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill732; BWON-F16C-NEXT:    vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload733; BWON-F16C-NEXT:    # xmm0 = mem[1,0]734; BWON-F16C-NEXT:    callq __truncdfhf2@PLT735; BWON-F16C-NEXT:    vmovdqa (%rsp), %xmm1 # 16-byte Reload736; BWON-F16C-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]737; BWON-F16C-NEXT:    vpunpckldq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload738; BWON-F16C-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]739; BWON-F16C-NEXT:    vmovq %xmm0, (%rbx)740; BWON-F16C-NEXT:    addq $64, %rsp741; BWON-F16C-NEXT:    popq %rbx742; BWON-F16C-NEXT:    retq743;744; CHECK-I686-LABEL: test_trunc64_vec4:745; CHECK-I686:       # %bb.0:746; CHECK-I686-NEXT:    pushl %esi747; CHECK-I686-NEXT:    subl $88, %esp748; CHECK-I686-NEXT:    movaps %xmm1, {{[-0-9]+}}(%e{{[sb]}}p) # 16-byte Spill749; CHECK-I686-NEXT:    movaps %xmm0, {{[-0-9]+}}(%e{{[sb]}}p) # 16-byte Spill750; CHECK-I686-NEXT:    movl {{[0-9]+}}(%esp), %esi751; CHECK-I686-NEXT:    movlps %xmm0, (%esp)752; CHECK-I686-NEXT:    calll __truncdfhf2753; CHECK-I686-NEXT:    movaps %xmm0, {{[-0-9]+}}(%e{{[sb]}}p) # 16-byte Spill754; CHECK-I686-NEXT:    movaps {{[-0-9]+}}(%e{{[sb]}}p), %xmm0 # 16-byte Reload755; CHECK-I686-NEXT:    movhps %xmm0, (%esp)756; CHECK-I686-NEXT:    calll __truncdfhf2757; CHECK-I686-NEXT:    movaps %xmm0, {{[-0-9]+}}(%e{{[sb]}}p) # 16-byte Spill758; CHECK-I686-NEXT:    movaps {{[-0-9]+}}(%e{{[sb]}}p), %xmm0 # 16-byte Reload759; CHECK-I686-NEXT:    movlps %xmm0, (%esp)760; CHECK-I686-NEXT:    calll __truncdfhf2761; CHECK-I686-NEXT:    movaps %xmm0, {{[-0-9]+}}(%e{{[sb]}}p) # 16-byte Spill762; CHECK-I686-NEXT:    movaps {{[-0-9]+}}(%e{{[sb]}}p), %xmm0 # 16-byte Reload763; CHECK-I686-NEXT:    movhps %xmm0, (%esp)764; CHECK-I686-NEXT:    calll __truncdfhf2765; CHECK-I686-NEXT:    pextrw $0, %xmm0, %eax766; CHECK-I686-NEXT:    movw %ax, 6(%esi)767; CHECK-I686-NEXT:    movdqa {{[-0-9]+}}(%e{{[sb]}}p), %xmm0 # 16-byte Reload768; CHECK-I686-NEXT:    pextrw $0, %xmm0, %eax769; CHECK-I686-NEXT:    movw %ax, 4(%esi)770; CHECK-I686-NEXT:    movdqa {{[-0-9]+}}(%e{{[sb]}}p), %xmm0 # 16-byte Reload771; CHECK-I686-NEXT:    pextrw $0, %xmm0, %eax772; CHECK-I686-NEXT:    movw %ax, 2(%esi)773; CHECK-I686-NEXT:    movdqa {{[-0-9]+}}(%e{{[sb]}}p), %xmm0 # 16-byte Reload774; CHECK-I686-NEXT:    pextrw $0, %xmm0, %eax775; CHECK-I686-NEXT:    movw %ax, (%esi)776; CHECK-I686-NEXT:    addl $88, %esp777; CHECK-I686-NEXT:    popl %esi778; CHECK-I686-NEXT:    retl779  %v = fptrunc <4 x double> %a to <4 x half>780  store <4 x half> %v, ptr %p781  ret void782}783 784declare float @test_floatret();785 786; On i686, if SSE2 is available, the return value from test_floatret is loaded787; to f80 and then rounded to f32.  The DAG combiner should not combine this788; fp_round and the subsequent fptrunc from float to half.789define half @test_f80trunc_nodagcombine() #0 {790; CHECK-LIBCALL-LABEL: test_f80trunc_nodagcombine:791; CHECK-LIBCALL:       # %bb.0:792; CHECK-LIBCALL-NEXT:    pushq %rax793; CHECK-LIBCALL-NEXT:    callq test_floatret@PLT794; CHECK-LIBCALL-NEXT:    callq __truncsfhf2@PLT795; CHECK-LIBCALL-NEXT:    popq %rax796; CHECK-LIBCALL-NEXT:    retq797;798; BWON-F16C-LABEL: test_f80trunc_nodagcombine:799; BWON-F16C:       # %bb.0:800; BWON-F16C-NEXT:    pushq %rax801; BWON-F16C-NEXT:    callq test_floatret@PLT802; BWON-F16C-NEXT:    vcvtps2ph $4, %xmm0, %xmm0803; BWON-F16C-NEXT:    popq %rax804; BWON-F16C-NEXT:    retq805;806; CHECK-I686-LABEL: test_f80trunc_nodagcombine:807; CHECK-I686:       # %bb.0:808; CHECK-I686-NEXT:    subl $12, %esp809; CHECK-I686-NEXT:    calll test_floatret@PLT810; CHECK-I686-NEXT:    fstps (%esp)811; CHECK-I686-NEXT:    calll __truncsfhf2812; CHECK-I686-NEXT:    addl $12, %esp813; CHECK-I686-NEXT:    retl814  %1 = call float @test_floatret()815  %2 = fptrunc float %1 to half816  ret half %2817}818 819 820 821 822define float @test_sitofp_fadd_i32(i32 %a, ptr %b) #0 {823; CHECK-LIBCALL-LABEL: test_sitofp_fadd_i32:824; CHECK-LIBCALL:       # %bb.0:825; CHECK-LIBCALL-NEXT:    subq $40, %rsp826; CHECK-LIBCALL-NEXT:    pinsrw $0, (%rsi), %xmm0827; CHECK-LIBCALL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill828; CHECK-LIBCALL-NEXT:    xorps %xmm0, %xmm0829; CHECK-LIBCALL-NEXT:    cvtsi2ss %edi, %xmm0830; CHECK-LIBCALL-NEXT:    callq __truncsfhf2@PLT831; CHECK-LIBCALL-NEXT:    movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill832; CHECK-LIBCALL-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload833; CHECK-LIBCALL-NEXT:    callq __extendhfsf2@PLT834; CHECK-LIBCALL-NEXT:    movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill835; CHECK-LIBCALL-NEXT:    movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Reload836; CHECK-LIBCALL-NEXT:    # xmm0 = mem[0],zero,zero,zero837; CHECK-LIBCALL-NEXT:    callq __extendhfsf2@PLT838; CHECK-LIBCALL-NEXT:    addss {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload839; CHECK-LIBCALL-NEXT:    callq __truncsfhf2@PLT840; CHECK-LIBCALL-NEXT:    addq $40, %rsp841; CHECK-LIBCALL-NEXT:    jmp __extendhfsf2@PLT # TAILCALL842;843; BWON-F16C-LABEL: test_sitofp_fadd_i32:844; BWON-F16C:       # %bb.0:845; BWON-F16C-NEXT:    vpinsrw $0, (%rsi), %xmm0, %xmm0846; BWON-F16C-NEXT:    vcvtsi2ss %edi, %xmm15, %xmm1847; BWON-F16C-NEXT:    vcvtps2ph $4, %xmm1, %xmm1848; BWON-F16C-NEXT:    vcvtph2ps %xmm1, %xmm1849; BWON-F16C-NEXT:    vcvtph2ps %xmm0, %xmm0850; BWON-F16C-NEXT:    vaddss %xmm1, %xmm0, %xmm0851; BWON-F16C-NEXT:    vcvtps2ph $4, %xmm0, %xmm0852; BWON-F16C-NEXT:    vcvtph2ps %xmm0, %xmm0853; BWON-F16C-NEXT:    retq854;855; CHECK-I686-LABEL: test_sitofp_fadd_i32:856; CHECK-I686:       # %bb.0:857; CHECK-I686-NEXT:    subl $60, %esp858; CHECK-I686-NEXT:    movl {{[0-9]+}}(%esp), %eax859; CHECK-I686-NEXT:    pinsrw $0, (%eax), %xmm0860; CHECK-I686-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%e{{[sb]}}p) # 16-byte Spill861; CHECK-I686-NEXT:    xorps %xmm0, %xmm0862; CHECK-I686-NEXT:    cvtsi2ssl {{[0-9]+}}(%esp), %xmm0863; CHECK-I686-NEXT:    movss %xmm0, (%esp)864; CHECK-I686-NEXT:    calll __truncsfhf2865; CHECK-I686-NEXT:    movaps %xmm0, {{[-0-9]+}}(%e{{[sb]}}p) # 16-byte Spill866; CHECK-I686-NEXT:    movdqa {{[-0-9]+}}(%e{{[sb]}}p), %xmm0 # 16-byte Reload867; CHECK-I686-NEXT:    pextrw $0, %xmm0, %eax868; CHECK-I686-NEXT:    movw %ax, (%esp)869; CHECK-I686-NEXT:    calll __extendhfsf2870; CHECK-I686-NEXT:    movdqa {{[-0-9]+}}(%e{{[sb]}}p), %xmm0 # 16-byte Reload871; CHECK-I686-NEXT:    pextrw $0, %xmm0, %eax872; CHECK-I686-NEXT:    movw %ax, (%esp)873; CHECK-I686-NEXT:    fstps {{[0-9]+}}(%esp)874; CHECK-I686-NEXT:    calll __extendhfsf2875; CHECK-I686-NEXT:    fstps {{[0-9]+}}(%esp)876; CHECK-I686-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero877; CHECK-I686-NEXT:    addss {{[0-9]+}}(%esp), %xmm0878; CHECK-I686-NEXT:    movss %xmm0, (%esp)879; CHECK-I686-NEXT:    calll __truncsfhf2880; CHECK-I686-NEXT:    pextrw $0, %xmm0, %eax881; CHECK-I686-NEXT:    movw %ax, (%esp)882; CHECK-I686-NEXT:    calll __extendhfsf2883; CHECK-I686-NEXT:    addl $60, %esp884; CHECK-I686-NEXT:    retl885  %tmp0 = load half, ptr %b886  %tmp1 = sitofp i32 %a to half887  %tmp2 = fadd half %tmp0, %tmp1888  %tmp3 = fpext half %tmp2 to float889  ret float %tmp3890}891 892define half @PR40273(half) #0 {893; CHECK-LIBCALL-LABEL: PR40273:894; CHECK-LIBCALL:       # %bb.0:895; CHECK-LIBCALL-NEXT:    pushq %rax896; CHECK-LIBCALL-NEXT:    callq __extendhfsf2@PLT897; CHECK-LIBCALL-NEXT:    xorl %eax, %eax898; CHECK-LIBCALL-NEXT:    xorps %xmm1, %xmm1899; CHECK-LIBCALL-NEXT:    ucomiss %xmm1, %xmm0900; CHECK-LIBCALL-NEXT:    movl $15360, %ecx # imm = 0x3C00901; CHECK-LIBCALL-NEXT:    cmovnel %ecx, %eax902; CHECK-LIBCALL-NEXT:    cmovpl %ecx, %eax903; CHECK-LIBCALL-NEXT:    pinsrw $0, %eax, %xmm0904; CHECK-LIBCALL-NEXT:    popq %rax905; CHECK-LIBCALL-NEXT:    retq906;907; BWON-F16C-LABEL: PR40273:908; BWON-F16C:       # %bb.0:909; BWON-F16C-NEXT:    vcvtph2ps %xmm0, %xmm0910; BWON-F16C-NEXT:    xorl %eax, %eax911; BWON-F16C-NEXT:    vxorps %xmm1, %xmm1, %xmm1912; BWON-F16C-NEXT:    vucomiss %xmm1, %xmm0913; BWON-F16C-NEXT:    movl $15360, %ecx # imm = 0x3C00914; BWON-F16C-NEXT:    cmovnel %ecx, %eax915; BWON-F16C-NEXT:    cmovpl %ecx, %eax916; BWON-F16C-NEXT:    vpinsrw $0, %eax, %xmm0, %xmm0917; BWON-F16C-NEXT:    retq918;919; CHECK-I686-LABEL: PR40273:920; CHECK-I686:       # %bb.0:921; CHECK-I686-NEXT:    subl $12, %esp922; CHECK-I686-NEXT:    pinsrw $0, {{[0-9]+}}(%esp), %xmm0923; CHECK-I686-NEXT:    pextrw $0, %xmm0, %eax924; CHECK-I686-NEXT:    movw %ax, (%esp)925; CHECK-I686-NEXT:    calll __extendhfsf2926; CHECK-I686-NEXT:    fstps {{[0-9]+}}(%esp)927; CHECK-I686-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero928; CHECK-I686-NEXT:    xorl %eax, %eax929; CHECK-I686-NEXT:    xorps %xmm1, %xmm1930; CHECK-I686-NEXT:    ucomiss %xmm1, %xmm0931; CHECK-I686-NEXT:    movl $15360, %ecx # imm = 0x3C00932; CHECK-I686-NEXT:    cmovnel %ecx, %eax933; CHECK-I686-NEXT:    cmovpl %ecx, %eax934; CHECK-I686-NEXT:    pinsrw $0, %eax, %xmm0935; CHECK-I686-NEXT:    addl $12, %esp936; CHECK-I686-NEXT:    retl937  %2 = fcmp une half %0, 0xH0000938  %3 = uitofp i1 %2 to half939  ret half %3940}941 942define void @brcond(half %0) #0 {943; CHECK-LIBCALL-LABEL: brcond:944; CHECK-LIBCALL:       # %bb.0: # %entry945; CHECK-LIBCALL-NEXT:    pushq %rax946; CHECK-LIBCALL-NEXT:    callq __extendhfsf2@PLT947; CHECK-LIBCALL-NEXT:    xorps %xmm1, %xmm1948; CHECK-LIBCALL-NEXT:    ucomiss %xmm1, %xmm0949; CHECK-LIBCALL-NEXT:    setp %al950; CHECK-LIBCALL-NEXT:    setne %cl951; CHECK-LIBCALL-NEXT:    orb %al, %cl952; CHECK-LIBCALL-NEXT:    jne .LBB18_2953; CHECK-LIBCALL-NEXT:  # %bb.1: # %if.then954; CHECK-LIBCALL-NEXT:    popq %rax955; CHECK-LIBCALL-NEXT:    retq956; CHECK-LIBCALL-NEXT:  .LBB18_2: # %if.end957;958; BWON-F16C-LABEL: brcond:959; BWON-F16C:       # %bb.0: # %entry960; BWON-F16C-NEXT:    vcvtph2ps %xmm0, %xmm0961; BWON-F16C-NEXT:    vxorps %xmm1, %xmm1, %xmm1962; BWON-F16C-NEXT:    vucomiss %xmm1, %xmm0963; BWON-F16C-NEXT:    setp %al964; BWON-F16C-NEXT:    setne %cl965; BWON-F16C-NEXT:    orb %al, %cl966; BWON-F16C-NEXT:    jne .LBB18_2967; BWON-F16C-NEXT:  # %bb.1: # %if.then968; BWON-F16C-NEXT:    retq969; BWON-F16C-NEXT:  .LBB18_2: # %if.end970;971; CHECK-I686-LABEL: brcond:972; CHECK-I686:       # %bb.0: # %entry973; CHECK-I686-NEXT:    subl $12, %esp974; CHECK-I686-NEXT:    pinsrw $0, {{[0-9]+}}(%esp), %xmm0975; CHECK-I686-NEXT:    pextrw $0, %xmm0, %eax976; CHECK-I686-NEXT:    movw %ax, (%esp)977; CHECK-I686-NEXT:    calll __extendhfsf2978; CHECK-I686-NEXT:    fstps {{[0-9]+}}(%esp)979; CHECK-I686-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero980; CHECK-I686-NEXT:    xorps %xmm1, %xmm1981; CHECK-I686-NEXT:    ucomiss %xmm1, %xmm0982; CHECK-I686-NEXT:    setp %al983; CHECK-I686-NEXT:    setne %cl984; CHECK-I686-NEXT:    orb %al, %cl985; CHECK-I686-NEXT:    jne .LBB18_2986; CHECK-I686-NEXT:  # %bb.1: # %if.then987; CHECK-I686-NEXT:    addl $12, %esp988; CHECK-I686-NEXT:    retl989; CHECK-I686-NEXT:  .LBB18_2: # %if.end990entry:991  %cmp = fcmp oeq half 0xH0000, %0992  br i1 %cmp, label %if.then, label %if.end993 994if.then:                                          ; preds = %entry995  ret void996 997if.end:                                           ; preds = %entry998  unreachable999}1000 1001define half @test_sqrt(half %0) #0 {1002; CHECK-LIBCALL-LABEL: test_sqrt:1003; CHECK-LIBCALL:       # %bb.0: # %entry1004; CHECK-LIBCALL-NEXT:    pushq %rax1005; CHECK-LIBCALL-NEXT:    callq __extendhfsf2@PLT1006; CHECK-LIBCALL-NEXT:    sqrtss %xmm0, %xmm01007; CHECK-LIBCALL-NEXT:    callq __truncsfhf2@PLT1008; CHECK-LIBCALL-NEXT:    popq %rax1009; CHECK-LIBCALL-NEXT:    retq1010;1011; BWON-F16C-LABEL: test_sqrt:1012; BWON-F16C:       # %bb.0: # %entry1013; BWON-F16C-NEXT:    vcvtph2ps %xmm0, %xmm01014; BWON-F16C-NEXT:    vsqrtss %xmm0, %xmm0, %xmm01015; BWON-F16C-NEXT:    vcvtps2ph $4, %xmm0, %xmm01016; BWON-F16C-NEXT:    retq1017;1018; CHECK-I686-LABEL: test_sqrt:1019; CHECK-I686:       # %bb.0: # %entry1020; CHECK-I686-NEXT:    subl $12, %esp1021; CHECK-I686-NEXT:    pinsrw $0, {{[0-9]+}}(%esp), %xmm01022; CHECK-I686-NEXT:    pextrw $0, %xmm0, %eax1023; CHECK-I686-NEXT:    movw %ax, (%esp)1024; CHECK-I686-NEXT:    calll __extendhfsf21025; CHECK-I686-NEXT:    fstps {{[0-9]+}}(%esp)1026; CHECK-I686-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero1027; CHECK-I686-NEXT:    sqrtss %xmm0, %xmm01028; CHECK-I686-NEXT:    movss %xmm0, (%esp)1029; CHECK-I686-NEXT:    calll __truncsfhf21030; CHECK-I686-NEXT:    addl $12, %esp1031; CHECK-I686-NEXT:    retl1032entry:1033  %1 = call half @llvm.sqrt.f16(half %0)1034  ret half %11035}1036 1037declare half @llvm.sqrt.f16(half)1038 1039define void @main.158() #0 {1040; CHECK-LIBCALL-LABEL: main.158:1041; CHECK-LIBCALL:       # %bb.0: # %entry1042; CHECK-LIBCALL-NEXT:    pushq %rax1043; CHECK-LIBCALL-NEXT:    xorps %xmm0, %xmm01044; CHECK-LIBCALL-NEXT:    callq __extendhfsf2@PLT1045; CHECK-LIBCALL-NEXT:    movss {{.*#+}} xmm1 = [8.0E+0,0.0E+0,0.0E+0,0.0E+0]1046; CHECK-LIBCALL-NEXT:    ucomiss %xmm0, %xmm11047; CHECK-LIBCALL-NEXT:    xorps %xmm0, %xmm01048; CHECK-LIBCALL-NEXT:    jae .LBB20_21049; CHECK-LIBCALL-NEXT:  # %bb.1: # %entry1050; CHECK-LIBCALL-NEXT:    movss {{.*#+}} xmm0 = [NaN,0.0E+0,0.0E+0,0.0E+0]1051; CHECK-LIBCALL-NEXT:  .LBB20_2: # %entry1052; CHECK-LIBCALL-NEXT:    callq __truncsfhf2@PLT1053; CHECK-LIBCALL-NEXT:    pextrw $0, %xmm0, %eax1054; CHECK-LIBCALL-NEXT:    movw %ax, (%rax)1055; CHECK-LIBCALL-NEXT:    popq %rax1056; CHECK-LIBCALL-NEXT:    retq1057;1058; BWON-F16C-LABEL: main.158:1059; BWON-F16C:       # %bb.0: # %entry1060; BWON-F16C-NEXT:    vxorps %xmm0, %xmm0, %xmm01061; BWON-F16C-NEXT:    vcvtph2ps %xmm0, %xmm01062; BWON-F16C-NEXT:    vmovss {{.*#+}} xmm1 = [8.0E+0,0.0E+0,0.0E+0,0.0E+0]1063; BWON-F16C-NEXT:    vucomiss %xmm0, %xmm11064; BWON-F16C-NEXT:    vxorps %xmm0, %xmm0, %xmm01065; BWON-F16C-NEXT:    jae .LBB20_21066; BWON-F16C-NEXT:  # %bb.1: # %entry1067; BWON-F16C-NEXT:    vmovss {{.*#+}} xmm0 = [NaN,0.0E+0,0.0E+0,0.0E+0]1068; BWON-F16C-NEXT:  .LBB20_2: # %entry1069; BWON-F16C-NEXT:    vcvtps2ph $4, %xmm0, %xmm01070; BWON-F16C-NEXT:    vpextrw $0, %xmm0, (%rax)1071; BWON-F16C-NEXT:    retq1072;1073; CHECK-I686-LABEL: main.158:1074; CHECK-I686:       # %bb.0: # %entry1075; CHECK-I686-NEXT:    subl $12, %esp1076; CHECK-I686-NEXT:    pxor %xmm0, %xmm01077; CHECK-I686-NEXT:    pextrw $0, %xmm0, %eax1078; CHECK-I686-NEXT:    movw %ax, (%esp)1079; CHECK-I686-NEXT:    calll __extendhfsf21080; CHECK-I686-NEXT:    fstps {{[0-9]+}}(%esp)1081; CHECK-I686-NEXT:    movss {{.*#+}} xmm0 = [8.0E+0,0.0E+0,0.0E+0,0.0E+0]1082; CHECK-I686-NEXT:    ucomiss {{[0-9]+}}(%esp), %xmm01083; CHECK-I686-NEXT:    xorps %xmm0, %xmm01084; CHECK-I686-NEXT:    jae .LBB20_21085; CHECK-I686-NEXT:  # %bb.1: # %entry1086; CHECK-I686-NEXT:    movss {{.*#+}} xmm0 = [NaN,0.0E+0,0.0E+0,0.0E+0]1087; CHECK-I686-NEXT:  .LBB20_2: # %entry1088; CHECK-I686-NEXT:    movss %xmm0, (%esp)1089; CHECK-I686-NEXT:    calll __truncsfhf21090; CHECK-I686-NEXT:    pextrw $0, %xmm0, %eax1091; CHECK-I686-NEXT:    movw %ax, (%eax)1092; CHECK-I686-NEXT:    addl $12, %esp1093; CHECK-I686-NEXT:    retl1094entry:1095  %0 = tail call half @llvm.fabs.f16(half undef)1096  %1 = fpext half %0 to float1097  %compare.2 = fcmp ole half %0, 0xH48001098  %multiply.95 = fmul float %1, 5.000000e-011099  %add.82 = fadd float %multiply.95, -2.000000e+001100  %multiply.68 = fmul float %add.82, 0.000000e+001101  %subtract.65 = fsub float %multiply.68, 0.000000e+001102  %multiply.57 = fmul float undef, 0.000000e+001103  %2 = select i1 %compare.2, float 0.000000e+00, float %multiply.571104  %3 = fptrunc float %2 to half1105  store half %3, ptr undef, align 21106  ret void1107}1108 1109define void @main.45() #0 {1110; CHECK-LIBCALL-LABEL: main.45:1111; CHECK-LIBCALL:       # %bb.0: # %entry1112; CHECK-LIBCALL-NEXT:    pushq %r151113; CHECK-LIBCALL-NEXT:    pushq %r141114; CHECK-LIBCALL-NEXT:    pushq %rbx1115; CHECK-LIBCALL-NEXT:    subq $16, %rsp1116; CHECK-LIBCALL-NEXT:    pinsrw $0, (%rax), %xmm01117; CHECK-LIBCALL-NEXT:    pshuflw {{.*#+}} xmm1 = xmm0[0,0,0,0,4,5,6,7]1118; CHECK-LIBCALL-NEXT:    movdqa %xmm1, (%rsp) # 16-byte Spill1119; CHECK-LIBCALL-NEXT:    movq %xmm1, %rbx1120; CHECK-LIBCALL-NEXT:    movq %rbx, %r141121; CHECK-LIBCALL-NEXT:    shrq $48, %r141122; CHECK-LIBCALL-NEXT:    movq %rbx, %r151123; CHECK-LIBCALL-NEXT:    shrq $32, %r151124; CHECK-LIBCALL-NEXT:    shrl $16, %ebx1125; CHECK-LIBCALL-NEXT:    callq __extendhfsf2@PLT1126; CHECK-LIBCALL-NEXT:    ucomiss %xmm0, %xmm01127; CHECK-LIBCALL-NEXT:    movdqa (%rsp), %xmm0 # 16-byte Reload1128; CHECK-LIBCALL-NEXT:    pextrw $0, %xmm0, %eax1129; CHECK-LIBCALL-NEXT:    movl $32256, %ecx # imm = 0x7E001130; CHECK-LIBCALL-NEXT:    cmovpl %ecx, %eax1131; CHECK-LIBCALL-NEXT:    cmovpl %ecx, %ebx1132; CHECK-LIBCALL-NEXT:    cmovpl %ecx, %r15d1133; CHECK-LIBCALL-NEXT:    cmovpl %ecx, %r14d1134; CHECK-LIBCALL-NEXT:    movw %r14w, (%rax)1135; CHECK-LIBCALL-NEXT:    movw %r15w, (%rax)1136; CHECK-LIBCALL-NEXT:    movw %bx, (%rax)1137; CHECK-LIBCALL-NEXT:    movw %ax, (%rax)1138; CHECK-LIBCALL-NEXT:    addq $16, %rsp1139; CHECK-LIBCALL-NEXT:    popq %rbx1140; CHECK-LIBCALL-NEXT:    popq %r141141; CHECK-LIBCALL-NEXT:    popq %r151142; CHECK-LIBCALL-NEXT:    retq1143;1144; BWON-F16C-LABEL: main.45:1145; BWON-F16C:       # %bb.0: # %entry1146; BWON-F16C-NEXT:    vpinsrw $0, (%rax), %xmm0, %xmm01147; BWON-F16C-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]1148; BWON-F16C-NEXT:    vcvtph2ps %xmm0, %xmm11149; BWON-F16C-NEXT:    vxorps %xmm2, %xmm2, %xmm21150; BWON-F16C-NEXT:    vcmpunordps %xmm2, %xmm1, %xmm11151; BWON-F16C-NEXT:    vpackssdw %xmm1, %xmm1, %xmm11152; BWON-F16C-NEXT:    vpblendvb %xmm1, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01153; BWON-F16C-NEXT:    vmovq %xmm0, (%rax)1154; BWON-F16C-NEXT:    retq1155;1156; CHECK-I686-LABEL: main.45:1157; CHECK-I686:       # %bb.0: # %entry1158; CHECK-I686-NEXT:    pushl %esi1159; CHECK-I686-NEXT:    subl $8, %esp1160; CHECK-I686-NEXT:    pinsrw $0, (%eax), %xmm01161; CHECK-I686-NEXT:    pextrw $0, %xmm0, %esi1162; CHECK-I686-NEXT:    movw %si, (%esp)1163; CHECK-I686-NEXT:    calll __extendhfsf21164; CHECK-I686-NEXT:    fstps {{[0-9]+}}(%esp)1165; CHECK-I686-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero1166; CHECK-I686-NEXT:    ucomiss %xmm0, %xmm01167; CHECK-I686-NEXT:    movl $32256, %eax # imm = 0x7E001168; CHECK-I686-NEXT:    cmovnpl %esi, %eax1169; CHECK-I686-NEXT:    movw %ax, (%eax)1170; CHECK-I686-NEXT:    addl $8, %esp1171; CHECK-I686-NEXT:    popl %esi1172; CHECK-I686-NEXT:    retl1173entry:1174  %0 = load half, ptr undef, align 81175  %1 = bitcast half %0 to i161176  %broadcast.splatinsert = insertelement <4 x half> poison, half %0, i64 01177  %broadcast.splat = shufflevector <4 x half> %broadcast.splatinsert, <4 x half> poison, <4 x i32> zeroinitializer1178  %broadcast.splatinsert13 = insertelement <4 x i16> poison, i16 %1, i64 01179  %broadcast.splat14 = shufflevector <4 x i16> %broadcast.splatinsert13, <4 x i16> poison, <4 x i32> zeroinitializer1180  %2 = fcmp uno <4 x half> %broadcast.splat, zeroinitializer1181  %3 = add <4 x i16> zeroinitializer, %broadcast.splat141182  %4 = select i1 undef, <4 x i16> undef, <4 x i16> %31183  %5 = select <4 x i1> undef, <4 x i16> undef, <4 x i16> %41184  %6 = bitcast <4 x i16> %5 to <4 x half>1185  %7 = select <4 x i1> %2, <4 x half> <half 0xH7E00, half 0xH7E00, half 0xH7E00, half 0xH7E00>, <4 x half> %61186  store <4 x half> %7, ptr undef, align 161187  ret void1188}1189 1190define half @fcopysign(half %x, half %y) {1191; CHECK-LIBCALL-LABEL: fcopysign:1192; CHECK-LIBCALL:       # %bb.0:1193; CHECK-LIBCALL-NEXT:    andps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm11194; CHECK-LIBCALL-NEXT:    andps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01195; CHECK-LIBCALL-NEXT:    orps %xmm1, %xmm01196; CHECK-LIBCALL-NEXT:    retq1197;1198; BWON-F16C-LABEL: fcopysign:1199; BWON-F16C:       # %bb.0:1200; BWON-F16C-NEXT:    vandps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm11201; BWON-F16C-NEXT:    vandps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01202; BWON-F16C-NEXT:    vorps %xmm1, %xmm0, %xmm01203; BWON-F16C-NEXT:    retq1204;1205; CHECK-I686-LABEL: fcopysign:1206; CHECK-I686:       # %bb.0:1207; CHECK-I686-NEXT:    pinsrw $0, {{[0-9]+}}(%esp), %xmm01208; CHECK-I686-NEXT:    pinsrw $0, {{[0-9]+}}(%esp), %xmm11209; CHECK-I686-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}, %xmm11210; CHECK-I686-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}, %xmm01211; CHECK-I686-NEXT:    por %xmm1, %xmm01212; CHECK-I686-NEXT:    retl1213  %a = call half @llvm.copysign.f16(half %x, half %y)1214  ret half %a1215}1216 1217declare half @llvm.fabs.f16(half)1218declare half @llvm.copysign.f16(half, half)1219 1220define <8 x half> @select(i1 %c, <8 x half> %x, <8 x half> %y) {1221; CHECK-LIBCALL-LABEL: select:1222; CHECK-LIBCALL:       # %bb.0:1223; CHECK-LIBCALL-NEXT:    testb $1, %dil1224; CHECK-LIBCALL-NEXT:    jne .LBB23_21225; CHECK-LIBCALL-NEXT:  # %bb.1:1226; CHECK-LIBCALL-NEXT:    movaps %xmm1, %xmm01227; CHECK-LIBCALL-NEXT:  .LBB23_2:1228; CHECK-LIBCALL-NEXT:    retq1229;1230; BWON-F16C-LABEL: select:1231; BWON-F16C:       # %bb.0:1232; BWON-F16C-NEXT:    testb $1, %dil1233; BWON-F16C-NEXT:    jne .LBB23_21234; BWON-F16C-NEXT:  # %bb.1:1235; BWON-F16C-NEXT:    vmovaps %xmm1, %xmm01236; BWON-F16C-NEXT:  .LBB23_2:1237; BWON-F16C-NEXT:    retq1238;1239; CHECK-I686-LABEL: select:1240; CHECK-I686:       # %bb.0:1241; CHECK-I686-NEXT:    testb $1, {{[0-9]+}}(%esp)1242; CHECK-I686-NEXT:    jne .LBB23_21243; CHECK-I686-NEXT:  # %bb.1:1244; CHECK-I686-NEXT:    movaps %xmm1, %xmm01245; CHECK-I686-NEXT:  .LBB23_2:1246; CHECK-I686-NEXT:    retl1247  %s = select i1 %c, <8 x half> %x, <8 x half> %y1248  ret <8 x half> %s1249}1250 1251define <8 x half> @shuffle(ptr %p) {1252; CHECK-LIBCALL-LABEL: shuffle:1253; CHECK-LIBCALL:       # %bb.0:1254; CHECK-LIBCALL-NEXT:    movdqu (%rdi), %xmm01255; CHECK-LIBCALL-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,4,4,4]1256; CHECK-LIBCALL-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,3,2,3]1257; CHECK-LIBCALL-NEXT:    retq1258;1259; BWON-F16C-LABEL: shuffle:1260; BWON-F16C:       # %bb.0:1261; BWON-F16C-NEXT:    vpshufhw {{.*#+}} xmm0 = mem[0,1,2,3,4,4,4,4]1262; BWON-F16C-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[2,3,2,3]1263; BWON-F16C-NEXT:    retq1264;1265; CHECK-I686-LABEL: shuffle:1266; CHECK-I686:       # %bb.0:1267; CHECK-I686-NEXT:    movl {{[0-9]+}}(%esp), %eax1268; CHECK-I686-NEXT:    movdqu (%eax), %xmm01269; CHECK-I686-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,4,4,4]1270; CHECK-I686-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,3,2,3]1271; CHECK-I686-NEXT:    retl1272  %1 = load <8 x half>, ptr %p, align 81273  %2 = shufflevector <8 x half> %1, <8 x half> poison, <8 x i32> <i32 4, i32 4, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>1274  ret <8 x half> %21275}1276 1277declare half @llvm.minnum.f16(half, half)1278 1279define half @pr61271(half %0, half %1) #0 {1280; CHECK-LIBCALL-LABEL: pr61271:1281; CHECK-LIBCALL:       # %bb.0:1282; CHECK-LIBCALL-NEXT:    pushq %rax1283; CHECK-LIBCALL-NEXT:    movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill1284; CHECK-LIBCALL-NEXT:    movaps %xmm1, %xmm01285; CHECK-LIBCALL-NEXT:    callq __extendhfsf2@PLT1286; CHECK-LIBCALL-NEXT:    movss %xmm0, (%rsp) # 4-byte Spill1287; CHECK-LIBCALL-NEXT:    movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Reload1288; CHECK-LIBCALL-NEXT:    # xmm0 = mem[0],zero,zero,zero1289; CHECK-LIBCALL-NEXT:    callq __extendhfsf2@PLT1290; CHECK-LIBCALL-NEXT:    minss (%rsp), %xmm0 # 4-byte Folded Reload1291; CHECK-LIBCALL-NEXT:    callq __truncsfhf2@PLT1292; CHECK-LIBCALL-NEXT:    popq %rax1293; CHECK-LIBCALL-NEXT:    retq1294;1295; BWON-F16C-LABEL: pr61271:1296; BWON-F16C:       # %bb.0:1297; BWON-F16C-NEXT:    vcvtph2ps %xmm1, %xmm11298; BWON-F16C-NEXT:    vcvtph2ps %xmm0, %xmm01299; BWON-F16C-NEXT:    vminss %xmm1, %xmm0, %xmm01300; BWON-F16C-NEXT:    vcvtps2ph $4, %xmm0, %xmm01301; BWON-F16C-NEXT:    retq1302;1303; CHECK-I686-LABEL: pr61271:1304; CHECK-I686:       # %bb.0:1305; CHECK-I686-NEXT:    subl $44, %esp1306; CHECK-I686-NEXT:    pinsrw $0, {{[0-9]+}}(%esp), %xmm01307; CHECK-I686-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%e{{[sb]}}p) # 16-byte Spill1308; CHECK-I686-NEXT:    pinsrw $0, {{[0-9]+}}(%esp), %xmm01309; CHECK-I686-NEXT:    pextrw $0, %xmm0, %eax1310; CHECK-I686-NEXT:    movw %ax, (%esp)1311; CHECK-I686-NEXT:    calll __extendhfsf21312; CHECK-I686-NEXT:    movdqa {{[-0-9]+}}(%e{{[sb]}}p), %xmm0 # 16-byte Reload1313; CHECK-I686-NEXT:    pextrw $0, %xmm0, %eax1314; CHECK-I686-NEXT:    movw %ax, (%esp)1315; CHECK-I686-NEXT:    fstps {{[0-9]+}}(%esp)1316; CHECK-I686-NEXT:    calll __extendhfsf21317; CHECK-I686-NEXT:    fstps {{[0-9]+}}(%esp)1318; CHECK-I686-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero1319; CHECK-I686-NEXT:    minss {{[0-9]+}}(%esp), %xmm01320; CHECK-I686-NEXT:    movss %xmm0, (%esp)1321; CHECK-I686-NEXT:    calll __truncsfhf21322; CHECK-I686-NEXT:    addl $44, %esp1323; CHECK-I686-NEXT:    retl1324  %3 = call fast half @llvm.minnum.f16(half %0, half %1)1325  ret half %31326}1327 1328declare <8 x half> @llvm.maxnum.v8f16(<8 x half>, <8 x half>)1329 1330define <8 x half> @maxnum_v8f16(<8 x half> %0, <8 x half> %1) #0 {1331; CHECK-LIBCALL-LABEL: maxnum_v8f16:1332; CHECK-LIBCALL:       # %bb.0:1333; CHECK-LIBCALL-NEXT:    subq $184, %rsp1334; CHECK-LIBCALL-NEXT:    movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1335; CHECK-LIBCALL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1336; CHECK-LIBCALL-NEXT:    psrldq {{.*#+}} xmm0 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1337; CHECK-LIBCALL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1338; CHECK-LIBCALL-NEXT:    callq __extendhfsf2@PLT1339; CHECK-LIBCALL-NEXT:    movd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Folded Spill1340; CHECK-LIBCALL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1341; CHECK-LIBCALL-NEXT:    psrldq {{.*#+}} xmm0 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1342; CHECK-LIBCALL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1343; CHECK-LIBCALL-NEXT:    callq __extendhfsf2@PLT1344; CHECK-LIBCALL-NEXT:    movd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Folded Spill1345; CHECK-LIBCALL-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1346; CHECK-LIBCALL-NEXT:    callq __extendhfsf2@PLT1347; CHECK-LIBCALL-NEXT:    movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill1348; CHECK-LIBCALL-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1349; CHECK-LIBCALL-NEXT:    callq __extendhfsf2@PLT1350; CHECK-LIBCALL-NEXT:    ucomiss {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload1351; CHECK-LIBCALL-NEXT:    movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Reload1352; CHECK-LIBCALL-NEXT:    # xmm0 = mem[0],zero,zero,zero1353; CHECK-LIBCALL-NEXT:    ja .LBB26_21354; CHECK-LIBCALL-NEXT:  # %bb.1:1355; CHECK-LIBCALL-NEXT:    movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Reload1356; CHECK-LIBCALL-NEXT:    # xmm0 = mem[0],zero,zero,zero1357; CHECK-LIBCALL-NEXT:  .LBB26_2:1358; CHECK-LIBCALL-NEXT:    callq __truncsfhf2@PLT1359; CHECK-LIBCALL-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1360; CHECK-LIBCALL-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1361; CHECK-LIBCALL-NEXT:    shufps {{.*#+}} xmm0 = xmm0[3,3,3,3]1362; CHECK-LIBCALL-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1363; CHECK-LIBCALL-NEXT:    callq __extendhfsf2@PLT1364; CHECK-LIBCALL-NEXT:    movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill1365; CHECK-LIBCALL-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1366; CHECK-LIBCALL-NEXT:    shufps {{.*#+}} xmm0 = xmm0[3,3,3,3]1367; CHECK-LIBCALL-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1368; CHECK-LIBCALL-NEXT:    callq __extendhfsf2@PLT1369; CHECK-LIBCALL-NEXT:    movss %xmm0, (%rsp) # 4-byte Spill1370; CHECK-LIBCALL-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1371; CHECK-LIBCALL-NEXT:    callq __extendhfsf2@PLT1372; CHECK-LIBCALL-NEXT:    movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill1373; CHECK-LIBCALL-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1374; CHECK-LIBCALL-NEXT:    callq __extendhfsf2@PLT1375; CHECK-LIBCALL-NEXT:    ucomiss {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload1376; CHECK-LIBCALL-NEXT:    movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Reload1377; CHECK-LIBCALL-NEXT:    # xmm0 = mem[0],zero,zero,zero1378; CHECK-LIBCALL-NEXT:    ja .LBB26_41379; CHECK-LIBCALL-NEXT:  # %bb.3:1380; CHECK-LIBCALL-NEXT:    movss (%rsp), %xmm0 # 4-byte Reload1381; CHECK-LIBCALL-NEXT:    # xmm0 = mem[0],zero,zero,zero1382; CHECK-LIBCALL-NEXT:  .LBB26_4:1383; CHECK-LIBCALL-NEXT:    callq __truncsfhf2@PLT1384; CHECK-LIBCALL-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1385; CHECK-LIBCALL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1386; CHECK-LIBCALL-NEXT:    psrldq {{.*#+}} xmm0 = xmm0[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1387; CHECK-LIBCALL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1388; CHECK-LIBCALL-NEXT:    callq __extendhfsf2@PLT1389; CHECK-LIBCALL-NEXT:    movd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Folded Spill1390; CHECK-LIBCALL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1391; CHECK-LIBCALL-NEXT:    psrldq {{.*#+}} xmm0 = xmm0[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1392; CHECK-LIBCALL-NEXT:    movdqa %xmm0, (%rsp) # 16-byte Spill1393; CHECK-LIBCALL-NEXT:    callq __extendhfsf2@PLT1394; CHECK-LIBCALL-NEXT:    movd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Folded Spill1395; CHECK-LIBCALL-NEXT:    movaps (%rsp), %xmm0 # 16-byte Reload1396; CHECK-LIBCALL-NEXT:    callq __extendhfsf2@PLT1397; CHECK-LIBCALL-NEXT:    movss %xmm0, (%rsp) # 4-byte Spill1398; CHECK-LIBCALL-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1399; CHECK-LIBCALL-NEXT:    callq __extendhfsf2@PLT1400; CHECK-LIBCALL-NEXT:    ucomiss (%rsp), %xmm0 # 4-byte Folded Reload1401; CHECK-LIBCALL-NEXT:    movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Reload1402; CHECK-LIBCALL-NEXT:    # xmm0 = mem[0],zero,zero,zero1403; CHECK-LIBCALL-NEXT:    ja .LBB26_61404; CHECK-LIBCALL-NEXT:  # %bb.5:1405; CHECK-LIBCALL-NEXT:    movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Reload1406; CHECK-LIBCALL-NEXT:    # xmm0 = mem[0],zero,zero,zero1407; CHECK-LIBCALL-NEXT:  .LBB26_6:1408; CHECK-LIBCALL-NEXT:    callq __truncsfhf2@PLT1409; CHECK-LIBCALL-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1410; CHECK-LIBCALL-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1411; CHECK-LIBCALL-NEXT:    movhlps {{.*#+}} xmm0 = xmm0[1,1]1412; CHECK-LIBCALL-NEXT:    movaps %xmm0, (%rsp) # 16-byte Spill1413; CHECK-LIBCALL-NEXT:    callq __extendhfsf2@PLT1414; CHECK-LIBCALL-NEXT:    movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill1415; CHECK-LIBCALL-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1416; CHECK-LIBCALL-NEXT:    movhlps {{.*#+}} xmm0 = xmm0[1,1]1417; CHECK-LIBCALL-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1418; CHECK-LIBCALL-NEXT:    callq __extendhfsf2@PLT1419; CHECK-LIBCALL-NEXT:    movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill1420; CHECK-LIBCALL-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1421; CHECK-LIBCALL-NEXT:    callq __extendhfsf2@PLT1422; CHECK-LIBCALL-NEXT:    movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill1423; CHECK-LIBCALL-NEXT:    movaps (%rsp), %xmm0 # 16-byte Reload1424; CHECK-LIBCALL-NEXT:    callq __extendhfsf2@PLT1425; CHECK-LIBCALL-NEXT:    ucomiss {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload1426; CHECK-LIBCALL-NEXT:    movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Reload1427; CHECK-LIBCALL-NEXT:    # xmm0 = mem[0],zero,zero,zero1428; CHECK-LIBCALL-NEXT:    ja .LBB26_81429; CHECK-LIBCALL-NEXT:  # %bb.7:1430; CHECK-LIBCALL-NEXT:    movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Reload1431; CHECK-LIBCALL-NEXT:    # xmm0 = mem[0],zero,zero,zero1432; CHECK-LIBCALL-NEXT:  .LBB26_8:1433; CHECK-LIBCALL-NEXT:    callq __truncsfhf2@PLT1434; CHECK-LIBCALL-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1435; CHECK-LIBCALL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1436; CHECK-LIBCALL-NEXT:    psrlq $48, %xmm01437; CHECK-LIBCALL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1438; CHECK-LIBCALL-NEXT:    callq __extendhfsf2@PLT1439; CHECK-LIBCALL-NEXT:    movd %xmm0, (%rsp) # 4-byte Folded Spill1440; CHECK-LIBCALL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1441; CHECK-LIBCALL-NEXT:    psrlq $48, %xmm01442; CHECK-LIBCALL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1443; CHECK-LIBCALL-NEXT:    callq __extendhfsf2@PLT1444; CHECK-LIBCALL-NEXT:    movd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Folded Spill1445; CHECK-LIBCALL-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1446; CHECK-LIBCALL-NEXT:    callq __extendhfsf2@PLT1447; CHECK-LIBCALL-NEXT:    movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill1448; CHECK-LIBCALL-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1449; CHECK-LIBCALL-NEXT:    callq __extendhfsf2@PLT1450; CHECK-LIBCALL-NEXT:    ucomiss {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload1451; CHECK-LIBCALL-NEXT:    movss (%rsp), %xmm0 # 4-byte Reload1452; CHECK-LIBCALL-NEXT:    # xmm0 = mem[0],zero,zero,zero1453; CHECK-LIBCALL-NEXT:    ja .LBB26_101454; CHECK-LIBCALL-NEXT:  # %bb.9:1455; CHECK-LIBCALL-NEXT:    movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Reload1456; CHECK-LIBCALL-NEXT:    # xmm0 = mem[0],zero,zero,zero1457; CHECK-LIBCALL-NEXT:  .LBB26_10:1458; CHECK-LIBCALL-NEXT:    callq __truncsfhf2@PLT1459; CHECK-LIBCALL-NEXT:    movaps %xmm0, (%rsp) # 16-byte Spill1460; CHECK-LIBCALL-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1461; CHECK-LIBCALL-NEXT:    shufps {{.*#+}} xmm0 = xmm0[1,1,1,1]1462; CHECK-LIBCALL-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1463; CHECK-LIBCALL-NEXT:    callq __extendhfsf2@PLT1464; CHECK-LIBCALL-NEXT:    movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill1465; CHECK-LIBCALL-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1466; CHECK-LIBCALL-NEXT:    shufps {{.*#+}} xmm0 = xmm0[1,1,1,1]1467; CHECK-LIBCALL-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1468; CHECK-LIBCALL-NEXT:    callq __extendhfsf2@PLT1469; CHECK-LIBCALL-NEXT:    movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill1470; CHECK-LIBCALL-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1471; CHECK-LIBCALL-NEXT:    callq __extendhfsf2@PLT1472; CHECK-LIBCALL-NEXT:    movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill1473; CHECK-LIBCALL-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1474; CHECK-LIBCALL-NEXT:    callq __extendhfsf2@PLT1475; CHECK-LIBCALL-NEXT:    movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload1476; CHECK-LIBCALL-NEXT:    # xmm1 = mem[0],zero,zero,zero1477; CHECK-LIBCALL-NEXT:    ucomiss {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload1478; CHECK-LIBCALL-NEXT:    ja .LBB26_121479; CHECK-LIBCALL-NEXT:  # %bb.11:1480; CHECK-LIBCALL-NEXT:    movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload1481; CHECK-LIBCALL-NEXT:    # xmm1 = mem[0],zero,zero,zero1482; CHECK-LIBCALL-NEXT:  .LBB26_12:1483; CHECK-LIBCALL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1484; CHECK-LIBCALL-NEXT:    punpcklwd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1485; CHECK-LIBCALL-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]1486; CHECK-LIBCALL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1487; CHECK-LIBCALL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1488; CHECK-LIBCALL-NEXT:    punpcklwd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1489; CHECK-LIBCALL-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]1490; CHECK-LIBCALL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1491; CHECK-LIBCALL-NEXT:    movaps %xmm1, %xmm01492; CHECK-LIBCALL-NEXT:    callq __truncsfhf2@PLT1493; CHECK-LIBCALL-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1494; CHECK-LIBCALL-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1495; CHECK-LIBCALL-NEXT:    callq __extendhfsf2@PLT1496; CHECK-LIBCALL-NEXT:    movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill1497; CHECK-LIBCALL-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1498; CHECK-LIBCALL-NEXT:    callq __extendhfsf2@PLT1499; CHECK-LIBCALL-NEXT:    movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill1500; CHECK-LIBCALL-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1501; CHECK-LIBCALL-NEXT:    callq __extendhfsf2@PLT1502; CHECK-LIBCALL-NEXT:    movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill1503; CHECK-LIBCALL-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1504; CHECK-LIBCALL-NEXT:    callq __extendhfsf2@PLT1505; CHECK-LIBCALL-NEXT:    movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload1506; CHECK-LIBCALL-NEXT:    # xmm1 = mem[0],zero,zero,zero1507; CHECK-LIBCALL-NEXT:    ucomiss {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload1508; CHECK-LIBCALL-NEXT:    ja .LBB26_141509; CHECK-LIBCALL-NEXT:  # %bb.13:1510; CHECK-LIBCALL-NEXT:    movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload1511; CHECK-LIBCALL-NEXT:    # xmm1 = mem[0],zero,zero,zero1512; CHECK-LIBCALL-NEXT:  .LBB26_14:1513; CHECK-LIBCALL-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1514; CHECK-LIBCALL-NEXT:    unpcklps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1515; CHECK-LIBCALL-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]1516; CHECK-LIBCALL-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1517; CHECK-LIBCALL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1518; CHECK-LIBCALL-NEXT:    punpcklwd (%rsp), %xmm0 # 16-byte Folded Reload1519; CHECK-LIBCALL-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]1520; CHECK-LIBCALL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1521; CHECK-LIBCALL-NEXT:    movaps %xmm1, %xmm01522; CHECK-LIBCALL-NEXT:    callq __truncsfhf2@PLT1523; CHECK-LIBCALL-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1524; CHECK-LIBCALL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1525; CHECK-LIBCALL-NEXT:    psrld $16, %xmm01526; CHECK-LIBCALL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1527; CHECK-LIBCALL-NEXT:    callq __extendhfsf2@PLT1528; CHECK-LIBCALL-NEXT:    movd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Folded Spill1529; CHECK-LIBCALL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1530; CHECK-LIBCALL-NEXT:    psrld $16, %xmm01531; CHECK-LIBCALL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1532; CHECK-LIBCALL-NEXT:    callq __extendhfsf2@PLT1533; CHECK-LIBCALL-NEXT:    movd %xmm0, (%rsp) # 4-byte Folded Spill1534; CHECK-LIBCALL-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1535; CHECK-LIBCALL-NEXT:    callq __extendhfsf2@PLT1536; CHECK-LIBCALL-NEXT:    movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill1537; CHECK-LIBCALL-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1538; CHECK-LIBCALL-NEXT:    callq __extendhfsf2@PLT1539; CHECK-LIBCALL-NEXT:    ucomiss {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload1540; CHECK-LIBCALL-NEXT:    movd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload1541; CHECK-LIBCALL-NEXT:    # xmm0 = mem[0],zero,zero,zero1542; CHECK-LIBCALL-NEXT:    ja .LBB26_161543; CHECK-LIBCALL-NEXT:  # %bb.15:1544; CHECK-LIBCALL-NEXT:    movd (%rsp), %xmm0 # 4-byte Folded Reload1545; CHECK-LIBCALL-NEXT:    # xmm0 = mem[0],zero,zero,zero1546; CHECK-LIBCALL-NEXT:  .LBB26_16:1547; CHECK-LIBCALL-NEXT:    callq __truncsfhf2@PLT1548; CHECK-LIBCALL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload1549; CHECK-LIBCALL-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]1550; CHECK-LIBCALL-NEXT:    punpckldq {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Folded Reload1551; CHECK-LIBCALL-NEXT:    # xmm1 = xmm1[0],mem[0],xmm1[1],mem[1]1552; CHECK-LIBCALL-NEXT:    punpcklqdq {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Folded Reload1553; CHECK-LIBCALL-NEXT:    # xmm1 = xmm1[0],mem[0]1554; CHECK-LIBCALL-NEXT:    movdqa %xmm1, %xmm01555; CHECK-LIBCALL-NEXT:    addq $184, %rsp1556; CHECK-LIBCALL-NEXT:    retq1557;1558; BWON-F16C-LABEL: maxnum_v8f16:1559; BWON-F16C:       # %bb.0:1560; BWON-F16C-NEXT:    vpsrldq {{.*#+}} xmm2 = xmm1[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1561; BWON-F16C-NEXT:    vcvtph2ps %xmm2, %xmm31562; BWON-F16C-NEXT:    vpsrldq {{.*#+}} xmm2 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1563; BWON-F16C-NEXT:    vcvtph2ps %xmm2, %xmm21564; BWON-F16C-NEXT:    vucomiss %xmm3, %xmm21565; BWON-F16C-NEXT:    ja .LBB26_21566; BWON-F16C-NEXT:  # %bb.1:1567; BWON-F16C-NEXT:    vmovaps %xmm3, %xmm21568; BWON-F16C-NEXT:  .LBB26_2:1569; BWON-F16C-NEXT:    vpshufd {{.*#+}} xmm3 = xmm1[3,3,3,3]1570; BWON-F16C-NEXT:    vcvtph2ps %xmm3, %xmm41571; BWON-F16C-NEXT:    vpshufd {{.*#+}} xmm3 = xmm0[3,3,3,3]1572; BWON-F16C-NEXT:    vcvtph2ps %xmm3, %xmm31573; BWON-F16C-NEXT:    vucomiss %xmm4, %xmm31574; BWON-F16C-NEXT:    ja .LBB26_41575; BWON-F16C-NEXT:  # %bb.3:1576; BWON-F16C-NEXT:    vmovaps %xmm4, %xmm31577; BWON-F16C-NEXT:  .LBB26_4:1578; BWON-F16C-NEXT:    vpsrldq {{.*#+}} xmm4 = xmm1[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1579; BWON-F16C-NEXT:    vcvtph2ps %xmm4, %xmm51580; BWON-F16C-NEXT:    vpsrldq {{.*#+}} xmm4 = xmm0[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1581; BWON-F16C-NEXT:    vcvtph2ps %xmm4, %xmm41582; BWON-F16C-NEXT:    vucomiss %xmm5, %xmm41583; BWON-F16C-NEXT:    ja .LBB26_61584; BWON-F16C-NEXT:  # %bb.5:1585; BWON-F16C-NEXT:    vmovaps %xmm5, %xmm41586; BWON-F16C-NEXT:  .LBB26_6:1587; BWON-F16C-NEXT:    vshufpd {{.*#+}} xmm5 = xmm1[1,0]1588; BWON-F16C-NEXT:    vcvtph2ps %xmm5, %xmm51589; BWON-F16C-NEXT:    vshufpd {{.*#+}} xmm6 = xmm0[1,0]1590; BWON-F16C-NEXT:    vcvtph2ps %xmm6, %xmm61591; BWON-F16C-NEXT:    vucomiss %xmm5, %xmm61592; BWON-F16C-NEXT:    ja .LBB26_81593; BWON-F16C-NEXT:  # %bb.7:1594; BWON-F16C-NEXT:    vmovaps %xmm5, %xmm61595; BWON-F16C-NEXT:  .LBB26_8:1596; BWON-F16C-NEXT:    vpsrlq $48, %xmm1, %xmm51597; BWON-F16C-NEXT:    vcvtph2ps %xmm5, %xmm71598; BWON-F16C-NEXT:    vpsrlq $48, %xmm0, %xmm51599; BWON-F16C-NEXT:    vcvtph2ps %xmm5, %xmm51600; BWON-F16C-NEXT:    vucomiss %xmm7, %xmm51601; BWON-F16C-NEXT:    ja .LBB26_101602; BWON-F16C-NEXT:  # %bb.9:1603; BWON-F16C-NEXT:    vmovaps %xmm7, %xmm51604; BWON-F16C-NEXT:  .LBB26_10:1605; BWON-F16C-NEXT:    vcvtps2ph $4, %xmm2, %xmm21606; BWON-F16C-NEXT:    vcvtps2ph $4, %xmm3, %xmm31607; BWON-F16C-NEXT:    vcvtps2ph $4, %xmm4, %xmm41608; BWON-F16C-NEXT:    vcvtps2ph $4, %xmm6, %xmm61609; BWON-F16C-NEXT:    vmovshdup {{.*#+}} xmm7 = xmm1[1,1,3,3]1610; BWON-F16C-NEXT:    vcvtph2ps %xmm7, %xmm81611; BWON-F16C-NEXT:    vmovshdup {{.*#+}} xmm7 = xmm0[1,1,3,3]1612; BWON-F16C-NEXT:    vcvtph2ps %xmm7, %xmm71613; BWON-F16C-NEXT:    vucomiss %xmm8, %xmm71614; BWON-F16C-NEXT:    ja .LBB26_121615; BWON-F16C-NEXT:  # %bb.11:1616; BWON-F16C-NEXT:    vmovaps %xmm8, %xmm71617; BWON-F16C-NEXT:  .LBB26_12:1618; BWON-F16C-NEXT:    vpunpcklwd {{.*#+}} xmm2 = xmm3[0],xmm2[0],xmm3[1],xmm2[1],xmm3[2],xmm2[2],xmm3[3],xmm2[3]1619; BWON-F16C-NEXT:    vpunpcklwd {{.*#+}} xmm3 = xmm6[0],xmm4[0],xmm6[1],xmm4[1],xmm6[2],xmm4[2],xmm6[3],xmm4[3]1620; BWON-F16C-NEXT:    vcvtps2ph $4, %xmm5, %xmm41621; BWON-F16C-NEXT:    vcvtps2ph $4, %xmm7, %xmm51622; BWON-F16C-NEXT:    vcvtph2ps %xmm1, %xmm71623; BWON-F16C-NEXT:    vcvtph2ps %xmm0, %xmm61624; BWON-F16C-NEXT:    vucomiss %xmm7, %xmm61625; BWON-F16C-NEXT:    ja .LBB26_141626; BWON-F16C-NEXT:  # %bb.13:1627; BWON-F16C-NEXT:    vmovaps %xmm7, %xmm61628; BWON-F16C-NEXT:  .LBB26_14:1629; BWON-F16C-NEXT:    vpunpckldq {{.*#+}} xmm2 = xmm3[0],xmm2[0],xmm3[1],xmm2[1]1630; BWON-F16C-NEXT:    vpunpcklwd {{.*#+}} xmm3 = xmm5[0],xmm4[0],xmm5[1],xmm4[1],xmm5[2],xmm4[2],xmm5[3],xmm4[3]1631; BWON-F16C-NEXT:    vcvtps2ph $4, %xmm6, %xmm41632; BWON-F16C-NEXT:    vpsrld $16, %xmm1, %xmm11633; BWON-F16C-NEXT:    vcvtph2ps %xmm1, %xmm11634; BWON-F16C-NEXT:    vpsrld $16, %xmm0, %xmm01635; BWON-F16C-NEXT:    vcvtph2ps %xmm0, %xmm01636; BWON-F16C-NEXT:    vucomiss %xmm1, %xmm01637; BWON-F16C-NEXT:    ja .LBB26_161638; BWON-F16C-NEXT:  # %bb.15:1639; BWON-F16C-NEXT:    vmovaps %xmm1, %xmm01640; BWON-F16C-NEXT:  .LBB26_16:1641; BWON-F16C-NEXT:    vcvtps2ph $4, %xmm0, %xmm01642; BWON-F16C-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm4[0],xmm0[0],xmm4[1],xmm0[1],xmm4[2],xmm0[2],xmm4[3],xmm0[3]1643; BWON-F16C-NEXT:    vpunpckldq {{.*#+}} xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1]1644; BWON-F16C-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm2[0]1645; BWON-F16C-NEXT:    retq1646;1647; CHECK-I686-LABEL: maxnum_v8f16:1648; CHECK-I686:       # %bb.0:1649; CHECK-I686-NEXT:    pushl %ebx1650; CHECK-I686-NEXT:    pushl %edi1651; CHECK-I686-NEXT:    pushl %esi1652; CHECK-I686-NEXT:    subl $336, %esp # imm = 0x1501653; CHECK-I686-NEXT:    movaps %xmm1, {{[-0-9]+}}(%e{{[sb]}}p) # 16-byte Spill1654; CHECK-I686-NEXT:    movaps %xmm0, {{[-0-9]+}}(%e{{[sb]}}p) # 16-byte Spill1655; CHECK-I686-NEXT:    movaps %xmm1, %xmm01656; CHECK-I686-NEXT:    shufps {{.*#+}} xmm0 = xmm0[1,1],xmm1[1,1]1657; CHECK-I686-NEXT:    pextrw $0, %xmm0, %edi1658; CHECK-I686-NEXT:    movw %di, (%esp)1659; CHECK-I686-NEXT:    calll __extendhfsf21660; CHECK-I686-NEXT:    fstpt {{[-0-9]+}}(%e{{[sb]}}p) # 10-byte Folded Spill1661; CHECK-I686-NEXT:    movaps {{[-0-9]+}}(%e{{[sb]}}p), %xmm0 # 16-byte Reload1662; CHECK-I686-NEXT:    shufps {{.*#+}} xmm0 = xmm0[1,1,1,1]1663; CHECK-I686-NEXT:    pextrw $0, %xmm0, %esi1664; CHECK-I686-NEXT:    movw %si, (%esp)1665; CHECK-I686-NEXT:    calll __extendhfsf21666; CHECK-I686-NEXT:    fstpt {{[-0-9]+}}(%e{{[sb]}}p) # 10-byte Folded Spill1667; CHECK-I686-NEXT:    movw %di, (%esp)1668; CHECK-I686-NEXT:    calll __extendhfsf21669; CHECK-I686-NEXT:    fstpt {{[-0-9]+}}(%e{{[sb]}}p) # 10-byte Folded Spill1670; CHECK-I686-NEXT:    movdqa {{[-0-9]+}}(%e{{[sb]}}p), %xmm0 # 16-byte Reload1671; CHECK-I686-NEXT:    pextrw $0, %xmm0, %edi1672; CHECK-I686-NEXT:    movw %di, (%esp)1673; CHECK-I686-NEXT:    calll __extendhfsf21674; CHECK-I686-NEXT:    fstpt {{[-0-9]+}}(%e{{[sb]}}p) # 10-byte Folded Spill1675; CHECK-I686-NEXT:    movdqa {{[-0-9]+}}(%e{{[sb]}}p), %xmm0 # 16-byte Reload1676; CHECK-I686-NEXT:    pextrw $0, %xmm0, %ebx1677; CHECK-I686-NEXT:    movw %bx, (%esp)1678; CHECK-I686-NEXT:    calll __extendhfsf21679; CHECK-I686-NEXT:    fstpt {{[-0-9]+}}(%e{{[sb]}}p) # 10-byte Folded Spill1680; CHECK-I686-NEXT:    movw %di, (%esp)1681; CHECK-I686-NEXT:    calll __extendhfsf21682; CHECK-I686-NEXT:    fstpt {{[-0-9]+}}(%e{{[sb]}}p) # 10-byte Folded Spill1683; CHECK-I686-NEXT:    movw %bx, (%esp)1684; CHECK-I686-NEXT:    calll __extendhfsf21685; CHECK-I686-NEXT:    movw %si, (%esp)1686; CHECK-I686-NEXT:    fstps {{[0-9]+}}(%esp)1687; CHECK-I686-NEXT:    fldt {{[-0-9]+}}(%e{{[sb]}}p) # 10-byte Folded Reload1688; CHECK-I686-NEXT:    fstps {{[0-9]+}}(%esp)1689; CHECK-I686-NEXT:    fldt {{[-0-9]+}}(%e{{[sb]}}p) # 10-byte Folded Reload1690; CHECK-I686-NEXT:    fstps {{[0-9]+}}(%esp)1691; CHECK-I686-NEXT:    fldt {{[-0-9]+}}(%e{{[sb]}}p) # 10-byte Folded Reload1692; CHECK-I686-NEXT:    fstps {{[0-9]+}}(%esp)1693; CHECK-I686-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero1694; CHECK-I686-NEXT:    ucomiss {{[0-9]+}}(%esp), %xmm01695; CHECK-I686-NEXT:    ja .LBB26_11696; CHECK-I686-NEXT:  # %bb.2:1697; CHECK-I686-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero1698; CHECK-I686-NEXT:    jmp .LBB26_31699; CHECK-I686-NEXT:  .LBB26_1:1700; CHECK-I686-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero1701; CHECK-I686-NEXT:  .LBB26_3:1702; CHECK-I686-NEXT:    movss %xmm0, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1703; CHECK-I686-NEXT:    calll __extendhfsf21704; CHECK-I686-NEXT:    movss {{[-0-9]+}}(%e{{[sb]}}p), %xmm0 # 4-byte Reload1705; CHECK-I686-NEXT:    # xmm0 = mem[0],zero,zero,zero1706; CHECK-I686-NEXT:    movss %xmm0, (%esp)1707; CHECK-I686-NEXT:    fstps {{[0-9]+}}(%esp)1708; CHECK-I686-NEXT:    fldt {{[-0-9]+}}(%e{{[sb]}}p) # 10-byte Folded Reload1709; CHECK-I686-NEXT:    fstps {{[0-9]+}}(%esp)1710; CHECK-I686-NEXT:    fldt {{[-0-9]+}}(%e{{[sb]}}p) # 10-byte Folded Reload1711; CHECK-I686-NEXT:    fstps {{[0-9]+}}(%esp)1712; CHECK-I686-NEXT:    fldt {{[-0-9]+}}(%e{{[sb]}}p) # 10-byte Folded Reload1713; CHECK-I686-NEXT:    fstps {{[0-9]+}}(%esp)1714; CHECK-I686-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero1715; CHECK-I686-NEXT:    ucomiss {{[0-9]+}}(%esp), %xmm01716; CHECK-I686-NEXT:    ja .LBB26_41717; CHECK-I686-NEXT:  # %bb.5:1718; CHECK-I686-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero1719; CHECK-I686-NEXT:    jmp .LBB26_61720; CHECK-I686-NEXT:  .LBB26_4:1721; CHECK-I686-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero1722; CHECK-I686-NEXT:  .LBB26_6:1723; CHECK-I686-NEXT:    movss %xmm0, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1724; CHECK-I686-NEXT:    calll __truncsfhf21725; CHECK-I686-NEXT:    movaps %xmm0, {{[-0-9]+}}(%e{{[sb]}}p) # 16-byte Spill1726; CHECK-I686-NEXT:    movss {{[-0-9]+}}(%e{{[sb]}}p), %xmm0 # 4-byte Reload1727; CHECK-I686-NEXT:    # xmm0 = mem[0],zero,zero,zero1728; CHECK-I686-NEXT:    movss %xmm0, (%esp)1729; CHECK-I686-NEXT:    calll __truncsfhf21730; CHECK-I686-NEXT:    movaps %xmm0, {{[-0-9]+}}(%e{{[sb]}}p) # 16-byte Spill1731; CHECK-I686-NEXT:    movdqa {{[-0-9]+}}(%e{{[sb]}}p), %xmm0 # 16-byte Reload1732; CHECK-I686-NEXT:    punpckhqdq {{.*#+}} xmm0 = xmm0[1,1]1733; CHECK-I686-NEXT:    pextrw $0, %xmm0, %edi1734; CHECK-I686-NEXT:    movw %di, (%esp)1735; CHECK-I686-NEXT:    calll __extendhfsf21736; CHECK-I686-NEXT:    fstpt {{[-0-9]+}}(%e{{[sb]}}p) # 10-byte Folded Spill1737; CHECK-I686-NEXT:    movdqa {{[-0-9]+}}(%e{{[sb]}}p), %xmm0 # 16-byte Reload1738; CHECK-I686-NEXT:    punpckhqdq {{.*#+}} xmm0 = xmm0[1,1]1739; CHECK-I686-NEXT:    pextrw $0, %xmm0, %esi1740; CHECK-I686-NEXT:    movw %si, (%esp)1741; CHECK-I686-NEXT:    calll __extendhfsf21742; CHECK-I686-NEXT:    fstpt {{[-0-9]+}}(%e{{[sb]}}p) # 10-byte Folded Spill1743; CHECK-I686-NEXT:    movw %di, (%esp)1744; CHECK-I686-NEXT:    calll __extendhfsf21745; CHECK-I686-NEXT:    fstpt {{[-0-9]+}}(%e{{[sb]}}p) # 10-byte Folded Spill1746; CHECK-I686-NEXT:    movdqa {{[-0-9]+}}(%e{{[sb]}}p), %xmm0 # 16-byte Reload1747; CHECK-I686-NEXT:    psrlq $48, %xmm01748; CHECK-I686-NEXT:    pextrw $0, %xmm0, %edi1749; CHECK-I686-NEXT:    movw %di, (%esp)1750; CHECK-I686-NEXT:    calll __extendhfsf21751; CHECK-I686-NEXT:    fstpt {{[-0-9]+}}(%e{{[sb]}}p) # 10-byte Folded Spill1752; CHECK-I686-NEXT:    movdqa {{[-0-9]+}}(%e{{[sb]}}p), %xmm0 # 16-byte Reload1753; CHECK-I686-NEXT:    psrlq $48, %xmm01754; CHECK-I686-NEXT:    pextrw $0, %xmm0, %ebx1755; CHECK-I686-NEXT:    movw %bx, (%esp)1756; CHECK-I686-NEXT:    calll __extendhfsf21757; CHECK-I686-NEXT:    fstpt {{[-0-9]+}}(%e{{[sb]}}p) # 10-byte Folded Spill1758; CHECK-I686-NEXT:    movw %di, (%esp)1759; CHECK-I686-NEXT:    calll __extendhfsf21760; CHECK-I686-NEXT:    fstpt {{[-0-9]+}}(%e{{[sb]}}p) # 10-byte Folded Spill1761; CHECK-I686-NEXT:    movw %bx, (%esp)1762; CHECK-I686-NEXT:    calll __extendhfsf21763; CHECK-I686-NEXT:    movw %si, (%esp)1764; CHECK-I686-NEXT:    fstps {{[0-9]+}}(%esp)1765; CHECK-I686-NEXT:    fldt {{[-0-9]+}}(%e{{[sb]}}p) # 10-byte Folded Reload1766; CHECK-I686-NEXT:    fstps {{[0-9]+}}(%esp)1767; CHECK-I686-NEXT:    fldt {{[-0-9]+}}(%e{{[sb]}}p) # 10-byte Folded Reload1768; CHECK-I686-NEXT:    fstps {{[0-9]+}}(%esp)1769; CHECK-I686-NEXT:    fldt {{[-0-9]+}}(%e{{[sb]}}p) # 10-byte Folded Reload1770; CHECK-I686-NEXT:    fstps {{[0-9]+}}(%esp)1771; CHECK-I686-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero1772; CHECK-I686-NEXT:    ucomiss {{[0-9]+}}(%esp), %xmm01773; CHECK-I686-NEXT:    ja .LBB26_71774; CHECK-I686-NEXT:  # %bb.8:1775; CHECK-I686-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero1776; CHECK-I686-NEXT:    jmp .LBB26_91777; CHECK-I686-NEXT:  .LBB26_7:1778; CHECK-I686-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero1779; CHECK-I686-NEXT:  .LBB26_9:1780; CHECK-I686-NEXT:    movss %xmm0, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1781; CHECK-I686-NEXT:    calll __extendhfsf21782; CHECK-I686-NEXT:    movss {{[-0-9]+}}(%e{{[sb]}}p), %xmm0 # 4-byte Reload1783; CHECK-I686-NEXT:    # xmm0 = mem[0],zero,zero,zero1784; CHECK-I686-NEXT:    movss %xmm0, (%esp)1785; CHECK-I686-NEXT:    fstps {{[0-9]+}}(%esp)1786; CHECK-I686-NEXT:    fldt {{[-0-9]+}}(%e{{[sb]}}p) # 10-byte Folded Reload1787; CHECK-I686-NEXT:    fstps {{[0-9]+}}(%esp)1788; CHECK-I686-NEXT:    fldt {{[-0-9]+}}(%e{{[sb]}}p) # 10-byte Folded Reload1789; CHECK-I686-NEXT:    fstps {{[0-9]+}}(%esp)1790; CHECK-I686-NEXT:    fldt {{[-0-9]+}}(%e{{[sb]}}p) # 10-byte Folded Reload1791; CHECK-I686-NEXT:    fstps {{[0-9]+}}(%esp)1792; CHECK-I686-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero1793; CHECK-I686-NEXT:    ucomiss {{[0-9]+}}(%esp), %xmm01794; CHECK-I686-NEXT:    ja .LBB26_101795; CHECK-I686-NEXT:  # %bb.11:1796; CHECK-I686-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero1797; CHECK-I686-NEXT:    jmp .LBB26_121798; CHECK-I686-NEXT:  .LBB26_10:1799; CHECK-I686-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero1800; CHECK-I686-NEXT:  .LBB26_12:1801; CHECK-I686-NEXT:    movss %xmm0, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1802; CHECK-I686-NEXT:    calll __truncsfhf21803; CHECK-I686-NEXT:    movaps %xmm0, {{[-0-9]+}}(%e{{[sb]}}p) # 16-byte Spill1804; CHECK-I686-NEXT:    movss {{[-0-9]+}}(%e{{[sb]}}p), %xmm0 # 4-byte Reload1805; CHECK-I686-NEXT:    # xmm0 = mem[0],zero,zero,zero1806; CHECK-I686-NEXT:    movss %xmm0, (%esp)1807; CHECK-I686-NEXT:    calll __truncsfhf21808; CHECK-I686-NEXT:    movaps %xmm0, {{[-0-9]+}}(%e{{[sb]}}p) # 16-byte Spill1809; CHECK-I686-NEXT:    movaps {{[-0-9]+}}(%e{{[sb]}}p), %xmm0 # 16-byte Reload1810; CHECK-I686-NEXT:    shufps {{.*#+}} xmm0 = xmm0[3,3,3,3]1811; CHECK-I686-NEXT:    pextrw $0, %xmm0, %edi1812; CHECK-I686-NEXT:    movw %di, (%esp)1813; CHECK-I686-NEXT:    calll __extendhfsf21814; CHECK-I686-NEXT:    fstpt {{[-0-9]+}}(%e{{[sb]}}p) # 10-byte Folded Spill1815; CHECK-I686-NEXT:    movaps {{[-0-9]+}}(%e{{[sb]}}p), %xmm0 # 16-byte Reload1816; CHECK-I686-NEXT:    shufps {{.*#+}} xmm0 = xmm0[3,3,3,3]1817; CHECK-I686-NEXT:    pextrw $0, %xmm0, %esi1818; CHECK-I686-NEXT:    movw %si, (%esp)1819; CHECK-I686-NEXT:    calll __extendhfsf21820; CHECK-I686-NEXT:    fstpt {{[-0-9]+}}(%e{{[sb]}}p) # 10-byte Folded Spill1821; CHECK-I686-NEXT:    movw %di, (%esp)1822; CHECK-I686-NEXT:    calll __extendhfsf21823; CHECK-I686-NEXT:    fstpt {{[-0-9]+}}(%e{{[sb]}}p) # 10-byte Folded Spill1824; CHECK-I686-NEXT:    movdqa {{[-0-9]+}}(%e{{[sb]}}p), %xmm0 # 16-byte Reload1825; CHECK-I686-NEXT:    psrldq {{.*#+}} xmm0 = xmm0[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1826; CHECK-I686-NEXT:    pextrw $0, %xmm0, %edi1827; CHECK-I686-NEXT:    movw %di, (%esp)1828; CHECK-I686-NEXT:    calll __extendhfsf21829; CHECK-I686-NEXT:    fstpt {{[-0-9]+}}(%e{{[sb]}}p) # 10-byte Folded Spill1830; CHECK-I686-NEXT:    movdqa {{[-0-9]+}}(%e{{[sb]}}p), %xmm0 # 16-byte Reload1831; CHECK-I686-NEXT:    psrldq {{.*#+}} xmm0 = xmm0[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1832; CHECK-I686-NEXT:    pextrw $0, %xmm0, %ebx1833; CHECK-I686-NEXT:    movw %bx, (%esp)1834; CHECK-I686-NEXT:    calll __extendhfsf21835; CHECK-I686-NEXT:    fstpt {{[-0-9]+}}(%e{{[sb]}}p) # 10-byte Folded Spill1836; CHECK-I686-NEXT:    movw %di, (%esp)1837; CHECK-I686-NEXT:    calll __extendhfsf21838; CHECK-I686-NEXT:    fstpt {{[-0-9]+}}(%e{{[sb]}}p) # 10-byte Folded Spill1839; CHECK-I686-NEXT:    movw %bx, (%esp)1840; CHECK-I686-NEXT:    calll __extendhfsf21841; CHECK-I686-NEXT:    movw %si, (%esp)1842; CHECK-I686-NEXT:    fstps {{[0-9]+}}(%esp)1843; CHECK-I686-NEXT:    fldt {{[-0-9]+}}(%e{{[sb]}}p) # 10-byte Folded Reload1844; CHECK-I686-NEXT:    fstps {{[0-9]+}}(%esp)1845; CHECK-I686-NEXT:    fldt {{[-0-9]+}}(%e{{[sb]}}p) # 10-byte Folded Reload1846; CHECK-I686-NEXT:    fstps {{[0-9]+}}(%esp)1847; CHECK-I686-NEXT:    fldt {{[-0-9]+}}(%e{{[sb]}}p) # 10-byte Folded Reload1848; CHECK-I686-NEXT:    fstps {{[0-9]+}}(%esp)1849; CHECK-I686-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero1850; CHECK-I686-NEXT:    ucomiss {{[0-9]+}}(%esp), %xmm01851; CHECK-I686-NEXT:    ja .LBB26_131852; CHECK-I686-NEXT:  # %bb.14:1853; CHECK-I686-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero1854; CHECK-I686-NEXT:    jmp .LBB26_151855; CHECK-I686-NEXT:  .LBB26_13:1856; CHECK-I686-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero1857; CHECK-I686-NEXT:  .LBB26_15:1858; CHECK-I686-NEXT:    movss %xmm0, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1859; CHECK-I686-NEXT:    calll __extendhfsf21860; CHECK-I686-NEXT:    movss {{[-0-9]+}}(%e{{[sb]}}p), %xmm0 # 4-byte Reload1861; CHECK-I686-NEXT:    # xmm0 = mem[0],zero,zero,zero1862; CHECK-I686-NEXT:    movss %xmm0, (%esp)1863; CHECK-I686-NEXT:    fstps {{[0-9]+}}(%esp)1864; CHECK-I686-NEXT:    fldt {{[-0-9]+}}(%e{{[sb]}}p) # 10-byte Folded Reload1865; CHECK-I686-NEXT:    fstps {{[0-9]+}}(%esp)1866; CHECK-I686-NEXT:    fldt {{[-0-9]+}}(%e{{[sb]}}p) # 10-byte Folded Reload1867; CHECK-I686-NEXT:    fstps {{[0-9]+}}(%esp)1868; CHECK-I686-NEXT:    fldt {{[-0-9]+}}(%e{{[sb]}}p) # 10-byte Folded Reload1869; CHECK-I686-NEXT:    fstps {{[0-9]+}}(%esp)1870; CHECK-I686-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero1871; CHECK-I686-NEXT:    ucomiss {{[0-9]+}}(%esp), %xmm01872; CHECK-I686-NEXT:    ja .LBB26_161873; CHECK-I686-NEXT:  # %bb.17:1874; CHECK-I686-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero1875; CHECK-I686-NEXT:    jmp .LBB26_181876; CHECK-I686-NEXT:  .LBB26_16:1877; CHECK-I686-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero1878; CHECK-I686-NEXT:  .LBB26_18:1879; CHECK-I686-NEXT:    movss %xmm0, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1880; CHECK-I686-NEXT:    calll __truncsfhf21881; CHECK-I686-NEXT:    movaps %xmm0, {{[-0-9]+}}(%e{{[sb]}}p) # 16-byte Spill1882; CHECK-I686-NEXT:    movss {{[-0-9]+}}(%e{{[sb]}}p), %xmm0 # 4-byte Reload1883; CHECK-I686-NEXT:    # xmm0 = mem[0],zero,zero,zero1884; CHECK-I686-NEXT:    movss %xmm0, (%esp)1885; CHECK-I686-NEXT:    calll __truncsfhf21886; CHECK-I686-NEXT:    movaps %xmm0, {{[-0-9]+}}(%e{{[sb]}}p) # 16-byte Spill1887; CHECK-I686-NEXT:    movdqa {{[-0-9]+}}(%e{{[sb]}}p), %xmm0 # 16-byte Reload1888; CHECK-I686-NEXT:    psrld $16, %xmm01889; CHECK-I686-NEXT:    pextrw $0, %xmm0, %edi1890; CHECK-I686-NEXT:    movw %di, (%esp)1891; CHECK-I686-NEXT:    calll __extendhfsf21892; CHECK-I686-NEXT:    fstpt {{[-0-9]+}}(%e{{[sb]}}p) # 10-byte Folded Spill1893; CHECK-I686-NEXT:    movdqa {{[-0-9]+}}(%e{{[sb]}}p), %xmm0 # 16-byte Reload1894; CHECK-I686-NEXT:    psrld $16, %xmm01895; CHECK-I686-NEXT:    pextrw $0, %xmm0, %esi1896; CHECK-I686-NEXT:    movw %si, (%esp)1897; CHECK-I686-NEXT:    calll __extendhfsf21898; CHECK-I686-NEXT:    fstpt {{[-0-9]+}}(%e{{[sb]}}p) # 10-byte Folded Spill1899; CHECK-I686-NEXT:    movw %di, (%esp)1900; CHECK-I686-NEXT:    calll __extendhfsf21901; CHECK-I686-NEXT:    fstpt {{[-0-9]+}}(%e{{[sb]}}p) # 10-byte Folded Spill1902; CHECK-I686-NEXT:    movdqa {{[-0-9]+}}(%e{{[sb]}}p), %xmm0 # 16-byte Reload1903; CHECK-I686-NEXT:    psrldq {{.*#+}} xmm0 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1904; CHECK-I686-NEXT:    pextrw $0, %xmm0, %edi1905; CHECK-I686-NEXT:    movw %di, (%esp)1906; CHECK-I686-NEXT:    calll __extendhfsf21907; CHECK-I686-NEXT:    fstpt {{[-0-9]+}}(%e{{[sb]}}p) # 10-byte Folded Spill1908; CHECK-I686-NEXT:    movdqa {{[-0-9]+}}(%e{{[sb]}}p), %xmm0 # 16-byte Reload1909; CHECK-I686-NEXT:    psrldq {{.*#+}} xmm0 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1910; CHECK-I686-NEXT:    pextrw $0, %xmm0, %ebx1911; CHECK-I686-NEXT:    movw %bx, (%esp)1912; CHECK-I686-NEXT:    calll __extendhfsf21913; CHECK-I686-NEXT:    fstpt {{[-0-9]+}}(%e{{[sb]}}p) # 10-byte Folded Spill1914; CHECK-I686-NEXT:    movw %di, (%esp)1915; CHECK-I686-NEXT:    calll __extendhfsf21916; CHECK-I686-NEXT:    fstpt {{[-0-9]+}}(%e{{[sb]}}p) # 10-byte Folded Spill1917; CHECK-I686-NEXT:    movw %bx, (%esp)1918; CHECK-I686-NEXT:    calll __extendhfsf21919; CHECK-I686-NEXT:    movw %si, (%esp)1920; CHECK-I686-NEXT:    fstps {{[0-9]+}}(%esp)1921; CHECK-I686-NEXT:    fldt {{[-0-9]+}}(%e{{[sb]}}p) # 10-byte Folded Reload1922; CHECK-I686-NEXT:    fstps {{[0-9]+}}(%esp)1923; CHECK-I686-NEXT:    fldt {{[-0-9]+}}(%e{{[sb]}}p) # 10-byte Folded Reload1924; CHECK-I686-NEXT:    fstps {{[0-9]+}}(%esp)1925; CHECK-I686-NEXT:    fldt {{[-0-9]+}}(%e{{[sb]}}p) # 10-byte Folded Reload1926; CHECK-I686-NEXT:    fstps {{[0-9]+}}(%esp)1927; CHECK-I686-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero1928; CHECK-I686-NEXT:    ucomiss {{[0-9]+}}(%esp), %xmm01929; CHECK-I686-NEXT:    ja .LBB26_191930; CHECK-I686-NEXT:  # %bb.20:1931; CHECK-I686-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero1932; CHECK-I686-NEXT:    jmp .LBB26_211933; CHECK-I686-NEXT:  .LBB26_19:1934; CHECK-I686-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero1935; CHECK-I686-NEXT:  .LBB26_21:1936; CHECK-I686-NEXT:    movss %xmm0, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1937; CHECK-I686-NEXT:    calll __extendhfsf21938; CHECK-I686-NEXT:    movss {{[-0-9]+}}(%e{{[sb]}}p), %xmm0 # 4-byte Reload1939; CHECK-I686-NEXT:    # xmm0 = mem[0],zero,zero,zero1940; CHECK-I686-NEXT:    movss %xmm0, (%esp)1941; CHECK-I686-NEXT:    fstps {{[0-9]+}}(%esp)1942; CHECK-I686-NEXT:    fldt {{[-0-9]+}}(%e{{[sb]}}p) # 10-byte Folded Reload1943; CHECK-I686-NEXT:    fstps {{[0-9]+}}(%esp)1944; CHECK-I686-NEXT:    fldt {{[-0-9]+}}(%e{{[sb]}}p) # 10-byte Folded Reload1945; CHECK-I686-NEXT:    fstps {{[0-9]+}}(%esp)1946; CHECK-I686-NEXT:    fldt {{[-0-9]+}}(%e{{[sb]}}p) # 10-byte Folded Reload1947; CHECK-I686-NEXT:    fstps {{[0-9]+}}(%esp)1948; CHECK-I686-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero1949; CHECK-I686-NEXT:    ucomiss {{[0-9]+}}(%esp), %xmm01950; CHECK-I686-NEXT:    ja .LBB26_221951; CHECK-I686-NEXT:  # %bb.23:1952; CHECK-I686-NEXT:    movd {{.*#+}} xmm0 = mem[0],zero,zero,zero1953; CHECK-I686-NEXT:    jmp .LBB26_241954; CHECK-I686-NEXT:  .LBB26_22:1955; CHECK-I686-NEXT:    movd {{.*#+}} xmm0 = mem[0],zero,zero,zero1956; CHECK-I686-NEXT:  .LBB26_24:1957; CHECK-I686-NEXT:    movd %xmm0, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Spill1958; CHECK-I686-NEXT:    calll __truncsfhf21959; CHECK-I686-NEXT:    movss {{[-0-9]+}}(%e{{[sb]}}p), %xmm1 # 4-byte Reload1960; CHECK-I686-NEXT:    # xmm1 = mem[0],zero,zero,zero1961; CHECK-I686-NEXT:    movss %xmm1, (%esp)1962; CHECK-I686-NEXT:    movdqa {{[-0-9]+}}(%e{{[sb]}}p), %xmm1 # 16-byte Reload1963; CHECK-I686-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]1964; CHECK-I686-NEXT:    movdqa {{[-0-9]+}}(%e{{[sb]}}p), %xmm0 # 16-byte Reload1965; CHECK-I686-NEXT:    punpcklwd {{[-0-9]+}}(%e{{[sb]}}p), %xmm0 # 16-byte Folded Reload1966; CHECK-I686-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]1967; CHECK-I686-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]1968; CHECK-I686-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%e{{[sb]}}p) # 16-byte Spill1969; CHECK-I686-NEXT:    movdqa {{[-0-9]+}}(%e{{[sb]}}p), %xmm0 # 16-byte Reload1970; CHECK-I686-NEXT:    punpcklwd {{[-0-9]+}}(%e{{[sb]}}p), %xmm0 # 16-byte Folded Reload1971; CHECK-I686-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]1972; CHECK-I686-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%e{{[sb]}}p) # 16-byte Spill1973; CHECK-I686-NEXT:    calll __truncsfhf21974; CHECK-I686-NEXT:    movdqa {{[-0-9]+}}(%e{{[sb]}}p), %xmm1 # 16-byte Reload1975; CHECK-I686-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]1976; CHECK-I686-NEXT:    punpckldq {{[-0-9]+}}(%e{{[sb]}}p), %xmm1 # 16-byte Folded Reload1977; CHECK-I686-NEXT:    # xmm1 = xmm1[0],mem[0],xmm1[1],mem[1]1978; CHECK-I686-NEXT:    punpcklqdq {{[-0-9]+}}(%e{{[sb]}}p), %xmm1 # 16-byte Folded Reload1979; CHECK-I686-NEXT:    # xmm1 = xmm1[0],mem[0]1980; CHECK-I686-NEXT:    movdqa %xmm1, %xmm01981; CHECK-I686-NEXT:    addl $336, %esp # imm = 0x1501982; CHECK-I686-NEXT:    popl %esi1983; CHECK-I686-NEXT:    popl %edi1984; CHECK-I686-NEXT:    popl %ebx1985; CHECK-I686-NEXT:    retl1986  %3 = call fast <8 x half> @llvm.maxnum.v8f16(<8 x half> %0, <8 x half> %1)1987  ret <8 x half> %31988}1989 1990define void @pr63114() {1991; CHECK-LIBCALL-LABEL: pr63114:1992; CHECK-LIBCALL:       # %bb.0:1993; CHECK-LIBCALL-NEXT:    movdqu (%rax), %xmm41994; CHECK-LIBCALL-NEXT:    pshuflw {{.*#+}} xmm0 = xmm4[0,1,3,3,4,5,6,7]1995; CHECK-LIBCALL-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,1]1996; CHECK-LIBCALL-NEXT:    movdqa {{.*#+}} xmm1 = [65535,65535,65535,0,65535,65535,65535,65535]1997; CHECK-LIBCALL-NEXT:    pand %xmm1, %xmm01998; CHECK-LIBCALL-NEXT:    movq {{.*#+}} xmm2 = [0,0,0,15360,0,0,0,0]1999; CHECK-LIBCALL-NEXT:    por %xmm2, %xmm02000; CHECK-LIBCALL-NEXT:    movdqa {{.*#+}} xmm3 = [65535,65535,65535,65535,65535,65535,65535,0]2001; CHECK-LIBCALL-NEXT:    pand %xmm3, %xmm02002; CHECK-LIBCALL-NEXT:    movdqa {{.*#+}} xmm5 = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,60]2003; CHECK-LIBCALL-NEXT:    por %xmm5, %xmm02004; CHECK-LIBCALL-NEXT:    pshufhw {{.*#+}} xmm6 = xmm4[0,1,2,3,4,5,7,7]2005; CHECK-LIBCALL-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[0,2,2,3]2006; CHECK-LIBCALL-NEXT:    pand %xmm1, %xmm62007; CHECK-LIBCALL-NEXT:    por %xmm2, %xmm62008; CHECK-LIBCALL-NEXT:    pand %xmm3, %xmm62009; CHECK-LIBCALL-NEXT:    por %xmm5, %xmm62010; CHECK-LIBCALL-NEXT:    pshufhw {{.*#+}} xmm7 = xmm4[0,1,2,3,5,5,5,5]2011; CHECK-LIBCALL-NEXT:    shufps {{.*#+}} xmm4 = xmm4[0,3,0,3]2012; CHECK-LIBCALL-NEXT:    pshufhw {{.*#+}} xmm4 = xmm4[0,1,2,3,5,5,5,5]2013; CHECK-LIBCALL-NEXT:    pand %xmm1, %xmm42014; CHECK-LIBCALL-NEXT:    por %xmm2, %xmm42015; CHECK-LIBCALL-NEXT:    pand %xmm3, %xmm42016; CHECK-LIBCALL-NEXT:    por %xmm5, %xmm42017; CHECK-LIBCALL-NEXT:    pand %xmm1, %xmm72018; CHECK-LIBCALL-NEXT:    por %xmm2, %xmm72019; CHECK-LIBCALL-NEXT:    pand %xmm3, %xmm72020; CHECK-LIBCALL-NEXT:    por %xmm5, %xmm72021; CHECK-LIBCALL-NEXT:    movdqu %xmm7, 02022; CHECK-LIBCALL-NEXT:    movdqu %xmm4, 322023; CHECK-LIBCALL-NEXT:    movdqu %xmm6, 482024; CHECK-LIBCALL-NEXT:    movdqu %xmm0, 162025; CHECK-LIBCALL-NEXT:    retq2026;2027; BWON-F16C-LABEL: pr63114:2028; BWON-F16C:       # %bb.0:2029; BWON-F16C-NEXT:    vmovdqu (%rax), %xmm02030; BWON-F16C-NEXT:    vpsrld $16, %xmm0, %xmm12031; BWON-F16C-NEXT:    vbroadcastss (%rax), %xmm22032; BWON-F16C-NEXT:    vpsrldq {{.*#+}} xmm3 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero2033; BWON-F16C-NEXT:    vshufps {{.*#+}} xmm2 = xmm2[0,0],xmm3[0,0]2034; BWON-F16C-NEXT:    vpinsrw $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm32035; BWON-F16C-NEXT:    vpsllq $48, %xmm3, %xmm42036; BWON-F16C-NEXT:    vpblendw {{.*#+}} xmm2 = xmm2[0,1,2],xmm4[3],xmm2[4,5,6,7]2037; BWON-F16C-NEXT:    vpslldq {{.*#+}} xmm3 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm3[0,1]2038; BWON-F16C-NEXT:    vpor %xmm3, %xmm2, %xmm22039; BWON-F16C-NEXT:    vshufps {{.*#+}} xmm1 = xmm0[0,3],xmm1[2,0]2040; BWON-F16C-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0,1,2],xmm4[3],xmm1[4,5,6,7]2041; BWON-F16C-NEXT:    vpor %xmm3, %xmm1, %xmm12042; BWON-F16C-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm12043; BWON-F16C-NEXT:    vpshuflw {{.*#+}} xmm2 = xmm0[0,1,3,3,4,5,6,7]2044; BWON-F16C-NEXT:    vpshufd {{.*#+}} xmm2 = xmm2[0,0,2,1]2045; BWON-F16C-NEXT:    vpblendw {{.*#+}} xmm2 = xmm2[0,1,2],xmm4[3],xmm2[4,5,6,7]2046; BWON-F16C-NEXT:    vpblendw {{.*#+}} xmm2 = xmm2[0,1,2,3,4,5,6],xmm3[7]2047; BWON-F16C-NEXT:    vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,5,5,5,5]2048; BWON-F16C-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1,2],xmm4[3],xmm0[4,5,6,7]2049; BWON-F16C-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5,6],xmm3[7]2050; BWON-F16C-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm02051; BWON-F16C-NEXT:    vmovups %ymm0, 02052; BWON-F16C-NEXT:    vmovups %ymm1, 322053; BWON-F16C-NEXT:    vzeroupper2054; BWON-F16C-NEXT:    retq2055;2056; CHECK-I686-LABEL: pr63114:2057; CHECK-I686:       # %bb.0:2058; CHECK-I686-NEXT:    movdqu (%eax), %xmm62059; CHECK-I686-NEXT:    pshuflw {{.*#+}} xmm0 = xmm6[0,1,3,3,4,5,6,7]2060; CHECK-I686-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,1]2061; CHECK-I686-NEXT:    movdqa {{.*#+}} xmm1 = [65535,65535,65535,0,65535,65535,65535,65535]2062; CHECK-I686-NEXT:    pand %xmm1, %xmm02063; CHECK-I686-NEXT:    movq {{.*#+}} xmm2 = [0,0,0,15360,0,0,0,0]2064; CHECK-I686-NEXT:    por %xmm2, %xmm02065; CHECK-I686-NEXT:    movdqa {{.*#+}} xmm3 = [65535,65535,65535,65535,65535,65535,65535,0]2066; CHECK-I686-NEXT:    pand %xmm3, %xmm02067; CHECK-I686-NEXT:    movdqa {{.*#+}} xmm4 = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,60]2068; CHECK-I686-NEXT:    por %xmm4, %xmm02069; CHECK-I686-NEXT:    pshufhw {{.*#+}} xmm5 = xmm6[0,1,2,3,4,5,7,7]2070; CHECK-I686-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[0,2,2,3]2071; CHECK-I686-NEXT:    pand %xmm1, %xmm52072; CHECK-I686-NEXT:    por %xmm2, %xmm52073; CHECK-I686-NEXT:    pand %xmm3, %xmm52074; CHECK-I686-NEXT:    por %xmm4, %xmm52075; CHECK-I686-NEXT:    pshufhw {{.*#+}} xmm7 = xmm6[0,1,2,3,5,5,5,5]2076; CHECK-I686-NEXT:    shufps {{.*#+}} xmm6 = xmm6[0,3,0,3]2077; CHECK-I686-NEXT:    pshufhw {{.*#+}} xmm6 = xmm6[0,1,2,3,5,5,5,5]2078; CHECK-I686-NEXT:    pand %xmm1, %xmm62079; CHECK-I686-NEXT:    por %xmm2, %xmm62080; CHECK-I686-NEXT:    pand %xmm3, %xmm62081; CHECK-I686-NEXT:    por %xmm4, %xmm62082; CHECK-I686-NEXT:    pand %xmm1, %xmm72083; CHECK-I686-NEXT:    por %xmm2, %xmm72084; CHECK-I686-NEXT:    pand %xmm3, %xmm72085; CHECK-I686-NEXT:    por %xmm4, %xmm72086; CHECK-I686-NEXT:    movdqu %xmm7, 02087; CHECK-I686-NEXT:    movdqu %xmm6, 322088; CHECK-I686-NEXT:    movdqu %xmm5, 482089; CHECK-I686-NEXT:    movdqu %xmm0, 162090; CHECK-I686-NEXT:    retl2091  %1 = load <24 x half>, ptr poison, align 22092  %2 = shufflevector <24 x half> %1, <24 x half> poison, <8 x i32> <i32 2, i32 5, i32 8, i32 11, i32 14, i32 17, i32 20, i32 23>2093  %3 = shufflevector <8 x half> %2, <8 x half> <half 0xH3C00, half 0xH3C00, half 0xH3C00, half 0xH3C00, half 0xH3C00, half 0xH3C00, half 0xH3C00, half 0xH3C00>, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>2094  %4 = shufflevector <16 x half> poison, <16 x half> %3, <32 x i32> <i32 0, i32 8, i32 16, i32 24, i32 1, i32 9, i32 17, i32 25, i32 2, i32 10, i32 18, i32 26, i32 3, i32 11, i32 19, i32 27, i32 4, i32 12, i32 20, i32 28, i32 5, i32 13, i32 21, i32 29, i32 6, i32 14, i32 22, i32 30, i32 7, i32 15, i32 23, i32 31>2095  store <32 x half> %4, ptr null, align 22096  ret void2097}2098 2099attributes #0 = { nounwind }2100