summaryrefslogtreecommitdiffstats
path: root/llvm/tools
diff options
context:
space:
mode:
authorMikhail Glushenkov <foldr@codedgers.com>2008-05-30 06:18:16 +0000
committerMikhail Glushenkov <foldr@codedgers.com>2008-05-30 06:18:16 +0000
commit1f7a0289297732f420a6261a9ae42a215c52bbc0 (patch)
tree6c206a0e6c4ae3936c49d6862c1d2598b6933a06 /llvm/tools
parent73d708b82cc8a836dce659246c0e0b967a3eeb44 (diff)
downloadbcm5719-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')
-rw-r--r--llvm/tools/llvmc2/CompilationGraph.cpp33
-rw-r--r--llvm/tools/llvmc2/Tool.h2
-rw-r--r--llvm/tools/llvmc2/examples/Clang.td6
3 files changed, 26 insertions, 15 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;
+ }
}
};
diff --git a/llvm/tools/llvmc2/Tool.h b/llvm/tools/llvmc2/Tool.h
index 294c6fb9b3b..ec9d1546ffd 100644
--- a/llvm/tools/llvmc2/Tool.h
+++ b/llvm/tools/llvmc2/Tool.h
@@ -43,7 +43,7 @@ namespace llvmc {
const InputLanguagesSet& InLangs) const = 0;
virtual const char* Name() const = 0;
- virtual const char* InputLanguage() const = 0;
+ virtual StrVector InputLanguages() const = 0;
virtual const char* OutputLanguage() const = 0;
virtual const char* OutputSuffix() const = 0;
diff --git a/llvm/tools/llvmc2/examples/Clang.td b/llvm/tools/llvmc2/examples/Clang.td
index 45ee63891c8..c06737238b3 100644
--- a/llvm/tools/llvmc2/examples/Clang.td
+++ b/llvm/tools/llvmc2/examples/Clang.td
@@ -4,12 +4,8 @@
include "Common.td"
-// TOFIX: It should be possible to use a string list in the 'in_language'
-// tool property. There should be also an 'in_language' test in the
-// 'case' construct.
-
def clang : Tool<
-[(in_language "c"),
+[(in_language ["c", "c++", "objective-c"]),
(out_language "llvm-bitcode"),
(output_suffix "bc"),
(cmd_line (case (switch_on "E"), "clang -E $INFILE -o $OUTFILE",
OpenPOWER on IntegriCloud