[llvm] [DAG] Use copysign in frem power-2 fold. (PR #91751)
David Green via llvm-commits
llvm-commits at lists.llvm.org
Fri May 17 08:52:59 PDT 2024
================
@@ -17383,15 +17383,22 @@ SDValue DAGCombiner::visitFREM(SDNode *N) {
TLI.isOperationLegalOrCustom(ISD::FMUL, VT) &&
TLI.isOperationLegalOrCustom(ISD::FDIV, VT) &&
TLI.isOperationLegalOrCustom(ISD::FTRUNC, VT) &&
- DAG.isKnownToBeAPowerOfTwoFP(N1) &&
- (Flags.hasNoSignedZeros() || DAG.cannotBeOrderedNegativeFP(N0))) {
- SDValue Div = DAG.getNode(ISD::FDIV, DL, VT, N0, N1);
- SDValue Rnd = DAG.getNode(ISD::FTRUNC, DL, VT, Div);
- if (TLI.isFMAFasterThanFMulAndFAdd(DAG.getMachineFunction(), VT))
- return DAG.getNode(ISD::FMA, DL, VT, DAG.getNode(ISD::FNEG, DL, VT, Rnd),
- N1, N0);
- SDValue Mul = DAG.getNode(ISD::FMUL, DL, VT, Rnd, N1);
- return DAG.getNode(ISD::FSUB, DL, VT, N0, Mul);
+ DAG.isKnownToBeAPowerOfTwoFP(N1)) {
+ bool NeedsCopySign =
+ !Flags.hasNoSignedZeros() && !DAG.cannotBeOrderedNegativeFP(N0);
+ if (!NeedsCopySign || TLI.isOperationLegalOrCustom(ISD::FCOPYSIGN, VT)) {
----------------
davemgreen wrote:
I was aiming for either knowing that the COPYSIGN isn't necessary, or checking that the lowering was going to be at least somewhat sensible. I think you might be right though, if we've already checked legality the conditions above we can assume the copysign is fine too.
https://github.com/llvm/llvm-project/pull/91751
More information about the llvm-commits
mailing list