1 ; RUN: llc -mtriple=x86_64-unknown-unknown < %s | FileCheck %s
3 define float @fadd_zero_f32(float %x) #0 {
4 ; CHECK-LABEL: fadd_zero_f32:
7 %y = fadd float %x, 0.0
11 define <4 x float> @fadd_zero_4f32(<4 x float> %x) #0 {
12 ; CHECK-LABEL: fadd_zero_4f32:
15 %y = fadd <4 x float> %x, zeroinitializer
20 define float @fadd_2const_f32(float %x) #0 {
21 ; CHECK-LABEL: fadd_2const_f32:
23 ; CHECK-NEXT: addss {{.*}}(%rip), %xmm0
25 %y = fadd float %x, 1.0
26 %z = fadd float %y, 2.0
30 ; CHECK: float 5.000000e+00
31 ; CHECK: float 5.000000e+00
32 ; CHECK: float 5.000000e+00
33 ; CHECK: float 5.000000e+00
34 define <4 x float> @fadd_2const_4f32(<4 x float> %x) #0 {
35 ; CHECK-LABEL: fadd_2const_4f32:
37 ; CHECK-NEXT: addps {{.*}}(%rip), %xmm0
39 %y = fadd <4 x float> %x, <float 1.0, float 2.0, float 3.0, float 4.0>
40 %z = fadd <4 x float> %y, <float 4.0, float 3.0, float 2.0, float 1.0>
45 define float @fadd_x_fmul_x_c_f32(float %x) #0 {
46 ; CHECK-LABEL: fadd_x_fmul_x_c_f32:
48 ; CHECK-NEXT: mulss {{.*}}(%rip), %xmm0
50 %y = fmul float %x, 2.0
51 %z = fadd float %x, %y
55 ; CHECK: float 2.000000e+00
56 ; CHECK: float 3.000000e+00
57 ; CHECK: float 4.000000e+00
58 ; CHECK: float 5.000000e+00
59 define <4 x float> @fadd_x_fmul_x_c_4f32(<4 x float> %x) #0 {
60 ; CHECK-LABEL: fadd_x_fmul_x_c_4f32:
62 ; CHECK-NEXT: mulps {{.*}}(%rip), %xmm0
64 %y = fmul <4 x float> %x, <float 1.0, float 2.0, float 3.0, float 4.0>
65 %z = fadd <4 x float> %x, %y
70 define float @fadd_fmul_x_c_x_f32(float %x) #0 {
71 ; CHECK-LABEL: fadd_fmul_x_c_x_f32:
73 ; CHECK-NEXT: mulss {{.*}}(%rip), %xmm0
75 %y = fmul float %x, 2.0
76 %z = fadd float %y, %x
80 ; CHECK: float 2.000000e+00
81 ; CHECK: float 3.000000e+00
82 ; CHECK: float 4.000000e+00
83 ; CHECK: float 5.000000e+00
84 define <4 x float> @fadd_fmul_x_c_x_4f32(<4 x float> %x) #0 {
85 ; CHECK-LABEL: fadd_fmul_x_c_x_4f32:
87 ; CHECK-NEXT: mulps {{.*}}(%rip), %xmm0
89 %y = fmul <4 x float> %x, <float 1.0, float 2.0, float 3.0, float 4.0>
90 %z = fadd <4 x float> %y, %x
95 define float @fadd_fadd_x_x_fmul_x_c_f32(float %x) #0 {
96 ; CHECK-LABEL: fadd_fadd_x_x_fmul_x_c_f32:
98 ; CHECK-NEXT: mulss {{.*}}(%rip), %xmm0
100 %y = fadd float %x, %x
101 %z = fmul float %x, 2.0
102 %w = fadd float %y, %z
106 ; CHECK: float 3.000000e+00
107 ; CHECK: float 4.000000e+00
108 ; CHECK: float 5.000000e+00
109 ; CHECK: float 6.000000e+00
110 define <4 x float> @fadd_fadd_x_x_fmul_x_c_4f32(<4 x float> %x) #0 {
111 ; CHECK-LABEL: fadd_fadd_x_x_fmul_x_c_4f32:
113 ; CHECK-NEXT: mulps {{.*}}(%rip), %xmm0
115 %y = fadd <4 x float> %x, %x
116 %z = fmul <4 x float> %x, <float 1.0, float 2.0, float 3.0, float 4.0>
117 %w = fadd <4 x float> %y, %z
122 define float @fadd_fmul_x_c_fadd_x_x_f32(float %x) #0 {
123 ; CHECK-LABEL: fadd_fmul_x_c_fadd_x_x_f32:
125 ; CHECK-NEXT: mulss {{.*}}(%rip), %xmm0
127 %y = fadd float %x, %x
128 %z = fmul float %x, 2.0
129 %w = fadd float %z, %y
133 ; CHECK: float 3.000000e+00
134 ; CHECK: float 4.000000e+00
135 ; CHECK: float 5.000000e+00
136 ; CHECK: float 6.000000e+00
137 define <4 x float> @fadd_fmul_x_c_fadd_x_x_4f32(<4 x float> %x) #0 {
138 ; CHECK-LABEL: fadd_fmul_x_c_fadd_x_x_4f32:
140 ; CHECK-NEXT: mulps {{.*}}(%rip), %xmm0
142 %y = fadd <4 x float> %x, %x
143 %z = fmul <4 x float> %x, <float 1.0, float 2.0, float 3.0, float 4.0>
144 %w = fadd <4 x float> %z, %y
149 define float @fadd_x_fadd_x_x_f32(float %x) #0 {
150 ; CHECK-LABEL: fadd_x_fadd_x_x_f32:
152 ; CHECK-NEXT: mulss {{.*}}(%rip), %xmm0
154 %y = fadd float %x, %x
155 %z = fadd float %x, %y
159 ; CHECK: float 3.000000e+00
160 ; CHECK: float 3.000000e+00
161 ; CHECK: float 3.000000e+00
162 ; CHECK: float 3.000000e+00
163 define <4 x float> @fadd_x_fadd_x_x_4f32(<4 x float> %x) #0 {
164 ; CHECK-LABEL: fadd_x_fadd_x_x_4f32:
166 ; CHECK-NEXT: mulps {{.*}}(%rip), %xmm0
168 %y = fadd <4 x float> %x, %x
169 %z = fadd <4 x float> %x, %y
174 define float @fadd_fadd_x_x_x_f32(float %x) #0 {
175 ; CHECK-LABEL: fadd_fadd_x_x_x_f32:
177 ; CHECK-NEXT: mulss {{.*}}(%rip), %xmm0
179 %y = fadd float %x, %x
180 %z = fadd float %y, %x
184 ; CHECK: float 3.000000e+00
185 ; CHECK: float 3.000000e+00
186 ; CHECK: float 3.000000e+00
187 ; CHECK: float 3.000000e+00
188 define <4 x float> @fadd_fadd_x_x_x_4f32(<4 x float> %x) #0 {
189 ; CHECK-LABEL: fadd_fadd_x_x_x_4f32:
191 ; CHECK-NEXT: mulps {{.*}}(%rip), %xmm0
193 %y = fadd <4 x float> %x, %x
194 %z = fadd <4 x float> %y, %x
199 define float @fadd_fadd_x_x_fadd_x_x_f32(float %x) #0 {
200 ; CHECK-LABEL: fadd_fadd_x_x_fadd_x_x_f32:
202 ; CHECK-NEXT: mulss {{.*}}(%rip), %xmm0
204 %y = fadd float %x, %x
205 %z = fadd float %y, %y
209 ; CHECK: float 4.000000e+00
210 ; CHECK: float 4.000000e+00
211 ; CHECK: float 4.000000e+00
212 ; CHECK: float 4.000000e+00
213 define <4 x float> @fadd_fadd_x_x_fadd_x_x_4f32(<4 x float> %x) #0 {
214 ; CHECK-LABEL: fadd_fadd_x_x_fadd_x_x_4f32:
216 ; CHECK-NEXT: mulps {{.*}}(%rip), %xmm0
218 %y = fadd <4 x float> %x, %x
219 %z = fadd <4 x float> %y, %y
223 attributes #0 = { "less-precise-fpmad"="true" "no-infs-fp-math"="true" "no-nans-fp-math"="true" "unsafe-fp-math"="true" }