1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
|
//===- Tools.td - Common definitions for LLVMCC -----------*- 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 llvmcc tool description files.
//
//===----------------------------------------------------------------------===//
class Tool<list<dag> l> {
list<dag> properties = l;
}
// Special Tool instance - graph root.
def root : Tool<[]>;
// Possible Tool properties
def in_language;
def out_language;
def output_suffix;
def cmd_line;
def join;
def sink;
// Possible option types
def switch_option;
def parameter_option;
def parameter_list_option;
def prefix_option;
def prefix_list_option;
// Possible option properties
def append_cmd;
def forward;
def stop_compilation;
def unpack_values;
def help;
def required;
// Possible edge properties
def switch_on;
def parameter_equals;
def element_in_list;
// Property combinators
// TOFIX: implement
def and;
def or;
// 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<Tool t1, Tool t2, list<dag> lst> {
Tool a = t1;
Tool b = t2;
list<dag> props = lst;
}
class Edge<Tool t1, Tool t2> : EdgeBase<t1, t2, []>;
// Edge and DefaultEdge are synonyms.
class DefaultEdge<Tool t1, Tool t2> : EdgeBase<t1, t2, []>;
// Optionally enabled edge.
class OptionalEdge<Tool t1, Tool t2, list<dag> lst> : EdgeBase<t1, t2, lst>;
class CompilationGraph<list<EdgeBase> lst> {
list<EdgeBase> edges = lst;
}
|