@@ -328,3 +328,108 @@ define { ppc_fp128, ppc_fp128 } @test_modf_ppcf128(ppc_fp128 %a) {
328328 %result = call { ppc_fp128 , ppc_fp128 } @llvm.modf.ppcf128 (ppc_fp128 %a )
329329 ret { ppc_fp128 , ppc_fp128 } %result
330330}
331+
332+ define ppc_fp128 @test_modf_ppcf128_only_use_intergral (ppc_fp128 %a ) {
333+ ; CHECK-LABEL: test_modf_ppcf128_only_use_intergral:
334+ ; CHECK: # %bb.0:
335+ ; CHECK-NEXT: mflr r0
336+ ; CHECK-NEXT: stdu r1, -48(r1)
337+ ; CHECK-NEXT: std r0, 64(r1)
338+ ; CHECK-NEXT: .cfi_def_cfa_offset 48
339+ ; CHECK-NEXT: .cfi_offset lr, 16
340+ ; CHECK-NEXT: addi r5, r1, 32
341+ ; CHECK-NEXT: bl modfl
342+ ; CHECK-NEXT: nop
343+ ; CHECK-NEXT: lfd f1, 32(r1)
344+ ; CHECK-NEXT: lfd f2, 40(r1)
345+ ; CHECK-NEXT: addi r1, r1, 48
346+ ; CHECK-NEXT: ld r0, 16(r1)
347+ ; CHECK-NEXT: mtlr r0
348+ ; CHECK-NEXT: blr
349+ %result = call { ppc_fp128 , ppc_fp128 } @llvm.modf.ppcf128 (ppc_fp128 %a )
350+ %result.1 = extractvalue { ppc_fp128 , ppc_fp128 } %result , 1
351+ ret ppc_fp128 %result.1
352+ }
353+
354+ define ppc_fp128 @test_modf_ppcf128_only_use_fractional (ppc_fp128 %a ) {
355+ ; CHECK-LABEL: test_modf_ppcf128_only_use_fractional:
356+ ; CHECK: # %bb.0:
357+ ; CHECK-NEXT: mflr r0
358+ ; CHECK-NEXT: stdu r1, -48(r1)
359+ ; CHECK-NEXT: std r0, 64(r1)
360+ ; CHECK-NEXT: .cfi_def_cfa_offset 48
361+ ; CHECK-NEXT: .cfi_offset lr, 16
362+ ; CHECK-NEXT: addi r5, r1, 32
363+ ; CHECK-NEXT: bl modfl
364+ ; CHECK-NEXT: nop
365+ ; CHECK-NEXT: addi r1, r1, 48
366+ ; CHECK-NEXT: ld r0, 16(r1)
367+ ; CHECK-NEXT: mtlr r0
368+ ; CHECK-NEXT: blr
369+ %result = call { ppc_fp128 , ppc_fp128 } @llvm.modf.ppcf128 (ppc_fp128 %a )
370+ %result.1 = extractvalue { ppc_fp128 , ppc_fp128 } %result , 0
371+ ret ppc_fp128 %result.1
372+ }
373+
374+ define { ppc_fp128 , ppc_fp128 } @test_modf_ppcf128_tail_call (ppc_fp128 %a ) {
375+ ; CHECK-LABEL: test_modf_ppcf128_tail_call:
376+ ; CHECK: # %bb.0:
377+ ; CHECK-NEXT: mflr r0
378+ ; CHECK-NEXT: stdu r1, -48(r1)
379+ ; CHECK-NEXT: std r0, 64(r1)
380+ ; CHECK-NEXT: .cfi_def_cfa_offset 48
381+ ; CHECK-NEXT: .cfi_offset lr, 16
382+ ; CHECK-NEXT: addi r5, r1, 32
383+ ; CHECK-NEXT: bl modfl
384+ ; CHECK-NEXT: nop
385+ ; CHECK-NEXT: lfd f3, 32(r1)
386+ ; CHECK-NEXT: lfd f4, 40(r1)
387+ ; CHECK-NEXT: addi r1, r1, 48
388+ ; CHECK-NEXT: ld r0, 16(r1)
389+ ; CHECK-NEXT: mtlr r0
390+ ; CHECK-NEXT: blr
391+ %result = tail call { ppc_fp128 , ppc_fp128 } @llvm.modf.ppcf128 (ppc_fp128 %a )
392+ ret { ppc_fp128 , ppc_fp128 } %result
393+ }
394+
395+ define ppc_fp128 @test_modf_ppcf128_only_use_intergral_tail_call (ppc_fp128 %a ) {
396+ ; CHECK-LABEL: test_modf_ppcf128_only_use_intergral_tail_call:
397+ ; CHECK: # %bb.0:
398+ ; CHECK-NEXT: mflr r0
399+ ; CHECK-NEXT: stdu r1, -48(r1)
400+ ; CHECK-NEXT: std r0, 64(r1)
401+ ; CHECK-NEXT: .cfi_def_cfa_offset 48
402+ ; CHECK-NEXT: .cfi_offset lr, 16
403+ ; CHECK-NEXT: addi r5, r1, 32
404+ ; CHECK-NEXT: bl modfl
405+ ; CHECK-NEXT: nop
406+ ; CHECK-NEXT: lfd f1, 32(r1)
407+ ; CHECK-NEXT: lfd f2, 40(r1)
408+ ; CHECK-NEXT: addi r1, r1, 48
409+ ; CHECK-NEXT: ld r0, 16(r1)
410+ ; CHECK-NEXT: mtlr r0
411+ ; CHECK-NEXT: blr
412+ %result = tail call { ppc_fp128 , ppc_fp128 } @llvm.modf.ppcf128 (ppc_fp128 %a )
413+ %result.1 = extractvalue { ppc_fp128 , ppc_fp128 } %result , 1
414+ ret ppc_fp128 %result.1
415+ }
416+
417+ define ppc_fp128 @test_modf_ppcf128_only_use_fractional_tail_call (ppc_fp128 %a ) {
418+ ; CHECK-LABEL: test_modf_ppcf128_only_use_fractional_tail_call:
419+ ; CHECK: # %bb.0:
420+ ; CHECK-NEXT: mflr r0
421+ ; CHECK-NEXT: stdu r1, -48(r1)
422+ ; CHECK-NEXT: std r0, 64(r1)
423+ ; CHECK-NEXT: .cfi_def_cfa_offset 48
424+ ; CHECK-NEXT: .cfi_offset lr, 16
425+ ; CHECK-NEXT: addi r5, r1, 32
426+ ; CHECK-NEXT: bl modfl
427+ ; CHECK-NEXT: nop
428+ ; CHECK-NEXT: addi r1, r1, 48
429+ ; CHECK-NEXT: ld r0, 16(r1)
430+ ; CHECK-NEXT: mtlr r0
431+ ; CHECK-NEXT: blr
432+ %result = tail call { ppc_fp128 , ppc_fp128 } @llvm.modf.ppcf128 (ppc_fp128 %a )
433+ %result.1 = extractvalue { ppc_fp128 , ppc_fp128 } %result , 0
434+ ret ppc_fp128 %result.1
435+ }
0 commit comments