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:
14 ; CHECK-NEXT: xorps %xmm1, %xmm1
15 ; CHECK-NEXT: addps %xmm1, %xmm0
17 %y = fadd <4 x float> %x, zeroinitializer
21 define float @fadd_2const_f32(float %x) #0 {
22 ; CHECK-LABEL: fadd_2const_f32:
24 ; CHECK-NEXT: addss {{.*}}(%rip), %xmm0
26 %y = fadd float %x, 1.0
27 %z = fadd float %y, 2.0
31 define <4 x float> @fadd_2const_4f32(<4 x float> %x) #0 {
32 ; CHECK-LABEL: fadd_2const_4f32:
34 ; CHECK-NEXT: addps {{.*}}(%rip), %xmm0
35 ; CHECK-NEXT: addps {{.*}}(%rip), %xmm0
37 %y = fadd <4 x float> %x, <float 1.0, float 2.0, float 3.0, float 4.0>
38 %z = fadd <4 x float> %y, <float 4.0, float 3.0, float 2.0, float 1.0>
42 define float @fadd_x_fmul_x_c_f32(float %x) #0 {
43 ; CHECK-LABEL: fadd_x_fmul_x_c_f32:
45 ; CHECK-NEXT: mulss {{.*}}(%rip), %xmm0
47 %y = fmul float %x, 2.0
48 %z = fadd float %x, %y
52 define <4 x float> @fadd_x_fmul_x_c_4f32(<4 x float> %x) #0 {
53 ; CHECK-LABEL: fadd_x_fmul_x_c_4f32:
55 ; CHECK-NEXT: movaps {{.*#+}} xmm1 = [1.000000e+00,2.000000e+00,3.000000e+00,4.000000e+00]
56 ; CHECK-NEXT: mulps %xmm0, %xmm1
57 ; CHECK-NEXT: addps %xmm1, %xmm0
59 %y = fmul <4 x float> %x, <float 1.0, float 2.0, float 3.0, float 4.0>
60 %z = fadd <4 x float> %x, %y
64 define float @fadd_fmul_x_c_x_f32(float %x) #0 {
65 ; CHECK-LABEL: fadd_fmul_x_c_x_f32:
67 ; CHECK-NEXT: mulss {{.*}}(%rip), %xmm0
69 %y = fmul float %x, 2.0
70 %z = fadd float %y, %x
74 define <4 x float> @fadd_fmul_x_c_x_4f32(<4 x float> %x) #0 {
75 ; CHECK-LABEL: fadd_fmul_x_c_x_4f32:
77 ; CHECK-NEXT: movaps {{.*#+}} xmm1 = [1.000000e+00,2.000000e+00,3.000000e+00,4.000000e+00]
78 ; CHECK-NEXT: mulps %xmm0, %xmm1
79 ; CHECK-NEXT: addps %xmm1, %xmm0
81 %y = fmul <4 x float> %x, <float 1.0, float 2.0, float 3.0, float 4.0>
82 %z = fadd <4 x float> %y, %x
86 define float @fadd_fadd_x_x_fmul_x_c_f32(float %x) #0 {
87 ; CHECK-LABEL: fadd_fadd_x_x_fmul_x_c_f32:
89 ; CHECK-NEXT: mulss {{.*}}(%rip), %xmm0
91 %y = fadd float %x, %x
92 %z = fmul float %x, 2.0
93 %w = fadd float %y, %z
97 define <4 x float> @fadd_fadd_x_x_fmul_x_c_4f32(<4 x float> %x) #0 {
98 ; CHECK-LABEL: fadd_fadd_x_x_fmul_x_c_4f32:
100 ; CHECK-NEXT: movaps {{.*#+}} xmm1 = [1.000000e+00,2.000000e+00,3.000000e+00,4.000000e+00]
101 ; CHECK-NEXT: mulps %xmm0, %xmm1
102 ; CHECK-NEXT: addps %xmm0, %xmm1
103 ; CHECK-NEXT: addps %xmm1, %xmm0
105 %y = fadd <4 x float> %x, %x
106 %z = fmul <4 x float> %x, <float 1.0, float 2.0, float 3.0, float 4.0>
107 %w = fadd <4 x float> %y, %z
111 define float @fadd_fmul_x_c_fadd_x_x_f32(float %x) #0 {
112 ; CHECK-LABEL: fadd_fmul_x_c_fadd_x_x_f32:
114 ; CHECK-NEXT: mulss {{.*}}(%rip), %xmm0
116 %y = fadd float %x, %x
117 %z = fmul float %x, 2.0
118 %w = fadd float %z, %y
122 define <4 x float> @fadd_fmul_x_c_fadd_x_x_4f32(<4 x float> %x) #0 {
123 ; CHECK-LABEL: fadd_fmul_x_c_fadd_x_x_4f32:
125 ; CHECK-NEXT: movaps {{.*#+}} xmm1 = [1.000000e+00,2.000000e+00,3.000000e+00,4.000000e+00]
126 ; CHECK-NEXT: mulps %xmm0, %xmm1
127 ; CHECK-NEXT: addps %xmm0, %xmm1
128 ; CHECK-NEXT: addps %xmm1, %xmm0
130 %y = fadd <4 x float> %x, %x
131 %z = fmul <4 x float> %x, <float 1.0, float 2.0, float 3.0, float 4.0>
132 %w = fadd <4 x float> %z, %y
136 define float @fadd_x_fadd_x_x_f32(float %x) #0 {
137 ; CHECK-LABEL: fadd_x_fadd_x_x_f32:
139 ; CHECK-NEXT: mulss {{.*}}(%rip), %xmm0
141 %y = fadd float %x, %x
142 %z = fadd float %x, %y
146 define <4 x float> @fadd_x_fadd_x_x_4f32(<4 x float> %x) #0 {
147 ; CHECK-LABEL: fadd_x_fadd_x_x_4f32:
149 ; CHECK-NEXT: mulps {{.*}}(%rip), %xmm0
151 %y = fadd <4 x float> %x, %x
152 %z = fadd <4 x float> %x, %y
156 define float @fadd_fadd_x_x_x_f32(float %x) #0 {
157 ; CHECK-LABEL: fadd_fadd_x_x_x_f32:
159 ; CHECK-NEXT: mulss {{.*}}(%rip), %xmm0
161 %y = fadd float %x, %x
162 %z = fadd float %y, %x
166 define <4 x float> @fadd_fadd_x_x_x_4f32(<4 x float> %x) #0 {
167 ; CHECK-LABEL: fadd_fadd_x_x_x_4f32:
169 ; CHECK-NEXT: mulps {{.*}}(%rip), %xmm0
171 %y = fadd <4 x float> %x, %x
172 %z = fadd <4 x float> %y, %x
176 define float @fadd_fadd_x_x_fadd_x_x_f32(float %x) #0 {
177 ; CHECK-LABEL: fadd_fadd_x_x_fadd_x_x_f32:
179 ; CHECK-NEXT: mulss {{.*}}(%rip), %xmm0
181 %y = fadd float %x, %x
182 %z = fadd float %y, %y
186 define <4 x float> @fadd_fadd_x_x_fadd_x_x_4f32(<4 x float> %x) #0 {
187 ; CHECK-LABEL: fadd_fadd_x_x_fadd_x_x_4f32:
189 ; CHECK-NEXT: mulps {{.*}}(%rip), %xmm0
191 %y = fadd <4 x float> %x, %x
192 %z = fadd <4 x float> %y, %y
196 attributes #0 = { "less-precise-fpmad"="true" "no-infs-fp-math"="true" "no-nans-fp-math"="true" "unsafe-fp-math"="true" }