diff --git a/utils/TableGen/DAGISelEmitter.cpp b/utils/TableGen/DAGISelEmitter.cpp index 8819538a2ec..eacd13e8c04 100644 --- a/utils/TableGen/DAGISelEmitter.cpp +++ b/utils/TableGen/DAGISelEmitter.cpp @@ -215,7 +215,7 @@ void DAGISelEmitter::EmitNodeTransforms(std::ostream &OS) { typedef std::map NXsByNameTy; NXsByNameTy NXsByName; - for (CodegenDAGPatterns::nx_iterator I = CGP->nx_begin(), E = CGP->nx_end(); + for (CodegenDAGPatterns::nx_iterator I = CGP.nx_begin(), E = CGP.nx_end(); I != E; ++I) NXsByName.insert(std::make_pair(I->first->getName(), I->second)); @@ -228,7 +228,7 @@ void DAGISelEmitter::EmitNodeTransforms(std::ostream &OS) { if (Code.empty()) continue; // Empty code? Skip it. - std::string ClassName = CGP->getSDNodeInfo(SDNode).getSDClassName(); + std::string ClassName = CGP.getSDNodeInfo(SDNode).getSDClassName(); const char *C2 = ClassName == "SDNode" ? "N" : "inN"; OS << "inline SDOperand Transform_" << I->first << "(SDNode *" << C2 @@ -251,7 +251,7 @@ void DAGISelEmitter::EmitPredicateFunctions(std::ostream &OS) { typedef std::map > PFsByNameTy; PFsByNameTy PFsByName; - for (CodegenDAGPatterns::pf_iterator I = CGP->pf_begin(), E = CGP->pf_end(); + for (CodegenDAGPatterns::pf_iterator I = CGP.pf_begin(), E = CGP.pf_end(); I != E; ++I) PFsByName.insert(std::make_pair(I->first->getName(), *I)); @@ -270,7 +270,7 @@ void DAGISelEmitter::EmitPredicateFunctions(std::ostream &OS) { << "(SDNode *N) {\n"; else { std::string ClassName = - CGP->getSDNodeInfo(P->getOnlyTree()->getOperator()).getSDClassName(); + CGP.getSDNodeInfo(P->getOnlyTree()->getOperator()).getSDClassName(); const char *C2 = ClassName == "SDNode" ? "N" : "inN"; OS << "inline bool Predicate_" << PatFragRecord->getName() @@ -1280,7 +1280,7 @@ void DAGISelEmitter::GenerateCodeForPattern(const PatternToMatch &Pattern, std::set &GeneratedDecl, std::vector &TargetOpcodes, std::vector &TargetVTs) { - PatternCodeEmitter Emitter(*CGP, Pattern.getPredicates(), + PatternCodeEmitter Emitter(CGP, Pattern.getPredicates(), Pattern.getSrcPattern(), Pattern.getDstPattern(), GeneratedCode, GeneratedDecl, TargetOpcodes, TargetVTs); @@ -1290,7 +1290,7 @@ void DAGISelEmitter::GenerateCodeForPattern(const PatternToMatch &Pattern, Emitter.EmitMatchCode(Pattern.getSrcPattern(), NULL, "N", "", FoundChain); // TP - Get *SOME* tree pattern, we don't care which. - TreePattern &TP = *CGP->pf_begin()->second; + TreePattern &TP = *CGP.pf_begin()->second; // At this point, we know that we structurally match the pattern, but the // types of the nodes may not match. Figure out the fewest number of type @@ -1384,11 +1384,11 @@ void DAGISelEmitter::EmitPatterns(std::vectorgetTargetInfo(); + const CodeGenTarget &Target = CGP.getTargetInfo(); // Get the namespace to insert instructions into. Make sure not to pick up // "TargetInstrInfo" by accidentally getting the namespace off the PHI @@ -1492,24 +1492,24 @@ void DAGISelEmitter::EmitInstructionSelector(std::ostream &OS) { std::map > PatternsByOpcode; // All unique target node emission functions. std::map EmitFunctions; - for (CodegenDAGPatterns::ptm_iterator I = CGP->ptm_begin(), - E = CGP->ptm_end(); I != E; ++I) { + for (CodegenDAGPatterns::ptm_iterator I = CGP.ptm_begin(), + E = CGP.ptm_end(); I != E; ++I) { const PatternToMatch &Pattern = *I; TreePatternNode *Node = Pattern.getSrcPattern(); if (!Node->isLeaf()) { - PatternsByOpcode[getOpcodeName(Node->getOperator(), *CGP)]. + PatternsByOpcode[getOpcodeName(Node->getOperator(), CGP)]. push_back(&Pattern); } else { const ComplexPattern *CP; if (dynamic_cast(Node->getLeafValue())) { - PatternsByOpcode[getOpcodeName(CGP->getSDNodeNamed("imm"), *CGP)]. + PatternsByOpcode[getOpcodeName(CGP.getSDNodeNamed("imm"), CGP)]. push_back(&Pattern); - } else if ((CP = NodeGetComplexPattern(Node, *CGP))) { + } else if ((CP = NodeGetComplexPattern(Node, CGP))) { std::vector OpNodes = CP->getRootNodes(); for (unsigned j = 0, e = OpNodes.size(); j != e; j++) { - PatternsByOpcode[getOpcodeName(OpNodes[j], *CGP)] - .insert(PatternsByOpcode[getOpcodeName(OpNodes[j], *CGP)].begin(), + PatternsByOpcode[getOpcodeName(OpNodes[j], CGP)] + .insert(PatternsByOpcode[getOpcodeName(OpNodes[j], CGP)].begin(), &Pattern); } } else { @@ -1541,7 +1541,7 @@ void DAGISelEmitter::EmitInstructionSelector(std::ostream &OS) { // the matches in order of minimal cost. Sort the patterns so the least // cost one is at the start. std::stable_sort(PatternsOfOp.begin(), PatternsOfOp.end(), - PatternSortingPredicate(*CGP)); + PatternSortingPredicate(CGP)); // Split them into groups by type. std::map >PatternsByType; @@ -1907,9 +1907,8 @@ void DAGISelEmitter::EmitInstructionSelector(std::ostream &OS) { } void DAGISelEmitter::run(std::ostream &OS) { - CodeGenTarget Target; - EmitSourceFileHeader("DAG Instruction Selector for the " + Target.getName() + - " target", OS); + EmitSourceFileHeader("DAG Instruction Selector for the " + + CGP.getTargetInfo().getName() + " target", OS); OS << "// *** NOTE: This file is #included into the middle of the target\n" << "// *** instruction selector class. These functions are really " @@ -2043,10 +2042,6 @@ OS << " unsigned NumKilled = ISelKilled.size();\n"; OS << " return Dummy.getValue();\n"; OS << "}\n"; - CodegenDAGPatterns CGP(Records); - - this->CGP = &CGP; - EmitNodeTransforms(OS); EmitPredicateFunctions(OS); diff --git a/utils/TableGen/DAGISelEmitter.h b/utils/TableGen/DAGISelEmitter.h index 804ebdb21bc..0045a3ab98c 100644 --- a/utils/TableGen/DAGISelEmitter.h +++ b/utils/TableGen/DAGISelEmitter.h @@ -24,9 +24,9 @@ namespace llvm { /// class DAGISelEmitter : public TableGenBackend { RecordKeeper &Records; - CodegenDAGPatterns *CGP; + CodegenDAGPatterns CGP; public: - DAGISelEmitter(RecordKeeper &R) : Records(R) {} + DAGISelEmitter(RecordKeeper &R) : Records(R), CGP(R) {} // run - Output the isel, returning true on failure. void run(std::ostream &OS);