9 ['P'] = 0, /* parsing */
10 ['M'] = 0, /* memory optimization */
11 ['N'] = 0, /* ssa construction */
12 ['C'] = 0, /* copy elimination */
13 ['F'] = 0, /* constant folding */
14 ['A'] = 0, /* abi lowering */
15 ['I'] = 0, /* instruction selection */
16 ['L'] = 0, /* liveness */
17 ['S'] = 0, /* spilling */
18 ['R'] = 0, /* reg. allocation */
21 extern Target T_amd64_sysv
;
22 extern Target T_amd64_apple
;
23 extern Target T_arm64
;
24 extern Target T_arm64_apple
;
27 static Target
*tlist
[] = {
44 if (d
->type
== DEnd
) {
45 fputs("/* end data */\n\n", outf
);
56 fprintf(stderr
, "**** Function %s ****", fn
->name
);
58 fprintf(stderr
, "\n> After parsing:\n");
91 assert(fn
->rpo
[0] == fn
->start
);
93 if (n
== fn
->nblk
-1) {
97 fn
->rpo
[n
]->link
= fn
->rpo
[n
+1];
100 fprintf(outf
, "/* end function %s */\n\n", fn
->name
);
102 fprintf(stderr
, "\n");
107 main(int ac
, char *av
[])
116 while ((c
= getopt(ac
, av
, "hd:o:t:")) != -1)
119 for (; *optarg
; optarg
++)
120 if (isalpha(*optarg
)) {
121 debug
[toupper(*optarg
)] = 1;
126 if (strcmp(optarg
, "-") != 0) {
127 outf
= fopen(optarg
, "w");
129 fprintf(stderr
, "cannot open '%s'\n", optarg
);
135 if (strcmp(optarg
, "?") == 0) {
139 for (t
=tlist
;; t
++) {
141 fprintf(stderr
, "unknown target '%s'\n", optarg
);
144 if (strcmp(optarg
, (*t
)->name
) == 0) {
152 hf
= c
!= 'h' ? stderr
: stdout
;
153 fprintf(hf
, "%s [OPTIONS] {file.ssa, -}\n", av
[0]);
154 fprintf(hf
, "\t%-11s prints this help\n", "-h");
155 fprintf(hf
, "\t%-11s output to file\n", "-o file");
156 fprintf(hf
, "\t%-11s generate for a target among:\n", "-t <target>");
157 fprintf(hf
, "\t%-11s ", "");
158 for (t
=tlist
, sep
=""; *t
; t
++, sep
=", ") {
159 fprintf(hf
, "%s%s", sep
, (*t
)->name
);
161 fputs(" (default)", hf
);
164 fprintf(hf
, "\t%-11s dump debug information\n", "-d <flags>");
170 if (!f
|| strcmp(f
, "-") == 0) {
176 fprintf(stderr
, "cannot open '%s'\n", f
);
180 parse(inf
, f
, data
, func
);
182 } while (++optind
< ac
);