inline ConstantMatch m_ICst(int64_t &Cst) { return ConstantMatch(Cst); }
+struct ICstRegMatch {
+ Register &CR;
+ ICstRegMatch(Register &C) : CR(C) {}
+ bool match(const MachineRegisterInfo &MRI, Register Reg) {
+ if (auto MaybeCst = getConstantVRegValWithLookThrough(
+ Reg, MRI, /*LookThroughInstrs*/ true,
+ /*HandleFConstants*/ false)) {
+ CR = MaybeCst->VReg;
+ return true;
+ }
+ return false;
+ }
+};
+
+inline ICstRegMatch m_ICst(Register &Reg) { return ICstRegMatch(Reg); }
+
/// Matcher for a specific constant value.
struct SpecificConstantMatch {
int64_t RequestedVal;
EXPECT_EQ(Cst, 42);
}
+TEST_F(AArch64GISelMITest, MatchIntConstantRegister) {
+ setUp();
+ if (!TM)
+ return;
+ auto MIBCst = B.buildConstant(LLT::scalar(64), 42);
+ Register Src0;
+ bool match = mi_match(MIBCst.getReg(0), *MRI, m_ICst(Src0));
+ EXPECT_TRUE(match);
+ EXPECT_EQ(Src0, MIBCst.getReg(0));
+}
+
TEST_F(AArch64GISelMITest, MatchBinaryOp) {
setUp();
if (!TM)