@@ -214,6 +214,48 @@ entry:
214
214
215
215
declare i64 @llvm.lround.i64.f64 (double )
216
216
217
+ define dso_local i32 @test_lroundi32f64 (double %d ) local_unnamed_addr {
218
+ ; BE-LABEL: test_lroundi32f64:
219
+ ; BE: # %bb.0: # %entry
220
+ ; BE-NEXT: mflr r0
221
+ ; BE-NEXT: stdu r1, -112(r1)
222
+ ; BE-NEXT: std r0, 128(r1)
223
+ ; BE-NEXT: .cfi_def_cfa_offset 112
224
+ ; BE-NEXT: .cfi_offset lr, 16
225
+ ; BE-NEXT: bl lround
226
+ ; BE-NEXT: nop
227
+ ; BE-NEXT: addi r1, r1, 112
228
+ ; BE-NEXT: ld r0, 16(r1)
229
+ ; BE-NEXT: mtlr r0
230
+ ; BE-NEXT: blr
231
+ ;
232
+ ; CHECK-LABEL: test_lroundi32f64:
233
+ ; CHECK: # %bb.0: # %entry
234
+ ; CHECK-NEXT: mflr r0
235
+ ; CHECK-NEXT: stdu r1, -32(r1)
236
+ ; CHECK-NEXT: std r0, 48(r1)
237
+ ; CHECK-NEXT: .cfi_def_cfa_offset 32
238
+ ; CHECK-NEXT: .cfi_offset lr, 16
239
+ ; CHECK-NEXT: bl lround
240
+ ; CHECK-NEXT: nop
241
+ ; CHECK-NEXT: addi r1, r1, 32
242
+ ; CHECK-NEXT: ld r0, 16(r1)
243
+ ; CHECK-NEXT: mtlr r0
244
+ ; CHECK-NEXT: blr
245
+ ;
246
+ ; FAST-LABEL: test_lroundi32f64:
247
+ ; FAST: # %bb.0: # %entry
248
+ ; FAST-NEXT: xsrdpi f0, f1
249
+ ; FAST-NEXT: fctiw f0, f0
250
+ ; FAST-NEXT: mffprwz r3, f0
251
+ ; FAST-NEXT: blr
252
+ entry:
253
+ %0 = tail call i32 @llvm.lround.i32.f64 (double %d )
254
+ ret i32 %0
255
+ }
256
+
257
+ declare i32 @llvm.lround.i32.f64 (double )
258
+
217
259
define dso_local i64 @test_lroundf (float %f ) local_unnamed_addr {
218
260
; BE-LABEL: test_lroundf:
219
261
; BE: # %bb.0: # %entry
@@ -256,6 +298,48 @@ entry:
256
298
257
299
declare i64 @llvm.lround.i64.f32 (float )
258
300
301
+ define dso_local i32 @test_lroundi32f32 (float %d ) local_unnamed_addr {
302
+ ; BE-LABEL: test_lroundi32f32:
303
+ ; BE: # %bb.0: # %entry
304
+ ; BE-NEXT: mflr r0
305
+ ; BE-NEXT: stdu r1, -112(r1)
306
+ ; BE-NEXT: std r0, 128(r1)
307
+ ; BE-NEXT: .cfi_def_cfa_offset 112
308
+ ; BE-NEXT: .cfi_offset lr, 16
309
+ ; BE-NEXT: bl lroundf
310
+ ; BE-NEXT: nop
311
+ ; BE-NEXT: addi r1, r1, 112
312
+ ; BE-NEXT: ld r0, 16(r1)
313
+ ; BE-NEXT: mtlr r0
314
+ ; BE-NEXT: blr
315
+ ;
316
+ ; CHECK-LABEL: test_lroundi32f32:
317
+ ; CHECK: # %bb.0: # %entry
318
+ ; CHECK-NEXT: mflr r0
319
+ ; CHECK-NEXT: stdu r1, -32(r1)
320
+ ; CHECK-NEXT: std r0, 48(r1)
321
+ ; CHECK-NEXT: .cfi_def_cfa_offset 32
322
+ ; CHECK-NEXT: .cfi_offset lr, 16
323
+ ; CHECK-NEXT: bl lroundf
324
+ ; CHECK-NEXT: nop
325
+ ; CHECK-NEXT: addi r1, r1, 32
326
+ ; CHECK-NEXT: ld r0, 16(r1)
327
+ ; CHECK-NEXT: mtlr r0
328
+ ; CHECK-NEXT: blr
329
+ ;
330
+ ; FAST-LABEL: test_lroundi32f32:
331
+ ; FAST: # %bb.0: # %entry
332
+ ; FAST-NEXT: xsrdpi f0, f1
333
+ ; FAST-NEXT: fctiw f0, f0
334
+ ; FAST-NEXT: mffprwz r3, f0
335
+ ; FAST-NEXT: blr
336
+ entry:
337
+ %0 = tail call i32 @llvm.lround.i32.f32 (float %d )
338
+ ret i32 %0
339
+ }
340
+
341
+ declare i32 @llvm.lround.i32.f32 (float )
342
+
259
343
define dso_local i64 @test_llround (double %d ) local_unnamed_addr {
260
344
; BE-LABEL: test_llround:
261
345
; BE: # %bb.0: # %entry
0 commit comments