brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.2 KiB · d873808 Raw
145 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: sed -e "s/SETROUND/ldmxcsr/g" %s | llc -mtriple=x86_64-pc-linux - | FileCheck %s --check-prefix=X643; RUN: sed -e "s/SETROUND/fldcw/g" %s | llc -mtriple=i686-pc-linux - | FileCheck %s --check-prefix=X864 5define double @foo(double %0) #0 {6; X64-LABEL: foo:7; X64:       # %bb.0:8; X64-NEXT:    subq $24, %rsp9; X64-NEXT:    movsd %xmm0, (%rsp) # 8-byte Spill10; X64-NEXT:    movl $1024, %edi # imm = 0x40011; X64-NEXT:    callq fesetround@PLT12; X64-NEXT:    movsd {{.*#+}} xmm1 = [1.0E+0,0.0E+0]13; X64-NEXT:    divsd (%rsp), %xmm1 # 8-byte Folded Reload14; X64-NEXT:    movsd %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill15; X64-NEXT:    movl $1024, %edi # imm = 0x40016; X64-NEXT:    callq fesetround@PLT17; X64-NEXT:    movsd {{.*#+}} xmm0 = [1.0E+0,0.0E+0]18; X64-NEXT:    divsd (%rsp), %xmm0 # 8-byte Folded Reload19; X64-NEXT:    movsd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill20; X64-NEXT:    movl $1024, %edi # imm = 0x40021; X64-NEXT:    callq fesetround@PLT22; X64-NEXT:    movsd {{.*#+}} xmm2 = [1.0E+0,0.0E+0]23; X64-NEXT:    divsd (%rsp), %xmm2 # 8-byte Folded Reload24; X64-NEXT:    movsd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 8-byte Reload25; X64-NEXT:    # xmm0 = mem[0],zero26; X64-NEXT:    movsd {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 8-byte Reload27; X64-NEXT:    # xmm1 = mem[0],zero28; X64-NEXT:    callq fma@PLT29; X64-NEXT:    addq $24, %rsp30; X64-NEXT:    retq31;32; X86-LABEL: foo:33; X86:       # %bb.0:34; X86-NEXT:    subl $60, %esp35; X86-NEXT:    fldl {{[0-9]+}}(%esp)36; X86-NEXT:    fstpl {{[-0-9]+}}(%e{{[sb]}}p) # 8-byte Folded Spill37; X86-NEXT:    wait38; X86-NEXT:    movl $1024, (%esp) # imm = 0x40039; X86-NEXT:    calll fesetround@PLT40; X86-NEXT:    fld141; X86-NEXT:    fstl {{[-0-9]+}}(%e{{[sb]}}p) # 8-byte Folded Spill42; X86-NEXT:    fldl {{[-0-9]+}}(%e{{[sb]}}p) # 8-byte Folded Reload43; X86-NEXT:    fdivrp %st, %st(1)44; X86-NEXT:    fstpl {{[-0-9]+}}(%e{{[sb]}}p) # 8-byte Folded Spill45; X86-NEXT:    wait46; X86-NEXT:    movl $1024, (%esp) # imm = 0x40047; X86-NEXT:    calll fesetround@PLT48; X86-NEXT:    fldl {{[-0-9]+}}(%e{{[sb]}}p) # 8-byte Folded Reload49; X86-NEXT:    fldl {{[-0-9]+}}(%e{{[sb]}}p) # 8-byte Folded Reload50; X86-NEXT:    fdivp %st, %st(1)51; X86-NEXT:    fstpl {{[-0-9]+}}(%e{{[sb]}}p) # 8-byte Folded Spill52; X86-NEXT:    wait53; X86-NEXT:    movl $1024, (%esp) # imm = 0x40054; X86-NEXT:    calll fesetround@PLT55; X86-NEXT:    fldl {{[-0-9]+}}(%e{{[sb]}}p) # 8-byte Folded Reload56; X86-NEXT:    fldl {{[-0-9]+}}(%e{{[sb]}}p) # 8-byte Folded Reload57; X86-NEXT:    fdivp %st, %st(1)58; X86-NEXT:    fstpl {{[0-9]+}}(%esp)59; X86-NEXT:    fldl {{[-0-9]+}}(%e{{[sb]}}p) # 8-byte Folded Reload60; X86-NEXT:    fstpl {{[0-9]+}}(%esp)61; X86-NEXT:    fldl {{[-0-9]+}}(%e{{[sb]}}p) # 8-byte Folded Reload62; X86-NEXT:    fstpl (%esp)63; X86-NEXT:    wait64; X86-NEXT:    calll fma65; X86-NEXT:    addl $60, %esp66; X86-NEXT:    retl67    %2 = call i32 @fesetround(i32 noundef 1024)68    %3 = call double @llvm.experimental.constrained.fdiv.f64(double 1.000000e+00, double %0, metadata !"round.dynamic", metadata !"fpexcept.ignore") #069    %4 = call i32 @fesetround(i32 noundef 1024)70    %5 = call double @llvm.experimental.constrained.fdiv.f64(double 1.000000e+00, double %0, metadata !"round.dynamic", metadata !"fpexcept.ignore") #071    %6 = call i32 @fesetround(i32 noundef 1024)72    %7 = call double @llvm.experimental.constrained.fdiv.f64(double 1.000000e+00, double %0, metadata !"round.dynamic", metadata !"fpexcept.ignore") #073    %8 = call double @llvm.experimental.constrained.fma.f64(double %3, double %5, double %7, metadata !"round.dynamic", metadata !"fpexcept.ignore") #074    ret double %875}76 77define double @bar(double %0) #0 {78; X64-LABEL: bar:79; X64:       # %bb.0:80; X64-NEXT:    pushq %rax81; X64-NEXT:    #APP82; X64-NEXT:    ldmxcsr 083; X64-NEXT:    #NO_APP84; X64-NEXT:    movsd {{.*#+}} xmm2 = [1.0E+0,0.0E+0]85; X64-NEXT:    movapd %xmm2, %xmm386; X64-NEXT:    divsd %xmm0, %xmm387; X64-NEXT:    #APP88; X64-NEXT:    ldmxcsr 089; X64-NEXT:    #NO_APP90; X64-NEXT:    movapd %xmm2, %xmm191; X64-NEXT:    divsd %xmm0, %xmm192; X64-NEXT:    #APP93; X64-NEXT:    ldmxcsr 094; X64-NEXT:    #NO_APP95; X64-NEXT:    divsd %xmm0, %xmm296; X64-NEXT:    movapd %xmm3, %xmm097; X64-NEXT:    callq fma@PLT98; X64-NEXT:    popq %rax99; X64-NEXT:    retq100;101; X86-LABEL: bar:102; X86:       # %bb.0:103; X86-NEXT:    subl $28, %esp104; X86-NEXT:    fldl {{[0-9]+}}(%esp)105; X86-NEXT:    wait106; X86-NEXT:    #APP107; X86-NEXT:    fldcw 0108; X86-NEXT:    #NO_APP109; X86-NEXT:    fld1110; X86-NEXT:    fld %st(0)111; X86-NEXT:    fdiv %st(2), %st112; X86-NEXT:    #APP113; X86-NEXT:    fldcw 0114; X86-NEXT:    #NO_APP115; X86-NEXT:    fld %st(1)116; X86-NEXT:    fdiv %st(3), %st117; X86-NEXT:    #APP118; X86-NEXT:    fldcw 0119; X86-NEXT:    #NO_APP120; X86-NEXT:    fxch %st(2)121; X86-NEXT:    fdivp %st, %st(3)122; X86-NEXT:    fxch %st(2)123; X86-NEXT:    fstpl {{[0-9]+}}(%esp)124; X86-NEXT:    fstpl {{[0-9]+}}(%esp)125; X86-NEXT:    fstpl (%esp)126; X86-NEXT:    wait127; X86-NEXT:    calll fma128; X86-NEXT:    addl $28, %esp129; X86-NEXT:    retl130    call void asm sideeffect "SETROUND $0", "*m,~{dirflag},~{fpsr},~{flags}"(ptr elementtype(i32) null)131    %2 = call double @llvm.experimental.constrained.fdiv.f64(double 1.000000e+00, double %0, metadata !"round.dynamic", metadata !"fpexcept.ignore") #0132    call void asm sideeffect "SETROUND $0", "*m,~{dirflag},~{fpsr},~{flags}"(ptr elementtype(i32) null)133    %3 = call double @llvm.experimental.constrained.fdiv.f64(double 1.000000e+00, double %0, metadata !"round.dynamic", metadata !"fpexcept.ignore") #0134    call void asm sideeffect "SETROUND $0", "*m,~{dirflag},~{fpsr},~{flags}"(ptr elementtype(i32) null)135    %4 = call double @llvm.experimental.constrained.fdiv.f64(double 1.000000e+00, double %0, metadata !"round.dynamic", metadata !"fpexcept.ignore") #0136    %5 = call double @llvm.experimental.constrained.fma.f64(double %2, double %3, double %4, metadata !"round.dynamic", metadata !"fpexcept.ignore") #0137    ret double %5138}139 140declare i32 @fesetround(i32) #0141declare double @llvm.experimental.constrained.fdiv.f64(double, double, metadata, metadata) #0142declare double @llvm.experimental.constrained.fma.f64(double, double, double, metadata, metadata) #0143 144attributes #0 = { nounwind strictfp }145