[llvm] 7273ad1 - [DAG] visitABD - rewrite "(abs x, 0)" folds to use SDPatternMatch
Simon Pilgrim via llvm-commits
llvm-commits at lists.llvm.org
Sun May 19 03:50:21 PDT 2024
Author: Simon Pilgrim
Date: 2024-05-19T11:49:51+01:00
New Revision: 7273ad123850a7b44c0625d098ebb49153bf855a
URL: https://github.com/llvm/llvm-project/commit/7273ad123850a7b44c0625d098ebb49153bf855a
DIFF: https://github.com/llvm/llvm-project/commit/7273ad123850a7b44c0625d098ebb49153bf855a.diff
LOG: [DAG] visitABD - rewrite "(abs x, 0)" folds to use SDPatternMatch
No need for this to be vector specific, and its more likely that scalar cases will appear after #92576
Added:
Modified:
llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
Removed:
################################################################################
diff --git a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
index bf85212e6a92e..8607b50175359 100644
--- a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
+++ b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
@@ -5253,24 +5253,25 @@ SDValue DAGCombiner::visitABD(SDNode *N) {
!DAG.isConstantIntBuildVectorOrConstantInt(N1))
return DAG.getNode(Opcode, DL, N->getVTList(), N1, N0);
- if (VT.isVector()) {
+ if (VT.isVector())
if (SDValue FoldedVOp = SimplifyVBinOp(N, DL))
return FoldedVOp;
- // fold (abds x, 0) -> abs x
- // fold (abdu x, 0) -> x
- if (ISD::isConstantSplatVectorAllZeros(N1.getNode())) {
- if (Opcode == ISD::ABDS)
- return DAG.getNode(ISD::ABS, DL, VT, N0);
- if (Opcode == ISD::ABDU)
- return N0;
- }
- }
-
// fold (abd x, undef) -> 0
if (N0.isUndef() || N1.isUndef())
return DAG.getConstant(0, DL, VT);
+ SDValue X;
+
+ // fold (abds x, 0) -> abs x
+ if (sd_match(N, m_c_BinOp(ISD::ABDS, m_Value(X), m_Zero())) &&
+ (!LegalOperations || hasOperation(ISD::ABS, VT)))
+ return DAG.getNode(ISD::ABS, DL, VT, X);
+
+ // fold (abdu x, 0) -> x
+ if (sd_match(N, m_c_BinOp(ISD::ABDU, m_Value(X), m_Zero())))
+ return X;
+
// fold (abds x, y) -> (abdu x, y) iff both args are known positive
if (Opcode == ISD::ABDS && hasOperation(ISD::ABDU, VT) &&
DAG.SignBitIsZero(N0) && DAG.SignBitIsZero(N1))
More information about the llvm-commits
mailing list