Lines Matching refs:Pat
2052 TreePattern::TreePattern(Record *TheRec, DagInit *Pat, bool isInput,
2055 Trees.push_back(ParseTreePattern(Pat, ""));
2058 TreePattern::TreePattern(Record *TheRec, TreePatternNode *Pat, bool isInput,
2061 Trees.push_back(Pat);
2327 // def : Pat<(v1i64 (bitconvert(v2i32 DPR:$src))), (v1i64 DPR:$src)>;
2597 /// HandleUse - Given "Pat" a leaf in the pattern, check to see if it is an
2599 static bool HandleUse(TreePattern *I, TreePatternNode *Pat,
2602 if (Pat->getName().empty()) {
2603 if (Pat->isLeaf()) {
2604 DefInit *DI = dyn_cast<DefInit>(Pat->getLeafValue());
2613 if (Pat->isLeaf()) {
2614 DefInit *DI = dyn_cast<DefInit>(Pat->getLeafValue());
2615 if (!DI) I->error("Input $" + Pat->getName() + " must be an identifier!");
2618 Rec = Pat->getOperator();
2625 TreePatternNode *&Slot = InstInputs[Pat->getName()];
2627 Slot = Pat;
2640 I->error("All $" + Pat->getName() + " inputs must agree with each other");
2641 if (Slot->getExtTypes() != Pat->getExtTypes())
2642 I->error("All $" + Pat->getName() + " inputs must agree with each other");
2650 FindPatternInputsAndOutputs(TreePattern *I, TreePatternNode *Pat,
2654 if (Pat->isLeaf()) {
2655 bool isUse = HandleUse(I, Pat, InstInputs);
2656 if (!isUse && Pat->getTransformFn())
2661 if (Pat->getOperator()->getName() == "implicit") {
2662 for (unsigned i = 0, e = Pat->getNumChildren(); i != e; ++i) {
2663 TreePatternNode *Dest = Pat->getChild(i);
2675 if (Pat->getOperator()->getName() != "set") {
2678 for (unsigned i = 0, e = Pat->getNumChildren(); i != e; ++i) {
2679 if (Pat->getChild(i)->getNumTypes() == 0)
2681 FindPatternInputsAndOutputs(I, Pat->getChild(i), InstInputs, InstResults,
2687 bool isUse = HandleUse(I, Pat, InstInputs);
2689 if (!isUse && Pat->getTransformFn())
2695 if (Pat->getNumChildren() == 0)
2698 if (Pat->getTransformFn())
2702 unsigned NumDests = Pat->getNumChildren()-1;
2704 TreePatternNode *Dest = Pat->getChild(i);
2731 FindPatternInputsAndOutputs(I, Pat->getChild(NumDests),
2752 void Analyze(const TreePattern *Pat) {
2754 AnalyzeNode(Pat->getTree(0));
2757 void Analyze(const PatternToMatch *Pat) {
2758 AnalyzeNode(Pat->getSrcPattern());
2949 CodeGenInstruction &CGI, ListInit *Pat, DAGInstMap &DAGInsts) {
2954 TreePattern *I = new TreePattern(CGI.TheDef, Pat, true, *this);
2976 TreePatternNode *Pat = I->getTree(j);
2977 if (Pat->getNumTypes() != 0) {
2979 for (unsigned k = 0, ke = Pat->getNumTypes(); k != ke; ++k) {
2982 Types += Pat->getExtType(k).getName();
2989 FindPatternInputsAndOutputs(I, Pat, InstInputs, InstResults,