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