//===- Common.td - Common definitions for LLVMC2 ----------*- tablegen -*-===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // This file contains common definitions used in llvmc tool description files. // //===----------------------------------------------------------------------===// class Tool<list<dag> l> { list<dag> properties = l; } // Possible Tool properties. def in_language; def out_language; def output_suffix; def cmd_line; def join; def sink; def actions; // Possible option types. def alias_option; def switch_option; def parameter_option; def parameter_list_option; def prefix_option; def prefix_list_option; // Possible option properties. def extern; def help; def hidden; def init; def multi_val; def one_or_more; def really_hidden; def required; def zero_or_one; // Empty DAG marker. def empty; // The 'case' construct. def case; // Boolean constants. def true; def false; // Boolean operators. def and; def or; // Primitive tests. def switch_on; def parameter_equals; def element_in_list; def input_languages_contain; def not_empty; def default; // Possible actions. def append_cmd; def forward; def forward_as; def stop_compilation; def unpack_values; def error; // Increase/decrease the edge weight. def inc_weight; def dec_weight; // Used to specify plugin priority. class PluginPriority<int p> { int priority = p; } // 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> { string lang = str; list<string> suffixes = lst; } class LanguageMap<list<LangToSuffixes> lst> { list<LangToSuffixes> map = lst; } // Compilation graph class EdgeBase<string t1, string t2, dag d> { string a = t1; string b = t2; dag weight = d; } class Edge<string t1, string t2> : EdgeBase<t1, t2, (empty)>; // Edge and SimpleEdge are synonyms. class SimpleEdge<string t1, string t2> : EdgeBase<t1, t2, (empty)>; // Optionally enabled edge. class OptionalEdge<string t1, string t2, dag props> : EdgeBase<t1, t2, props>; class CompilationGraph<list<EdgeBase> lst> { list<EdgeBase> edges = lst; }