[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