xref: /llvm-project/llvm/test/CodeGen/X86/no-sse-x86.ll (revision 2f448bf509432c1a19ec46ab8cbc7353c03c6280)
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