[llvm] [DAG] Fold urem(urem(A, BCst), Op1Cst) -> urem(A, Op1Cst) (PR #159517)
Simon Pilgrim via llvm-commits
llvm-commits at lists.llvm.org
Thu Sep 18 03:09:24 PDT 2025
================
@@ -5405,6 +5405,14 @@ SDValue DAGCombiner::visitREM(SDNode *N) {
if (SDValue DivRem = useDivRem(N))
return DivRem.getValue(1);
+ // fold urem(urem(A, BCst), Op1Cst) -> urem(A, Op1Cst)
+ SDValue A;
+ APInt Op1Cst, BCst;
+ if (sd_match(N0, m_URem(m_Value(A), m_ConstInt(BCst))) &&
+ sd_match(N1, m_ConstInt(Op1Cst)) && BCst.urem(Op1Cst).isZero()) {
+ return DAG.getNode(ISD::UREM, DL, VT, A, DAG.getConstant(Op1Cst, DL, VT));
+ }
----------------
RKSimon wrote:
visitREM is used for SREM and UREM - so we need to check:
```
if (sd_match(N, m_URem(m_URem(m_Value(A), m_ConstInt(BCst)), m_ConstInt(Op1Cst))) && BCst.urem(Op1Cst).isZero()) {
```
https://github.com/llvm/llvm-project/pull/159517
More information about the llvm-commits
mailing list