forked from OSchip/llvm-project
[MIPatternMatch] Add matcher for G_PTR_ADD
Add a matcher which recognizes G_PTR_ADD and add a test. Differential Revision: https://reviews.llvm.org/D94348
This commit is contained in:
parent
175288a1af
commit
ddcb0aae8b
|
@ -220,6 +220,12 @@ m_GAdd(const LHS &L, const RHS &R) {
|
||||||
return BinaryOp_match<LHS, RHS, TargetOpcode::G_ADD, true>(L, R);
|
return BinaryOp_match<LHS, RHS, TargetOpcode::G_ADD, true>(L, R);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <typename LHS, typename RHS>
|
||||||
|
inline BinaryOp_match<LHS, RHS, TargetOpcode::G_PTR_ADD, true>
|
||||||
|
m_GPtrAdd(const LHS &L, const RHS &R) {
|
||||||
|
return BinaryOp_match<LHS, RHS, TargetOpcode::G_PTR_ADD, true>(L, R);
|
||||||
|
}
|
||||||
|
|
||||||
template <typename LHS, typename RHS>
|
template <typename LHS, typename RHS>
|
||||||
inline BinaryOp_match<LHS, RHS, TargetOpcode::G_SUB> m_GSub(const LHS &L,
|
inline BinaryOp_match<LHS, RHS, TargetOpcode::G_SUB> m_GSub(const LHS &L,
|
||||||
const RHS &R) {
|
const RHS &R) {
|
||||||
|
|
|
@ -47,6 +47,7 @@ TEST_F(AArch64GISelMITest, MatchBinaryOp) {
|
||||||
return;
|
return;
|
||||||
LLT s32 = LLT::scalar(32);
|
LLT s32 = LLT::scalar(32);
|
||||||
LLT s64 = LLT::scalar(64);
|
LLT s64 = LLT::scalar(64);
|
||||||
|
LLT p0 = LLT::pointer(0, 64);
|
||||||
auto MIBAdd = B.buildAdd(s64, Copies[0], Copies[1]);
|
auto MIBAdd = B.buildAdd(s64, Copies[0], Copies[1]);
|
||||||
// Test case for no bind.
|
// Test case for no bind.
|
||||||
bool match =
|
bool match =
|
||||||
|
@ -145,6 +146,13 @@ TEST_F(AArch64GISelMITest, MatchBinaryOp) {
|
||||||
EXPECT_TRUE(match);
|
EXPECT_TRUE(match);
|
||||||
EXPECT_EQ(Src0, Copies[0]);
|
EXPECT_EQ(Src0, Copies[0]);
|
||||||
EXPECT_EQ(Src1, TruncCopy1.getReg(0));
|
EXPECT_EQ(Src1, TruncCopy1.getReg(0));
|
||||||
|
|
||||||
|
// Build a G_PTR_ADD and check that we can match it.
|
||||||
|
auto PtrAdd = B.buildPtrAdd(p0, {B.buildUndef(p0)}, Copies[0]);
|
||||||
|
match = mi_match(PtrAdd.getReg(0), *MRI, m_GPtrAdd(m_Reg(Src0), m_Reg(Src1)));
|
||||||
|
EXPECT_TRUE(match);
|
||||||
|
EXPECT_EQ(Src0, PtrAdd->getOperand(1).getReg());
|
||||||
|
EXPECT_EQ(Src1, Copies[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(AArch64GISelMITest, MatchICmp) {
|
TEST_F(AArch64GISelMITest, MatchICmp) {
|
||||||
|
|
Loading…
Reference in New Issue