xref: /aosp_15_r20/external/llvm/test/CodeGen/X86/fp-fast.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 -mattr=avx -enable-unsafe-fp-math < %s | FileCheck %s
3*9880d681SAndroid Build Coastguard Worker
4*9880d681SAndroid Build Coastguard Workerdefine float @test1(float %a) {
5*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test1:
6*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
7*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vmulss {{.*}}(%rip), %xmm0, %xmm0
8*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
9*9880d681SAndroid Build Coastguard Worker  %t1 = fadd float %a, %a
10*9880d681SAndroid Build Coastguard Worker  %r = fadd float %t1, %t1
11*9880d681SAndroid Build Coastguard Worker  ret float %r
12*9880d681SAndroid Build Coastguard Worker}
13*9880d681SAndroid Build Coastguard Worker
14*9880d681SAndroid Build Coastguard Workerdefine float @test2(float %a) {
15*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test2:
16*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
17*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vmulss {{.*}}(%rip), %xmm0, %xmm0
18*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
19*9880d681SAndroid Build Coastguard Worker  %t1 = fmul float 4.0, %a
20*9880d681SAndroid Build Coastguard Worker  %t2 = fadd float %a, %a
21*9880d681SAndroid Build Coastguard Worker  %r = fadd float %t1, %t2
22*9880d681SAndroid Build Coastguard Worker  ret float %r
23*9880d681SAndroid Build Coastguard Worker}
24*9880d681SAndroid Build Coastguard Worker
25*9880d681SAndroid Build Coastguard Workerdefine float @test3(float %a) {
26*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test3:
27*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
28*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vmulss {{.*}}(%rip), %xmm0, %xmm0
29*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
30*9880d681SAndroid Build Coastguard Worker  %t1 = fmul float %a, 4.0
31*9880d681SAndroid Build Coastguard Worker  %t2 = fadd float %a, %a
32*9880d681SAndroid Build Coastguard Worker  %r = fadd float %t1, %t2
33*9880d681SAndroid Build Coastguard Worker  ret float %r
34*9880d681SAndroid Build Coastguard Worker}
35*9880d681SAndroid Build Coastguard Worker
36*9880d681SAndroid Build Coastguard Workerdefine float @test4(float %a) {
37*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test4:
38*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
39*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vmulss {{.*}}(%rip), %xmm0, %xmm0
40*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
41*9880d681SAndroid Build Coastguard Worker  %t1 = fadd float %a, %a
42*9880d681SAndroid Build Coastguard Worker  %t2 = fmul float 4.0, %a
43*9880d681SAndroid Build Coastguard Worker  %r = fadd float %t1, %t2
44*9880d681SAndroid Build Coastguard Worker  ret float %r
45*9880d681SAndroid Build Coastguard Worker}
46*9880d681SAndroid Build Coastguard Worker
47*9880d681SAndroid Build Coastguard Workerdefine float @test5(float %a) {
48*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test5:
49*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
50*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vmulss {{.*}}(%rip), %xmm0, %xmm0
51*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
52*9880d681SAndroid Build Coastguard Worker  %t1 = fadd float %a, %a
53*9880d681SAndroid Build Coastguard Worker  %t2 = fmul float %a, 4.0
54*9880d681SAndroid Build Coastguard Worker  %r = fadd float %t1, %t2
55*9880d681SAndroid Build Coastguard Worker  ret float %r
56*9880d681SAndroid Build Coastguard Worker}
57*9880d681SAndroid Build Coastguard Worker
58*9880d681SAndroid Build Coastguard Workerdefine float @test6(float %a) {
59*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test6:
60*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
61*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vxorps %xmm0, %xmm0, %xmm0
62*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
63*9880d681SAndroid Build Coastguard Worker  %t1 = fmul float 2.0, %a
64*9880d681SAndroid Build Coastguard Worker  %t2 = fadd float %a, %a
65*9880d681SAndroid Build Coastguard Worker  %r = fsub float %t1, %t2
66*9880d681SAndroid Build Coastguard Worker  ret float %r
67*9880d681SAndroid Build Coastguard Worker}
68*9880d681SAndroid Build Coastguard Worker
69*9880d681SAndroid Build Coastguard Workerdefine float @test7(float %a) {
70*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test7:
71*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
72*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vxorps %xmm0, %xmm0, %xmm0
73*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
74*9880d681SAndroid Build Coastguard Worker  %t1 = fmul float %a, 2.0
75*9880d681SAndroid Build Coastguard Worker  %t2 = fadd float %a, %a
76*9880d681SAndroid Build Coastguard Worker  %r = fsub float %t1, %t2
77*9880d681SAndroid Build Coastguard Worker  ret float %r
78*9880d681SAndroid Build Coastguard Worker}
79*9880d681SAndroid Build Coastguard Worker
80*9880d681SAndroid Build Coastguard Workerdefine float @test8(float %a) {
81*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test8:
82*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
83*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
84*9880d681SAndroid Build Coastguard Worker  %t1 = fmul float %a, 0.0
85*9880d681SAndroid Build Coastguard Worker  %t2 = fadd float %a, %t1
86*9880d681SAndroid Build Coastguard Worker  ret float %t2
87*9880d681SAndroid Build Coastguard Worker}
88*9880d681SAndroid Build Coastguard Worker
89*9880d681SAndroid Build Coastguard Workerdefine float @test9(float %a) {
90*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test9:
91*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
92*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
93*9880d681SAndroid Build Coastguard Worker  %t1 = fmul float 0.0, %a
94*9880d681SAndroid Build Coastguard Worker  %t2 = fadd float %t1, %a
95*9880d681SAndroid Build Coastguard Worker  ret float %t2
96*9880d681SAndroid Build Coastguard Worker}
97*9880d681SAndroid Build Coastguard Worker
98*9880d681SAndroid Build Coastguard Workerdefine float @test10(float %a) {
99*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test10:
100*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
101*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vxorps %xmm0, %xmm0, %xmm0
102*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
103*9880d681SAndroid Build Coastguard Worker  %t1 = fsub float -0.0, %a
104*9880d681SAndroid Build Coastguard Worker  %t2 = fadd float %a, %t1
105*9880d681SAndroid Build Coastguard Worker  ret float %t2
106*9880d681SAndroid Build Coastguard Worker}
107*9880d681SAndroid Build Coastguard Worker
108*9880d681SAndroid Build Coastguard Workerdefine float @test11(float %a) {
109*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test11:
110*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
111*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vxorps %xmm0, %xmm0, %xmm0
112*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
113*9880d681SAndroid Build Coastguard Worker  %t1 = fsub float -0.0, %a
114*9880d681SAndroid Build Coastguard Worker  %t2 = fadd float %a, %t1
115*9880d681SAndroid Build Coastguard Worker  ret float %t2
116*9880d681SAndroid Build Coastguard Worker}
117*9880d681SAndroid Build Coastguard Worker
118