@@ -328,3 +328,108 @@ define { ppc_fp128, ppc_fp128 } @test_modf_ppcf128(ppc_fp128 %a) {
328
328
%result = call { ppc_fp128 , ppc_fp128 } @llvm.modf.ppcf128 (ppc_fp128 %a )
329
329
ret { ppc_fp128 , ppc_fp128 } %result
330
330
}
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