diff --git a/llvm/include/llvm/CodeGen/GlobalISel/MIPatternMatch.h b/llvm/include/llvm/CodeGen/GlobalISel/MIPatternMatch.h index ea6ed322e9b1..80d1fef7533c 100644 --- a/llvm/include/llvm/CodeGen/GlobalISel/MIPatternMatch.h +++ b/llvm/include/llvm/CodeGen/GlobalISel/MIPatternMatch.h @@ -338,7 +338,7 @@ template <> struct bind_helper { }; template <> struct bind_helper { - static bool bind(const MachineRegisterInfo &MRI, LLT Ty, Register Reg) { + static bool bind(const MachineRegisterInfo &MRI, LLT &Ty, Register Reg) { Ty = MRI.getType(Reg); if (Ty.isValid()) return true; @@ -368,7 +368,7 @@ template struct bind_ty { inline bind_ty m_Reg(Register &R) { return R; } inline bind_ty m_MInstr(MachineInstr *&MI) { return MI; } -inline bind_ty m_Type(LLT Ty) { return Ty; } +inline bind_ty m_Type(LLT &Ty) { return Ty; } inline bind_ty m_Pred(CmpInst::Predicate &P) { return P; } inline operand_type_match m_Pred() { return operand_type_match(); } diff --git a/llvm/unittests/CodeGen/GlobalISel/PatternMatchTest.cpp b/llvm/unittests/CodeGen/GlobalISel/PatternMatchTest.cpp index 59a86fa5646f..bcaa321e49c1 100644 --- a/llvm/unittests/CodeGen/GlobalISel/PatternMatchTest.cpp +++ b/llvm/unittests/CodeGen/GlobalISel/PatternMatchTest.cpp @@ -576,6 +576,11 @@ TEST_F(AArch64GISelMITest, MatchMiscellaneous) { auto MIBAdd = B.buildAdd(s64, Copies[0], Copies[1]); Register Reg = MIBAdd.getReg(0); + // Extract the type. + LLT Ty; + EXPECT_TRUE(mi_match(Reg, *MRI, m_GAdd(m_Type(Ty), m_Reg()))); + EXPECT_EQ(Ty, s64); + // Only one use of Reg. B.buildCast(LLT::pointer(0, 32), MIBAdd); EXPECT_TRUE(mi_match(Reg, *MRI, m_OneUse(m_GAdd(m_Reg(), m_Reg()))));