Skip to content

Commit c97a767

Browse files
authored
[PowerPC] Expand FSINCOS of fp128 (#76494)
1 parent eaa32d2 commit c97a767

File tree

2 files changed

+56
-0
lines changed

2 files changed

+56
-0
lines changed

llvm/lib/Target/PowerPC/PPCISelLowering.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1176,6 +1176,7 @@ PPCTargetLowering::PPCTargetLowering(const PPCTargetMachine &TM,
11761176
setTruncStoreAction(MVT::f128, MVT::f32, Expand);
11771177

11781178
// No implementation for these ops for PowerPC.
1179+
setOperationAction(ISD::FSINCOS, MVT::f128, Expand);
11791180
setOperationAction(ISD::FSIN, MVT::f128, Expand);
11801181
setOperationAction(ISD::FCOS, MVT::f128, Expand);
11811182
setOperationAction(ISD::FPOW, MVT::f128, Expand);
@@ -1411,6 +1412,7 @@ PPCTargetLowering::PPCTargetLowering(const PPCTargetMachine &TM,
14111412
setLibcallName(RTLIB::EXP2_F128, "exp2f128");
14121413
setLibcallName(RTLIB::SIN_F128, "sinf128");
14131414
setLibcallName(RTLIB::COS_F128, "cosf128");
1415+
setLibcallName(RTLIB::SINCOS_F128, "sincosf128");
14141416
setLibcallName(RTLIB::POW_F128, "powf128");
14151417
setLibcallName(RTLIB::FMIN_F128, "fminf128");
14161418
setLibcallName(RTLIB::FMAX_F128, "fmaxf128");

llvm/test/CodeGen/PowerPC/f128-arith.ll

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -419,6 +419,60 @@ entry:
419419
}
420420
declare fp128 @llvm.cos.f128(fp128 %Val)
421421

422+
define fp128 @qp_sincos(ptr nocapture readonly %a) nounwind {
423+
; CHECK-LABEL: qp_sincos:
424+
; CHECK: # %bb.0: # %entry
425+
; CHECK-NEXT: mflr r0
426+
; CHECK-NEXT: stdu r1, -64(r1)
427+
; CHECK-NEXT: std r0, 80(r1)
428+
; CHECK-NEXT: addi r5, r1, 48
429+
; CHECK-NEXT: addi r6, r1, 32
430+
; CHECK-NEXT: lxv v2, 0(r3)
431+
; CHECK-NEXT: bl sincosf128
432+
; CHECK-NEXT: nop
433+
; CHECK-NEXT: lxv v2, 48(r1)
434+
; CHECK-NEXT: lxv v3, 32(r1)
435+
; CHECK-NEXT: xsmulqp v2, v3, v2
436+
; CHECK-NEXT: addi r1, r1, 64
437+
; CHECK-NEXT: ld r0, 16(r1)
438+
; CHECK-NEXT: mtlr r0
439+
; CHECK-NEXT: blr
440+
;
441+
; CHECK-P8-LABEL: qp_sincos:
442+
; CHECK-P8: # %bb.0: # %entry
443+
; CHECK-P8-NEXT: mflr r0
444+
; CHECK-P8-NEXT: std r29, -24(r1) # 8-byte Folded Spill
445+
; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill
446+
; CHECK-P8-NEXT: stdu r1, -96(r1)
447+
; CHECK-P8-NEXT: std r0, 112(r1)
448+
; CHECK-P8-NEXT: addi r30, r1, 48
449+
; CHECK-P8-NEXT: addi r29, r1, 32
450+
; CHECK-P8-NEXT: lxvd2x vs0, 0, r3
451+
; CHECK-P8-NEXT: mr r5, r30
452+
; CHECK-P8-NEXT: mr r6, r29
453+
; CHECK-P8-NEXT: xxswapd v2, vs0
454+
; CHECK-P8-NEXT: bl sincosf128
455+
; CHECK-P8-NEXT: nop
456+
; CHECK-P8-NEXT: lxvd2x vs0, 0, r29
457+
; CHECK-P8-NEXT: xxswapd v2, vs0
458+
; CHECK-P8-NEXT: lxvd2x vs0, 0, r30
459+
; CHECK-P8-NEXT: xxswapd v3, vs0
460+
; CHECK-P8-NEXT: bl __mulkf3
461+
; CHECK-P8-NEXT: nop
462+
; CHECK-P8-NEXT: addi r1, r1, 96
463+
; CHECK-P8-NEXT: ld r0, 16(r1)
464+
; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload
465+
; CHECK-P8-NEXT: ld r29, -24(r1) # 8-byte Folded Reload
466+
; CHECK-P8-NEXT: mtlr r0
467+
; CHECK-P8-NEXT: blr
468+
entry:
469+
%0 = load fp128, ptr %a, align 16
470+
%1 = tail call fp128 @llvm.cos.f128(fp128 %0)
471+
%2 = tail call fp128 @llvm.sin.f128(fp128 %0)
472+
%3 = fmul fp128 %1, %2
473+
ret fp128 %3
474+
}
475+
422476
define fp128 @qp_log(ptr nocapture readonly %a) {
423477
; CHECK-LABEL: qp_log:
424478
; CHECK: # %bb.0: # %entry

0 commit comments

Comments
 (0)