summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorMikhail Glushenkov <foldr@codedgers.com>2008-11-17 17:29:18 +0000
committerMikhail Glushenkov <foldr@codedgers.com>2008-11-17 17:29:18 +0000
commit010887765a9a80ecb5e34b65a3aeacf098298cb3 (patch)
tree1884c821524db37b2afb76a081baa3853f074396 /tools
parent6560c000a1327b6a023badafed974f35fa1bdc3b (diff)
downloadllvm-010887765a9a80ecb5e34b65a3aeacf098298cb3.tar.gz
llvm-010887765a9a80ecb5e34b65a3aeacf098298cb3.tar.bz2
llvm-010887765a9a80ecb5e34b65a3aeacf098298cb3.tar.xz
Add a layer of indirection to make plugins more flexible.
Use strings instead of TableGen defs in the compilation graph definition. Makes it easier for the plugins to modify an existing graph. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@59447 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'tools')
-rw-r--r--tools/llvmc2/doc/LLVMC-Reference.rst21
-rw-r--r--tools/llvmc2/doc/LLVMC-Tutorial.rst2
-rw-r--r--tools/llvmc2/plugins/Base/Base.td54
-rw-r--r--tools/llvmc2/plugins/Clang/Clang.td12
-rw-r--r--tools/llvmc2/plugins/Simple/Simple.td2
5 files changed, 47 insertions, 44 deletions
diff --git a/tools/llvmc2/doc/LLVMC-Reference.rst b/tools/llvmc2/doc/LLVMC-Reference.rst
index 62e2ef41a8..2d78257298 100644
--- a/tools/llvmc2/doc/LLVMC-Reference.rst
+++ b/tools/llvmc2/doc/LLVMC-Reference.rst
@@ -158,7 +158,7 @@ definitions::
include "llvm/CompilerDriver/Common.td"
// And optionally:
// include "llvm/CompilerDriver/Tools.td"
- // which contains tool definitions.
+ // which contains some useful tool definitions.
Internally, LLVMC stores information about possible source
transformations in form of a graph. Nodes in this graph represent
@@ -171,19 +171,19 @@ The definition of the compilation graph (see file
``plugins/Base/Base.td`` for an example) is just a list of edges::
def CompilationGraph : CompilationGraph<[
- Edge<root, llvm_gcc_c>,
- Edge<root, llvm_gcc_assembler>,
+ Edge<"root", "llvm_gcc_c">,
+ Edge<"root", "llvm_gcc_assembler">,
...
- Edge<llvm_gcc_c, llc>,
- Edge<llvm_gcc_cpp, llc>,
+ Edge<"llvm_gcc_c", "llc">,
+ Edge<"llvm_gcc_cpp", "llc">,
...
- OptionalEdge<llvm_gcc_c, opt, [(switch_on "opt")]>,
- OptionalEdge<llvm_gcc_cpp, opt, [(switch_on "opt")]>,
+ OptionalEdge<"llvm_gcc_c", "opt", [(switch_on "opt")]>,
+ OptionalEdge<"llvm_gcc_cpp", "opt", [(switch_on "opt")]>,
...
- OptionalEdge<llvm_gcc_assembler, llvm_gcc_cpp_linker,
+ OptionalEdge<"llvm_gcc_assembler", "llvm_gcc_cpp_linker",
(case (input_languages_contain "c++"), (inc_weight),
(or (parameter_equals "linker", "g++"),
(parameter_equals "linker", "c++")), (inc_weight))>,
@@ -193,7 +193,10 @@ The definition of the compilation graph (see file
As you can see, the edges can be either default or optional, where
optional edges are differentiated by an additional ``case`` expression
-used to calculate the weight of this edge.
+used to calculate the weight of this edge. Notice also that we refer
+to tools via their names (as strings). This allows us to add edges to
+an existing compilation graph without having to include all tool
+definitions that it uses.
The default edges are assigned a weight of 1, and optional edges get a
weight of 0 + 2*N where N is the number of tests that evaluated to
diff --git a/tools/llvmc2/doc/LLVMC-Tutorial.rst b/tools/llvmc2/doc/LLVMC-Tutorial.rst
index ffc1de903b..9c6741eba1 100644
--- a/tools/llvmc2/doc/LLVMC-Tutorial.rst
+++ b/tools/llvmc2/doc/LLVMC-Tutorial.rst
@@ -66,7 +66,7 @@ Contents of the file ``Simple.td`` look like this::
def LanguageMap : LanguageMap<[LangToSuffixes<"c", ["c"]>]>;
// Compilation graph
- def CompilationGraph : CompilationGraph<[Edge<root, gcc>]>;
+ def CompilationGraph : CompilationGraph<[Edge<"root", "gcc">]>;
As you can see, this file consists of three parts: tool descriptions,
language map, and the compilation graph definition.
diff --git a/tools/llvmc2/plugins/Base/Base.td b/tools/llvmc2/plugins/Base/Base.td
index 158520c278..85a37cb41a 100644
--- a/tools/llvmc2/plugins/Base/Base.td
+++ b/tools/llvmc2/plugins/Base/Base.td
@@ -17,42 +17,42 @@ include "llvm/CompilerDriver/Tools.td"
// Toolchains
def CompilationGraph : CompilationGraph<[
- Edge<root, llvm_gcc_c>,
- Edge<root, llvm_gcc_assembler>,
- Edge<root, llvm_gcc_cpp>,
- Edge<root, llvm_gcc_m>,
- Edge<root, llvm_gcc_mxx>,
- Edge<root, llvm_as>,
-
- Edge<llvm_gcc_c, llc>,
- Edge<llvm_gcc_cpp, llc>,
- Edge<llvm_gcc_m, llc>,
- Edge<llvm_gcc_mxx, llc>,
- Edge<llvm_as, llc>,
-
- OptionalEdge<llvm_gcc_c, opt, (case (switch_on "opt"), (inc_weight))>,
- OptionalEdge<llvm_gcc_cpp, opt, (case (switch_on "opt"), (inc_weight))>,
- OptionalEdge<llvm_gcc_m, opt, (case (switch_on "opt"), (inc_weight))>,
- OptionalEdge<llvm_gcc_mxx, opt, (case (switch_on "opt"), (inc_weight))>,
- OptionalEdge<llvm_as, opt, (case (switch_on "opt"), (inc_weight))>,
- Edge<opt, llc>,
-
- Edge<llc, llvm_gcc_assembler>,
- Edge<llvm_gcc_assembler, llvm_gcc_linker>,
- OptionalEdge<llvm_gcc_assembler, llvm_gcc_cpp_linker,
+ Edge<"root", "llvm_gcc_c">,
+ Edge<"root", "llvm_gcc_assembler">,
+ Edge<"root", "llvm_gcc_cpp">,
+ Edge<"root", "llvm_gcc_m">,
+ Edge<"root", "llvm_gcc_mxx">,
+ Edge<"root", "llvm_as">,
+
+ Edge<"llvm_gcc_c", "llc">,
+ Edge<"llvm_gcc_cpp", "llc">,
+ Edge<"llvm_gcc_m", "llc">,
+ Edge<"llvm_gcc_mxx", "llc">,
+ Edge<"llvm_as", "llc">,
+
+ OptionalEdge<"llvm_gcc_c", "opt", (case (switch_on "opt"), (inc_weight))>,
+ OptionalEdge<"llvm_gcc_cpp", "opt", (case (switch_on "opt"), (inc_weight))>,
+ OptionalEdge<"llvm_gcc_m", "opt", (case (switch_on "opt"), (inc_weight))>,
+ OptionalEdge<"llvm_gcc_mxx", "opt", (case (switch_on "opt"), (inc_weight))>,
+ OptionalEdge<"llvm_as", "opt", (case (switch_on "opt"), (inc_weight))>,
+ Edge<"opt", "llc">,
+
+ Edge<"llc", "llvm_gcc_assembler">,
+ Edge<"llvm_gcc_assembler", "llvm_gcc_linker">,
+ OptionalEdge<"llvm_gcc_assembler", "llvm_gcc_cpp_linker",
(case
(or (input_languages_contain "c++"),
- (input_languages_contain "objective-c++")),
+ (input_languages_contain "objective-c++")),
(inc_weight),
(or (parameter_equals "linker", "g++"),
(parameter_equals "linker", "c++")), (inc_weight))>,
- Edge<root, llvm_gcc_linker>,
- OptionalEdge<root, llvm_gcc_cpp_linker,
+ Edge<"root", "llvm_gcc_linker">,
+ OptionalEdge<"root", "llvm_gcc_cpp_linker",
(case
(or (input_languages_contain "c++"),
- (input_languages_contain "objective-c++")),
+ (input_languages_contain "objective-c++")),
(inc_weight),
(or (parameter_equals "linker", "g++"),
(parameter_equals "linker", "c++")), (inc_weight))>
diff --git a/tools/llvmc2/plugins/Clang/Clang.td b/tools/llvmc2/plugins/Clang/Clang.td
index d30bc978aa..ee6987fa35 100644
--- a/tools/llvmc2/plugins/Clang/Clang.td
+++ b/tools/llvmc2/plugins/Clang/Clang.td
@@ -76,11 +76,11 @@ def LanguageMap : LanguageMap<
// Compilation graph
def CompilationGraph : CompilationGraph<[
- Edge<root, clang_c>,
- Edge<root, clang_cpp>,
- Edge<root, clang_objective_c>,
- Edge<clang_c, llvm_ld>,
- Edge<clang_cpp, llvm_ld>,
- Edge<clang_objective_c, llvm_ld>
+ Edge<"root", "clang_c">,
+ Edge<"root", "clang_cpp">,
+ Edge<"root", "clang_objective_c">,
+ Edge<"clang_c", "llvm_ld">,
+ Edge<"clang_cpp", "llvm_ld">,
+ Edge<"clang_objective_c", "llvm_ld">
]>;
diff --git a/tools/llvmc2/plugins/Simple/Simple.td b/tools/llvmc2/plugins/Simple/Simple.td
index 2bc4011926..b974cbc95e 100644
--- a/tools/llvmc2/plugins/Simple/Simple.td
+++ b/tools/llvmc2/plugins/Simple/Simple.td
@@ -27,4 +27,4 @@ def gcc : Tool<
def LanguageMap : LanguageMap<[LangToSuffixes<"c", ["c"]>]>;
-def CompilationGraph : CompilationGraph<[Edge<root, gcc>]>;
+def CompilationGraph : CompilationGraph<[Edge<"root", "gcc">]>;