[llvm] [DAG] SDPatternMatch - Fix m_Reassociatable mismatching (PR #170061)
Min-Yih Hsu via llvm-commits
llvm-commits at lists.llvm.org
Tue Dec 2 16:35:21 PST 2025
================
@@ -842,6 +842,16 @@ TEST_F(SelectionDAGPatternMatchTest, matchReassociatableOp) {
EXPECT_TRUE(sd_match(
MUL, m_ReassociatableMul(m_Value(), m_Value(), m_Value(), m_Value())));
+ // (Op0 + Op1) + Op0 binds correctly, allowing commutation
+ SDValue ADD010 = DAG->getNode(ISD::ADD, DL, Int32VT, ADD01, Op0);
+ SDValue A, B;
+ EXPECT_TRUE(sd_match(
+ ADD010, m_ReassociatableAdd(m_Value(A), m_Value(B), m_Deferred(A))));
+ EXPECT_TRUE(sd_match(
+ ADD010, m_ReassociatableAdd(m_Value(A), m_Value(B), m_Deferred(B))));
+ EXPECT_FALSE(sd_match(
+ ADD010, m_ReassociatableAdd(m_Value(A), m_Deferred(A), m_Deferred(A))));
+
----------------
mshockwave wrote:
could you add some negative test cases? That is, showing that this pattern does _not_ match when it should not.
https://github.com/llvm/llvm-project/pull/170061
More information about the llvm-commits
mailing list