brintos

brintos / llvm-project-archived public Read only

0
0
Text · 20.4 KiB · 8576f8f Raw
489 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=i686-linux-gnu -fast-isel  | FileCheck %s --check-prefixes=X86,FASTISEL-X863; RUN: llc < %s -mtriple=x86_64-linux-gnu -fast-isel  | FileCheck %s --check-prefixes=X64,FASTISEL-X644; RUN: llc < %s -mtriple=i686-linux-gnu -global-isel=0 -fast-isel=0  | FileCheck %s --check-prefixes=X86,SDAG-X865; RUN: llc < %s -mtriple=x86_64-linux-gnu -global-isel=0 -fast-isel=0  | FileCheck %s --check-prefixes=X64,SDAG-X646; RUN: llc < %s -mtriple=x86_64-apple-macosx10.9.0 -mcpu=core2 | FileCheck %s --check-prefix=MACOS-SINCOS-STRET7; RUN: llc < %s -mtriple=x86_64-apple-macosx10.8.0 -mcpu=core2 | FileCheck %s --check-prefix=MACOS-NOSINCOS-STRET8 9; TODO: The below RUN line will fails GISEL selection and will fallback to DAG selection due to lack of support for loads/stores in i686 mode, support is expected soon enough, for this reason the llvm/test/CodeGen/X86/GlobalISel/llvm.sincos.mir test is added for now because of the lack of support for i686 in GlobalISel.10; RUN: llc < %s -mtriple=i686-linux-gnu -global-isel=1 -global-isel-abort=2 | FileCheck %s --check-prefixes=GISEL-X8611; RUN: llc < %s -mtriple=x86_64-linux-gnu -global-isel=1 -global-isel-abort=1 | FileCheck %s --check-prefixes=GISEL-X6412 13define { float, float } @test_sincos_f32(float %Val) nounwind {14; X86-LABEL: test_sincos_f32:15; X86:       # %bb.0:16; X86-NEXT:    subl $28, %esp17; X86-NEXT:    flds {{[0-9]+}}(%esp)18; X86-NEXT:    leal {{[0-9]+}}(%esp), %eax19; X86-NEXT:    movl %eax, {{[0-9]+}}(%esp)20; X86-NEXT:    leal {{[0-9]+}}(%esp), %eax21; X86-NEXT:    movl %eax, {{[0-9]+}}(%esp)22; X86-NEXT:    fstps (%esp)23; X86-NEXT:    calll sincosf24; X86-NEXT:    flds {{[0-9]+}}(%esp)25; X86-NEXT:    flds {{[0-9]+}}(%esp)26; X86-NEXT:    addl $28, %esp27; X86-NEXT:    retl28;29; X64-LABEL: test_sincos_f32:30; X64:       # %bb.0:31; X64-NEXT:    pushq %rax32; X64-NEXT:    leaq {{[0-9]+}}(%rsp), %rdi33; X64-NEXT:    movq %rsp, %rsi34; X64-NEXT:    callq sincosf@PLT35; X64-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero36; X64-NEXT:    movss {{.*#+}} xmm1 = mem[0],zero,zero,zero37; X64-NEXT:    popq %rax38; X64-NEXT:    retq39;40; MACOS-SINCOS-STRET-LABEL: test_sincos_f32:41; MACOS-SINCOS-STRET:       ## %bb.0:42; MACOS-SINCOS-STRET-NEXT:    pushq %rax43; MACOS-SINCOS-STRET-NEXT:    callq ___sincosf_stret44; MACOS-SINCOS-STRET-NEXT:    movshdup {{.*#+}} xmm1 = xmm0[1,1,3,3]45; MACOS-SINCOS-STRET-NEXT:    popq %rax46; MACOS-SINCOS-STRET-NEXT:    retq47;48; MACOS-NOSINCOS-STRET-LABEL: test_sincos_f32:49; MACOS-NOSINCOS-STRET:       ## %bb.0:50; MACOS-NOSINCOS-STRET-NEXT:    pushq %rax51; MACOS-NOSINCOS-STRET-NEXT:    movss %xmm0, (%rsp) ## 4-byte Spill52; MACOS-NOSINCOS-STRET-NEXT:    callq _sinf53; MACOS-NOSINCOS-STRET-NEXT:    movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) ## 4-byte Spill54; MACOS-NOSINCOS-STRET-NEXT:    movss (%rsp), %xmm0 ## 4-byte Reload55; MACOS-NOSINCOS-STRET-NEXT:    ## xmm0 = mem[0],zero,zero,zero56; MACOS-NOSINCOS-STRET-NEXT:    callq _cosf57; MACOS-NOSINCOS-STRET-NEXT:    movaps %xmm0, %xmm158; MACOS-NOSINCOS-STRET-NEXT:    movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 ## 4-byte Reload59; MACOS-NOSINCOS-STRET-NEXT:    ## xmm0 = mem[0],zero,zero,zero60; MACOS-NOSINCOS-STRET-NEXT:    popq %rax61; MACOS-NOSINCOS-STRET-NEXT:    retq62;63; GISEL-X86-LABEL: test_sincos_f32:64; GISEL-X86:       # %bb.0:65; GISEL-X86-NEXT:    subl $28, %esp66; GISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax67; GISEL-X86-NEXT:    leal {{[0-9]+}}(%esp), %ecx68; GISEL-X86-NEXT:    leal {{[0-9]+}}(%esp), %edx69; GISEL-X86-NEXT:    movl %eax, (%esp)70; GISEL-X86-NEXT:    movl %ecx, {{[0-9]+}}(%esp)71; GISEL-X86-NEXT:    movl %edx, {{[0-9]+}}(%esp)72; GISEL-X86-NEXT:    calll sincosf73; GISEL-X86-NEXT:    flds {{[0-9]+}}(%esp)74; GISEL-X86-NEXT:    flds {{[0-9]+}}(%esp)75; GISEL-X86-NEXT:    fxch %st(1)76; GISEL-X86-NEXT:    addl $28, %esp77; GISEL-X86-NEXT:    retl78;79; GISEL-X64-LABEL: test_sincos_f32:80; GISEL-X64:       # %bb.0:81; GISEL-X64-NEXT:    pushq %rax82; GISEL-X64-NEXT:    leaq {{[0-9]+}}(%rsp), %rdi83; GISEL-X64-NEXT:    movq %rsp, %rsi84; GISEL-X64-NEXT:    callq sincosf85; GISEL-X64-NEXT:    movl {{[0-9]+}}(%rsp), %eax86; GISEL-X64-NEXT:    movl (%rsp), %ecx87; GISEL-X64-NEXT:    movd %eax, %xmm088; GISEL-X64-NEXT:    movd %ecx, %xmm189; GISEL-X64-NEXT:    popq %rax90; GISEL-X64-NEXT:    retq91  %res = call { float, float } @llvm.sincos.f32(float %Val)92  ret { float, float } %res93}94 95define { double, double } @test_sincos_f64(double %Val) nounwind  {96; X86-LABEL: test_sincos_f64:97; X86:       # %bb.0:98; X86-NEXT:    subl $44, %esp99; X86-NEXT:    fldl {{[0-9]+}}(%esp)100; X86-NEXT:    leal {{[0-9]+}}(%esp), %eax101; X86-NEXT:    movl %eax, {{[0-9]+}}(%esp)102; X86-NEXT:    leal {{[0-9]+}}(%esp), %eax103; X86-NEXT:    movl %eax, {{[0-9]+}}(%esp)104; X86-NEXT:    fstpl (%esp)105; X86-NEXT:    calll sincos106; X86-NEXT:    fldl {{[0-9]+}}(%esp)107; X86-NEXT:    fldl {{[0-9]+}}(%esp)108; X86-NEXT:    addl $44, %esp109; X86-NEXT:    retl110;111; X64-LABEL: test_sincos_f64:112; X64:       # %bb.0:113; X64-NEXT:    subq $24, %rsp114; X64-NEXT:    leaq {{[0-9]+}}(%rsp), %rdi115; X64-NEXT:    leaq {{[0-9]+}}(%rsp), %rsi116; X64-NEXT:    callq sincos@PLT117; X64-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero118; X64-NEXT:    movsd {{.*#+}} xmm1 = mem[0],zero119; X64-NEXT:    addq $24, %rsp120; X64-NEXT:    retq121;122; MACOS-SINCOS-STRET-LABEL: test_sincos_f64:123; MACOS-SINCOS-STRET:       ## %bb.0:124; MACOS-SINCOS-STRET-NEXT:    pushq %rax125; MACOS-SINCOS-STRET-NEXT:    callq ___sincos_stret126; MACOS-SINCOS-STRET-NEXT:    popq %rax127; MACOS-SINCOS-STRET-NEXT:    retq128;129; MACOS-NOSINCOS-STRET-LABEL: test_sincos_f64:130; MACOS-NOSINCOS-STRET:       ## %bb.0:131; MACOS-NOSINCOS-STRET-NEXT:    subq $24, %rsp132; MACOS-NOSINCOS-STRET-NEXT:    movsd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) ## 8-byte Spill133; MACOS-NOSINCOS-STRET-NEXT:    callq _sin134; MACOS-NOSINCOS-STRET-NEXT:    movsd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) ## 8-byte Spill135; MACOS-NOSINCOS-STRET-NEXT:    movsd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 ## 8-byte Reload136; MACOS-NOSINCOS-STRET-NEXT:    ## xmm0 = mem[0],zero137; MACOS-NOSINCOS-STRET-NEXT:    callq _cos138; MACOS-NOSINCOS-STRET-NEXT:    movaps %xmm0, %xmm1139; MACOS-NOSINCOS-STRET-NEXT:    movsd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 ## 8-byte Reload140; MACOS-NOSINCOS-STRET-NEXT:    ## xmm0 = mem[0],zero141; MACOS-NOSINCOS-STRET-NEXT:    addq $24, %rsp142; MACOS-NOSINCOS-STRET-NEXT:    retq143;144; GISEL-X86-LABEL: test_sincos_f64:145; GISEL-X86:       # %bb.0:146; GISEL-X86-NEXT:    subl $44, %esp147; GISEL-X86-NEXT:    fldl {{[0-9]+}}(%esp)148; GISEL-X86-NEXT:    leal {{[0-9]+}}(%esp), %eax149; GISEL-X86-NEXT:    movl %eax, {{[0-9]+}}(%esp)150; GISEL-X86-NEXT:    leal {{[0-9]+}}(%esp), %eax151; GISEL-X86-NEXT:    movl %eax, {{[0-9]+}}(%esp)152; GISEL-X86-NEXT:    fstpl (%esp)153; GISEL-X86-NEXT:    calll sincos154; GISEL-X86-NEXT:    fldl {{[0-9]+}}(%esp)155; GISEL-X86-NEXT:    fldl {{[0-9]+}}(%esp)156; GISEL-X86-NEXT:    addl $44, %esp157; GISEL-X86-NEXT:    retl158;159; GISEL-X64-LABEL: test_sincos_f64:160; GISEL-X64:       # %bb.0:161; GISEL-X64-NEXT:    subq $24, %rsp162; GISEL-X64-NEXT:    leaq {{[0-9]+}}(%rsp), %rdi163; GISEL-X64-NEXT:    leaq {{[0-9]+}}(%rsp), %rsi164; GISEL-X64-NEXT:    callq sincos165; GISEL-X64-NEXT:    movq {{[0-9]+}}(%rsp), %rax166; GISEL-X64-NEXT:    movq {{[0-9]+}}(%rsp), %rcx167; GISEL-X64-NEXT:    movq %rax, %xmm0168; GISEL-X64-NEXT:    movq %rcx, %xmm1169; GISEL-X64-NEXT:    addq $24, %rsp170; GISEL-X64-NEXT:    retq171  %res = call { double, double } @llvm.sincos.f64(double %Val)172  ret { double, double } %res173}174 175define { x86_fp80, x86_fp80 } @test_sincos_f80(x86_fp80 %Val) nounwind {176; X86-LABEL: test_sincos_f80:177; X86:       # %bb.0:178; X86-NEXT:    subl $44, %esp179; X86-NEXT:    fldt {{[0-9]+}}(%esp)180; X86-NEXT:    leal {{[0-9]+}}(%esp), %eax181; X86-NEXT:    movl %eax, {{[0-9]+}}(%esp)182; X86-NEXT:    leal {{[0-9]+}}(%esp), %eax183; X86-NEXT:    movl %eax, {{[0-9]+}}(%esp)184; X86-NEXT:    fstpt (%esp)185; X86-NEXT:    calll sincosl186; X86-NEXT:    fldt {{[0-9]+}}(%esp)187; X86-NEXT:    fldt {{[0-9]+}}(%esp)188; X86-NEXT:    addl $44, %esp189; X86-NEXT:    retl190;191; X64-LABEL: test_sincos_f80:192; X64:       # %bb.0:193; X64-NEXT:    subq $56, %rsp194; X64-NEXT:    fldt {{[0-9]+}}(%rsp)195; X64-NEXT:    fstpt (%rsp)196; X64-NEXT:    leaq {{[0-9]+}}(%rsp), %rdi197; X64-NEXT:    leaq {{[0-9]+}}(%rsp), %rsi198; X64-NEXT:    callq sincosl@PLT199; X64-NEXT:    fldt {{[0-9]+}}(%rsp)200; X64-NEXT:    fldt {{[0-9]+}}(%rsp)201; X64-NEXT:    addq $56, %rsp202; X64-NEXT:    retq203;204; MACOS-SINCOS-STRET-LABEL: test_sincos_f80:205; MACOS-SINCOS-STRET:       ## %bb.0:206; MACOS-SINCOS-STRET-NEXT:    subq $40, %rsp207; MACOS-SINCOS-STRET-NEXT:    fldt {{[0-9]+}}(%rsp)208; MACOS-SINCOS-STRET-NEXT:    fld %st(0)209; MACOS-SINCOS-STRET-NEXT:    fstpt {{[-0-9]+}}(%r{{[sb]}}p) ## 10-byte Folded Spill210; MACOS-SINCOS-STRET-NEXT:    fstpt (%rsp)211; MACOS-SINCOS-STRET-NEXT:    callq _cosl212; MACOS-SINCOS-STRET-NEXT:    fstpt {{[-0-9]+}}(%r{{[sb]}}p) ## 10-byte Folded Spill213; MACOS-SINCOS-STRET-NEXT:    fldt {{[-0-9]+}}(%r{{[sb]}}p) ## 10-byte Folded Reload214; MACOS-SINCOS-STRET-NEXT:    fstpt (%rsp)215; MACOS-SINCOS-STRET-NEXT:    callq _sinl216; MACOS-SINCOS-STRET-NEXT:    fldt {{[-0-9]+}}(%r{{[sb]}}p) ## 10-byte Folded Reload217; MACOS-SINCOS-STRET-NEXT:    fxch %st(1)218; MACOS-SINCOS-STRET-NEXT:    addq $40, %rsp219; MACOS-SINCOS-STRET-NEXT:    retq220;221; MACOS-NOSINCOS-STRET-LABEL: test_sincos_f80:222; MACOS-NOSINCOS-STRET:       ## %bb.0:223; MACOS-NOSINCOS-STRET-NEXT:    subq $40, %rsp224; MACOS-NOSINCOS-STRET-NEXT:    fldt {{[0-9]+}}(%rsp)225; MACOS-NOSINCOS-STRET-NEXT:    fld %st(0)226; MACOS-NOSINCOS-STRET-NEXT:    fstpt {{[-0-9]+}}(%r{{[sb]}}p) ## 10-byte Folded Spill227; MACOS-NOSINCOS-STRET-NEXT:    fstpt (%rsp)228; MACOS-NOSINCOS-STRET-NEXT:    callq _cosl229; MACOS-NOSINCOS-STRET-NEXT:    fstpt {{[-0-9]+}}(%r{{[sb]}}p) ## 10-byte Folded Spill230; MACOS-NOSINCOS-STRET-NEXT:    fldt {{[-0-9]+}}(%r{{[sb]}}p) ## 10-byte Folded Reload231; MACOS-NOSINCOS-STRET-NEXT:    fstpt (%rsp)232; MACOS-NOSINCOS-STRET-NEXT:    callq _sinl233; MACOS-NOSINCOS-STRET-NEXT:    fldt {{[-0-9]+}}(%r{{[sb]}}p) ## 10-byte Folded Reload234; MACOS-NOSINCOS-STRET-NEXT:    fxch %st(1)235; MACOS-NOSINCOS-STRET-NEXT:    addq $40, %rsp236; MACOS-NOSINCOS-STRET-NEXT:    retq237;238; GISEL-X86-LABEL: test_sincos_f80:239; GISEL-X86:       # %bb.0:240; GISEL-X86-NEXT:    subl $60, %esp241; GISEL-X86-NEXT:    fldt {{[0-9]+}}(%esp)242; GISEL-X86-NEXT:    leal {{[0-9]+}}(%esp), %eax243; GISEL-X86-NEXT:    leal {{[0-9]+}}(%esp), %ecx244; GISEL-X86-NEXT:    fstpt (%esp)245; GISEL-X86-NEXT:    movl %eax, {{[0-9]+}}(%esp)246; GISEL-X86-NEXT:    movl %ecx, {{[0-9]+}}(%esp)247; GISEL-X86-NEXT:    calll sincosl248; GISEL-X86-NEXT:    fldt {{[0-9]+}}(%esp)249; GISEL-X86-NEXT:    fldt {{[0-9]+}}(%esp)250; GISEL-X86-NEXT:    fxch %st(1)251; GISEL-X86-NEXT:    addl $60, %esp252; GISEL-X86-NEXT:    retl253;254; GISEL-X64-LABEL: test_sincos_f80:255; GISEL-X64:       # %bb.0:256; GISEL-X64-NEXT:    subq $56, %rsp257; GISEL-X64-NEXT:    fldt {{[0-9]+}}(%rsp)258; GISEL-X64-NEXT:    leaq {{[0-9]+}}(%rsp), %rdi259; GISEL-X64-NEXT:    leaq {{[0-9]+}}(%rsp), %rsi260; GISEL-X64-NEXT:    fstpt (%rsp)261; GISEL-X64-NEXT:    callq sincosl262; GISEL-X64-NEXT:    fldt {{[0-9]+}}(%rsp)263; GISEL-X64-NEXT:    fldt {{[0-9]+}}(%rsp)264; GISEL-X64-NEXT:    fxch %st(1)265; GISEL-X64-NEXT:    addq $56, %rsp266; GISEL-X64-NEXT:    retq267  %res = call { x86_fp80, x86_fp80 } @llvm.sincos.f80(x86_fp80 %Val)268  ret { x86_fp80, x86_fp80 } %res269}270 271declare void @foo(ptr, ptr)272 273define void @can_fold_with_call_in_chain(float %x, ptr noalias %a, ptr noalias %b) nounwind {274; FASTISEL-X86-LABEL: can_fold_with_call_in_chain:275; FASTISEL-X86:       # %bb.0: # %entry276; FASTISEL-X86-NEXT:    pushl %edi277; FASTISEL-X86-NEXT:    pushl %esi278; FASTISEL-X86-NEXT:    subl $20, %esp279; FASTISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %esi280; FASTISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %edi281; FASTISEL-X86-NEXT:    flds {{[0-9]+}}(%esp)282; FASTISEL-X86-NEXT:    fstps {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Spill283; FASTISEL-X86-NEXT:    movl %esi, {{[0-9]+}}(%esp)284; FASTISEL-X86-NEXT:    movl %edi, (%esp)285; FASTISEL-X86-NEXT:    calll foo@PLT286; FASTISEL-X86-NEXT:    leal {{[0-9]+}}(%esp), %eax287; FASTISEL-X86-NEXT:    movl %eax, {{[0-9]+}}(%esp)288; FASTISEL-X86-NEXT:    movl %edi, {{[0-9]+}}(%esp)289; FASTISEL-X86-NEXT:    flds {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Reload290; FASTISEL-X86-NEXT:    fstps (%esp)291; FASTISEL-X86-NEXT:    calll sincosf292; FASTISEL-X86-NEXT:    flds {{[0-9]+}}(%esp)293; FASTISEL-X86-NEXT:    fstps (%esi)294; FASTISEL-X86-NEXT:    addl $20, %esp295; FASTISEL-X86-NEXT:    popl %esi296; FASTISEL-X86-NEXT:    popl %edi297; FASTISEL-X86-NEXT:    retl298;299; FASTISEL-X64-LABEL: can_fold_with_call_in_chain:300; FASTISEL-X64:       # %bb.0: # %entry301; FASTISEL-X64-NEXT:    pushq %r14302; FASTISEL-X64-NEXT:    pushq %rbx303; FASTISEL-X64-NEXT:    pushq %rax304; FASTISEL-X64-NEXT:    movq %rsi, %rbx305; FASTISEL-X64-NEXT:    movq %rdi, %r14306; FASTISEL-X64-NEXT:    movss %xmm0, (%rsp) # 4-byte Spill307; FASTISEL-X64-NEXT:    callq sinf@PLT308; FASTISEL-X64-NEXT:    movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill309; FASTISEL-X64-NEXT:    movss (%rsp), %xmm0 # 4-byte Reload310; FASTISEL-X64-NEXT:    # xmm0 = mem[0],zero,zero,zero311; FASTISEL-X64-NEXT:    callq cosf@PLT312; FASTISEL-X64-NEXT:    movss %xmm0, (%rsp) # 4-byte Spill313; FASTISEL-X64-NEXT:    movq %r14, %rdi314; FASTISEL-X64-NEXT:    movq %rbx, %rsi315; FASTISEL-X64-NEXT:    callq foo@PLT316; FASTISEL-X64-NEXT:    movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Reload317; FASTISEL-X64-NEXT:    # xmm0 = mem[0],zero,zero,zero318; FASTISEL-X64-NEXT:    movss %xmm0, (%r14)319; FASTISEL-X64-NEXT:    movss (%rsp), %xmm0 # 4-byte Reload320; FASTISEL-X64-NEXT:    # xmm0 = mem[0],zero,zero,zero321; FASTISEL-X64-NEXT:    movss %xmm0, (%rbx)322; FASTISEL-X64-NEXT:    addq $8, %rsp323; FASTISEL-X64-NEXT:    popq %rbx324; FASTISEL-X64-NEXT:    popq %r14325; FASTISEL-X64-NEXT:    retq326;327; SDAG-X86-LABEL: can_fold_with_call_in_chain:328; SDAG-X86:       # %bb.0: # %entry329; SDAG-X86-NEXT:    pushl %edi330; SDAG-X86-NEXT:    pushl %esi331; SDAG-X86-NEXT:    subl $20, %esp332; SDAG-X86-NEXT:    flds {{[0-9]+}}(%esp)333; SDAG-X86-NEXT:    fstps {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Spill334; SDAG-X86-NEXT:    movl {{[0-9]+}}(%esp), %edi335; SDAG-X86-NEXT:    movl {{[0-9]+}}(%esp), %esi336; SDAG-X86-NEXT:    movl %esi, {{[0-9]+}}(%esp)337; SDAG-X86-NEXT:    movl %edi, (%esp)338; SDAG-X86-NEXT:    calll foo@PLT339; SDAG-X86-NEXT:    leal {{[0-9]+}}(%esp), %eax340; SDAG-X86-NEXT:    movl %eax, {{[0-9]+}}(%esp)341; SDAG-X86-NEXT:    movl %edi, {{[0-9]+}}(%esp)342; SDAG-X86-NEXT:    flds {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Reload343; SDAG-X86-NEXT:    fstps (%esp)344; SDAG-X86-NEXT:    calll sincosf345; SDAG-X86-NEXT:    flds {{[0-9]+}}(%esp)346; SDAG-X86-NEXT:    fstps (%esi)347; SDAG-X86-NEXT:    addl $20, %esp348; SDAG-X86-NEXT:    popl %esi349; SDAG-X86-NEXT:    popl %edi350; SDAG-X86-NEXT:    retl351;352; SDAG-X64-LABEL: can_fold_with_call_in_chain:353; SDAG-X64:       # %bb.0: # %entry354; SDAG-X64-NEXT:    pushq %r14355; SDAG-X64-NEXT:    pushq %rbx356; SDAG-X64-NEXT:    pushq %rax357; SDAG-X64-NEXT:    movq %rsi, %rbx358; SDAG-X64-NEXT:    movq %rdi, %r14359; SDAG-X64-NEXT:    movss %xmm0, (%rsp) # 4-byte Spill360; SDAG-X64-NEXT:    callq foo@PLT361; SDAG-X64-NEXT:    leaq {{[0-9]+}}(%rsp), %rsi362; SDAG-X64-NEXT:    movss (%rsp), %xmm0 # 4-byte Reload363; SDAG-X64-NEXT:    # xmm0 = mem[0],zero,zero,zero364; SDAG-X64-NEXT:    movq %r14, %rdi365; SDAG-X64-NEXT:    callq sincosf@PLT366; SDAG-X64-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero367; SDAG-X64-NEXT:    movss %xmm0, (%rbx)368; SDAG-X64-NEXT:    addq $8, %rsp369; SDAG-X64-NEXT:    popq %rbx370; SDAG-X64-NEXT:    popq %r14371; SDAG-X64-NEXT:    retq372;373; MACOS-SINCOS-STRET-LABEL: can_fold_with_call_in_chain:374; MACOS-SINCOS-STRET:       ## %bb.0: ## %entry375; MACOS-SINCOS-STRET-NEXT:    pushq %r14376; MACOS-SINCOS-STRET-NEXT:    pushq %rbx377; MACOS-SINCOS-STRET-NEXT:    subq $40, %rsp378; MACOS-SINCOS-STRET-NEXT:    movq %rsi, %rbx379; MACOS-SINCOS-STRET-NEXT:    movq %rdi, %r14380; MACOS-SINCOS-STRET-NEXT:    callq ___sincosf_stret381; MACOS-SINCOS-STRET-NEXT:    movaps %xmm0, (%rsp) ## 16-byte Spill382; MACOS-SINCOS-STRET-NEXT:    movshdup {{.*#+}} xmm0 = xmm0[1,1,3,3]383; MACOS-SINCOS-STRET-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) ## 16-byte Spill384; MACOS-SINCOS-STRET-NEXT:    movq %r14, %rdi385; MACOS-SINCOS-STRET-NEXT:    movq %rbx, %rsi386; MACOS-SINCOS-STRET-NEXT:    callq _foo387; MACOS-SINCOS-STRET-NEXT:    movaps (%rsp), %xmm0 ## 16-byte Reload388; MACOS-SINCOS-STRET-NEXT:    movss %xmm0, (%r14)389; MACOS-SINCOS-STRET-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 ## 16-byte Reload390; MACOS-SINCOS-STRET-NEXT:    movss %xmm0, (%rbx)391; MACOS-SINCOS-STRET-NEXT:    addq $40, %rsp392; MACOS-SINCOS-STRET-NEXT:    popq %rbx393; MACOS-SINCOS-STRET-NEXT:    popq %r14394; MACOS-SINCOS-STRET-NEXT:    retq395;396; MACOS-NOSINCOS-STRET-LABEL: can_fold_with_call_in_chain:397; MACOS-NOSINCOS-STRET:       ## %bb.0: ## %entry398; MACOS-NOSINCOS-STRET-NEXT:    pushq %r14399; MACOS-NOSINCOS-STRET-NEXT:    pushq %rbx400; MACOS-NOSINCOS-STRET-NEXT:    pushq %rax401; MACOS-NOSINCOS-STRET-NEXT:    movq %rsi, %rbx402; MACOS-NOSINCOS-STRET-NEXT:    movq %rdi, %r14403; MACOS-NOSINCOS-STRET-NEXT:    movss %xmm0, (%rsp) ## 4-byte Spill404; MACOS-NOSINCOS-STRET-NEXT:    callq _sinf405; MACOS-NOSINCOS-STRET-NEXT:    movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) ## 4-byte Spill406; MACOS-NOSINCOS-STRET-NEXT:    movss (%rsp), %xmm0 ## 4-byte Reload407; MACOS-NOSINCOS-STRET-NEXT:    ## xmm0 = mem[0],zero,zero,zero408; MACOS-NOSINCOS-STRET-NEXT:    callq _cosf409; MACOS-NOSINCOS-STRET-NEXT:    movss %xmm0, (%rsp) ## 4-byte Spill410; MACOS-NOSINCOS-STRET-NEXT:    movq %r14, %rdi411; MACOS-NOSINCOS-STRET-NEXT:    movq %rbx, %rsi412; MACOS-NOSINCOS-STRET-NEXT:    callq _foo413; MACOS-NOSINCOS-STRET-NEXT:    movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 ## 4-byte Reload414; MACOS-NOSINCOS-STRET-NEXT:    ## xmm0 = mem[0],zero,zero,zero415; MACOS-NOSINCOS-STRET-NEXT:    movss %xmm0, (%r14)416; MACOS-NOSINCOS-STRET-NEXT:    movss (%rsp), %xmm0 ## 4-byte Reload417; MACOS-NOSINCOS-STRET-NEXT:    ## xmm0 = mem[0],zero,zero,zero418; MACOS-NOSINCOS-STRET-NEXT:    movss %xmm0, (%rbx)419; MACOS-NOSINCOS-STRET-NEXT:    addq $8, %rsp420; MACOS-NOSINCOS-STRET-NEXT:    popq %rbx421; MACOS-NOSINCOS-STRET-NEXT:    popq %r14422; MACOS-NOSINCOS-STRET-NEXT:    retq423;424; GISEL-X86-LABEL: can_fold_with_call_in_chain:425; GISEL-X86:       # %bb.0: # %entry426; GISEL-X86-NEXT:    pushl %ebx427; GISEL-X86-NEXT:    pushl %edi428; GISEL-X86-NEXT:    pushl %esi429; GISEL-X86-NEXT:    subl $16, %esp430; GISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %ebx431; GISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %esi432; GISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %edi433; GISEL-X86-NEXT:    movl %ebx, (%esp)434; GISEL-X86-NEXT:    calll sinf435; GISEL-X86-NEXT:    fstps {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Spill436; GISEL-X86-NEXT:    movl %ebx, (%esp)437; GISEL-X86-NEXT:    calll cosf438; GISEL-X86-NEXT:    fstps {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Spill439; GISEL-X86-NEXT:    movl %esi, (%esp)440; GISEL-X86-NEXT:    movl %edi, {{[0-9]+}}(%esp)441; GISEL-X86-NEXT:    calll foo442; GISEL-X86-NEXT:    flds {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Reload443; GISEL-X86-NEXT:    fstps (%esi)444; GISEL-X86-NEXT:    flds {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Reload445; GISEL-X86-NEXT:    fstps (%edi)446; GISEL-X86-NEXT:    addl $16, %esp447; GISEL-X86-NEXT:    popl %esi448; GISEL-X86-NEXT:    popl %edi449; GISEL-X86-NEXT:    popl %ebx450; GISEL-X86-NEXT:    retl451;452; GISEL-X64-LABEL: can_fold_with_call_in_chain:453; GISEL-X64:       # %bb.0: # %entry454; GISEL-X64-NEXT:    pushq %r14455; GISEL-X64-NEXT:    pushq %rbx456; GISEL-X64-NEXT:    pushq %rax457; GISEL-X64-NEXT:    movss %xmm0, (%rsp) # 4-byte Spill458; GISEL-X64-NEXT:    movq %rdi, %rbx459; GISEL-X64-NEXT:    movq %rsi, %r14460; GISEL-X64-NEXT:    callq sinf461; GISEL-X64-NEXT:    movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill462; GISEL-X64-NEXT:    movss (%rsp), %xmm0 # 4-byte Reload463; GISEL-X64-NEXT:    # xmm0 = mem[0],zero,zero,zero464; GISEL-X64-NEXT:    callq cosf465; GISEL-X64-NEXT:    movss %xmm0, (%rsp) # 4-byte Spill466; GISEL-X64-NEXT:    movq %rbx, %rdi467; GISEL-X64-NEXT:    movq %r14, %rsi468; GISEL-X64-NEXT:    callq foo469; GISEL-X64-NEXT:    movd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload470; GISEL-X64-NEXT:    # xmm0 = mem[0],zero,zero,zero471; GISEL-X64-NEXT:    movd %xmm0, %eax472; GISEL-X64-NEXT:    movl %eax, (%rbx)473; GISEL-X64-NEXT:    movd (%rsp), %xmm0 # 4-byte Folded Reload474; GISEL-X64-NEXT:    # xmm0 = mem[0],zero,zero,zero475; GISEL-X64-NEXT:    movd %xmm0, %eax476; GISEL-X64-NEXT:    movl %eax, (%r14)477; GISEL-X64-NEXT:    addq $8, %rsp478; GISEL-X64-NEXT:    popq %rbx479; GISEL-X64-NEXT:    popq %r14480; GISEL-X64-NEXT:    retq481entry:482  %sin = tail call float @llvm.sin.f32(float %x)483  %cos = tail call float @llvm.cos.f32(float %x)484  call void @foo(ptr %a, ptr %b)485  store float %sin, ptr %a, align 4486  store float %cos, ptr %b, align 4487  ret void488}489