xref: /llvm-project/llvm/test/CodeGen/CSKY/fpu/base-d.ll (revision 14e0a67a2d43b6e44032e8df788f43822da6fd71)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2
3; RUN: llc -verify-machineinstrs -csky-no-aliases < %s -mtriple=csky -float-abi=hard -mattr=+hard-float -mattr=+2e3 -mattr=+fpuv2_sf -mattr=+fpuv2_df | FileCheck %s --check-prefix=CHECK-DF
4; RUN: llc -verify-machineinstrs -csky-no-aliases < %s -mtriple=csky -float-abi=hard -mattr=+hard-float -mattr=+2e3 -mattr=+fpuv3_sf -mattr=+fpuv3_df | FileCheck %s --check-prefix=CHECK-DF2
5
6define double @FADD_DOUBLE(double %x, double %y) {
7; CHECK-DF-LABEL: FADD_DOUBLE:
8; CHECK-DF:       # %bb.0: # %entry
9; CHECK-DF-NEXT:    faddd vr0, vr1, vr0
10; CHECK-DF-NEXT:    rts16
11;
12; CHECK-DF2-LABEL: FADD_DOUBLE:
13; CHECK-DF2:       # %bb.0: # %entry
14; CHECK-DF2-NEXT:    fadd.64 vr0, vr1, vr0
15; CHECK-DF2-NEXT:    rts16
16entry:
17  %fadd = fadd  double %y, %x
18  ret double %fadd
19}
20
21define double @FADD_DOUBLE_I(double %x) {
22; CHECK-DF-LABEL: FADD_DOUBLE_I:
23; CHECK-DF:       # %bb.0: # %entry
24; CHECK-DF-NEXT:    grs32 a0, .LCPI1_0
25; CHECK-DF-NEXT:    fldd vr1, (a0, 0)
26; CHECK-DF-NEXT:    faddd vr0, vr0, vr1
27; CHECK-DF-NEXT:    rts16
28; CHECK-DF-NEXT:    .p2align 1
29; CHECK-DF-NEXT:  # %bb.1:
30; CHECK-DF-NEXT:    .p2align 2, 0x0
31; CHECK-DF-NEXT:  .LCPI1_0:
32; CHECK-DF-NEXT:    .quad 0xbff0000000000000 # double -1
33;
34; CHECK-DF2-LABEL: FADD_DOUBLE_I:
35; CHECK-DF2:       # %bb.0: # %entry
36; CHECK-DF2-NEXT:    flrw.64 vr1, [.LCPI1_0]
37; CHECK-DF2-NEXT:    fadd.64 vr0, vr0, vr1
38; CHECK-DF2-NEXT:    rts16
39; CHECK-DF2-NEXT:    .p2align 1
40; CHECK-DF2-NEXT:  # %bb.1:
41; CHECK-DF2-NEXT:    .p2align 2, 0x0
42; CHECK-DF2-NEXT:  .LCPI1_0:
43; CHECK-DF2-NEXT:    .quad 0xbff0000000000000 # double -1
44entry:
45  %fadd = fadd  double %x, -1.0
46  ret double %fadd
47}
48
49define double @FSUB_DOUBLE(double %x, double %y) {
50; CHECK-DF-LABEL: FSUB_DOUBLE:
51; CHECK-DF:       # %bb.0: # %entry
52; CHECK-DF-NEXT:    fsubd vr0, vr1, vr0
53; CHECK-DF-NEXT:    rts16
54;
55; CHECK-DF2-LABEL: FSUB_DOUBLE:
56; CHECK-DF2:       # %bb.0: # %entry
57; CHECK-DF2-NEXT:    fsub.64 vr0, vr1, vr0
58; CHECK-DF2-NEXT:    rts16
59
60entry:
61  %fsub = fsub  double %y, %x
62  ret double %fsub
63}
64
65define double @FSUB_DOUBLE_I(double %x) {
66;
67; CHECK-DF-LABEL: FSUB_DOUBLE_I:
68; CHECK-DF:       # %bb.0: # %entry
69; CHECK-DF-NEXT:    grs32 a0, .LCPI3_0
70; CHECK-DF-NEXT:    fldd vr1, (a0, 0)
71; CHECK-DF-NEXT:    faddd vr0, vr0, vr1
72; CHECK-DF-NEXT:    rts16
73; CHECK-DF-NEXT:    .p2align 1
74; CHECK-DF-NEXT:  # %bb.1:
75; CHECK-DF-NEXT:    .p2align 2, 0x0
76; CHECK-DF-NEXT:  .LCPI3_0:
77; CHECK-DF-NEXT:    .quad 0x3ff0000000000000 # double 1
78;
79; CHECK-DF2-LABEL: FSUB_DOUBLE_I:
80; CHECK-DF2:       # %bb.0: # %entry
81; CHECK-DF2-NEXT:    flrw.64 vr1, [.LCPI3_0]
82; CHECK-DF2-NEXT:    fadd.64 vr0, vr0, vr1
83; CHECK-DF2-NEXT:    rts16
84; CHECK-DF2-NEXT:    .p2align 1
85; CHECK-DF2-NEXT:  # %bb.1:
86; CHECK-DF2-NEXT:    .p2align 2, 0x0
87; CHECK-DF2-NEXT:  .LCPI3_0:
88; CHECK-DF2-NEXT:    .quad 0x3ff0000000000000 # double 1
89
90entry:
91  %fsub = fsub  double %x, -1.0
92  ret double %fsub
93}
94
95define double @FMUL_DOUBLE(double %x, double %y) {
96;
97; CHECK-DF-LABEL: FMUL_DOUBLE:
98; CHECK-DF:       # %bb.0: # %entry
99; CHECK-DF-NEXT:    fmuld vr0, vr1, vr0
100; CHECK-DF-NEXT:    rts16
101;
102; CHECK-DF2-LABEL: FMUL_DOUBLE:
103; CHECK-DF2:       # %bb.0: # %entry
104; CHECK-DF2-NEXT:    fmul.64 vr0, vr1, vr0
105; CHECK-DF2-NEXT:    rts16
106entry:
107  %fmul = fmul  double %y, %x
108  ret double %fmul
109}
110
111define double @FNMUL_DOUBLE_a(double %x, double %y) {
112;
113; CHECK-DF-LABEL: FNMUL_DOUBLE_a:
114; CHECK-DF:       # %bb.0: # %entry
115; CHECK-DF-NEXT:    fnmuld vr0, vr1, vr0
116; CHECK-DF-NEXT:    rts16
117;
118; CHECK-DF2-LABEL: FNMUL_DOUBLE_a:
119; CHECK-DF2:       # %bb.0: # %entry
120; CHECK-DF2-NEXT:    fnmul.64 vr0, vr1, vr0
121; CHECK-DF2-NEXT:    rts16
122entry:
123  %z = fneg double %y
124  %fnmul = fmul double %z, %x
125  ret double %fnmul
126}
127
128define double @FNMUL_DOUBLE_b(double %x, double %y) {
129; CHECK-DF-LABEL: FNMUL_DOUBLE_b:
130; CHECK-DF:       # %bb.0: # %entry
131; CHECK-DF-NEXT:    fnmuld vr0, vr0, vr1
132; CHECK-DF-NEXT:    rts16
133;
134; CHECK-DF2-LABEL: FNMUL_DOUBLE_b:
135; CHECK-DF2:       # %bb.0: # %entry
136; CHECK-DF2-NEXT:    fnmul.64 vr0, vr0, vr1
137; CHECK-DF2-NEXT:    rts16
138entry:
139  %z = fneg double %x
140  %fnmul = fmul double %y, %z
141  ret double %fnmul
142}
143
144define double @FMUL_DOUBLE_I(double %x) {
145;
146; CHECK-DF-LABEL: FMUL_DOUBLE_I:
147; CHECK-DF:       # %bb.0: # %entry
148; CHECK-DF-NEXT:    grs32 a0, .LCPI7_0
149; CHECK-DF-NEXT:    fldd vr1, (a0, 0)
150; CHECK-DF-NEXT:    fmuld vr0, vr0, vr1
151; CHECK-DF-NEXT:    rts16
152; CHECK-DF-NEXT:    .p2align 1
153; CHECK-DF-NEXT:  # %bb.1:
154; CHECK-DF-NEXT:    .p2align 2, 0x0
155; CHECK-DF-NEXT:  .LCPI7_0:
156; CHECK-DF-NEXT:    .quad 0xc01c000000000000 # double -7
157;
158; CHECK-DF2-LABEL: FMUL_DOUBLE_I:
159; CHECK-DF2:       # %bb.0: # %entry
160; CHECK-DF2-NEXT:    flrw.64 vr1, [.LCPI7_0]
161; CHECK-DF2-NEXT:    fmul.64 vr0, vr0, vr1
162; CHECK-DF2-NEXT:    rts16
163; CHECK-DF2-NEXT:    .p2align 1
164; CHECK-DF2-NEXT:  # %bb.1:
165; CHECK-DF2-NEXT:    .p2align 2, 0x0
166; CHECK-DF2-NEXT:  .LCPI7_0:
167; CHECK-DF2-NEXT:    .quad 0xc01c000000000000 # double -7
168entry:
169  %fmul = fmul  double %x, -7.0
170  ret double %fmul
171}
172
173define double @FDIV_DOUBLE(double %x, double %y) {
174;
175;
176; CHECK-DF-LABEL: FDIV_DOUBLE:
177; CHECK-DF:       # %bb.0: # %entry
178; CHECK-DF-NEXT:    fdivd vr0, vr1, vr0
179; CHECK-DF-NEXT:    rts16
180;
181; CHECK-DF2-LABEL: FDIV_DOUBLE:
182; CHECK-DF2:       # %bb.0: # %entry
183; CHECK-DF2-NEXT:    fdiv.64 vr0, vr1, vr0
184; CHECK-DF2-NEXT:    rts16
185
186entry:
187  %fdiv = fdiv  double %y, %x
188  ret double %fdiv
189}
190
191define double @FDIV_DOUBLE_I(double %x) {
192;
193; CHECK-DF-LABEL: FDIV_DOUBLE_I:
194; CHECK-DF:       # %bb.0: # %entry
195; CHECK-DF-NEXT:    grs32 a0, .LCPI9_0
196; CHECK-DF-NEXT:    fldd vr1, (a0, 0)
197; CHECK-DF-NEXT:    fdivd vr0, vr0, vr1
198; CHECK-DF-NEXT:    rts16
199; CHECK-DF-NEXT:    .p2align 1
200; CHECK-DF-NEXT:  # %bb.1:
201; CHECK-DF-NEXT:    .p2align 2, 0x0
202; CHECK-DF-NEXT:  .LCPI9_0:
203; CHECK-DF-NEXT:    .quad 0xc01c000000000000 # double -7
204;
205; CHECK-DF2-LABEL: FDIV_DOUBLE_I:
206; CHECK-DF2:       # %bb.0: # %entry
207; CHECK-DF2-NEXT:    flrw.64 vr1, [.LCPI9_0]
208; CHECK-DF2-NEXT:    fdiv.64 vr0, vr0, vr1
209; CHECK-DF2-NEXT:    rts16
210; CHECK-DF2-NEXT:    .p2align 1
211; CHECK-DF2-NEXT:  # %bb.1:
212; CHECK-DF2-NEXT:    .p2align 2, 0x0
213; CHECK-DF2-NEXT:  .LCPI9_0:
214; CHECK-DF2-NEXT:    .quad 0xc01c000000000000 # double -7
215entry:
216  %fdiv = fdiv  double %x, -7.0
217  ret double %fdiv
218}
219
220define double @FNEG_DOUBLE(double %x) {
221;
222; CHECK-DF-LABEL: FNEG_DOUBLE:
223; CHECK-DF:       # %bb.0: # %entry
224; CHECK-DF-NEXT:    fnegd vr0, vr0
225; CHECK-DF-NEXT:    rts16
226;
227; CHECK-DF2-LABEL: FNEG_DOUBLE:
228; CHECK-DF2:       # %bb.0: # %entry
229; CHECK-DF2-NEXT:    fneg.64 vr0, vr0
230; CHECK-DF2-NEXT:    rts16
231entry:
232  %fneg = fneg  double  %x
233  ret double %fneg
234}
235
236; double --> float
237define float @fptruncR_double_0(double %x) {
238;
239; CHECK-DF-LABEL: fptruncR_double_0:
240; CHECK-DF:       # %bb.0: # %entry
241; CHECK-DF-NEXT:    fdtos vr0, vr0
242; CHECK-DF-NEXT:    rts16
243;
244; CHECK-DF2-LABEL: fptruncR_double_0:
245; CHECK-DF2:       # %bb.0: # %entry
246; CHECK-DF2-NEXT:    fdtos vr0, vr0
247; CHECK-DF2-NEXT:    rts16
248entry:
249  %fptrunc = fptrunc double %x to float
250  ret float %fptrunc
251}
252
253define double @fpextR_double_0(float %x) {
254;
255; CHECK-DF-LABEL: fpextR_double_0:
256; CHECK-DF:       # %bb.0: # %entry
257; CHECK-DF-NEXT:    fstod vr0, vr0
258; CHECK-DF-NEXT:    rts16
259;
260; CHECK-DF2-LABEL: fpextR_double_0:
261; CHECK-DF2:       # %bb.0: # %entry
262; CHECK-DF2-NEXT:    fstod vr0, vr0
263; CHECK-DF2-NEXT:    rts16
264entry:
265  %fpext = fpext float %x to double
266  ret double %fpext
267}
268