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
diff --git a/tools/llvmc2/CompilationGraph.cpp b/tools/llvmc2/CompilationGraph.cpp
index bf34b33..92f3104 100644
--- a/tools/llvmc2/CompilationGraph.cpp
+++ b/tools/llvmc2/CompilationGraph.cpp
@@ -115,16 +115,18 @@
}
}
-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 @@
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;
+ }
}
};