xref: /llvm-project/llvm/test/CodeGen/RISCV/float-zfa.ll (revision 261d4bbb3bb847b90b9734daefe13618dea91613)
1df56b55eSJun Sha (Joshua); NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2eae1e28cSAlex Bradbury; RUN: llc -mtriple=riscv32 -target-abi ilp32f -mattr=+zfa < %s \
3df56b55eSJun Sha (Joshua); RUN:     | FileCheck %s
4eae1e28cSAlex Bradbury; RUN: llc -mtriple=riscv64 -target-abi lp64f -mattr=+zfa < %s \
5df56b55eSJun Sha (Joshua); RUN:     | FileCheck %s
6df56b55eSJun Sha (Joshua)
7ada26414SJun Sha (Joshua)define float @loadfpimm1() {
8ada26414SJun Sha (Joshua); CHECK-LABEL: loadfpimm1:
9ada26414SJun Sha (Joshua); CHECK:       # %bb.0:
10c2bcb21cSCraig Topper; CHECK-NEXT:    fli.s fa0, 0.0625
11ada26414SJun Sha (Joshua); CHECK-NEXT:    ret
12ada26414SJun Sha (Joshua)  ret float 0.0625
13ada26414SJun Sha (Joshua)}
14ada26414SJun Sha (Joshua)
15ada26414SJun Sha (Joshua)define float @loadfpimm2() {
16ada26414SJun Sha (Joshua); CHECK-LABEL: loadfpimm2:
17ada26414SJun Sha (Joshua); CHECK:       # %bb.0:
18c2bcb21cSCraig Topper; CHECK-NEXT:    fli.s fa0, 0.75
19ada26414SJun Sha (Joshua); CHECK-NEXT:    ret
20ada26414SJun Sha (Joshua)  ret float 0.75
21ada26414SJun Sha (Joshua)}
22ada26414SJun Sha (Joshua)
23ada26414SJun Sha (Joshua)define float @loadfpimm3() {
24ada26414SJun Sha (Joshua); CHECK-LABEL: loadfpimm3:
25ada26414SJun Sha (Joshua); CHECK:       # %bb.0:
26c2bcb21cSCraig Topper; CHECK-NEXT:    fli.s fa0, 1.25
27ada26414SJun Sha (Joshua); CHECK-NEXT:    ret
28ada26414SJun Sha (Joshua)  ret float 1.25
29ada26414SJun Sha (Joshua)}
30ada26414SJun Sha (Joshua)
31ada26414SJun Sha (Joshua)define float @loadfpimm4() {
32ada26414SJun Sha (Joshua); CHECK-LABEL: loadfpimm4:
33ada26414SJun Sha (Joshua); CHECK:       # %bb.0:
34c2bcb21cSCraig Topper; CHECK-NEXT:    fli.s fa0, 3.0
35ada26414SJun Sha (Joshua); CHECK-NEXT:    ret
36ada26414SJun Sha (Joshua)  ret float 3.0
37ada26414SJun Sha (Joshua)}
38ada26414SJun Sha (Joshua)
39ada26414SJun Sha (Joshua)define float @loadfpimm5() {
40ada26414SJun Sha (Joshua); CHECK-LABEL: loadfpimm5:
41ada26414SJun Sha (Joshua); CHECK:       # %bb.0:
42c2bcb21cSCraig Topper; CHECK-NEXT:    fli.s fa0, 256.0
43ada26414SJun Sha (Joshua); CHECK-NEXT:    ret
44ada26414SJun Sha (Joshua)  ret float 256.0
45ada26414SJun Sha (Joshua)}
46ada26414SJun Sha (Joshua)
47ada26414SJun Sha (Joshua)define float @loadfpimm6() {
48ada26414SJun Sha (Joshua); CHECK-LABEL: loadfpimm6:
49ada26414SJun Sha (Joshua); CHECK:       # %bb.0:
50ada26414SJun Sha (Joshua); CHECK-NEXT:    fli.s fa0, inf
51ada26414SJun Sha (Joshua); CHECK-NEXT:    ret
52ada26414SJun Sha (Joshua)  ret float 0x7FF0000000000000
53ada26414SJun Sha (Joshua)}
54ada26414SJun Sha (Joshua)
55ada26414SJun Sha (Joshua)define float @loadfpimm7() {
56ada26414SJun Sha (Joshua); CHECK-LABEL: loadfpimm7:
57ada26414SJun Sha (Joshua); CHECK:       # %bb.0:
58ada26414SJun Sha (Joshua); CHECK-NEXT:    fli.s fa0, nan
59ada26414SJun Sha (Joshua); CHECK-NEXT:    ret
60ada26414SJun Sha (Joshua)  ret float 0x7FF8000000000000
61ada26414SJun Sha (Joshua)}
62ada26414SJun Sha (Joshua)
63ada26414SJun Sha (Joshua)define float @loadfpimm8() {
64ada26414SJun Sha (Joshua); CHECK-LABEL: loadfpimm8:
65ada26414SJun Sha (Joshua); CHECK:       # %bb.0:
66ada26414SJun Sha (Joshua); CHECK-NEXT:    fli.s fa0, min
67ada26414SJun Sha (Joshua); CHECK-NEXT:    ret
68ada26414SJun Sha (Joshua)  ret float 0x3810000000000000
69ada26414SJun Sha (Joshua)}
70ada26414SJun Sha (Joshua)
71ada26414SJun Sha (Joshua)define float @loadfpimm9() {
72ada26414SJun Sha (Joshua); CHECK-LABEL: loadfpimm9:
73ada26414SJun Sha (Joshua); CHECK:       # %bb.0:
74ada26414SJun Sha (Joshua); CHECK-NEXT:    lui a0, 276464
75ada26414SJun Sha (Joshua); CHECK-NEXT:    fmv.w.x fa0, a0
76ada26414SJun Sha (Joshua); CHECK-NEXT:    ret
77ada26414SJun Sha (Joshua)  ret float 255.0
78ada26414SJun Sha (Joshua)}
79ada26414SJun Sha (Joshua)
8073516b35SCraig Topper; This is the f16 minimum value. Make sure we don't use fli.s.
81f2c1b1a7SCraig Topperdefine float @loadfpimm10() {
82f2c1b1a7SCraig Topper; CHECK-LABEL: loadfpimm10:
83f2c1b1a7SCraig Topper; CHECK:       # %bb.0:
8473516b35SCraig Topper; CHECK-NEXT:    lui a0, 231424
8573516b35SCraig Topper; CHECK-NEXT:    fmv.w.x fa0, a0
86f2c1b1a7SCraig Topper; CHECK-NEXT:    ret
87f2c1b1a7SCraig Topper  ret float 0.00006103515625
88f2c1b1a7SCraig Topper}
89f2c1b1a7SCraig Topper
90451255b2SAlex Bradburydefine float @loadfpimm11() {
91451255b2SAlex Bradbury; CHECK-LABEL: loadfpimm11:
92451255b2SAlex Bradbury; CHECK:       # %bb.0:
93451255b2SAlex Bradbury; CHECK-NEXT:    fli.s fa0, -1.0
94451255b2SAlex Bradbury; CHECK-NEXT:    ret
95451255b2SAlex Bradbury  ret float -1.0
96451255b2SAlex Bradbury}
97451255b2SAlex Bradbury
9887f67175SMin-Yih Hsu; Ensure fli isn't directly used for negated versions of numbers in the fli
99451255b2SAlex Bradbury; table.
100451255b2SAlex Bradburydefine float @loadfpimm12() {
101451255b2SAlex Bradbury; CHECK-LABEL: loadfpimm12:
102451255b2SAlex Bradbury; CHECK:       # %bb.0:
10387f67175SMin-Yih Hsu; CHECK-NEXT:    fli.s fa5, 2.0
10487f67175SMin-Yih Hsu; CHECK-NEXT:    fneg.s fa0, fa5
105451255b2SAlex Bradbury; CHECK-NEXT:    ret
106451255b2SAlex Bradbury  ret float -2.0
107451255b2SAlex Bradbury}
108451255b2SAlex Bradbury
10987f67175SMin-Yih Hsu; Ensure fli isn't directly used for negative min normal value.
110be0cbe91SCraig Topperdefine float @loadfpimm13() {
111be0cbe91SCraig Topper; CHECK-LABEL: loadfpimm13:
112be0cbe91SCraig Topper; CHECK:       # %bb.0:
11387f67175SMin-Yih Hsu; CHECK-NEXT:    fli.s fa5, min
11487f67175SMin-Yih Hsu; CHECK-NEXT:    fneg.s fa0, fa5
115be0cbe91SCraig Topper; CHECK-NEXT:    ret
116be0cbe91SCraig Topper  ret float 0xb810000000000000
117be0cbe91SCraig Topper}
118be0cbe91SCraig Topper
119df56b55eSJun Sha (Joshua)declare float @llvm.minimum.f32(float, float)
120df56b55eSJun Sha (Joshua)
121df56b55eSJun Sha (Joshua)define float @fminm_s(float %a, float %b) nounwind {
122df56b55eSJun Sha (Joshua); CHECK-LABEL: fminm_s:
123df56b55eSJun Sha (Joshua); CHECK:       # %bb.0:
124df56b55eSJun Sha (Joshua); CHECK-NEXT:    fminm.s fa0, fa0, fa1
125df56b55eSJun Sha (Joshua); CHECK-NEXT:    ret
126df56b55eSJun Sha (Joshua)  %1 = call float @llvm.minimum.f32(float %a, float %b)
127df56b55eSJun Sha (Joshua)  ret float %1
128df56b55eSJun Sha (Joshua)}
129df56b55eSJun Sha (Joshua)
130df56b55eSJun Sha (Joshua)declare float @llvm.maximum.f32(float, float)
131df56b55eSJun Sha (Joshua)
132df56b55eSJun Sha (Joshua)define float @fmaxm_s(float %a, float %b) nounwind {
133df56b55eSJun Sha (Joshua); CHECK-LABEL: fmaxm_s:
134df56b55eSJun Sha (Joshua); CHECK:       # %bb.0:
135df56b55eSJun Sha (Joshua); CHECK-NEXT:    fmaxm.s fa0, fa0, fa1
136df56b55eSJun Sha (Joshua); CHECK-NEXT:    ret
137df56b55eSJun Sha (Joshua)  %1 = call float @llvm.maximum.f32(float %a, float %b)
138df56b55eSJun Sha (Joshua)  ret float %1
139df56b55eSJun Sha (Joshua)}
140df56b55eSJun Sha (Joshua)
141df56b55eSJun Sha (Joshua)
142df56b55eSJun Sha (Joshua)define float @fround_s_1(float %a) nounwind {
143df56b55eSJun Sha (Joshua); CHECK-LABEL: fround_s_1:
144df56b55eSJun Sha (Joshua); CHECK:       # %bb.0:
145df56b55eSJun Sha (Joshua); CHECK-NEXT:    fround.s fa0, fa0, rmm
146df56b55eSJun Sha (Joshua); CHECK-NEXT:    ret
147df56b55eSJun Sha (Joshua)  %call = tail call float @roundf(float %a) nounwind readnone
148df56b55eSJun Sha (Joshua)  ret float %call
149df56b55eSJun Sha (Joshua)}
150df56b55eSJun Sha (Joshua)
151df56b55eSJun Sha (Joshua)declare float @roundf(float) nounwind readnone
152df56b55eSJun Sha (Joshua)
153df56b55eSJun Sha (Joshua)
154df56b55eSJun Sha (Joshua)define float @fround_s_2(float %a) nounwind {
155df56b55eSJun Sha (Joshua); CHECK-LABEL: fround_s_2:
156df56b55eSJun Sha (Joshua); CHECK:       # %bb.0:
1574bbbae61SJun Sha (Joshua); CHECK-NEXT:    fround.s fa0, fa0, rdn
158df56b55eSJun Sha (Joshua); CHECK-NEXT:    ret
159df56b55eSJun Sha (Joshua)  %call = tail call float @floorf(float %a) nounwind readnone
160df56b55eSJun Sha (Joshua)  ret float %call
161df56b55eSJun Sha (Joshua)}
162df56b55eSJun Sha (Joshua)
163df56b55eSJun Sha (Joshua)declare float @floorf(float) nounwind readnone
164df56b55eSJun Sha (Joshua)
165df56b55eSJun Sha (Joshua)
166df56b55eSJun Sha (Joshua)define float @fround_s_3(float %a) nounwind {
167df56b55eSJun Sha (Joshua); CHECK-LABEL: fround_s_3:
168df56b55eSJun Sha (Joshua); CHECK:       # %bb.0:
1694bbbae61SJun Sha (Joshua); CHECK-NEXT:    fround.s fa0, fa0, rup
170df56b55eSJun Sha (Joshua); CHECK-NEXT:    ret
171df56b55eSJun Sha (Joshua)  %call = tail call float @ceilf(float %a) nounwind readnone
172df56b55eSJun Sha (Joshua)  ret float %call
173df56b55eSJun Sha (Joshua)}
174df56b55eSJun Sha (Joshua)
175df56b55eSJun Sha (Joshua)declare float @ceilf(float) nounwind readnone
176df56b55eSJun Sha (Joshua)
177df56b55eSJun Sha (Joshua)
178df56b55eSJun Sha (Joshua)define float @fround_s_4(float %a) nounwind {
179df56b55eSJun Sha (Joshua); CHECK-LABEL: fround_s_4:
180df56b55eSJun Sha (Joshua); CHECK:       # %bb.0:
181df56b55eSJun Sha (Joshua); CHECK-NEXT:    fround.s fa0, fa0, rtz
182df56b55eSJun Sha (Joshua); CHECK-NEXT:    ret
183df56b55eSJun Sha (Joshua)  %call = tail call float @truncf(float %a) nounwind readnone
184df56b55eSJun Sha (Joshua)  ret float %call
185df56b55eSJun Sha (Joshua)}
186df56b55eSJun Sha (Joshua)
187df56b55eSJun Sha (Joshua)declare float @truncf(float) nounwind readnone
188df56b55eSJun Sha (Joshua)
189df56b55eSJun Sha (Joshua)
190df56b55eSJun Sha (Joshua)define float @fround_s_5(float %a) nounwind {
191df56b55eSJun Sha (Joshua); CHECK-LABEL: fround_s_5:
192df56b55eSJun Sha (Joshua); CHECK:       # %bb.0:
193df56b55eSJun Sha (Joshua); CHECK-NEXT:    fround.s fa0, fa0
194df56b55eSJun Sha (Joshua); CHECK-NEXT:    ret
195df56b55eSJun Sha (Joshua)  %call = tail call float @nearbyintf(float %a) nounwind readnone
196df56b55eSJun Sha (Joshua)  ret float %call
197df56b55eSJun Sha (Joshua)}
198df56b55eSJun Sha (Joshua)
199df56b55eSJun Sha (Joshua)declare float @nearbyintf(float) nounwind readnone
200df56b55eSJun Sha (Joshua)
201*261d4bbbSLuke Quinndefine float @fround_s_6(float %a) nounwind {
202*261d4bbbSLuke Quinn; CHECK-LABEL: fround_s_6:
203*261d4bbbSLuke Quinn; CHECK:       # %bb.0:
204*261d4bbbSLuke Quinn; CHECK-NEXT:    fround.s fa0, fa0, rne
205*261d4bbbSLuke Quinn; CHECK-NEXT:    ret
206*261d4bbbSLuke Quinn  %call = tail call float @llvm.roundeven.f32(float %a) nounwind readnone
207*261d4bbbSLuke Quinn  ret float %call
208*261d4bbbSLuke Quinn}
209*261d4bbbSLuke Quinn
210*261d4bbbSLuke Quinndeclare float @llvm.roundeven.f32(float) nounwind readnone
211*261d4bbbSLuke Quinn
212df56b55eSJun Sha (Joshua)
213df56b55eSJun Sha (Joshua)define float @froundnx_s(float %a) nounwind {
214df56b55eSJun Sha (Joshua); CHECK-LABEL: froundnx_s:
215df56b55eSJun Sha (Joshua); CHECK:       # %bb.0:
216df56b55eSJun Sha (Joshua); CHECK-NEXT:    froundnx.s fa0, fa0
217df56b55eSJun Sha (Joshua); CHECK-NEXT:    ret
218df56b55eSJun Sha (Joshua)  %call = tail call float @rintf(float %a) nounwind readnone
219df56b55eSJun Sha (Joshua)  ret float %call
220df56b55eSJun Sha (Joshua)}
221df56b55eSJun Sha (Joshua)
222df56b55eSJun Sha (Joshua)declare float @rintf(float) nounwind readnone
223df56b55eSJun Sha (Joshua)
224df56b55eSJun Sha (Joshua)declare i1 @llvm.experimental.constrained.fcmp.f32(float, float, metadata, metadata)
225df56b55eSJun Sha (Joshua)
226df56b55eSJun Sha (Joshua)define i32 @fcmp_olt_q(float %a, float %b) nounwind strictfp {
227df56b55eSJun Sha (Joshua); CHECK-LABEL: fcmp_olt_q:
228df56b55eSJun Sha (Joshua); CHECK:       # %bb.0:
229df56b55eSJun Sha (Joshua); CHECK-NEXT:    fltq.s a0, fa0, fa1
230df56b55eSJun Sha (Joshua); CHECK-NEXT:    ret
231df56b55eSJun Sha (Joshua)  %1 = call i1 @llvm.experimental.constrained.fcmp.f32(float %a, float %b, metadata !"olt", metadata !"fpexcept.strict") strictfp
232df56b55eSJun Sha (Joshua)  %2 = zext i1 %1 to i32
233df56b55eSJun Sha (Joshua)  ret i32 %2
234df56b55eSJun Sha (Joshua)}
235df56b55eSJun Sha (Joshua)
236df56b55eSJun Sha (Joshua)define i32 @fcmp_ole_q(float %a, float %b) nounwind strictfp {
237df56b55eSJun Sha (Joshua); CHECK-LABEL: fcmp_ole_q:
238df56b55eSJun Sha (Joshua); CHECK:       # %bb.0:
239df56b55eSJun Sha (Joshua); CHECK-NEXT:    fleq.s a0, fa0, fa1
240df56b55eSJun Sha (Joshua); CHECK-NEXT:    ret
241df56b55eSJun Sha (Joshua)  %1 = call i1 @llvm.experimental.constrained.fcmp.f32(float %a, float %b, metadata !"ole", metadata !"fpexcept.strict") strictfp
242df56b55eSJun Sha (Joshua)  %2 = zext i1 %1 to i32
243df56b55eSJun Sha (Joshua)  ret i32 %2
244df56b55eSJun Sha (Joshua)}
2453d0a5bf7SCraig Topper
2463d0a5bf7SCraig Topperdefine i32 @fcmp_one_q(float %a, float %b) nounwind strictfp {
2473d0a5bf7SCraig Topper; CHECK-LABEL: fcmp_one_q:
2483d0a5bf7SCraig Topper; CHECK:       # %bb.0:
2493d0a5bf7SCraig Topper; CHECK-NEXT:    fltq.s a0, fa0, fa1
2503d0a5bf7SCraig Topper; CHECK-NEXT:    fltq.s a1, fa1, fa0
2513d0a5bf7SCraig Topper; CHECK-NEXT:    or a0, a1, a0
2523d0a5bf7SCraig Topper; CHECK-NEXT:    ret
2533d0a5bf7SCraig Topper  %1 = call i1 @llvm.experimental.constrained.fcmp.f32(float %a, float %b, metadata !"one", metadata !"fpexcept.strict") strictfp
2543d0a5bf7SCraig Topper  %2 = zext i1 %1 to i32
2553d0a5bf7SCraig Topper  ret i32 %2
2563d0a5bf7SCraig Topper}
2573d0a5bf7SCraig Topper
2583d0a5bf7SCraig Topperdefine i32 @fcmp_ueq_q(float %a, float %b) nounwind strictfp {
2593d0a5bf7SCraig Topper; CHECK-LABEL: fcmp_ueq_q:
2603d0a5bf7SCraig Topper; CHECK:       # %bb.0:
2613d0a5bf7SCraig Topper; CHECK-NEXT:    fltq.s a0, fa0, fa1
2623d0a5bf7SCraig Topper; CHECK-NEXT:    fltq.s a1, fa1, fa0
2633d0a5bf7SCraig Topper; CHECK-NEXT:    or a0, a1, a0
2643d0a5bf7SCraig Topper; CHECK-NEXT:    xori a0, a0, 1
2653d0a5bf7SCraig Topper; CHECK-NEXT:    ret
2663d0a5bf7SCraig Topper  %1 = call i1 @llvm.experimental.constrained.fcmp.f32(float %a, float %b, metadata !"ueq", metadata !"fpexcept.strict") strictfp
2673d0a5bf7SCraig Topper  %2 = zext i1 %1 to i32
2683d0a5bf7SCraig Topper  ret i32 %2
2693d0a5bf7SCraig Topper}
270101cf0b8SCraig Topper
271101cf0b8SCraig Topperdeclare void @foo(float, float)
272101cf0b8SCraig Topper
273101cf0b8SCraig Topper; Make sure we use two fli instructions instead of copying.
274101cf0b8SCraig Topperdefine void @fli_remat() {
275101cf0b8SCraig Topper; CHECK-LABEL: fli_remat:
276101cf0b8SCraig Topper; CHECK:       # %bb.0:
277101cf0b8SCraig Topper; CHECK-NEXT:    fli.s fa0, 1.0
278101cf0b8SCraig Topper; CHECK-NEXT:    fli.s fa1, 1.0
279eabaee0cSFangrui Song; CHECK-NEXT:    tail foo
280101cf0b8SCraig Topper  tail call void @foo(float 1.000000e+00, float 1.000000e+00)
281101cf0b8SCraig Topper  ret void
282101cf0b8SCraig Topper}
283de6d7a6cSCraig Topper
284de6d7a6cSCraig Topperdefine float @fadd_neg_0p5(float %x) {
285de6d7a6cSCraig Topper; CHECK-LABEL: fadd_neg_0p5:
286de6d7a6cSCraig Topper; CHECK:       # %bb.0:
287de6d7a6cSCraig Topper; CHECK-NEXT:    fli.s fa5, 0.5
288de6d7a6cSCraig Topper; CHECK-NEXT:    fsub.s fa0, fa0, fa5
289de6d7a6cSCraig Topper; CHECK-NEXT:    ret
290de6d7a6cSCraig Topper  %a = fadd float %x, -0.5
291de6d7a6cSCraig Topper  ret float %a
292de6d7a6cSCraig Topper}
293de6d7a6cSCraig Topper
294de6d7a6cSCraig Topperdefine float @fma_neg_addend(float %x, float %y) nounwind {
295de6d7a6cSCraig Topper; CHECK-LABEL: fma_neg_addend:
296de6d7a6cSCraig Topper; CHECK:       # %bb.0:
297de6d7a6cSCraig Topper; CHECK-NEXT:    fli.s fa5, 0.5
298de6d7a6cSCraig Topper; CHECK-NEXT:    fmsub.s fa0, fa0, fa1, fa5
299de6d7a6cSCraig Topper; CHECK-NEXT:    ret
300de6d7a6cSCraig Topper  %a = call float @llvm.fma.f32(float %x, float %y, float -0.5)
301de6d7a6cSCraig Topper  ret float %a
302de6d7a6cSCraig Topper}
303de6d7a6cSCraig Topper
304de6d7a6cSCraig Topperdefine float @fma_neg_multiplicand(float %x, float %y) nounwind {
305de6d7a6cSCraig Topper; CHECK-LABEL: fma_neg_multiplicand:
306de6d7a6cSCraig Topper; CHECK:       # %bb.0:
307de6d7a6cSCraig Topper; CHECK-NEXT:    fli.s fa5, 0.125
308de6d7a6cSCraig Topper; CHECK-NEXT:    fnmsub.s fa0, fa5, fa0, fa1
309de6d7a6cSCraig Topper; CHECK-NEXT:    ret
310de6d7a6cSCraig Topper  %a = call float @llvm.fma.f32(float %x, float -0.125, float %y)
311de6d7a6cSCraig Topper  ret float %a
312de6d7a6cSCraig Topper}
313de6d7a6cSCraig Topper
314de6d7a6cSCraig Topperdefine float @fma_neg_addend_multiplicand(float %x) nounwind {
315de6d7a6cSCraig Topper; CHECK-LABEL: fma_neg_addend_multiplicand:
316de6d7a6cSCraig Topper; CHECK:       # %bb.0:
317de6d7a6cSCraig Topper; CHECK-NEXT:    fli.s fa5, 0.25
318de6d7a6cSCraig Topper; CHECK-NEXT:    fli.s fa4, 0.5
319de6d7a6cSCraig Topper; CHECK-NEXT:    fnmadd.s fa0, fa4, fa0, fa5
320de6d7a6cSCraig Topper; CHECK-NEXT:    ret
321de6d7a6cSCraig Topper  %a = call float @llvm.fma.f32(float %x, float -0.5, float -0.25)
322de6d7a6cSCraig Topper  ret float %a
323de6d7a6cSCraig Topper}
324079f31c1SCraig Topper
325079f31c1SCraig Topperdefine float @select_loadfpimm(float %x) nounwind {
326079f31c1SCraig Topper; CHECK-LABEL: select_loadfpimm:
327079f31c1SCraig Topper; CHECK:       # %bb.0: # %entry
328079f31c1SCraig Topper; CHECK-NEXT:    fmv.w.x fa5, zero
329079f31c1SCraig Topper; CHECK-NEXT:    fle.s a0, fa5, fa0
330079f31c1SCraig Topper; CHECK-NEXT:    fli.s fa0, 0.5
331*261d4bbbSLuke Quinn; CHECK-NEXT:    bnez a0, .LBB31_2
332079f31c1SCraig Topper; CHECK-NEXT:  # %bb.1:
333079f31c1SCraig Topper; CHECK-NEXT:    fneg.s fa0, fa0
334*261d4bbbSLuke Quinn; CHECK-NEXT:  .LBB31_2: # %entry
335079f31c1SCraig Topper; CHECK-NEXT:    ret
336079f31c1SCraig Topperentry:
337079f31c1SCraig Topper  %cmp = fcmp ult float %x, 0.000000e+00
338079f31c1SCraig Topper  %sel = select i1 %cmp, float -5.000000e-01, float 5.000000e-01
339079f31c1SCraig Topper  ret float %sel
340079f31c1SCraig Topper}
341