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 | ffcf3a1a699a63bec6d70b250adbe99effab852c (patch) | |
tree | e52d55106efa0db4d52ebb462a2dcfa4050a8b40 /tools/llvmc2/CompilationGraph.cpp | |
parent | aa3bb17fcca35b9720dd2c39d47443d001990513 (diff) |
Make it possible to have multiple input languages for a single tool.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@51742 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'tools/llvmc2/CompilationGraph.cpp')
-rw-r--r-- | tools/llvmc2/CompilationGraph.cpp | 33 |
1 files changed, 24 insertions, 9 deletions
diff --git a/tools/llvmc2/CompilationGraph.cpp b/tools/llvmc2/CompilationGraph.cpp index bf34b333d6..92f3104c01 100644 --- a/tools/llvmc2/CompilationGraph.cpp +++ b/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; + } } }; |