diff --git a/llvm/utils/TableGen/CodeGenDAGPatterns.cpp b/llvm/utils/TableGen/CodeGenDAGPatterns.cpp index 2d8b52c10cc0e..baaa4ee24c104 100644 --- a/llvm/utils/TableGen/CodeGenDAGPatterns.cpp +++ b/llvm/utils/TableGen/CodeGenDAGPatterns.cpp @@ -4398,7 +4398,7 @@ void CodeGenDAGPatterns::ExpandHwModeBasedTypes() { PatternsToMatch.emplace_back(P.getSrcRecord(), P.getPredicates(), std::move(NewSrc), std::move(NewDst), P.getDstRegs(), P.getAddedComplexity(), - Record::getNewUID(Records), Mode, Check); + Record::getNewUID(Records), Check); }; for (PatternToMatch &P : Copy) { @@ -4769,7 +4769,6 @@ void CodeGenDAGPatterns::GenerateVariants() { Variant, PatternsToMatch[i].getDstPatternShared(), PatternsToMatch[i].getDstRegs(), PatternsToMatch[i].getAddedComplexity(), Record::getNewUID(Records), - PatternsToMatch[i].getForceMode(), PatternsToMatch[i].getHwModeFeatures()); } diff --git a/llvm/utils/TableGen/CodeGenDAGPatterns.h b/llvm/utils/TableGen/CodeGenDAGPatterns.h index 2f11535171de3..8a02e411f8b8d 100644 --- a/llvm/utils/TableGen/CodeGenDAGPatterns.h +++ b/llvm/utils/TableGen/CodeGenDAGPatterns.h @@ -256,7 +256,7 @@ struct TypeSetByHwMode : public InfoByHwMode { raw_ostream &operator<<(raw_ostream &OS, const TypeSetByHwMode &T); struct TypeInfer { - TypeInfer(TreePattern &T) : TP(T), ForceMode(0) {} + TypeInfer(TreePattern &T) : TP(T) {} bool isConcrete(const TypeSetByHwMode &VTS, bool AllowEmpty) const { return VTS.isValueTypeByHwMode(AllowEmpty); @@ -352,8 +352,6 @@ struct TypeInfer { }; TreePattern &TP; - unsigned ForceMode; // Mode to use when set. - bool CodeGen = false; // Set during generation of matcher code. bool Validate = true; // Indicate whether to validate types. private: @@ -1079,17 +1077,16 @@ class PatternToMatch { std::string HwModeFeatures; int AddedComplexity; // Add to matching pattern complexity. unsigned ID; // Unique ID for the record. - unsigned ForceMode; // Force this mode in type inference when set. public: PatternToMatch(Record *srcrecord, ListInit *preds, TreePatternNodePtr src, TreePatternNodePtr dst, std::vector dstregs, - int complexity, unsigned uid, unsigned setmode = 0, + int complexity, unsigned uid, const Twine &hwmodefeatures = "") : SrcRecord(srcrecord), Predicates(preds), SrcPattern(src), DstPattern(dst), Dstregs(std::move(dstregs)), HwModeFeatures(hwmodefeatures.str()), AddedComplexity(complexity), - ID(uid), ForceMode(setmode) {} + ID(uid) {} Record *getSrcRecord() const { return SrcRecord; } ListInit *getPredicates() const { return Predicates; } @@ -1101,7 +1098,6 @@ class PatternToMatch { StringRef getHwModeFeatures() const { return HwModeFeatures; } int getAddedComplexity() const { return AddedComplexity; } unsigned getID() const { return ID; } - unsigned getForceMode() const { return ForceMode; } std::string getPredicateCheck() const; void getPredicateRecords(SmallVectorImpl &PredicateRecs) const; diff --git a/llvm/utils/TableGen/DAGISelMatcherGen.cpp b/llvm/utils/TableGen/DAGISelMatcherGen.cpp index c8d47e9a7503f..c90375ad5fe60 100644 --- a/llvm/utils/TableGen/DAGISelMatcherGen.cpp +++ b/llvm/utils/TableGen/DAGISelMatcherGen.cpp @@ -110,15 +110,13 @@ namespace { Matcher *GetMatcher() const { return TheMatcher; } private: void AddMatcher(Matcher *NewNode); - void InferPossibleTypes(unsigned ForceMode); + void InferPossibleTypes(); // Matcher Generation. - void EmitMatchCode(const TreePatternNode *N, TreePatternNode *NodeNoTypes, - unsigned ForceMode); + void EmitMatchCode(const TreePatternNode *N, TreePatternNode *NodeNoTypes); void EmitLeafMatchCode(const TreePatternNode *N); void EmitOperatorMatchCode(const TreePatternNode *N, - TreePatternNode *NodeNoTypes, - unsigned ForceMode); + TreePatternNode *NodeNoTypes); /// If this is the first time a node with unique identifier Name has been /// seen, record it. Otherwise, emit a check to make sure this is the same @@ -167,19 +165,17 @@ MatcherGen::MatcherGen(const PatternToMatch &pattern, PatWithNoTypes->RemoveAllTypes(); // If there are types that are manifestly known, infer them. - InferPossibleTypes(Pattern.getForceMode()); + InferPossibleTypes(); } /// InferPossibleTypes - As we emit the pattern, we end up generating type /// checks and applying them to the 'PatWithNoTypes' tree. As we do this, we /// want to propagate implied types as far throughout the tree as possible so /// that we avoid doing redundant type checks. This does the type propagation. -void MatcherGen::InferPossibleTypes(unsigned ForceMode) { +void MatcherGen::InferPossibleTypes() { // TP - Get *SOME* tree pattern, we don't care which. It is only used for // diagnostics, which we know are impossible at this point. TreePattern &TP = *CGP.pf_begin()->second; - TP.getInfer().CodeGen = true; - TP.getInfer().ForceMode = ForceMode; bool MadeChange = true; while (MadeChange) @@ -304,8 +300,7 @@ void MatcherGen::EmitLeafMatchCode(const TreePatternNode *N) { } void MatcherGen::EmitOperatorMatchCode(const TreePatternNode *N, - TreePatternNode *NodeNoTypes, - unsigned ForceMode) { + TreePatternNode *NodeNoTypes) { assert(!N->isLeaf() && "Not an operator?"); if (N->getOperator()->isSubClassOf("ComplexPattern")) { @@ -359,7 +354,7 @@ void MatcherGen::EmitOperatorMatchCode(const TreePatternNode *N, // Match the LHS of the AND as appropriate. AddMatcher(new MoveChildMatcher(0)); - EmitMatchCode(N->getChild(0), NodeNoTypes->getChild(0), ForceMode); + EmitMatchCode(N->getChild(0), NodeNoTypes->getChild(0)); AddMatcher(new MoveParentMatcher()); return; } @@ -458,7 +453,7 @@ void MatcherGen::EmitOperatorMatchCode(const TreePatternNode *N, // Get the code suitable for matching this child. Move to the child, check // it then move back to the parent. AddMatcher(new MoveChildMatcher(OpNo)); - EmitMatchCode(N->getChild(i), NodeNoTypes->getChild(i), ForceMode); + EmitMatchCode(N->getChild(i), NodeNoTypes->getChild(i)); AddMatcher(new MoveParentMatcher()); } } @@ -499,8 +494,7 @@ bool MatcherGen::recordUniqueNode(ArrayRef Names) { } void MatcherGen::EmitMatchCode(const TreePatternNode *N, - TreePatternNode *NodeNoTypes, - unsigned ForceMode) { + TreePatternNode *NodeNoTypes) { // If N and NodeNoTypes don't agree on a type, then this is a case where we // need to do a type check. Emit the check, apply the type to NodeNoTypes and // reinfer any correlated types. @@ -509,7 +503,7 @@ void MatcherGen::EmitMatchCode(const TreePatternNode *N, for (unsigned i = 0, e = NodeNoTypes->getNumTypes(); i != e; ++i) { if (NodeNoTypes->getExtType(i) == N->getExtType(i)) continue; NodeNoTypes->setType(i, N->getExtType(i)); - InferPossibleTypes(ForceMode); + InferPossibleTypes(); ResultsToTypeCheck.push_back(i); } @@ -531,7 +525,7 @@ void MatcherGen::EmitMatchCode(const TreePatternNode *N, if (N->isLeaf()) EmitLeafMatchCode(N); else - EmitOperatorMatchCode(N, NodeNoTypes, ForceMode); + EmitOperatorMatchCode(N, NodeNoTypes); // If there are node predicates for this node, generate their checks. for (unsigned i = 0, e = N->getPredicateCalls().size(); i != e; ++i) { @@ -573,8 +567,7 @@ bool MatcherGen::EmitMatcherCode(unsigned Variant) { } // Emit the matcher for the pattern structure and types. - EmitMatchCode(Pattern.getSrcPattern(), PatWithNoTypes.get(), - Pattern.getForceMode()); + EmitMatchCode(Pattern.getSrcPattern(), PatWithNoTypes.get()); // If the pattern has a predicate on it (e.g. only enabled when a subtarget // feature is around, do the check).