[llvm] r333685 - [GISel]: Pattern matchers for GFSUB, GFNEG

Aditya Nandakumar via llvm-commits llvm-commits at lists.llvm.org
Thu May 31 12:30:01 PDT 2018


Author: aditya_nandakumar
Date: Thu May 31 12:30:01 2018
New Revision: 333685

URL: http://llvm.org/viewvc/llvm-project?rev=333685&view=rev
Log:
[GISel]: Pattern matchers for GFSUB, GFNEG

https://reviews.llvm.org/D47547

Add matching templates for G_FSUB, and G_FNEG.

Reviewed by: aemerson.

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

Modified: llvm/trunk/include/llvm/CodeGen/GlobalISel/MIPatternMatch.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/GlobalISel/MIPatternMatch.h?rev=333685&r1=333684&r2=333685&view=diff
==============================================================================
--- llvm/trunk/include/llvm/CodeGen/GlobalISel/MIPatternMatch.h (original)
+++ llvm/trunk/include/llvm/CodeGen/GlobalISel/MIPatternMatch.h Thu May 31 12:30:01 2018
@@ -222,6 +222,12 @@ m_GFMul(const LHS &L, const RHS &R) {
 }
 
 template <typename LHS, typename RHS>
+inline BinaryOp_match<LHS, RHS, TargetOpcode::G_FSUB, false>
+m_GFSub(const LHS &L, const RHS &R) {
+  return BinaryOp_match<LHS, RHS, TargetOpcode::G_FSUB, false>(L, R);
+}
+
+template <typename LHS, typename RHS>
 inline BinaryOp_match<LHS, RHS, TargetOpcode::G_AND, true>
 m_GAnd(const LHS &L, const RHS &R) {
   return BinaryOp_match<LHS, RHS, TargetOpcode::G_AND, true>(L, R);
@@ -305,6 +311,11 @@ inline UnaryOp_match<SrcTy, TargetOpcode
 }
 
 template <typename SrcTy>
+inline UnaryOp_match<SrcTy, TargetOpcode::G_FNEG> m_GFNeg(const SrcTy &Src) {
+  return UnaryOp_match<SrcTy, TargetOpcode::G_FNEG>(Src);
+}
+
+template <typename SrcTy>
 inline UnaryOp_match<SrcTy, TargetOpcode::COPY> m_Copy(SrcTy &&Src) {
   return UnaryOp_match<SrcTy, TargetOpcode::COPY>(std::forward<SrcTy>(Src));
 }

Modified: llvm/trunk/unittests/CodeGen/GlobalISel/PatternMatchTest.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/CodeGen/GlobalISel/PatternMatchTest.cpp?rev=333685&r1=333684&r2=333685&view=diff
==============================================================================
--- llvm/trunk/unittests/CodeGen/GlobalISel/PatternMatchTest.cpp (original)
+++ llvm/trunk/unittests/CodeGen/GlobalISel/PatternMatchTest.cpp Thu May 31 12:30:01 2018
@@ -212,6 +212,14 @@ TEST(PatternMatchInstr, MatchBinaryOp) {
   ASSERT_EQ(Cst, 42);
   ASSERT_EQ(Src0, Copies[0]);
 
+  // FSUB
+  auto MIBFSub = B.buildInstr(TargetOpcode::G_FSUB, s64, Copies[0],
+                              B.buildConstant(s64, 42));
+  match = mi_match(MIBFSub->getOperand(0).getReg(), MRI,
+                   m_GFSub(m_Reg(Src0), m_Reg()));
+  ASSERT_TRUE(match);
+  ASSERT_EQ(Src0, Copies[0]);
+
   // Build AND %0, %1
   auto MIBAnd = B.buildAnd(s64, Copies[0], Copies[1]);
   // Try to match AND.
@@ -283,7 +291,13 @@ TEST(PatternMatchInstr, MatchFPUnaryOp)
   auto MIBFabs = B.buildInstr(TargetOpcode::G_FABS, s32, Copy0s32);
   bool match = mi_match(MIBFabs->getOperand(0).getReg(), MRI, m_GFabs(m_Reg()));
   ASSERT_TRUE(match);
+
   unsigned Src;
+  auto MIBFNeg = B.buildInstr(TargetOpcode::G_FNEG, s32, Copy0s32);
+  match = mi_match(MIBFNeg->getOperand(0).getReg(), MRI, m_GFNeg(m_Reg(Src)));
+  ASSERT_TRUE(match);
+  ASSERT_EQ(Src, Copy0s32->getOperand(0).getReg());
+
   match = mi_match(MIBFabs->getOperand(0).getReg(), MRI, m_GFabs(m_Reg(Src)));
   ASSERT_TRUE(match);
   ASSERT_EQ(Src, Copy0s32->getOperand(0).getReg());




More information about the llvm-commits mailing list