[PATCH] D94223: [SelectionDAG] Extend immAll(Ones|Zeros)V to handle ISD::SPLAT_VECTOR

Craig Topper via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Thu Jan 7 13:30:29 PST 2021


craig.topper added a comment.

New idea, just pick opcode based on the node value type being a scalable vector.

  diff --git a/llvm/utils/TableGen/DAGISelMatcherGen.cpp b/llvm/utils/TableGen/DAGISelMatcherGen.cpp
  index 792bf17..ad99304 100644
  --- a/llvm/utils/TableGen/DAGISelMatcherGen.cpp
  +++ b/llvm/utils/TableGen/DAGISelMatcherGen.cpp
  @@ -282,7 +282,9 @@ void MatcherGen::EmitLeafMatchCode(const TreePatternNode *N) {
       // check to ensure that this gets folded into the normal top-level
       // OpcodeSwitch.
       if (N == Pattern.getSrcPattern()) {
  -      const SDNodeInfo &NI = CGP.getSDNodeInfo(CGP.getSDNodeNamed("build_vector"));
  +      MVT VT = N->getSimpleType(0);
  +      std::string Name = VT.isScalableVector() ? "splat_vector" : "build_vector";
  +      const SDNodeInfo &NI = CGP.getSDNodeInfo(CGP.getSDNodeNamed(Name));
         AddMatcher(new CheckOpcodeMatcher(NI));
       }
       return AddMatcher(new CheckImmAllOnesVMatcher());
  @@ -292,7 +294,9 @@ void MatcherGen::EmitLeafMatchCode(const TreePatternNode *N) {
       // check to ensure that this gets folded into the normal top-level
       // OpcodeSwitch.
       if (N == Pattern.getSrcPattern()) {
  -      const SDNodeInfo &NI = CGP.getSDNodeInfo(CGP.getSDNodeNamed("build_vector"));
  +      MVT VT = N->getSimpleType(0);
  +      std::string Name = VT.isScalableVector() ? "splat_vector" : "build_vector";
  +      const SDNodeInfo &NI = CGP.getSDNodeInfo(CGP.getSDNodeNamed(Name));
         AddMatcher(new CheckOpcodeMatcher(NI));
       }
       return AddMatcher(new CheckImmAllZerosVMatcher());


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D94223/new/

https://reviews.llvm.org/D94223



More information about the llvm-commits mailing list