-//===- Tools.td - Common definitions for LLVMCC -----------*- tablegen -*-===//
+//===- Common.td - Common definitions for LLVMCC ----------*- tablegen -*-===//
//
// The LLVM Compiler Infrastructure
//
list<dag> properties = l;
}
-// Special Tool instance - graph root.
+// Special Tool instance - the root node of the compilation graph.
def root : Tool<[]>;
// Possible option types
+def alias_option;
def switch_option;
def parameter_option;
def parameter_list_option;
def help;
def required;
-// Possible edge properties
+// Empty DAG marker.
+def empty;
+// The 'case' construct.
+def case;
+
+// Primitive tests.
def switch_on;
def parameter_equals;
def element_in_list;
-def if_input_languages_contain;
+def input_languages_contain;
+def not_empty;
+// TOTHINK: remove?
+def default;
-// Edge property combinators.
+// 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> {
// Compilation graph
-class EdgeBase<Tool t1, Tool t2, list<dag> lst> {
+class EdgeBase<Tool t1, Tool t2, dag d> {
Tool a = t1;
Tool b = t2;
- list<dag> props = lst;
+ dag weight = d;
}
-class Edge<Tool t1, Tool t2> : EdgeBase<t1, t2, []>;
+class Edge<Tool t1, Tool t2> : EdgeBase<t1, t2, (empty)>;
-// Edge and DefaultEdge are synonyms.
-class DefaultEdge<Tool t1, Tool t2> : EdgeBase<t1, t2, []>;
+// Edge and SimpleEdge are synonyms.
+class SimpleEdge<Tool t1, Tool t2> : EdgeBase<t1, t2, (empty)>;
// Optionally enabled edge.
-class OptionalEdge<Tool t1, Tool t2, list<dag> lst> : EdgeBase<t1, t2, lst>;
+class OptionalEdge<Tool t1, Tool t2, dag props> : EdgeBase<t1, t2, props>;
class CompilationGraph<list<EdgeBase> lst> {
list<EdgeBase> edges = lst;