xref: /llvm-project/llvm/test/CodeGen/RISCV/rv64-float-convert.ll (revision 73186546f0c0209c65c4b4ef1379a4832545b871)
1768b0b4eSCraig Topper; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2768b0b4eSCraig Topper; RUN: llc -mtriple=riscv64 -target-abi=lp64 -verify-machineinstrs < %s \
3768b0b4eSCraig Topper; RUN:   | FileCheck %s -check-prefixes=CHECK,RV64I
4768b0b4eSCraig Topper; RUN: llc -mtriple=riscv64 -mattr=+f -target-abi=lp64f -verify-machineinstrs < %s \
5768b0b4eSCraig Topper; RUN:   | FileCheck %s -check-prefixes=CHECK,RV64IF
6768b0b4eSCraig Topper; RUN: llc -mtriple=riscv64 -mattr=+zfinx -target-abi=lp64 -verify-machineinstrs < %s \
7768b0b4eSCraig Topper; RUN:   | FileCheck %s -check-prefixes=CHECK,RV64IZFINX
8768b0b4eSCraig Topper
9768b0b4eSCraig Topperdefine i128 @fptosi_f32_to_i128(float %a) nounwind {
10*73186546SCraig Topper; CHECK-LABEL: fptosi_f32_to_i128:
11*73186546SCraig Topper; CHECK:       # %bb.0:
12*73186546SCraig Topper; CHECK-NEXT:    addi sp, sp, -16
13*73186546SCraig Topper; CHECK-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
14*73186546SCraig Topper; CHECK-NEXT:    call __fixsfti
15*73186546SCraig Topper; CHECK-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
16*73186546SCraig Topper; CHECK-NEXT:    addi sp, sp, 16
17*73186546SCraig Topper; CHECK-NEXT:    ret
18768b0b4eSCraig Topper  %1 = fptosi float %a to i128
19768b0b4eSCraig Topper  ret i128 %1
20768b0b4eSCraig Topper}
21768b0b4eSCraig Topper
22768b0b4eSCraig Topperdefine i128 @fptoui_f32_to_i128(float %a) nounwind {
23*73186546SCraig Topper; CHECK-LABEL: fptoui_f32_to_i128:
24*73186546SCraig Topper; CHECK:       # %bb.0:
25*73186546SCraig Topper; CHECK-NEXT:    addi sp, sp, -16
26*73186546SCraig Topper; CHECK-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
27*73186546SCraig Topper; CHECK-NEXT:    call __fixunssfti
28*73186546SCraig Topper; CHECK-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
29*73186546SCraig Topper; CHECK-NEXT:    addi sp, sp, 16
30*73186546SCraig Topper; CHECK-NEXT:    ret
31768b0b4eSCraig Topper  %1 = fptoui float %a to i128
32768b0b4eSCraig Topper  ret i128 %1
33768b0b4eSCraig Topper}
34768b0b4eSCraig Topper
35768b0b4eSCraig Topperdefine float @sitofp_i128_to_f32(i128 %a) nounwind {
36768b0b4eSCraig Topper; CHECK-LABEL: sitofp_i128_to_f32:
37768b0b4eSCraig Topper; CHECK:       # %bb.0:
38768b0b4eSCraig Topper; CHECK-NEXT:    addi sp, sp, -16
39768b0b4eSCraig Topper; CHECK-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
40768b0b4eSCraig Topper; CHECK-NEXT:    call __floattisf
41768b0b4eSCraig Topper; CHECK-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
42768b0b4eSCraig Topper; CHECK-NEXT:    addi sp, sp, 16
43768b0b4eSCraig Topper; CHECK-NEXT:    ret
44768b0b4eSCraig Topper  %1 = sitofp i128 %a to float
45768b0b4eSCraig Topper  ret float %1
46768b0b4eSCraig Topper}
47768b0b4eSCraig Topper
48768b0b4eSCraig Topperdefine float @uitofp_i128_to_f32(i128 %a) nounwind {
49768b0b4eSCraig Topper; CHECK-LABEL: uitofp_i128_to_f32:
50768b0b4eSCraig Topper; CHECK:       # %bb.0:
51768b0b4eSCraig Topper; CHECK-NEXT:    addi sp, sp, -16
52768b0b4eSCraig Topper; CHECK-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
53768b0b4eSCraig Topper; CHECK-NEXT:    call __floatuntisf
54768b0b4eSCraig Topper; CHECK-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
55768b0b4eSCraig Topper; CHECK-NEXT:    addi sp, sp, 16
56768b0b4eSCraig Topper; CHECK-NEXT:    ret
57768b0b4eSCraig Topper  %1 = uitofp i128 %a to float
58768b0b4eSCraig Topper  ret float %1
59768b0b4eSCraig Topper}
60768b0b4eSCraig Topper
61768b0b4eSCraig Topperdefine i128 @fptosi_sat_f32_to_i128(float %a) nounwind {
62768b0b4eSCraig Topper; RV64I-LABEL: fptosi_sat_f32_to_i128:
63768b0b4eSCraig Topper; RV64I:       # %bb.0:
64768b0b4eSCraig Topper; RV64I-NEXT:    addi sp, sp, -64
65768b0b4eSCraig Topper; RV64I-NEXT:    sd ra, 56(sp) # 8-byte Folded Spill
66768b0b4eSCraig Topper; RV64I-NEXT:    sd s0, 48(sp) # 8-byte Folded Spill
67768b0b4eSCraig Topper; RV64I-NEXT:    sd s1, 40(sp) # 8-byte Folded Spill
68768b0b4eSCraig Topper; RV64I-NEXT:    sd s2, 32(sp) # 8-byte Folded Spill
69768b0b4eSCraig Topper; RV64I-NEXT:    sd s3, 24(sp) # 8-byte Folded Spill
70768b0b4eSCraig Topper; RV64I-NEXT:    sd s4, 16(sp) # 8-byte Folded Spill
71768b0b4eSCraig Topper; RV64I-NEXT:    sd s5, 8(sp) # 8-byte Folded Spill
72*73186546SCraig Topper; RV64I-NEXT:    mv s1, a0
73768b0b4eSCraig Topper; RV64I-NEXT:    lui a1, 1044480
74768b0b4eSCraig Topper; RV64I-NEXT:    call __gesf2
75768b0b4eSCraig Topper; RV64I-NEXT:    mv s2, a0
76*73186546SCraig Topper; RV64I-NEXT:    mv a0, s1
77*73186546SCraig Topper; RV64I-NEXT:    call __fixsfti
78*73186546SCraig Topper; RV64I-NEXT:    mv s0, a0
79768b0b4eSCraig Topper; RV64I-NEXT:    mv s3, a1
80768b0b4eSCraig Topper; RV64I-NEXT:    li s5, -1
81*73186546SCraig Topper; RV64I-NEXT:    bgez s2, .LBB4_2
82768b0b4eSCraig Topper; RV64I-NEXT:  # %bb.1:
83768b0b4eSCraig Topper; RV64I-NEXT:    slli s3, s5, 63
84768b0b4eSCraig Topper; RV64I-NEXT:  .LBB4_2:
85768b0b4eSCraig Topper; RV64I-NEXT:    lui a1, 520192
86768b0b4eSCraig Topper; RV64I-NEXT:    addiw a1, a1, -1
87*73186546SCraig Topper; RV64I-NEXT:    mv a0, s1
88768b0b4eSCraig Topper; RV64I-NEXT:    call __gtsf2
89768b0b4eSCraig Topper; RV64I-NEXT:    mv s4, a0
90768b0b4eSCraig Topper; RV64I-NEXT:    blez a0, .LBB4_4
91768b0b4eSCraig Topper; RV64I-NEXT:  # %bb.3:
92768b0b4eSCraig Topper; RV64I-NEXT:    srli s3, s5, 1
93768b0b4eSCraig Topper; RV64I-NEXT:  .LBB4_4:
94*73186546SCraig Topper; RV64I-NEXT:    mv a0, s1
95*73186546SCraig Topper; RV64I-NEXT:    mv a1, s1
96768b0b4eSCraig Topper; RV64I-NEXT:    call __unordsf2
97768b0b4eSCraig Topper; RV64I-NEXT:    snez a0, a0
98*73186546SCraig Topper; RV64I-NEXT:    slti a1, s2, 0
999122c523SPengcheng Wang; RV64I-NEXT:    sgtz a2, s4
100768b0b4eSCraig Topper; RV64I-NEXT:    addi a0, a0, -1
1019122c523SPengcheng Wang; RV64I-NEXT:    addi a3, a1, -1
102768b0b4eSCraig Topper; RV64I-NEXT:    and a1, a0, s3
103*73186546SCraig Topper; RV64I-NEXT:    and a3, a3, s0
1049122c523SPengcheng Wang; RV64I-NEXT:    neg a2, a2
1059122c523SPengcheng Wang; RV64I-NEXT:    or a2, a2, a3
106768b0b4eSCraig Topper; RV64I-NEXT:    and a0, a0, a2
107768b0b4eSCraig Topper; RV64I-NEXT:    ld ra, 56(sp) # 8-byte Folded Reload
108768b0b4eSCraig Topper; RV64I-NEXT:    ld s0, 48(sp) # 8-byte Folded Reload
109768b0b4eSCraig Topper; RV64I-NEXT:    ld s1, 40(sp) # 8-byte Folded Reload
110768b0b4eSCraig Topper; RV64I-NEXT:    ld s2, 32(sp) # 8-byte Folded Reload
111768b0b4eSCraig Topper; RV64I-NEXT:    ld s3, 24(sp) # 8-byte Folded Reload
112768b0b4eSCraig Topper; RV64I-NEXT:    ld s4, 16(sp) # 8-byte Folded Reload
113768b0b4eSCraig Topper; RV64I-NEXT:    ld s5, 8(sp) # 8-byte Folded Reload
114768b0b4eSCraig Topper; RV64I-NEXT:    addi sp, sp, 64
115768b0b4eSCraig Topper; RV64I-NEXT:    ret
116768b0b4eSCraig Topper;
117768b0b4eSCraig Topper; RV64IF-LABEL: fptosi_sat_f32_to_i128:
118768b0b4eSCraig Topper; RV64IF:       # %bb.0:
119768b0b4eSCraig Topper; RV64IF-NEXT:    addi sp, sp, -32
120768b0b4eSCraig Topper; RV64IF-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill
121768b0b4eSCraig Topper; RV64IF-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill
122768b0b4eSCraig Topper; RV64IF-NEXT:    fsw fs0, 12(sp) # 4-byte Folded Spill
123768b0b4eSCraig Topper; RV64IF-NEXT:    fmv.s fs0, fa0
124768b0b4eSCraig Topper; RV64IF-NEXT:    lui a0, 1044480
125768b0b4eSCraig Topper; RV64IF-NEXT:    fmv.w.x fa5, a0
126768b0b4eSCraig Topper; RV64IF-NEXT:    fle.s s0, fa5, fa0
127768b0b4eSCraig Topper; RV64IF-NEXT:    call __fixsfti
128768b0b4eSCraig Topper; RV64IF-NEXT:    li a3, -1
129768b0b4eSCraig Topper; RV64IF-NEXT:    bnez s0, .LBB4_2
130768b0b4eSCraig Topper; RV64IF-NEXT:  # %bb.1:
131768b0b4eSCraig Topper; RV64IF-NEXT:    slli a1, a3, 63
132768b0b4eSCraig Topper; RV64IF-NEXT:  .LBB4_2:
133768b0b4eSCraig Topper; RV64IF-NEXT:    lui a2, %hi(.LCPI4_0)
134768b0b4eSCraig Topper; RV64IF-NEXT:    flw fa5, %lo(.LCPI4_0)(a2)
135768b0b4eSCraig Topper; RV64IF-NEXT:    flt.s a2, fa5, fs0
136768b0b4eSCraig Topper; RV64IF-NEXT:    beqz a2, .LBB4_4
137768b0b4eSCraig Topper; RV64IF-NEXT:  # %bb.3:
138768b0b4eSCraig Topper; RV64IF-NEXT:    srli a1, a3, 1
139768b0b4eSCraig Topper; RV64IF-NEXT:  .LBB4_4:
140768b0b4eSCraig Topper; RV64IF-NEXT:    feq.s a3, fs0, fs0
141768b0b4eSCraig Topper; RV64IF-NEXT:    neg a4, s0
142768b0b4eSCraig Topper; RV64IF-NEXT:    neg a2, a2
1439122c523SPengcheng Wang; RV64IF-NEXT:    neg a3, a3
1449122c523SPengcheng Wang; RV64IF-NEXT:    and a0, a4, a0
1459122c523SPengcheng Wang; RV64IF-NEXT:    and a1, a3, a1
146768b0b4eSCraig Topper; RV64IF-NEXT:    or a0, a2, a0
147768b0b4eSCraig Topper; RV64IF-NEXT:    and a0, a3, a0
148768b0b4eSCraig Topper; RV64IF-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload
149768b0b4eSCraig Topper; RV64IF-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload
150768b0b4eSCraig Topper; RV64IF-NEXT:    flw fs0, 12(sp) # 4-byte Folded Reload
151768b0b4eSCraig Topper; RV64IF-NEXT:    addi sp, sp, 32
152768b0b4eSCraig Topper; RV64IF-NEXT:    ret
153768b0b4eSCraig Topper;
154768b0b4eSCraig Topper; RV64IZFINX-LABEL: fptosi_sat_f32_to_i128:
155768b0b4eSCraig Topper; RV64IZFINX:       # %bb.0:
156768b0b4eSCraig Topper; RV64IZFINX-NEXT:    addi sp, sp, -32
157768b0b4eSCraig Topper; RV64IZFINX-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill
158768b0b4eSCraig Topper; RV64IZFINX-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill
159768b0b4eSCraig Topper; RV64IZFINX-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill
160768b0b4eSCraig Topper; RV64IZFINX-NEXT:    mv s0, a0
161768b0b4eSCraig Topper; RV64IZFINX-NEXT:    lui a0, 1044480
162768b0b4eSCraig Topper; RV64IZFINX-NEXT:    fle.s s1, a0, s0
163768b0b4eSCraig Topper; RV64IZFINX-NEXT:    mv a0, s0
164768b0b4eSCraig Topper; RV64IZFINX-NEXT:    call __fixsfti
165768b0b4eSCraig Topper; RV64IZFINX-NEXT:    li a2, -1
166768b0b4eSCraig Topper; RV64IZFINX-NEXT:    bnez s1, .LBB4_2
167768b0b4eSCraig Topper; RV64IZFINX-NEXT:  # %bb.1:
168768b0b4eSCraig Topper; RV64IZFINX-NEXT:    slli a1, a2, 63
169768b0b4eSCraig Topper; RV64IZFINX-NEXT:  .LBB4_2:
170768b0b4eSCraig Topper; RV64IZFINX-NEXT:    lui a3, 520192
171768b0b4eSCraig Topper; RV64IZFINX-NEXT:    addiw a3, a3, -1
172768b0b4eSCraig Topper; RV64IZFINX-NEXT:    flt.s a3, a3, s0
173768b0b4eSCraig Topper; RV64IZFINX-NEXT:    beqz a3, .LBB4_4
174768b0b4eSCraig Topper; RV64IZFINX-NEXT:  # %bb.3:
175768b0b4eSCraig Topper; RV64IZFINX-NEXT:    srli a1, a2, 1
176768b0b4eSCraig Topper; RV64IZFINX-NEXT:  .LBB4_4:
177768b0b4eSCraig Topper; RV64IZFINX-NEXT:    feq.s a2, s0, s0
178768b0b4eSCraig Topper; RV64IZFINX-NEXT:    neg a4, s1
179768b0b4eSCraig Topper; RV64IZFINX-NEXT:    neg a3, a3
1809122c523SPengcheng Wang; RV64IZFINX-NEXT:    neg a2, a2
1819122c523SPengcheng Wang; RV64IZFINX-NEXT:    and a0, a4, a0
1829122c523SPengcheng Wang; RV64IZFINX-NEXT:    and a1, a2, a1
183768b0b4eSCraig Topper; RV64IZFINX-NEXT:    or a0, a3, a0
184768b0b4eSCraig Topper; RV64IZFINX-NEXT:    and a0, a2, a0
185768b0b4eSCraig Topper; RV64IZFINX-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload
186768b0b4eSCraig Topper; RV64IZFINX-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload
187768b0b4eSCraig Topper; RV64IZFINX-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload
188768b0b4eSCraig Topper; RV64IZFINX-NEXT:    addi sp, sp, 32
189768b0b4eSCraig Topper; RV64IZFINX-NEXT:    ret
190768b0b4eSCraig Topper  %1 = tail call i128 @llvm.fptosi.sat.i128.f32(float %a)
191768b0b4eSCraig Topper  ret i128 %1
192768b0b4eSCraig Topper}
193768b0b4eSCraig Topperdeclare i128 @llvm.fptosi.sat.i128.f32(float)
194768b0b4eSCraig Topper
195768b0b4eSCraig Topperdefine i128 @fptoui_sat_f32_to_i128(float %a) nounwind {
196768b0b4eSCraig Topper; RV64I-LABEL: fptoui_sat_f32_to_i128:
197768b0b4eSCraig Topper; RV64I:       # %bb.0:
198768b0b4eSCraig Topper; RV64I-NEXT:    addi sp, sp, -32
199768b0b4eSCraig Topper; RV64I-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill
200768b0b4eSCraig Topper; RV64I-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill
201768b0b4eSCraig Topper; RV64I-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill
202768b0b4eSCraig Topper; RV64I-NEXT:    sd s2, 0(sp) # 8-byte Folded Spill
203768b0b4eSCraig Topper; RV64I-NEXT:    mv s0, a0
204768b0b4eSCraig Topper; RV64I-NEXT:    lui a1, 522240
205768b0b4eSCraig Topper; RV64I-NEXT:    addiw a1, a1, -1
206768b0b4eSCraig Topper; RV64I-NEXT:    call __gtsf2
207768b0b4eSCraig Topper; RV64I-NEXT:    sgtz a0, a0
208768b0b4eSCraig Topper; RV64I-NEXT:    neg s1, a0
209768b0b4eSCraig Topper; RV64I-NEXT:    mv a0, s0
210768b0b4eSCraig Topper; RV64I-NEXT:    li a1, 0
211768b0b4eSCraig Topper; RV64I-NEXT:    call __gesf2
212768b0b4eSCraig Topper; RV64I-NEXT:    slti a0, a0, 0
213768b0b4eSCraig Topper; RV64I-NEXT:    addi s2, a0, -1
214*73186546SCraig Topper; RV64I-NEXT:    mv a0, s0
215768b0b4eSCraig Topper; RV64I-NEXT:    call __fixunssfti
216768b0b4eSCraig Topper; RV64I-NEXT:    and a0, s2, a0
217768b0b4eSCraig Topper; RV64I-NEXT:    and a1, s2, a1
2189122c523SPengcheng Wang; RV64I-NEXT:    or a0, s1, a0
219768b0b4eSCraig Topper; RV64I-NEXT:    or a1, s1, a1
220768b0b4eSCraig Topper; RV64I-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload
221768b0b4eSCraig Topper; RV64I-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload
222768b0b4eSCraig Topper; RV64I-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload
223768b0b4eSCraig Topper; RV64I-NEXT:    ld s2, 0(sp) # 8-byte Folded Reload
224768b0b4eSCraig Topper; RV64I-NEXT:    addi sp, sp, 32
225768b0b4eSCraig Topper; RV64I-NEXT:    ret
226768b0b4eSCraig Topper;
227768b0b4eSCraig Topper; RV64IF-LABEL: fptoui_sat_f32_to_i128:
228768b0b4eSCraig Topper; RV64IF:       # %bb.0:
229768b0b4eSCraig Topper; RV64IF-NEXT:    addi sp, sp, -32
230768b0b4eSCraig Topper; RV64IF-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill
231768b0b4eSCraig Topper; RV64IF-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill
232768b0b4eSCraig Topper; RV64IF-NEXT:    fsw fs0, 12(sp) # 4-byte Folded Spill
233768b0b4eSCraig Topper; RV64IF-NEXT:    fmv.s fs0, fa0
234768b0b4eSCraig Topper; RV64IF-NEXT:    fmv.w.x fa5, zero
235768b0b4eSCraig Topper; RV64IF-NEXT:    fle.s a0, fa5, fa0
236768b0b4eSCraig Topper; RV64IF-NEXT:    neg s0, a0
237768b0b4eSCraig Topper; RV64IF-NEXT:    call __fixunssfti
238768b0b4eSCraig Topper; RV64IF-NEXT:    lui a2, %hi(.LCPI5_0)
239768b0b4eSCraig Topper; RV64IF-NEXT:    flw fa5, %lo(.LCPI5_0)(a2)
240768b0b4eSCraig Topper; RV64IF-NEXT:    and a0, s0, a0
2419122c523SPengcheng Wang; RV64IF-NEXT:    and a1, s0, a1
242768b0b4eSCraig Topper; RV64IF-NEXT:    flt.s a2, fa5, fs0
243768b0b4eSCraig Topper; RV64IF-NEXT:    neg a2, a2
244768b0b4eSCraig Topper; RV64IF-NEXT:    or a0, a2, a0
245768b0b4eSCraig Topper; RV64IF-NEXT:    or a1, a2, a1
246768b0b4eSCraig Topper; RV64IF-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload
247768b0b4eSCraig Topper; RV64IF-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload
248768b0b4eSCraig Topper; RV64IF-NEXT:    flw fs0, 12(sp) # 4-byte Folded Reload
249768b0b4eSCraig Topper; RV64IF-NEXT:    addi sp, sp, 32
250768b0b4eSCraig Topper; RV64IF-NEXT:    ret
251768b0b4eSCraig Topper;
252768b0b4eSCraig Topper; RV64IZFINX-LABEL: fptoui_sat_f32_to_i128:
253768b0b4eSCraig Topper; RV64IZFINX:       # %bb.0:
254768b0b4eSCraig Topper; RV64IZFINX-NEXT:    addi sp, sp, -32
255768b0b4eSCraig Topper; RV64IZFINX-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill
256768b0b4eSCraig Topper; RV64IZFINX-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill
257768b0b4eSCraig Topper; RV64IZFINX-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill
258768b0b4eSCraig Topper; RV64IZFINX-NEXT:    mv s0, a0
259768b0b4eSCraig Topper; RV64IZFINX-NEXT:    fle.s a0, zero, a0
260768b0b4eSCraig Topper; RV64IZFINX-NEXT:    neg s1, a0
261768b0b4eSCraig Topper; RV64IZFINX-NEXT:    mv a0, s0
262768b0b4eSCraig Topper; RV64IZFINX-NEXT:    call __fixunssfti
263768b0b4eSCraig Topper; RV64IZFINX-NEXT:    and a0, s1, a0
264768b0b4eSCraig Topper; RV64IZFINX-NEXT:    lui a2, 522240
2659122c523SPengcheng Wang; RV64IZFINX-NEXT:    and a1, s1, a1
266768b0b4eSCraig Topper; RV64IZFINX-NEXT:    addiw a2, a2, -1
267768b0b4eSCraig Topper; RV64IZFINX-NEXT:    flt.s a2, a2, s0
268768b0b4eSCraig Topper; RV64IZFINX-NEXT:    neg a2, a2
269768b0b4eSCraig Topper; RV64IZFINX-NEXT:    or a0, a2, a0
270768b0b4eSCraig Topper; RV64IZFINX-NEXT:    or a1, a2, a1
271768b0b4eSCraig Topper; RV64IZFINX-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload
272768b0b4eSCraig Topper; RV64IZFINX-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload
273768b0b4eSCraig Topper; RV64IZFINX-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload
274768b0b4eSCraig Topper; RV64IZFINX-NEXT:    addi sp, sp, 32
275768b0b4eSCraig Topper; RV64IZFINX-NEXT:    ret
276768b0b4eSCraig Topper  %1 = tail call i128 @llvm.fptoui.sat.i128.f32(float %a)
277768b0b4eSCraig Topper  ret i128 %1
278768b0b4eSCraig Topper}
279768b0b4eSCraig Topperdeclare i128 @llvm.fptoui.sat.i128.f32(float)
280