summaryrefslogtreecommitdiff
path: root/utils
diff options
context:
space:
mode:
authorMikhail Glushenkov <foldr@codedgers.com>2008-11-12 00:05:17 +0000
committerMikhail Glushenkov <foldr@codedgers.com>2008-11-12 00:05:17 +0000
commit262d248833d8fa467970ad83f04ab1c523cb35b2 (patch)
tree131d7f70e397977b2e42b37dfcbb9914c577bbcb /utils
parentaa4774caaafddb1ddf42485598f6040469615ce2 (diff)
downloadllvm-262d248833d8fa467970ad83f04ab1c523cb35b2.tar.gz
llvm-262d248833d8fa467970ad83f04ab1c523cb35b2.tar.bz2
llvm-262d248833d8fa467970ad83f04ab1c523cb35b2.tar.xz
Add a bit of lazy evaluation to PopulateCompilationGraph().
Only the tools that are mentioned in the compilation graph definition are now inserted by PopulateCompilationGraph(). This should cut down plugin loading time a little. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@59097 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'utils')
-rw-r--r--utils/TableGen/LLVMCConfigurationEmitter.cpp29
1 files changed, 18 insertions, 11 deletions
diff --git a/utils/TableGen/LLVMCConfigurationEmitter.cpp b/utils/TableGen/LLVMCConfigurationEmitter.cpp
index 7836172a44..33b0e3d8cb 100644
--- a/utils/TableGen/LLVMCConfigurationEmitter.cpp
+++ b/utils/TableGen/LLVMCConfigurationEmitter.cpp
@@ -1595,26 +1595,33 @@ void EmitPopulateCompilationGraph (Record* CompilationGraph,
{
ListInit* edges = CompilationGraph->getValueAsListInit("edges");
- // Generate code
O << "namespace {\n\n";
O << "void PopulateCompilationGraphLocal(CompilationGraph& G) {\n";
- // Insert vertices
+ // Insert vertices.
+ // Only tools mentioned in the graph definition are inserted.
- RecordVector Tools = Records.getAllDerivedDefinitions("Tool");
- if (Tools.empty())
- throw std::string("No tool definitions found!");
+ llvm::StringSet<> ToolsInGraph;
- for (RecordVector::iterator B = Tools.begin(), E = Tools.end(); B != E; ++B) {
- const std::string& Name = (*B)->getName();
- if (Name != "root")
- O << Indent1 << "G.insertNode(new "
- << Name << "());\n";
+ for (unsigned i = 0; i < edges->size(); ++i) {
+ Record* Edge = edges->getElementAsRecord(i);
+ Record* A = Edge->getValueAsDef("a");
+ Record* B = Edge->getValueAsDef("b");
+
+ if (A->getName() != "root")
+ ToolsInGraph.insert(A->getName());
+ if (B->getName() != "root")
+ ToolsInGraph.insert(B->getName());
}
+ for (llvm::StringSet<>::iterator B = ToolsInGraph.begin(),
+ E = ToolsInGraph.end(); B != E; ++B)
+ O << Indent1 << "G.insertNode(new " << B->first() << "());\n";
+
O << '\n';
- // Insert edges
+ // Insert edges.
+
for (unsigned i = 0; i < edges->size(); ++i) {
Record* Edge = edges->getElementAsRecord(i);
Record* A = Edge->getValueAsDef("a");