aboutsummaryrefslogtreecommitdiff
path: root/llvm/unittests/CodeGen/GlobalISel/PatternMatchTest.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/unittests/CodeGen/GlobalISel/PatternMatchTest.cpp')
-rw-r--r--llvm/unittests/CodeGen/GlobalISel/PatternMatchTest.cpp26
1 files changed, 26 insertions, 0 deletions
diff --git a/llvm/unittests/CodeGen/GlobalISel/PatternMatchTest.cpp b/llvm/unittests/CodeGen/GlobalISel/PatternMatchTest.cpp
index bcaa321..fc76d40 100644
--- a/llvm/unittests/CodeGen/GlobalISel/PatternMatchTest.cpp
+++ b/llvm/unittests/CodeGen/GlobalISel/PatternMatchTest.cpp
@@ -224,6 +224,32 @@ TEST_F(AArch64GISelMITest, MatchBinaryOp) {
auto MIBAddCst = B.buildAdd(s64, MIBCst, Copies[0]);
auto MIBUnmerge = B.buildUnmerge({s32, s32}, B.buildConstant(s64, 42));
+ // Match min/max, and make sure they're commutative.
+ auto SMin = B.buildSMin(s64, Copies[2], MIBAdd);
+ EXPECT_TRUE(mi_match(SMin.getReg(0), *MRI,
+ m_GSMin(m_GAdd(m_Reg(Src1), m_Reg(Src2)), m_Reg(Src0))));
+ EXPECT_EQ(Src0, Copies[2]);
+ EXPECT_EQ(Src1, Copies[0]);
+ EXPECT_EQ(Src2, Copies[1]);
+ auto SMax = B.buildSMax(s64, Copies[2], MIBAdd);
+ EXPECT_TRUE(mi_match(SMax.getReg(0), *MRI,
+ m_GSMax(m_GAdd(m_Reg(Src1), m_Reg(Src2)), m_Reg(Src0))));
+ EXPECT_EQ(Src0, Copies[2]);
+ EXPECT_EQ(Src1, Copies[0]);
+ EXPECT_EQ(Src2, Copies[1]);
+ auto UMin = B.buildUMin(s64, Copies[2], MIBAdd);
+ EXPECT_TRUE(mi_match(UMin.getReg(0), *MRI,
+ m_GUMin(m_GAdd(m_Reg(Src1), m_Reg(Src2)), m_Reg(Src0))));
+ EXPECT_EQ(Src0, Copies[2]);
+ EXPECT_EQ(Src1, Copies[0]);
+ EXPECT_EQ(Src2, Copies[1]);
+ auto UMax = B.buildUMax(s64, Copies[2], MIBAdd);
+ EXPECT_TRUE(mi_match(UMax.getReg(0), *MRI,
+ m_GUMax(m_GAdd(m_Reg(Src1), m_Reg(Src2)), m_Reg(Src0))));
+ EXPECT_EQ(Src0, Copies[2]);
+ EXPECT_EQ(Src1, Copies[0]);
+ EXPECT_EQ(Src2, Copies[1]);
+
// m_BinOp with opcode.
// Match binary instruction, opcode and its non-commutative operands.
match = mi_match(MIBAddCst, *MRI,