diff options
author | Mikhail Glushenkov <foldr@codedgers.com> | 2008-05-30 06:18:16 +0000 |
---|---|---|
committer | Mikhail Glushenkov <foldr@codedgers.com> | 2008-05-30 06:18:16 +0000 |
commit | 1f7a0289297732f420a6261a9ae42a215c52bbc0 (patch) | |
tree | 6c206a0e6c4ae3936c49d6862c1d2598b6933a06 /llvm/tools/llvmc2/CompilationGraph.cpp | |
parent | 73d708b82cc8a836dce659246c0e0b967a3eeb44 (diff) | |
download | bcm5719-llvm-1f7a0289297732f420a6261a9ae42a215c52bbc0.tar.gz bcm5719-llvm-1f7a0289297732f420a6261a9ae42a215c52bbc0.zip |
Make it possible to have multiple input languages for a single tool.
llvm-svn: 51742
Diffstat (limited to 'llvm/tools/llvmc2/CompilationGraph.cpp')
-rw-r--r-- | llvm/tools/llvmc2/CompilationGraph.cpp | 33 |
1 files changed, 24 insertions, 9 deletions
diff --git a/llvm/tools/llvmc2/CompilationGraph.cpp b/llvm/tools/llvmc2/CompilationGraph.cpp index bf34b333d6d..92f3104c018 100644 --- a/llvm/tools/llvmc2/CompilationGraph.cpp +++ b/llvm/tools/llvmc2/CompilationGraph.cpp @@ -115,16 +115,18 @@ void CompilationGraph::insertNode(Tool* V) { } } -void CompilationGraph::insertEdge(const std::string& A, Edge* E) { - Node& B = getNode(E->ToolName()); +void CompilationGraph::insertEdge(const std::string& A, Edge* Edg) { + Node& B = getNode(Edg->ToolName()); if (A == "root") { - const std::string& InputLanguage = B.ToolPtr->InputLanguage(); - ToolsMap[InputLanguage].push_back(IntrusiveRefCntPtr<Edge>(E)); - NodesMap["root"].AddEdge(E); + const StrVector& InputLanguages = B.ToolPtr->InputLanguages(); + for (StrVector::const_iterator B = InputLanguages.begin(), + E = InputLanguages.end(); B != E; ++B) + ToolsMap[*B].push_back(IntrusiveRefCntPtr<Edge>(Edg)); + NodesMap["root"].AddEdge(Edg); } else { Node& N = getNode(A); - N.AddEdge(E); + N.AddEdge(Edg); } // Increase the inward edge counter. B.IncrInEdges(); @@ -381,10 +383,23 @@ namespace llvm { template<typename EdgeIter> static std::string getEdgeSourceLabel(const Node* N, EdgeIter I) { - if (N->ToolPtr) + if (N->ToolPtr) { return N->ToolPtr->OutputLanguage(); - else - return I->ToolPtr->InputLanguage(); + } + else { + const StrVector& InputLanguages = I->ToolPtr->InputLanguages(); + std::string ret; + + for (StrVector::const_iterator B = InputLanguages.begin(), + E = InputLanguages.end(); B != E; ++B) { + if (llvm::next(B) != E) + ret += *B + ", "; + else + ret += *B; + } + + return ret; + } } }; |