• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc -mtriple=x86_64-unknown-unknown < %s | FileCheck %s
3
4define float @fadd_zero_f32(float %x) #0 {
5; CHECK-LABEL: fadd_zero_f32:
6; CHECK:       # BB#0:
7; CHECK-NEXT:    retq
8  %y = fadd float %x, 0.0
9  ret float %y
10}
11
12define <4 x float> @fadd_zero_4f32(<4 x float> %x) #0 {
13; CHECK-LABEL: fadd_zero_4f32:
14; CHECK:       # BB#0:
15; CHECK-NEXT:    retq
16  %y = fadd <4 x float> %x, zeroinitializer
17  ret <4 x float> %y
18}
19
20; CHECK: float 3
21define float @fadd_2const_f32(float %x) #0 {
22; CHECK-LABEL: fadd_2const_f32:
23; CHECK:       # BB#0:
24; CHECK-NEXT:    addss {{.*}}(%rip), %xmm0
25; CHECK-NEXT:    retq
26  %y = fadd float %x, 1.0
27  %z = fadd float %y, 2.0
28  ret float %z
29}
30
31; CHECK: float 5
32; CHECK: float 5
33; CHECK: float 5
34; CHECK: float 5
35define <4 x float> @fadd_2const_4f32(<4 x float> %x) #0 {
36; CHECK-LABEL: fadd_2const_4f32:
37; CHECK:       # BB#0:
38; CHECK-NEXT:    addps {{.*}}(%rip), %xmm0
39; CHECK-NEXT:    retq
40  %y = fadd <4 x float> %x, <float 1.0, float 2.0, float 3.0, float 4.0>
41  %z = fadd <4 x float> %y, <float 4.0, float 3.0, float 2.0, float 1.0>
42  ret <4 x float> %z
43}
44
45; CHECK: float 3
46define float @fadd_x_fmul_x_c_f32(float %x) #0 {
47; CHECK-LABEL: fadd_x_fmul_x_c_f32:
48; CHECK:       # BB#0:
49; CHECK-NEXT:    mulss {{.*}}(%rip), %xmm0
50; CHECK-NEXT:    retq
51  %y = fmul float %x, 2.0
52  %z = fadd float %x, %y
53  ret float %z
54}
55
56; CHECK: float 2
57; CHECK: float 3
58; CHECK: float 4
59; CHECK: float 5
60define <4 x float> @fadd_x_fmul_x_c_4f32(<4 x float> %x) #0 {
61; CHECK-LABEL: fadd_x_fmul_x_c_4f32:
62; CHECK:       # BB#0:
63; CHECK-NEXT:    mulps {{.*}}(%rip), %xmm0
64; CHECK-NEXT:    retq
65  %y = fmul <4 x float> %x, <float 1.0, float 2.0, float 3.0, float 4.0>
66  %z = fadd <4 x float> %x, %y
67  ret <4 x float> %z
68}
69
70; CHECK: float 3
71define float @fadd_fmul_x_c_x_f32(float %x) #0 {
72; CHECK-LABEL: fadd_fmul_x_c_x_f32:
73; CHECK:       # BB#0:
74; CHECK-NEXT:    mulss {{.*}}(%rip), %xmm0
75; CHECK-NEXT:    retq
76  %y = fmul float %x, 2.0
77  %z = fadd float %y, %x
78  ret float %z
79}
80
81; CHECK: float 2
82; CHECK: float 3
83; CHECK: float 4
84; CHECK: float 5
85define <4 x float> @fadd_fmul_x_c_x_4f32(<4 x float> %x) #0 {
86; CHECK-LABEL: fadd_fmul_x_c_x_4f32:
87; CHECK:       # BB#0:
88; CHECK-NEXT:    mulps {{.*}}(%rip), %xmm0
89; CHECK-NEXT:    retq
90  %y = fmul <4 x float> %x, <float 1.0, float 2.0, float 3.0, float 4.0>
91  %z = fadd <4 x float> %y, %x
92  ret <4 x float> %z
93}
94
95; CHECK: float 4
96define float @fadd_fadd_x_x_fmul_x_c_f32(float %x) #0 {
97; CHECK-LABEL: fadd_fadd_x_x_fmul_x_c_f32:
98; CHECK:       # BB#0:
99; CHECK-NEXT:    mulss {{.*}}(%rip), %xmm0
100; CHECK-NEXT:    retq
101  %y = fadd float %x, %x
102  %z = fmul float %x, 2.0
103  %w = fadd float %y, %z
104  ret float %w
105}
106
107; CHECK: float 3
108; CHECK: float 4
109; CHECK: float 5
110; CHECK: float 6
111define <4 x float> @fadd_fadd_x_x_fmul_x_c_4f32(<4 x float> %x) #0 {
112; CHECK-LABEL: fadd_fadd_x_x_fmul_x_c_4f32:
113; CHECK:       # BB#0:
114; CHECK-NEXT:    mulps {{.*}}(%rip), %xmm0
115; CHECK-NEXT:    retq
116  %y = fadd <4 x float> %x, %x
117  %z = fmul <4 x float> %x, <float 1.0, float 2.0, float 3.0, float 4.0>
118  %w = fadd <4 x float> %y, %z
119  ret <4 x float> %w
120}
121
122; CHECK: float 4
123define float @fadd_fmul_x_c_fadd_x_x_f32(float %x) #0 {
124; CHECK-LABEL: fadd_fmul_x_c_fadd_x_x_f32:
125; CHECK:       # BB#0:
126; CHECK-NEXT:    mulss {{.*}}(%rip), %xmm0
127; CHECK-NEXT:    retq
128  %y = fadd float %x, %x
129  %z = fmul float %x, 2.0
130  %w = fadd float %z, %y
131  ret float %w
132}
133
134; CHECK: float 3
135; CHECK: float 4
136; CHECK: float 5
137; CHECK: float 6
138define <4 x float> @fadd_fmul_x_c_fadd_x_x_4f32(<4 x float> %x) #0 {
139; CHECK-LABEL: fadd_fmul_x_c_fadd_x_x_4f32:
140; CHECK:       # BB#0:
141; CHECK-NEXT:    mulps {{.*}}(%rip), %xmm0
142; CHECK-NEXT:    retq
143  %y = fadd <4 x float> %x, %x
144  %z = fmul <4 x float> %x, <float 1.0, float 2.0, float 3.0, float 4.0>
145  %w = fadd <4 x float> %z, %y
146  ret <4 x float> %w
147}
148
149; CHECK: float 3
150define float @fadd_x_fadd_x_x_f32(float %x) #0 {
151; CHECK-LABEL: fadd_x_fadd_x_x_f32:
152; CHECK:       # BB#0:
153; CHECK-NEXT:    mulss {{.*}}(%rip), %xmm0
154; CHECK-NEXT:    retq
155  %y = fadd float %x, %x
156  %z = fadd float %x, %y
157  ret float %z
158}
159
160; CHECK: float 3
161; CHECK: float 3
162; CHECK: float 3
163; CHECK: float 3
164define <4 x float> @fadd_x_fadd_x_x_4f32(<4 x float> %x) #0 {
165; CHECK-LABEL: fadd_x_fadd_x_x_4f32:
166; CHECK:       # BB#0:
167; CHECK-NEXT:    mulps {{.*}}(%rip), %xmm0
168; CHECK-NEXT:    retq
169  %y = fadd <4 x float> %x, %x
170  %z = fadd <4 x float> %x, %y
171  ret <4 x float> %z
172}
173
174; CHECK: float 3
175define float @fadd_fadd_x_x_x_f32(float %x) #0 {
176; CHECK-LABEL: fadd_fadd_x_x_x_f32:
177; CHECK:       # BB#0:
178; CHECK-NEXT:    mulss {{.*}}(%rip), %xmm0
179; CHECK-NEXT:    retq
180  %y = fadd float %x, %x
181  %z = fadd float %y, %x
182  ret float %z
183}
184
185; CHECK: float 3
186; CHECK: float 3
187; CHECK: float 3
188; CHECK: float 3
189define <4 x float> @fadd_fadd_x_x_x_4f32(<4 x float> %x) #0 {
190; CHECK-LABEL: fadd_fadd_x_x_x_4f32:
191; CHECK:       # BB#0:
192; CHECK-NEXT:    mulps {{.*}}(%rip), %xmm0
193; CHECK-NEXT:    retq
194  %y = fadd <4 x float> %x, %x
195  %z = fadd <4 x float> %y, %x
196  ret <4 x float> %z
197}
198
199; CHECK: float 4
200define float @fadd_fadd_x_x_fadd_x_x_f32(float %x) #0 {
201; CHECK-LABEL: fadd_fadd_x_x_fadd_x_x_f32:
202; CHECK:       # BB#0:
203; CHECK-NEXT:    mulss {{.*}}(%rip), %xmm0
204; CHECK-NEXT:    retq
205  %y = fadd float %x, %x
206  %z = fadd float %y, %y
207  ret float %z
208}
209
210; CHECK: float 4
211; CHECK: float 4
212; CHECK: float 4
213; CHECK: float 4
214define <4 x float> @fadd_fadd_x_x_fadd_x_x_4f32(<4 x float> %x) #0 {
215; CHECK-LABEL: fadd_fadd_x_x_fadd_x_x_4f32:
216; CHECK:       # BB#0:
217; CHECK-NEXT:    mulps {{.*}}(%rip), %xmm0
218; CHECK-NEXT:    retq
219  %y = fadd <4 x float> %x, %x
220  %z = fadd <4 x float> %y, %y
221  ret <4 x float> %z
222}
223
224attributes #0 = { "less-precise-fpmad"="true" "no-infs-fp-math"="true" "no-nans-fp-math"="true" "unsafe-fp-math"="true" }
225