Skip to content

Commit b2be719

Browse files
committed
Wait with FCOPYSIGN optimization.
1 parent 0e96551 commit b2be719

File tree

3 files changed

+32
-22
lines changed

3 files changed

+32
-22
lines changed

llvm/lib/Target/SystemZ/SystemZISelLowering.cpp

+1-18
Original file line numberDiff line numberDiff line change
@@ -553,7 +553,7 @@ SystemZTargetLowering::SystemZTargetLowering(const TargetMachine &TM,
553553
setOperationAction(ISD::STRICT_FP_ROUND, MVT::f16, LibCall);
554554
setOperationAction(ISD::BITCAST, MVT::i16, Custom);
555555
setOperationAction(ISD::IS_FPCLASS, MVT::f16, Custom);
556-
setOperationAction(ISD::FCOPYSIGN, MVT::f16, Custom);
556+
setOperationAction(ISD::FCOPYSIGN, MVT::f16, Legal);
557557
}
558558

559559
for (unsigned I = MVT::FIRST_FP_VALUETYPE;
@@ -6989,21 +6989,6 @@ SDValue SystemZTargetLowering::lowerIS_FPCLASS(SDValue Op,
69896989
return getCCResult(DAG, Intr);
69906990
}
69916991

6992-
SDValue SystemZTargetLowering::lowerFCOPYSIGN(SDValue Op,
6993-
SelectionDAG &DAG) const {
6994-
MVT VT = Op.getSimpleValueType();
6995-
SDValue ValOp = Op.getOperand(0);
6996-
SDValue SignOp = Op.getOperand(1);
6997-
6998-
// Remove the rounding which would result in a libcall for half.
6999-
if (VT == MVT::f16 && SignOp.getOpcode() == ISD::FP_ROUND) {
7000-
SDValue WideOp = SignOp.getOperand(0);
7001-
return DAG.getNode(ISD::FCOPYSIGN, SDLoc(Op), VT, ValOp, WideOp);
7002-
}
7003-
7004-
return Op; // Legal
7005-
}
7006-
70076992
SDValue SystemZTargetLowering::lowerREADCYCLECOUNTER(SDValue Op,
70086993
SelectionDAG &DAG) const {
70096994
SDLoc DL(Op);
@@ -7175,8 +7160,6 @@ SDValue SystemZTargetLowering::LowerOperation(SDValue Op,
71757160
return lowerStoreF16(Op, DAG);
71767161
case ISD::IS_FPCLASS:
71777162
return lowerIS_FPCLASS(Op, DAG);
7178-
case ISD::FCOPYSIGN:
7179-
return lowerFCOPYSIGN(Op, DAG);
71807163
case ISD::GET_ROUNDING:
71817164
return lowerGET_ROUNDING(Op, DAG);
71827165
case ISD::READCYCLECOUNTER:

llvm/lib/Target/SystemZ/SystemZISelLowering.h

-1
Original file line numberDiff line numberDiff line change
@@ -755,7 +755,6 @@ class SystemZTargetLowering : public TargetLowering {
755755
SDValue lowerStoreF16(SDValue Op, SelectionDAG &DAG) const;
756756

757757
SDValue lowerIS_FPCLASS(SDValue Op, SelectionDAG &DAG) const;
758-
SDValue lowerFCOPYSIGN(SDValue Op, SelectionDAG &DAG) const;
759758
SDValue lowerGET_ROUNDING(SDValue Op, SelectionDAG &DAG) const;
760759
SDValue lowerREADCYCLECOUNTER(SDValue Op, SelectionDAG &DAG) const;
761760

llvm/test/CodeGen/SystemZ/fp-copysign-03.ll

+31-3
Original file line numberDiff line numberDiff line change
@@ -43,18 +43,46 @@ define half @f2(half %a, double %b) {
4343
}
4444

4545
; Test copysign with an f16 result and f128 sign argument.
46+
; TODO: Let the DAGCombiner remove the fp_round.
4647
define half @f3(half %a, fp128 %b) {
4748
; Z10-LABEL: f3:
4849
; Z10: # %bb.0:
50+
; Z10-NEXT: stmg %r14, %r15, 112(%r15)
51+
; Z10-NEXT: .cfi_offset %r14, -48
52+
; Z10-NEXT: .cfi_offset %r15, -40
53+
; Z10-NEXT: aghi %r15, -184
54+
; Z10-NEXT: .cfi_def_cfa_offset 344
55+
; Z10-NEXT: std %f8, 176(%r15) # 8-byte Spill
56+
; Z10-NEXT: .cfi_offset %f8, -168
4957
; Z10-NEXT: ld %f1, 0(%r2)
5058
; Z10-NEXT: ld %f3, 8(%r2)
51-
; Z10-NEXT: cpsdr %f0, %f1, %f0
59+
; Z10-NEXT: ler %f8, %f0
60+
; Z10-NEXT: la %r2, 160(%r15)
61+
; Z10-NEXT: std %f1, 160(%r15)
62+
; Z10-NEXT: std %f3, 168(%r15)
63+
; Z10-NEXT: brasl %r14, __trunctfhf2@PLT
64+
; Z10-NEXT: cpsdr %f0, %f0, %f8
65+
; Z10-NEXT: ld %f8, 176(%r15) # 8-byte Reload
66+
; Z10-NEXT: lmg %r14, %r15, 296(%r15)
5267
; Z10-NEXT: br %r14
5368
;
5469
; Z16-LABEL: f3:
5570
; Z16: # %bb.0:
56-
; Z16-NEXT: vl %v1, 0(%r2), 3
57-
; Z16-NEXT: cpsdr %f0, %f1, %f0
71+
; Z16-NEXT: stmg %r14, %r15, 112(%r15)
72+
; Z16-NEXT: .cfi_offset %r14, -48
73+
; Z16-NEXT: .cfi_offset %r15, -40
74+
; Z16-NEXT: aghi %r15, -184
75+
; Z16-NEXT: .cfi_def_cfa_offset 344
76+
; Z16-NEXT: std %f8, 176(%r15) # 8-byte Spill
77+
; Z16-NEXT: .cfi_offset %f8, -168
78+
; Z16-NEXT: ldr %f8, %f0
79+
; Z16-NEXT: vl %v0, 0(%r2), 3
80+
; Z16-NEXT: la %r2, 160(%r15)
81+
; Z16-NEXT: vst %v0, 160(%r15), 3
82+
; Z16-NEXT: brasl %r14, __trunctfhf2@PLT
83+
; Z16-NEXT: cpsdr %f0, %f0, %f8
84+
; Z16-NEXT: ld %f8, 176(%r15) # 8-byte Reload
85+
; Z16-NEXT: lmg %r14, %r15, 296(%r15)
5886
; Z16-NEXT: br %r14
5987
%bh = fptrunc fp128 %b to half
6088
%res = call half @llvm.copysign.f16(half %a, half %bh)

0 commit comments

Comments
 (0)