Lines Matching refs:N

116     void EmitMatchCode(const TreePatternNode *N, TreePatternNode *NodeNoTypes);
117 void EmitLeafMatchCode(const TreePatternNode *N);
118 void EmitOperatorMatchCode(const TreePatternNode *N,
134 void EmitResultOperand(const TreePatternNode *N,
136 void EmitResultOfNamedOperand(const TreePatternNode *N,
138 void EmitResultLeafAsOperand(const TreePatternNode *N,
140 void EmitResultInstructionAsOperand(const TreePatternNode *N,
142 void EmitResultSDNodeXFormAsOperand(const TreePatternNode *N,
203 void MatcherGen::EmitLeafMatchCode(const TreePatternNode *N) { in EmitLeafMatchCode() argument
204 assert(N->isLeaf() && "Not a leaf?"); in EmitLeafMatchCode()
207 if (IntInit *II = dyn_cast<IntInit>(N->getLeafValue())) { in EmitLeafMatchCode()
211 if (N == Pattern.getSrcPattern()) { in EmitLeafMatchCode()
220 if (isa<UnsetInit>(N->getLeafValue())) { in EmitLeafMatchCode()
221 assert(N->hasName() && "Unnamed ? leaf"); in EmitLeafMatchCode()
225 DefInit *DI = dyn_cast<DefInit>(N->getLeafValue()); in EmitLeafMatchCode()
227 errs() << "Unknown leaf kind: " << *N << "\n"; in EmitLeafMatchCode()
237 if (N->hasName()) in EmitLeafMatchCode()
267 if (N->getName().empty()) { in EmitLeafMatchCode()
270 OS << "We expect complex pattern uses to have names: " << *N; in EmitLeafMatchCode()
276 unsigned InputOperand = VariableMap[N->getName()] - 1; in EmitLeafMatchCode()
277 MatchedComplexPatterns.push_back(std::make_pair(N, InputOperand)); in EmitLeafMatchCode()
286 if (N == Pattern.getSrcPattern()) { in EmitLeafMatchCode()
287 MVT VT = N->getSimpleType(0); in EmitLeafMatchCode()
299 errs() << "Unknown leaf kind: " << *N << "\n"; in EmitLeafMatchCode()
303 void MatcherGen::EmitOperatorMatchCode(const TreePatternNode *N, in EmitOperatorMatchCode() argument
305 assert(!N->isLeaf() && "Not an operator?"); in EmitOperatorMatchCode()
307 if (N->getOperator()->isSubClassOf("ComplexPattern")) { in EmitOperatorMatchCode()
311 std::string PatternName = std::string(N->getOperator()->getName()); in EmitOperatorMatchCode()
312 for (unsigned i = 0; i < N->getNumChildren(); ++i) { in EmitOperatorMatchCode()
314 PatternName += N->getChild(i)->getName(); in EmitOperatorMatchCode()
318 auto NodeAndOpNum = std::make_pair(N, NextRecordedOperandNo - 1); in EmitOperatorMatchCode()
325 const SDNodeInfo &CInfo = CGP.getSDNodeInfo(N->getOperator()); in EmitOperatorMatchCode()
337 if ((N->getOperator()->getName() == "and" || in EmitOperatorMatchCode()
338 N->getOperator()->getName() == "or") && in EmitOperatorMatchCode()
339 N->getChild(1)->isLeaf() && N->getChild(1)->getPredicateCalls().empty() && in EmitOperatorMatchCode()
340 N->getPredicateCalls().empty()) { in EmitOperatorMatchCode()
341 if (IntInit *II = dyn_cast<IntInit>(N->getChild(1)->getLeafValue())) { in EmitOperatorMatchCode()
347 if (N == Pattern.getSrcPattern()) in EmitOperatorMatchCode()
351 if (N->getOperator()->getName() == "and") in EmitOperatorMatchCode()
358 EmitMatchCode(N->getChild(0), NodeNoTypes->getChild(0)); in EmitOperatorMatchCode()
370 if (N->NodeHasProperty(SDNPMemOperand, CGP)) in EmitOperatorMatchCode()
376 if (N->NodeHasProperty(SDNPHasChain, CGP)) { in EmitOperatorMatchCode()
378 AddMatcher(new RecordMatcher("'" + N->getOperator()->getName().str() + in EmitOperatorMatchCode()
410 if (N != Root) { // Not the root of the pattern. in EmitOperatorMatchCode()
413 bool NeedCheck = !Root->hasChild(N); in EmitOperatorMatchCode()
437 if (N->NodeHasProperty(SDNPOutGlue, CGP) && in EmitOperatorMatchCode()
438 N != Pattern.getSrcPattern()) { in EmitOperatorMatchCode()
442 AddMatcher(new RecordMatcher("'" + N->getOperator()->getName().str() + in EmitOperatorMatchCode()
449 if (N->NodeHasProperty(SDNPOptInGlue, CGP) || in EmitOperatorMatchCode()
450 N->NodeHasProperty(SDNPInGlue, CGP)) in EmitOperatorMatchCode()
453 for (unsigned i = 0, e = N->getNumChildren(); i != e; ++i, ++OpNo) { in EmitOperatorMatchCode()
457 EmitMatchCode(N->getChild(i), NodeNoTypes->getChild(i)); in EmitOperatorMatchCode()
497 void MatcherGen::EmitMatchCode(const TreePatternNode *N, in EmitMatchCode() argument
505 if (NodeNoTypes->getExtType(i) == N->getExtType(i)) continue; in EmitMatchCode()
506 NodeNoTypes->setType(i, N->getExtType(i)); in EmitMatchCode()
514 if (!N->getName().empty()) in EmitMatchCode()
515 Names.push_back(N->getName()); in EmitMatchCode()
517 for (const ScopedName &Name : N->getNamesAsPredicateArg()) { in EmitMatchCode()
526 if (N->isLeaf()) in EmitMatchCode()
527 EmitLeafMatchCode(N); in EmitMatchCode()
529 EmitOperatorMatchCode(N, NodeNoTypes); in EmitMatchCode()
532 for (unsigned i = 0, e = N->getPredicateCalls().size(); i != e; ++i) { in EmitMatchCode()
533 const TreePredicateCall &Pred = N->getPredicateCalls()[i]; in EmitMatchCode()
547 AddMatcher(new CheckTypeMatcher(N->getSimpleType(ResultsToTypeCheck[i]), in EmitMatchCode()
584 auto N = MatchedComplexPatterns[i].first; in EmitMatcherCode() local
587 if (N->isLeaf()) { in EmitMatcherCode()
588 NamedComplexPatternOperands[N->getName()] = NextRecordedOperandNo + 1; in EmitMatcherCode()
591 for (unsigned i = 0; i < N->getNumChildren(); ++i) { in EmitMatcherCode()
592 NamedComplexPatternOperands[N->getChild(i)->getName()] = CurOp + 1; in EmitMatcherCode()
593 CurOp += N->getChild(i)->getNumMIResults(CGP); in EmitMatcherCode()
600 const ComplexPattern *CP = N->getComplexPatternInfo(CGP); in EmitMatcherCode()
605 AddMatcher(new CheckComplexPatMatcher(*CP, RecNodeEntry, N->getName(), in EmitMatcherCode()
634 void MatcherGen::EmitResultOfNamedOperand(const TreePatternNode *N, in EmitResultOfNamedOperand() argument
636 assert(!N->getName().empty() && "Operand not named!"); in EmitResultOfNamedOperand()
638 if (unsigned SlotNo = NamedComplexPatternOperands[N->getName()]) { in EmitResultOfNamedOperand()
641 for (unsigned i = 0; i < N->getNumMIResults(CGP); ++i) in EmitResultOfNamedOperand()
647 unsigned SlotNo = getNamedArgumentSlot(N->getName()); in EmitResultOfNamedOperand()
652 if (!N->isLeaf()) { in EmitResultOfNamedOperand()
653 StringRef OperatorName = N->getOperator()->getName(); in EmitResultOfNamedOperand()
661 for (unsigned i = 0; i < N->getNumMIResults(CGP); ++i) in EmitResultOfNamedOperand()
665 void MatcherGen::EmitResultLeafAsOperand(const TreePatternNode *N, in EmitResultLeafAsOperand() argument
667 assert(N->isLeaf() && "Must be a leaf"); in EmitResultLeafAsOperand()
669 if (IntInit *II = dyn_cast<IntInit>(N->getLeafValue())) { in EmitResultLeafAsOperand()
670 AddMatcher(new EmitIntegerMatcher(II->getValue(), N->getSimpleType(0))); in EmitResultLeafAsOperand()
676 if (DefInit *DI = dyn_cast<DefInit>(N->getLeafValue())) { in EmitResultLeafAsOperand()
681 AddMatcher(new EmitRegisterMatcher(Reg, N->getSimpleType(0))); in EmitResultLeafAsOperand()
687 AddMatcher(new EmitRegisterMatcher(nullptr, N->getSimpleType(0))); in EmitResultLeafAsOperand()
693 MVT::SimpleValueType ResultVT = N->getSimpleType(0); in EmitResultLeafAsOperand()
746 N->dump(); in EmitResultLeafAsOperand()
750 mayInstNodeLoadOrStore(const TreePatternNode *N, in mayInstNodeLoadOrStore() argument
752 Record *Op = N->getOperator(); in mayInstNodeLoadOrStore()
759 numNodesThatMayLoadOrStore(const TreePatternNode *N, in numNodesThatMayLoadOrStore() argument
761 if (N->isLeaf()) in numNodesThatMayLoadOrStore()
764 Record *OpRec = N->getOperator(); in numNodesThatMayLoadOrStore()
769 if (mayInstNodeLoadOrStore(N, CGP)) in numNodesThatMayLoadOrStore()
772 for (unsigned i = 0, e = N->getNumChildren(); i != e; ++i) in numNodesThatMayLoadOrStore()
773 Count += numNodesThatMayLoadOrStore(N->getChild(i), CGP); in numNodesThatMayLoadOrStore()
779 EmitResultInstructionAsOperand(const TreePatternNode *N, in EmitResultInstructionAsOperand() argument
781 Record *Op = N->getOperator(); in EmitResultInstructionAsOperand()
786 bool isRoot = N == Pattern.getDstPattern(); in EmitResultInstructionAsOperand()
834 (InstOpNo < NonOverridableOperands || ChildNo >= N->getNumChildren())) { in EmitResultInstructionAsOperand()
860 const TreePatternNode *Child = N->getChild(ChildNo); in EmitResultInstructionAsOperand()
880 for (unsigned I = ChildNo, E = N->getNumChildren(); I < E; ++I) in EmitResultInstructionAsOperand()
881 EmitResultOperand(N->getChild(I), InstOps); in EmitResultInstructionAsOperand()
906 for (unsigned i = 0, e = N->getNumTypes(); i != e; ++i) in EmitResultInstructionAsOperand()
907 ResultVTs.push_back(N->getSimpleType(i)); in EmitResultInstructionAsOperand()
949 bool NodeIsUniqueLoadOrStore = mayInstNodeLoadOrStore(N, CGP) && in EmitResultInstructionAsOperand()
952 NodeIsUniqueLoadOrStore || (isRoot && (mayInstNodeLoadOrStore(N, CGP) || in EmitResultInstructionAsOperand()
991 EmitResultSDNodeXFormAsOperand(const TreePatternNode *N, in EmitResultSDNodeXFormAsOperand() argument
993 assert(N->getOperator()->isSubClassOf("SDNodeXForm") && "Not SDNodeXForm?"); in EmitResultSDNodeXFormAsOperand()
1001 assert(N->getNumChildren() == 1); in EmitResultSDNodeXFormAsOperand()
1002 EmitResultOperand(N->getChild(0), InputOps); in EmitResultSDNodeXFormAsOperand()
1007 AddMatcher(new EmitNodeXFormMatcher(InputOps[0], N->getOperator())); in EmitResultSDNodeXFormAsOperand()
1011 void MatcherGen::EmitResultOperand(const TreePatternNode *N, in EmitResultOperand() argument
1014 if (!N->getName().empty()) in EmitResultOperand()
1015 return EmitResultOfNamedOperand(N, ResultOps); in EmitResultOperand()
1017 if (N->isLeaf()) in EmitResultOperand()
1018 return EmitResultLeafAsOperand(N, ResultOps); in EmitResultOperand()
1020 Record *OpRec = N->getOperator(); in EmitResultOperand()
1022 return EmitResultInstructionAsOperand(N, ResultOps); in EmitResultOperand()
1024 return EmitResultSDNodeXFormAsOperand(N, ResultOps); in EmitResultOperand()
1025 errs() << "Unknown result node to emit code for: " << *N << '\n'; in EmitResultOperand()