Skip to content

Commit 7843d7f

Browse files
committed
Add modf tests (should not crash with new lowering)
Change-Id: I669316d89c461f410c9cfdf6317860837c50e597
1 parent dbebfb9 commit 7843d7f

File tree

1 file changed

+105
-0
lines changed

1 file changed

+105
-0
lines changed

llvm/test/CodeGen/PowerPC/llvm.modf.ll

Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)