@@ -214,6 +214,48 @@ entry:
214214
215215declare i64 @llvm.lround.i64.f64 (double )
216216
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+
217259define dso_local i64 @test_lroundf (float %f ) local_unnamed_addr {
218260; BE-LABEL: test_lroundf:
219261; BE: # %bb.0: # %entry
@@ -256,6 +298,48 @@ entry:
256298
257299declare i64 @llvm.lround.i64.f32 (float )
258300
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+
259343define dso_local i64 @test_llround (double %d ) local_unnamed_addr {
260344; BE-LABEL: test_llround:
261345; BE: # %bb.0: # %entry
0 commit comments