1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc < %s -mcpu=i686 -mattr=+sse | FileCheck %s 3; RUN: llc < %s -mcpu=i686 -mattr=-sse 2>&1 | FileCheck --check-prefix NOSSE %s 4 5target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:32:32" 6target triple = "i386-unknown-linux-gnu" 7@f = external dso_local global float 8@d = external dso_local global double 9 10define void @test() nounwind { 11; CHECK-LABEL: test: 12; CHECK: # %bb.0: # %entry 13; CHECK-NEXT: subl $12, %esp 14; CHECK-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero 15; CHECK-NEXT: movss %xmm0, (%esp) 16; CHECK-NEXT: calll foo1@PLT 17; CHECK-NEXT: fstps f 18; CHECK-NEXT: fldl d 19; CHECK-NEXT: fstpl (%esp) 20; CHECK-NEXT: calll foo2@PLT 21; CHECK-NEXT: fstpl d 22; CHECK-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero 23; CHECK-NEXT: movss %xmm0, (%esp) 24; CHECK-NEXT: calll foo3@PLT 25; CHECK-NEXT: fstps f 26; CHECK-NEXT: fldl d 27; CHECK-NEXT: fstpl (%esp) 28; CHECK-NEXT: calll foo4@PLT 29; CHECK-NEXT: fstpl d 30; CHECK-NEXT: addl $12, %esp 31; CHECK-NEXT: retl 32; 33; NOSSE-LABEL: test: 34; NOSSE: # %bb.0: # %entry 35; NOSSE-NEXT: subl $12, %esp 36; NOSSE-NEXT: flds f 37; NOSSE-NEXT: fstps (%esp) 38; NOSSE-NEXT: calll foo1@PLT 39; NOSSE-NEXT: fstps f 40; NOSSE-NEXT: fldl d 41; NOSSE-NEXT: fstpl (%esp) 42; NOSSE-NEXT: calll foo2@PLT 43; NOSSE-NEXT: fstpl d 44; NOSSE-NEXT: flds f 45; NOSSE-NEXT: fstps (%esp) 46; NOSSE-NEXT: calll foo3@PLT 47; NOSSE-NEXT: fstps f 48; NOSSE-NEXT: fldl d 49; NOSSE-NEXT: fstpl (%esp) 50; NOSSE-NEXT: calll foo4@PLT 51; NOSSE-NEXT: fstpl d 52; NOSSE-NEXT: addl $12, %esp 53; NOSSE-NEXT: retl 54entry: 55 %0 = load float, ptr @f, align 4 56 %1 = tail call inreg float @foo1(float inreg %0) nounwind 57 store float %1, ptr @f, align 4 58 %2 = load double, ptr @d, align 8 59 %3 = tail call inreg double @foo2(double inreg %2) nounwind 60 store double %3, ptr @d, align 8 61 %4 = load float, ptr @f, align 4 62 %5 = tail call inreg float @foo3(float inreg %4) nounwind 63 store float %5, ptr @f, align 4 64 %6 = load double, ptr @d, align 8 65 %7 = tail call inreg double @foo4(double inreg %6) nounwind 66 store double %7, ptr @d, align 8 67 ret void 68} 69 70declare inreg float @foo1(float inreg) 71 72declare inreg double @foo2(double inreg) 73 74declare inreg float @foo3(float inreg) 75 76declare inreg double @foo4(double inreg) 77