[llvm] [DAGCombiner] Combine frem into fdiv+ftrunc+fma (PR #67642)
Simon Pilgrim via llvm-commits
llvm-commits at lists.llvm.org
Thu Sep 28 02:10:42 PDT 2023
================
@@ -16958,6 +16958,18 @@ SDValue DAGCombiner::visitFREM(SDNode *N) {
if (SDValue NewSel = foldBinOpIntoSelect(N))
return NewSel;
+ // (frem x, y) -> (fma (fneg (ftrunc (fdiv x, y))), y, x)
+ if (Flags.hasApproximateFuncs() && Flags.hasNoSignedZeros() &&
+ Flags.hasNoInfs() && !TLI.isOperationLegalOrCustom(ISD::FREM, VT) &&
+ TLI.isOperationLegalOrCustom(ISD::FTRUNC, VT) &&
+ TLI.isOperationLegalOrCustom(ISD::FMA, VT)) {
+ SDLoc Loc(N);
+ SDValue Div = DAG.getNode(ISD::FDIV, Loc, VT, N0, N1);
----------------
RKSimon wrote:
Should any flags (NSZ/NINF?) be passed on to fdiv?
https://github.com/llvm/llvm-project/pull/67642
More information about the llvm-commits
mailing list