Instead of adding an isSS field to LiveInterval to denote stack slot. Use top bit...
[oota-llvm.git] / tools / llvmc2 / Common.td
index 15b9264d88e15fb97818e8cc9af6afa2c4db0591..046e19e4448e2db484c88cdb21a53b7c3eb8e6e9 100644 (file)
@@ -1,4 +1,4 @@
-//===- Tools.td - Common definitions for LLVMCC  -----------*- tablegen -*-===//
+//===- Common.td - Common definitions for LLVMCC  ----------*- tablegen -*-===//
 //
 //                     The LLVM Compiler Infrastructure
 //
@@ -15,6 +15,10 @@ class Tool<list<dag> l> {
       list<dag> properties = l;
 }
 
+// Special Tool instance - the root node of the compilation graph.
+
+def root : Tool<[]>;
+
 // Possible Tool properties
 
 def in_language;
@@ -26,6 +30,7 @@ def sink;
 
 // Possible option types
 
+def alias_option;
 def switch_option;
 def parameter_option;
 def parameter_list_option;
@@ -41,6 +46,34 @@ def unpack_values;
 def help;
 def required;
 
+// Empty DAG marker.
+def empty;
+
+// The 'case' construct.
+def case;
+
+// Primitive tests.
+def switch_on;
+def parameter_equals;
+def element_in_list;
+def input_languages_contain;
+def not_empty;
+// TOTHINK: remove?
+def default;
+
+// Boolean operators.
+def and;
+def or;
+
+// Increase/decrease the edge weight.
+def inc_weight;
+def dec_weight;
+
+// Option list - used to specify aliases and sometimes help strings.
+class OptionList<list<dag> l> {
+      list<dag> options = l;
+}
+
 // Map from suffixes to language names
 
 class LangToSuffixes<string str, list<string> lst> {
@@ -52,12 +85,22 @@ class LanguageMap<list<LangToSuffixes> lst> {
       list<LangToSuffixes> map = lst;
 }
 
-// Toolchain classes
+// Compilation graph
 
-class ToolChain <list<Tool> lst> {
-      list <Tool> tools = lst;
+class EdgeBase<Tool t1, Tool t2, dag d> {
+      Tool a = t1;
+      Tool b = t2;
+      dag weight = d;
 }
 
-class ToolChains <list<ToolChain> lst> {
-      list<ToolChain> chains = lst;
+class Edge<Tool t1, Tool t2> : EdgeBase<t1, t2, (empty)>;
+
+// Edge and SimpleEdge are synonyms.
+class SimpleEdge<Tool t1, Tool t2> : EdgeBase<t1, t2, (empty)>;
+
+// Optionally enabled edge.
+class OptionalEdge<Tool t1, Tool t2, dag props> : EdgeBase<t1, t2, props>;
+
+class CompilationGraph<list<EdgeBase> lst> {
+      list<EdgeBase> edges = lst;
 }