Fix a broadcast related regression on the vector shuffle lowering.
[oota-llvm.git] / test / CodeGen / X86 / fp-fast.ll
1 ; RUN: llc -march=x86-64 -mcpu=corei7-avx -enable-unsafe-fp-math < %s | FileCheck %s
2
3 ; CHECK-LABEL: test1
4 define 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
15 define 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
27 define 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
39 define 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
51 define 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
63 define 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
75 define 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
87 define 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
98 define 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
109 define 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
119 define 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 }