1; RUN: llc -march=x86-64 -mcpu=corei7-avx -enable-unsafe-fp-math < %s | FileCheck %s
2
3; CHECK-LABEL: test1
4define float @test1(float %a) {
5; CHECK-NOT: addss
6; CHECK: mulss
7; CHECK-NOT: addss
8; CHECK: ret
9  %t1 = fadd float %a, %a
10  %r = fadd float %t1, %t1
11  ret float %r
12}
13
14; CHECK-LABEL: test2
15define float @test2(float %a) {
16; CHECK-NOT: addss
17; CHECK: mulss
18; CHECK-NOT: addss
19; CHECK: ret
20  %t1 = fmul float 4.0, %a
21  %t2 = fadd float %a, %a
22  %r = fadd float %t1, %t2
23  ret float %r
24}
25
26; CHECK-LABEL: test3
27define float @test3(float %a) {
28; CHECK-NOT: addss
29; CHECK: mulss
30; CHECK-NOT: addss
31; CHECK: ret
32  %t1 = fmul float %a, 4.0
33  %t2 = fadd float %a, %a
34  %r = fadd float %t1, %t2
35  ret float %r
36}
37
38; CHECK-LABEL: test4
39define float @test4(float %a) {
40; CHECK-NOT: addss
41; CHECK: mulss
42; CHECK-NOT: addss
43; CHECK: ret
44  %t1 = fadd float %a, %a
45  %t2 = fmul float 4.0, %a
46  %r = fadd float %t1, %t2
47  ret float %r
48}
49
50; CHECK-LABEL: test5
51define float @test5(float %a) {
52; CHECK-NOT: addss
53; CHECK: mulss
54; CHECK-NOT: addss
55; CHECK: ret
56  %t1 = fadd float %a, %a
57  %t2 = fmul float %a, 4.0
58  %r = fadd float %t1, %t2
59  ret float %r
60}
61
62; CHECK-LABEL: test6
63define float @test6(float %a) {
64; CHECK-NOT: addss
65; CHECK: xorps
66; CHECK-NOT: addss
67; CHECK: ret
68  %t1 = fmul float 2.0, %a
69  %t2 = fadd float %a, %a
70  %r = fsub float %t1, %t2
71  ret float %r
72}
73
74; CHECK-LABEL: test7
75define float @test7(float %a) {
76; CHECK-NOT: addss
77; CHECK: xorps
78; CHECK-NOT: addss
79; CHECK: ret
80  %t1 = fmul float %a, 2.0
81  %t2 = fadd float %a, %a
82  %r = fsub float %t1, %t2
83  ret float %r
84}
85
86; CHECK-LABEL: test8
87define float @test8(float %a) {
88; CHECK-NOT: fma
89; CHECK-NOT: mul
90; CHECK-NOT: add
91; CHECK: ret
92  %t1 = fmul float %a, 0.0
93  %t2 = fadd float %a, %t1
94  ret float %t2
95}
96
97; CHECK-LABEL: test9
98define float @test9(float %a) {
99; CHECK-NOT: fma
100; CHECK-NOT: mul
101; CHECK-NOT: add
102; CHECK: ret
103  %t1 = fmul float 0.0, %a
104  %t2 = fadd float %t1, %a
105  ret float %t2
106}
107
108; CHECK-LABEL: test10
109define float @test10(float %a) {
110; CHECK-NOT: add
111; CHECK: vxorps
112; CHECK: ret
113  %t1 = fsub float -0.0, %a
114  %t2 = fadd float %a, %t1
115  ret float %t2
116}
117
118; CHECK-LABEL: test11
119define float @test11(float %a) {
120; CHECK-NOT: add
121; CHECK: vxorps
122; CHECK: ret
123  %t1 = fsub float -0.0, %a
124  %t2 = fadd float %a, %t1
125  ret float %t2
126}
127