Lines Matching refs:Matcher

27 class Matcher;  variable
36 Matcher *ConvertPatternToMatcher(const PatternToMatch &Pattern,
39 void OptimizeMatcher(std::unique_ptr<Matcher> &Matcher,
41 void EmitMatcherTable(Matcher *Matcher, const CodeGenDAGPatterns &CGP,
46 class Matcher {
49 std::unique_ptr<Matcher> Next;
105 Matcher(KindTy K) : Kind(K) {} in Matcher() function
108 virtual ~Matcher() {} in ~Matcher()
114 Matcher *getNext() { return Next.get(); } in getNext()
115 const Matcher *getNext() const { return Next.get(); } in getNext()
116 void setNext(Matcher *C) { Next.reset(C); } in setNext()
117 Matcher *takeNext() { return Next.release(); } in takeNext()
119 std::unique_ptr<Matcher> &getNextPtr() { return Next; } in getNextPtr()
121 bool isEqual(const Matcher *M) const { in isEqual()
165 Matcher *unlinkNode(Matcher *Other);
170 bool canMoveBefore(const Matcher *Other) const;
174 bool canMoveBeforeNode(const Matcher *Other) const;
178 bool isContradictory(const Matcher *Other) const { in isContradictory()
194 virtual bool isEqualImpl(const Matcher *M) const = 0;
195 virtual bool isContradictoryImpl(const Matcher *M) const { return false; } in isContradictoryImpl()
201 class ScopeMatcher : public Matcher {
202 SmallVector<Matcher *, 4> Children;
205 ScopeMatcher(SmallVectorImpl<Matcher *> &&children) in ScopeMatcher()
206 : Matcher(Scope), Children(std::move(children)) {} in ScopeMatcher()
211 Matcher *getChild(unsigned i) { return Children[i]; } in getChild()
212 const Matcher *getChild(unsigned i) const { return Children[i]; } in getChild()
214 void resetChild(unsigned i, Matcher *N) { in resetChild()
219 Matcher *takeChild(unsigned i) { in takeChild()
220 Matcher *Res = Children[i]; in takeChild()
234 static bool classof(const Matcher *N) { return N->getKind() == Scope; } in classof()
238 bool isEqualImpl(const Matcher *M) const override { return false; } in isEqualImpl()
242 class RecordMatcher : public Matcher {
253 : Matcher(RecordNode), WhatFor(whatfor), ResultNo(resultNo) {} in RecordMatcher()
258 static bool classof(const Matcher *N) { return N->getKind() == RecordNode; } in classof()
262 bool isEqualImpl(const Matcher *M) const override { return true; } in isEqualImpl()
268 class RecordChildMatcher : public Matcher {
282 : Matcher(RecordChild), ChildNo(childno), WhatFor(whatfor), in RecordChildMatcher()
289 static bool classof(const Matcher *N) { return N->getKind() == RecordChild; } in classof()
293 bool isEqualImpl(const Matcher *M) const override { in isEqualImpl()
299 class RecordMemRefMatcher : public Matcher {
301 RecordMemRefMatcher() : Matcher(RecordMemRef) {} in RecordMemRefMatcher()
303 static bool classof(const Matcher *N) { return N->getKind() == RecordMemRef; } in classof()
307 bool isEqualImpl(const Matcher *M) const override { return true; } in isEqualImpl()
312 class CaptureGlueInputMatcher : public Matcher {
314 CaptureGlueInputMatcher() : Matcher(CaptureGlueInput) {} in CaptureGlueInputMatcher()
316 static bool classof(const Matcher *N) { in classof()
322 bool isEqualImpl(const Matcher *M) const override { return true; } in isEqualImpl()
327 class MoveChildMatcher : public Matcher {
331 MoveChildMatcher(unsigned childNo) : Matcher(MoveChild), ChildNo(childNo) {} in MoveChildMatcher()
335 static bool classof(const Matcher *N) { return N->getKind() == MoveChild; } in classof()
339 bool isEqualImpl(const Matcher *M) const override { in isEqualImpl()
346 class MoveSiblingMatcher : public Matcher {
351 : Matcher(MoveSibling), SiblingNo(SiblingNo) {} in MoveSiblingMatcher()
355 static bool classof(const Matcher *N) { return N->getKind() == MoveSibling; } in classof()
359 bool isEqualImpl(const Matcher *M) const override { in isEqualImpl()
366 class MoveParentMatcher : public Matcher {
368 MoveParentMatcher() : Matcher(MoveParent) {} in MoveParentMatcher()
370 static bool classof(const Matcher *N) { return N->getKind() == MoveParent; } in classof()
374 bool isEqualImpl(const Matcher *M) const override { return true; } in isEqualImpl()
380 class CheckSameMatcher : public Matcher {
385 : Matcher(CheckSame), MatchNumber(matchnumber) {} in CheckSameMatcher()
389 static bool classof(const Matcher *N) { return N->getKind() == CheckSame; } in classof()
393 bool isEqualImpl(const Matcher *M) const override { in isEqualImpl()
401 class CheckChildSameMatcher : public Matcher {
407 : Matcher(CheckChildSame), ChildNo(childno), MatchNumber(matchnumber) {} in CheckChildSameMatcher()
412 static bool classof(const Matcher *N) { in classof()
418 bool isEqualImpl(const Matcher *M) const override { in isEqualImpl()
427 class CheckPatternPredicateMatcher : public Matcher {
432 : Matcher(CheckPatternPredicate), Predicate(predicate) {} in CheckPatternPredicateMatcher()
436 static bool classof(const Matcher *N) { in classof()
442 bool isEqualImpl(const Matcher *M) const override { in isEqualImpl()
449 class CheckPredicateMatcher : public Matcher {
461 static bool classof(const Matcher *N) { in classof()
467 bool isEqualImpl(const Matcher *M) const override { in isEqualImpl()
474 class CheckOpcodeMatcher : public Matcher {
479 : Matcher(CheckOpcode), Opcode(opcode) {} in CheckOpcodeMatcher()
483 static bool classof(const Matcher *N) { return N->getKind() == CheckOpcode; } in classof()
487 bool isEqualImpl(const Matcher *M) const override;
488 bool isContradictoryImpl(const Matcher *M) const override;
495 class SwitchOpcodeMatcher : public Matcher {
496 SmallVector<std::pair<const SDNodeInfo *, Matcher *>, 8> Cases;
500 SmallVectorImpl<std::pair<const SDNodeInfo *, Matcher *>> &&cases) in SwitchOpcodeMatcher()
501 : Matcher(SwitchOpcode), Cases(std::move(cases)) {} in SwitchOpcodeMatcher()
504 static bool classof(const Matcher *N) { return N->getKind() == SwitchOpcode; } in classof()
509 Matcher *getCaseMatcher(unsigned i) { return Cases[i].second; } in getCaseMatcher()
510 const Matcher *getCaseMatcher(unsigned i) const { return Cases[i].second; } in getCaseMatcher()
514 bool isEqualImpl(const Matcher *M) const override { return false; } in isEqualImpl()
519 class CheckTypeMatcher : public Matcher {
525 : Matcher(CheckType), Type(type), ResNo(resno) {} in CheckTypeMatcher()
530 static bool classof(const Matcher *N) { return N->getKind() == CheckType; } in classof()
534 bool isEqualImpl(const Matcher *M) const override { in isEqualImpl()
537 bool isContradictoryImpl(const Matcher *M) const override;
544 class SwitchTypeMatcher : public Matcher {
545 SmallVector<std::pair<MVT::SimpleValueType, Matcher *>, 8> Cases;
549 SmallVectorImpl<std::pair<MVT::SimpleValueType, Matcher *>> &&cases) in SwitchTypeMatcher()
550 : Matcher(SwitchType), Cases(std::move(cases)) {} in SwitchTypeMatcher()
553 static bool classof(const Matcher *N) { return N->getKind() == SwitchType; } in classof()
558 Matcher *getCaseMatcher(unsigned i) { return Cases[i].second; } in getCaseMatcher()
559 const Matcher *getCaseMatcher(unsigned i) const { return Cases[i].second; } in getCaseMatcher()
563 bool isEqualImpl(const Matcher *M) const override { return false; } in isEqualImpl()
568 class CheckChildTypeMatcher : public Matcher {
574 : Matcher(CheckChildType), ChildNo(childno), Type(type) {} in CheckChildTypeMatcher()
579 static bool classof(const Matcher *N) { in classof()
585 bool isEqualImpl(const Matcher *M) const override { in isEqualImpl()
589 bool isContradictoryImpl(const Matcher *M) const override;
594 class CheckIntegerMatcher : public Matcher {
598 CheckIntegerMatcher(int64_t value) : Matcher(CheckInteger), Value(value) {} in CheckIntegerMatcher()
602 static bool classof(const Matcher *N) { return N->getKind() == CheckInteger; } in classof()
606 bool isEqualImpl(const Matcher *M) const override { in isEqualImpl()
609 bool isContradictoryImpl(const Matcher *M) const override;
614 class CheckChildIntegerMatcher : public Matcher {
620 : Matcher(CheckChildInteger), ChildNo(childno), Value(value) {} in CheckChildIntegerMatcher()
625 static bool classof(const Matcher *N) { in classof()
631 bool isEqualImpl(const Matcher *M) const override { in isEqualImpl()
635 bool isContradictoryImpl(const Matcher *M) const override;
640 class CheckCondCodeMatcher : public Matcher {
645 : Matcher(CheckCondCode), CondCodeName(condcodename) {} in CheckCondCodeMatcher()
649 static bool classof(const Matcher *N) { in classof()
655 bool isEqualImpl(const Matcher *M) const override { in isEqualImpl()
658 bool isContradictoryImpl(const Matcher *M) const override;
663 class CheckChild2CondCodeMatcher : public Matcher {
668 : Matcher(CheckChild2CondCode), CondCodeName(condcodename) {} in CheckChild2CondCodeMatcher()
672 static bool classof(const Matcher *N) { in classof()
678 bool isEqualImpl(const Matcher *M) const override { in isEqualImpl()
681 bool isContradictoryImpl(const Matcher *M) const override;
686 class CheckValueTypeMatcher : public Matcher {
691 : Matcher(CheckValueType), VT(SimpleVT) {} in CheckValueTypeMatcher()
695 static bool classof(const Matcher *N) { in classof()
701 bool isEqualImpl(const Matcher *M) const override { in isEqualImpl()
704 bool isContradictoryImpl(const Matcher *M) const override;
709 class CheckComplexPatMatcher : public Matcher {
726 : Matcher(CheckComplexPat), Pattern(pattern), MatchNumber(matchnumber), in CheckComplexPatMatcher()
735 static bool classof(const Matcher *N) { in classof()
741 bool isEqualImpl(const Matcher *M) const override { in isEqualImpl()
749 class CheckAndImmMatcher : public Matcher {
753 CheckAndImmMatcher(int64_t value) : Matcher(CheckAndImm), Value(value) {} in CheckAndImmMatcher()
757 static bool classof(const Matcher *N) { return N->getKind() == CheckAndImm; } in classof()
761 bool isEqualImpl(const Matcher *M) const override { in isEqualImpl()
768 class CheckOrImmMatcher : public Matcher {
772 CheckOrImmMatcher(int64_t value) : Matcher(CheckOrImm), Value(value) {} in CheckOrImmMatcher()
776 static bool classof(const Matcher *N) { return N->getKind() == CheckOrImm; } in classof()
780 bool isEqualImpl(const Matcher *M) const override { in isEqualImpl()
787 class CheckImmAllOnesVMatcher : public Matcher {
789 CheckImmAllOnesVMatcher() : Matcher(CheckImmAllOnesV) {} in CheckImmAllOnesVMatcher()
791 static bool classof(const Matcher *N) { in classof()
797 bool isEqualImpl(const Matcher *M) const override { return true; } in isEqualImpl()
798 bool isContradictoryImpl(const Matcher *M) const override;
803 class CheckImmAllZerosVMatcher : public Matcher {
805 CheckImmAllZerosVMatcher() : Matcher(CheckImmAllZerosV) {} in CheckImmAllZerosVMatcher()
807 static bool classof(const Matcher *N) { in classof()
813 bool isEqualImpl(const Matcher *M) const override { return true; } in isEqualImpl()
814 bool isContradictoryImpl(const Matcher *M) const override;
819 class CheckFoldableChainNodeMatcher : public Matcher {
821 CheckFoldableChainNodeMatcher() : Matcher(CheckFoldableChainNode) {} in CheckFoldableChainNodeMatcher()
823 static bool classof(const Matcher *N) { in classof()
829 bool isEqualImpl(const Matcher *M) const override { return true; } in isEqualImpl()
833 class EmitIntegerMatcher : public Matcher {
839 : Matcher(EmitInteger), Val(val), VT(vt) {} in EmitIntegerMatcher()
844 static bool classof(const Matcher *N) { return N->getKind() == EmitInteger; } in classof()
848 bool isEqualImpl(const Matcher *M) const override { in isEqualImpl()
856 class EmitStringIntegerMatcher : public Matcher {
862 : Matcher(EmitStringInteger), Val(val), VT(vt) {} in EmitStringIntegerMatcher()
867 static bool classof(const Matcher *N) { in classof()
873 bool isEqualImpl(const Matcher *M) const override { in isEqualImpl()
880 class EmitRegisterMatcher : public Matcher {
888 : Matcher(EmitRegister), Reg(reg), VT(vt) {} in EmitRegisterMatcher()
893 static bool classof(const Matcher *N) { return N->getKind() == EmitRegister; } in classof()
897 bool isEqualImpl(const Matcher *M) const override { in isEqualImpl()
906 class EmitConvertToTargetMatcher : public Matcher {
911 : Matcher(EmitConvertToTarget), Slot(slot) {} in EmitConvertToTargetMatcher()
915 static bool classof(const Matcher *N) { in classof()
921 bool isEqualImpl(const Matcher *M) const override { in isEqualImpl()
930 class EmitMergeInputChainsMatcher : public Matcher {
935 : Matcher(EmitMergeInputChains), ChainNodes(nodes.begin(), nodes.end()) {} in EmitMergeInputChainsMatcher()
944 static bool classof(const Matcher *N) { in classof()
950 bool isEqualImpl(const Matcher *M) const override { in isEqualImpl()
958 class EmitCopyToRegMatcher : public Matcher {
964 : Matcher(EmitCopyToReg), SrcSlot(srcSlot), DestPhysReg(destPhysReg) {} in EmitCopyToRegMatcher()
969 static bool classof(const Matcher *N) { in classof()
975 bool isEqualImpl(const Matcher *M) const override { in isEqualImpl()
983 class EmitNodeXFormMatcher : public Matcher {
989 : Matcher(EmitNodeXForm), Slot(slot), NodeXForm(nodeXForm) {} in EmitNodeXFormMatcher()
994 static bool classof(const Matcher *N) { in classof()
1000 bool isEqualImpl(const Matcher *M) const override { in isEqualImpl()
1008 class EmitNodeMatcherCommon : public Matcher {
1025 : Matcher(isMorphNodeTo ? MorphNodeTo : EmitNode), CGI(cgi), in EmitNodeMatcherCommon()
1053 static bool classof(const Matcher *N) { in classof()
1059 bool isEqualImpl(const Matcher *M) const override;
1080 static bool classof(const Matcher *N) { return N->getKind() == EmitNode; } in classof()
1100 static bool classof(const Matcher *N) { return N->getKind() == MorphNodeTo; } in classof()
1106 class CompleteMatchMatcher : public Matcher {
1113 : Matcher(CompleteMatch), Results(results.begin(), results.end()), in CompleteMatchMatcher()
1120 static bool classof(const Matcher *N) { in classof()
1126 bool isEqualImpl(const Matcher *M) const override { in isEqualImpl()