@@ -224,6 +224,32 @@ TEST_F(AArch64GISelMITest, MatchBinaryOp) {
224224 auto MIBAddCst = B.buildAdd (s64, MIBCst, Copies[0 ]);
225225 auto MIBUnmerge = B.buildUnmerge ({s32, s32}, B.buildConstant (s64, 42 ));
226226
227+ // Match min/max, and make sure they're commutative.
228+ auto SMin = B.buildSMin (s64, Copies[2 ], MIBAdd);
229+ EXPECT_TRUE (mi_match (SMin.getReg (0 ), *MRI,
230+ m_GSMin (m_GAdd (m_Reg (Src1), m_Reg (Src2)), m_Reg (Src0))));
231+ EXPECT_EQ (Src0, Copies[2 ]);
232+ EXPECT_EQ (Src1, Copies[0 ]);
233+ EXPECT_EQ (Src2, Copies[1 ]);
234+ auto SMax = B.buildSMax (s64, Copies[2 ], MIBAdd);
235+ EXPECT_TRUE (mi_match (SMax.getReg (0 ), *MRI,
236+ m_GSMax (m_GAdd (m_Reg (Src1), m_Reg (Src2)), m_Reg (Src0))));
237+ EXPECT_EQ (Src0, Copies[2 ]);
238+ EXPECT_EQ (Src1, Copies[0 ]);
239+ EXPECT_EQ (Src2, Copies[1 ]);
240+ auto UMin = B.buildUMin (s64, Copies[2 ], MIBAdd);
241+ EXPECT_TRUE (mi_match (UMin.getReg (0 ), *MRI,
242+ m_GUMin (m_GAdd (m_Reg (Src1), m_Reg (Src2)), m_Reg (Src0))));
243+ EXPECT_EQ (Src0, Copies[2 ]);
244+ EXPECT_EQ (Src1, Copies[0 ]);
245+ EXPECT_EQ (Src2, Copies[1 ]);
246+ auto UMax = B.buildUMax (s64, Copies[2 ], MIBAdd);
247+ EXPECT_TRUE (mi_match (UMax.getReg (0 ), *MRI,
248+ m_GUMax (m_GAdd (m_Reg (Src1), m_Reg (Src2)), m_Reg (Src0))));
249+ EXPECT_EQ (Src0, Copies[2 ]);
250+ EXPECT_EQ (Src1, Copies[0 ]);
251+ EXPECT_EQ (Src2, Copies[1 ]);
252+
227253 // m_BinOp with opcode.
228254 // Match binary instruction, opcode and its non-commutative operands.
229255 match = mi_match (MIBAddCst, *MRI,
0 commit comments