[llvm] 323db5d - GlobalISel: Add matcher for G_LSHR

Matt Arsenault via llvm-commits llvm-commits at lists.llvm.org
Mon Feb 17 06:20:22 PST 2020


Author: Matt Arsenault
Date: 2020-02-17T09:20:13-05:00
New Revision: 323db5d666cbba9286239979c7668722066d1632

URL: https://github.com/llvm/llvm-project/commit/323db5d666cbba9286239979c7668722066d1632
DIFF: https://github.com/llvm/llvm-project/commit/323db5d666cbba9286239979c7668722066d1632.diff

LOG: GlobalISel: Add matcher for G_LSHR

Added: 
    

Modified: 
    llvm/include/llvm/CodeGen/GlobalISel/MIPatternMatch.h
    llvm/unittests/CodeGen/GlobalISel/PatternMatchTest.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/include/llvm/CodeGen/GlobalISel/MIPatternMatch.h b/llvm/include/llvm/CodeGen/GlobalISel/MIPatternMatch.h
index 6cedb9ee5279..65b1948a1967 100644
--- a/llvm/include/llvm/CodeGen/GlobalISel/MIPatternMatch.h
+++ b/llvm/include/llvm/CodeGen/GlobalISel/MIPatternMatch.h
@@ -241,6 +241,12 @@ inline BinaryOp_match<LHS, RHS, TargetOpcode::G_OR, true> m_GOr(const LHS &L,
   return BinaryOp_match<LHS, RHS, TargetOpcode::G_OR, true>(L, R);
 }
 
+template <typename LHS, typename RHS>
+inline BinaryOp_match<LHS, RHS, TargetOpcode::G_LSHR, false>
+m_GLShr(const LHS &L, const RHS &R) {
+  return BinaryOp_match<LHS, RHS, TargetOpcode::G_LSHR, false>(L, R);
+}
+
 // Helper for unary instructions (G_[ZSA]EXT/G_TRUNC) etc
 template <typename SrcTy, unsigned Opcode> struct UnaryOp_match {
   SrcTy L;

diff  --git a/llvm/unittests/CodeGen/GlobalISel/PatternMatchTest.cpp b/llvm/unittests/CodeGen/GlobalISel/PatternMatchTest.cpp
index 1ceedbe420e7..66c1d6793a7a 100644
--- a/llvm/unittests/CodeGen/GlobalISel/PatternMatchTest.cpp
+++ b/llvm/unittests/CodeGen/GlobalISel/PatternMatchTest.cpp
@@ -45,6 +45,7 @@ TEST_F(GISelMITest, MatchBinaryOp) {
   setUp();
   if (!TM)
     return;
+  LLT s32 = LLT::scalar(32);
   LLT s64 = LLT::scalar(64);
   auto MIBAdd = B.buildAdd(s64, Copies[0], Copies[1]);
   // Test case for no bind.
@@ -127,6 +128,15 @@ TEST_F(GISelMITest, MatchBinaryOp) {
   EXPECT_TRUE(match);
   EXPECT_EQ(Src0, Copies[0]);
   EXPECT_EQ(Src1, Copies[1]);
+
+  // Match lshr, and make sure a 
diff erent shift amount type works.
+  auto TruncCopy1 = B.buildTrunc(s32, Copies[1]);
+  auto LShr = B.buildLShr(s64, Copies[0], TruncCopy1);
+  match = mi_match(LShr.getReg(0), *MRI,
+                   m_GLShr(m_Reg(Src0), m_Reg(Src1)));
+  EXPECT_TRUE(match);
+  EXPECT_EQ(Src0, Copies[0]);
+  EXPECT_EQ(Src1, TruncCopy1.getReg(0));
 }
 
 TEST_F(GISelMITest, MatchICmp) {


        


More information about the llvm-commits mailing list