forked from OSchip/llvm-project
A small optimization: use static char* array instead of StrVector.
llvm-svn: 51752
This commit is contained in:
parent
bf14dd7dc3
commit
c8bd3517d5
|
@ -123,10 +123,9 @@ void CompilationGraph::insertNode(Tool* V) {
|
||||||
void CompilationGraph::insertEdge(const std::string& A, Edge* Edg) {
|
void CompilationGraph::insertEdge(const std::string& A, Edge* Edg) {
|
||||||
Node& B = getNode(Edg->ToolName());
|
Node& B = getNode(Edg->ToolName());
|
||||||
if (A == "root") {
|
if (A == "root") {
|
||||||
const StrVector& InputLanguages = B.ToolPtr->InputLanguages();
|
const char** InLangs = B.ToolPtr->InputLanguages();
|
||||||
for (StrVector::const_iterator B = InputLanguages.begin(),
|
for (;*InLangs; ++InLangs)
|
||||||
E = InputLanguages.end(); B != E; ++B)
|
ToolsMap[*InLangs].push_back(IntrusiveRefCntPtr<Edge>(Edg));
|
||||||
ToolsMap[*B].push_back(IntrusiveRefCntPtr<Edge>(Edg));
|
|
||||||
NodesMap["root"].AddEdge(Edg);
|
NodesMap["root"].AddEdge(Edg);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -392,15 +391,17 @@ namespace llvm {
|
||||||
return N->ToolPtr->OutputLanguage();
|
return N->ToolPtr->OutputLanguage();
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
const StrVector& InputLanguages = I->ToolPtr->InputLanguages();
|
const char** InLangs = I->ToolPtr->InputLanguages();
|
||||||
std::string ret;
|
std::string ret;
|
||||||
|
|
||||||
for (StrVector::const_iterator B = InputLanguages.begin(),
|
for (; *InLangs; ++InLangs) {
|
||||||
E = InputLanguages.end(); B != E; ++B) {
|
if (*(InLangs + 1)) {
|
||||||
if (llvm::next(B) != E)
|
ret += *InLangs;
|
||||||
ret += *B + ", ";
|
ret += ", ";
|
||||||
else
|
}
|
||||||
ret += *B;
|
else {
|
||||||
|
ret += *InLangs;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
|
|
@ -42,10 +42,10 @@ namespace llvmc {
|
||||||
const llvm::sys::Path& outFile,
|
const llvm::sys::Path& outFile,
|
||||||
const InputLanguagesSet& InLangs) const = 0;
|
const InputLanguagesSet& InLangs) const = 0;
|
||||||
|
|
||||||
virtual const char* Name() const = 0;
|
virtual const char* Name() const = 0;
|
||||||
virtual StrVector InputLanguages() const = 0;
|
virtual const char** InputLanguages() const = 0;
|
||||||
virtual const char* OutputLanguage() const = 0;
|
virtual const char* OutputLanguage() const = 0;
|
||||||
virtual const char* OutputSuffix() const = 0;
|
virtual const char* OutputSuffix() const = 0;
|
||||||
|
|
||||||
virtual bool IsLast() const = 0;
|
virtual bool IsLast() const = 0;
|
||||||
virtual bool IsJoin() const = 0;
|
virtual bool IsJoin() const = 0;
|
||||||
|
|
|
@ -1058,7 +1058,7 @@ void EmitGenerateActionMethod (const ToolProperties& P,
|
||||||
O << Indent2 << "const sys::Path& outFile,\n"
|
O << Indent2 << "const sys::Path& outFile,\n"
|
||||||
<< Indent2 << "const InputLanguagesSet& InLangs) const\n"
|
<< Indent2 << "const InputLanguagesSet& InLangs) const\n"
|
||||||
<< Indent1 << "{\n"
|
<< Indent1 << "{\n"
|
||||||
<< Indent2 << "std::string cmd;\n"
|
<< Indent2 << "const char* cmd;\n"
|
||||||
<< Indent2 << "std::vector<std::string> vec;\n";
|
<< Indent2 << "std::vector<std::string> vec;\n";
|
||||||
|
|
||||||
// cmd_line is either a string or a 'case' construct.
|
// cmd_line is either a string or a 'case' construct.
|
||||||
|
@ -1130,15 +1130,8 @@ void EmitIsLastMethod (const ToolProperties& P, std::ostream& O) {
|
||||||
/// EmitInOutLanguageMethods - Emit the [Input,Output]Language()
|
/// EmitInOutLanguageMethods - Emit the [Input,Output]Language()
|
||||||
/// methods for a given Tool class.
|
/// methods for a given Tool class.
|
||||||
void EmitInOutLanguageMethods (const ToolProperties& P, std::ostream& O) {
|
void EmitInOutLanguageMethods (const ToolProperties& P, std::ostream& O) {
|
||||||
O << Indent1 << "StrVector InputLanguages() const {\n"
|
O << Indent1 << "const char** InputLanguages() const {\n"
|
||||||
<< Indent2 << "StrVector ret;\n";
|
<< Indent2 << "return InputLanguages_;\n"
|
||||||
|
|
||||||
for (StrVector::const_iterator B = P.InLanguage.begin(),
|
|
||||||
E = P.InLanguage.end(); B != E; ++B) {
|
|
||||||
O << Indent2 << "ret.push_back(\"" << *B << "\");\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
O << Indent2 << "return ret;\n"
|
|
||||||
<< Indent1 << "}\n\n";
|
<< Indent1 << "}\n\n";
|
||||||
|
|
||||||
O << Indent1 << "const char* OutputLanguage() const {\n"
|
O << Indent1 << "const char* OutputLanguage() const {\n"
|
||||||
|
@ -1187,6 +1180,16 @@ void EmitIsJoinMethod (const ToolProperties& P, std::ostream& O) {
|
||||||
O << Indent1 << "}\n\n";
|
O << Indent1 << "}\n\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// EmitStaticMemberDefinitions - Emit static member definitions for a
|
||||||
|
/// given Tool class.
|
||||||
|
void EmitStaticMemberDefinitions(const ToolProperties& P, std::ostream& O) {
|
||||||
|
O << "const char* " << P.Name << "::InputLanguages_[] = {";
|
||||||
|
for (StrVector::const_iterator B = P.InLanguage.begin(),
|
||||||
|
E = P.InLanguage.end(); B != E; ++B)
|
||||||
|
O << '\"' << *B << "\", ";
|
||||||
|
O << "0};\n\n";
|
||||||
|
}
|
||||||
|
|
||||||
/// EmitToolClassDefinition - Emit a Tool class definition.
|
/// EmitToolClassDefinition - Emit a Tool class definition.
|
||||||
void EmitToolClassDefinition (const ToolProperties& P,
|
void EmitToolClassDefinition (const ToolProperties& P,
|
||||||
const GlobalOptionDescriptions& OptDescs,
|
const GlobalOptionDescriptions& OptDescs,
|
||||||
|
@ -1200,8 +1203,11 @@ void EmitToolClassDefinition (const ToolProperties& P,
|
||||||
O << "JoinTool";
|
O << "JoinTool";
|
||||||
else
|
else
|
||||||
O << "Tool";
|
O << "Tool";
|
||||||
O << " {\npublic:\n";
|
|
||||||
|
|
||||||
|
O << "{\nprivate:\n"
|
||||||
|
<< Indent1 << "static const char* InputLanguages_[];\n\n";
|
||||||
|
|
||||||
|
O << "public:\n";
|
||||||
EmitNameMethod(P, O);
|
EmitNameMethod(P, O);
|
||||||
EmitInOutLanguageMethods(P, O);
|
EmitInOutLanguageMethods(P, O);
|
||||||
EmitOutputSuffixMethod(P, O);
|
EmitOutputSuffixMethod(P, O);
|
||||||
|
@ -1210,7 +1216,10 @@ void EmitToolClassDefinition (const ToolProperties& P,
|
||||||
EmitIsLastMethod(P, O);
|
EmitIsLastMethod(P, O);
|
||||||
|
|
||||||
// Close class definition
|
// Close class definition
|
||||||
O << "};\n\n";
|
O << "};\n";
|
||||||
|
|
||||||
|
EmitStaticMemberDefinitions(P, O);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// EmitOptionDescriptions - Iterate over a list of option
|
/// EmitOptionDescriptions - Iterate over a list of option
|
||||||
|
|
Loading…
Reference in New Issue