mirror of
https://github.com/RPCS3/llvm.git
synced 2025-03-01 23:25:56 +00:00
[GISel]: Fix incorrect type used in Pattern Match for ICst
getConstantVRegVal() returns int64_t but we use uint64_t. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@327461 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
a3a491bfb1
commit
39745f957e
@ -43,8 +43,8 @@ inline OneUse_match<SubPat> m_OneUse(const SubPat &SP) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
struct ConstantMatch {
|
struct ConstantMatch {
|
||||||
uint64_t &CR;
|
int64_t &CR;
|
||||||
ConstantMatch(uint64_t &C) : CR(C) {}
|
ConstantMatch(int64_t &C) : CR(C) {}
|
||||||
bool match(const MachineRegisterInfo &MRI, unsigned Reg) {
|
bool match(const MachineRegisterInfo &MRI, unsigned Reg) {
|
||||||
if (auto MaybeCst = getConstantVRegVal(Reg, MRI)) {
|
if (auto MaybeCst = getConstantVRegVal(Reg, MRI)) {
|
||||||
CR = *MaybeCst;
|
CR = *MaybeCst;
|
||||||
@ -54,7 +54,7 @@ struct ConstantMatch {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
inline ConstantMatch m_ICst(uint64_t &Cst) { return ConstantMatch(Cst); }
|
inline ConstantMatch m_ICst(int64_t &Cst) { return ConstantMatch(Cst); }
|
||||||
|
|
||||||
// TODO: Rework this for different kinds of MachineOperand.
|
// TODO: Rework this for different kinds of MachineOperand.
|
||||||
// Currently assumes the Src for a match is a register.
|
// Currently assumes the Src for a match is a register.
|
||||||
|
@ -134,10 +134,10 @@ TEST(PatternMatchInstr, MatchIntConstant) {
|
|||||||
MachineRegisterInfo &MRI = MF->getRegInfo();
|
MachineRegisterInfo &MRI = MF->getRegInfo();
|
||||||
B.setInsertPt(*EntryMBB, EntryMBB->end());
|
B.setInsertPt(*EntryMBB, EntryMBB->end());
|
||||||
auto MIBCst = B.buildConstant(LLT::scalar(64), 42);
|
auto MIBCst = B.buildConstant(LLT::scalar(64), 42);
|
||||||
uint64_t Cst;
|
int64_t Cst;
|
||||||
bool match = mi_match(MIBCst->getOperand(0).getReg(), MRI, m_ICst(Cst));
|
bool match = mi_match(MIBCst->getOperand(0).getReg(), MRI, m_ICst(Cst));
|
||||||
ASSERT_TRUE(match);
|
ASSERT_TRUE(match);
|
||||||
ASSERT_EQ(Cst, (uint64_t)42);
|
ASSERT_EQ(Cst, 42);
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(PatternMatchInstr, MatchBinaryOp) {
|
TEST(PatternMatchInstr, MatchBinaryOp) {
|
||||||
@ -189,11 +189,11 @@ TEST(PatternMatchInstr, MatchBinaryOp) {
|
|||||||
auto MIBMul2 = B.buildMul(s64, Copies[0], B.buildConstant(s64, 42));
|
auto MIBMul2 = B.buildMul(s64, Copies[0], B.buildConstant(s64, 42));
|
||||||
// Try to match MUL(Cst, Reg) on src of MUL(Reg, Cst) to validate
|
// Try to match MUL(Cst, Reg) on src of MUL(Reg, Cst) to validate
|
||||||
// commutativity.
|
// commutativity.
|
||||||
uint64_t Cst;
|
int64_t Cst;
|
||||||
match = mi_match(MIBMul2->getOperand(0).getReg(), MRI,
|
match = mi_match(MIBMul2->getOperand(0).getReg(), MRI,
|
||||||
m_GMul(m_ICst(Cst), m_Reg(Src0)));
|
m_GMul(m_ICst(Cst), m_Reg(Src0)));
|
||||||
ASSERT_TRUE(match);
|
ASSERT_TRUE(match);
|
||||||
ASSERT_EQ(Cst, (uint64_t)42);
|
ASSERT_EQ(Cst, 42);
|
||||||
ASSERT_EQ(Src0, Copies[0]);
|
ASSERT_EQ(Src0, Copies[0]);
|
||||||
|
|
||||||
// Make sure commutative doesn't work with something like SUB.
|
// Make sure commutative doesn't work with something like SUB.
|
||||||
@ -208,7 +208,7 @@ TEST(PatternMatchInstr, MatchBinaryOp) {
|
|||||||
match = mi_match(MIBFMul->getOperand(0).getReg(), MRI,
|
match = mi_match(MIBFMul->getOperand(0).getReg(), MRI,
|
||||||
m_GFMul(m_ICst(Cst), m_Reg(Src0)));
|
m_GFMul(m_ICst(Cst), m_Reg(Src0)));
|
||||||
ASSERT_TRUE(match);
|
ASSERT_TRUE(match);
|
||||||
ASSERT_EQ(Cst, (uint64_t)42);
|
ASSERT_EQ(Cst, 42);
|
||||||
ASSERT_EQ(Src0, Copies[0]);
|
ASSERT_EQ(Src0, Copies[0]);
|
||||||
|
|
||||||
// Build AND %0, %1
|
// Build AND %0, %1
|
||||||
|
Loading…
x
Reference in New Issue
Block a user