Preface |
|
ix | |
Part I Fundamentals of Compilation |
|
|
|
3 | (13) |
|
|
4 | (1) |
|
|
5 | (2) |
|
Data structures for tree languages |
|
|
7 | (9) |
|
|
16 | (22) |
|
|
17 | (1) |
|
|
18 | (3) |
|
|
21 | (3) |
|
Nondeterministic finite automata |
|
|
24 | (6) |
|
Lexical-analyzer generators |
|
|
30 | (8) |
|
|
38 | (48) |
|
|
40 | (5) |
|
|
45 | (10) |
|
|
55 | (13) |
|
|
68 | (8) |
|
|
76 | (10) |
|
|
86 | (17) |
|
|
86 | (3) |
|
|
89 | (4) |
|
|
93 | (10) |
|
|
103 | (13) |
|
|
103 | (8) |
|
|
111 | (5) |
|
|
116 | (20) |
|
|
118 | (8) |
|
Frames in the MiniJava compiler |
|
|
126 | (10) |
|
Translation to Intermediate Code |
|
|
136 | (26) |
|
Intermediate representation trees |
|
|
137 | (3) |
|
|
140 | (15) |
|
|
155 | (7) |
|
|
162 | (14) |
|
|
163 | (6) |
|
Taming conditional branches |
|
|
169 | (7) |
|
|
176 | (27) |
|
Algorithms for instruction selection |
|
|
179 | (8) |
|
|
187 | (3) |
|
Instruction selection for the MiniJava compiler |
|
|
190 | (13) |
|
|
203 | (16) |
|
Solution of dataflow equations |
|
|
205 | (9) |
|
Liveness in the Minijava compiler |
|
|
214 | (5) |
|
|
219 | (30) |
|
Coloring by simplification |
|
|
220 | (3) |
|
|
223 | (4) |
|
|
227 | (5) |
|
Graph-coloring implementation |
|
|
232 | (9) |
|
Register allocation for trees |
|
|
241 | (8) |
|
|
249 | (8) |
Part II Advanced Topics |
|
|
|
257 | (26) |
|
Mark-and-sweep collection |
|
|
257 | (5) |
|
|
262 | (2) |
|
|
264 | (5) |
|
|
269 | (3) |
|
|
272 | (2) |
|
|
274 | (1) |
|
Interface to the compiler |
|
|
275 | (8) |
|
Object-Oriented Languages |
|
|
283 | (15) |
|
|
283 | (1) |
|
Single inheritance of data fields |
|
|
284 | (2) |
|
|
286 | (3) |
|
|
289 | (3) |
|
Private fields and methods |
|
|
292 | (1) |
|
|
293 | (1) |
|
Optimizing object-oriented programs |
|
|
293 | (5) |
|
Functional Programming Languages |
|
|
298 | (37) |
|
A simple functional language |
|
|
299 | (2) |
|
|
301 | (1) |
|
|
302 | (6) |
|
|
308 | (8) |
|
|
316 | (3) |
|
|
319 | (2) |
|
|
321 | (14) |
|
|
335 | (15) |
|
|
336 | (3) |
|
Polymorphic type-checking |
|
|
339 | (5) |
|
Translation of polymorphic programs |
|
|
344 | (3) |
|
Resolution of static overloading |
|
|
347 | (3) |
|
|
350 | (26) |
|
Intermediate representation for flow analysis |
|
|
351 | (3) |
|
Various dataflow analyses |
|
|
354 | (5) |
|
Transformations using dataflow analysis |
|
|
359 | (1) |
|
Speeding up dataflow analysis |
|
|
360 | (9) |
|
|
369 | (7) |
|
|
376 | (23) |
|
|
379 | (5) |
|
Loop-invariant computations |
|
|
384 | (1) |
|
|
385 | (6) |
|
|
391 | (4) |
|
|
395 | (4) |
|
Static Single-Assignment Form |
|
|
399 | (41) |
|
|
402 | (8) |
|
Efficient Computation of the Dominator Tree |
|
|
410 | (7) |
|
Optimization Algorithms Using SSA |
|
|
417 | (6) |
|
Arrays, pointers, and memory |
|
|
423 | (2) |
|
The control-dependence graph |
|
|
425 | (3) |
|
Converting back from SSA form |
|
|
428 | (2) |
|
A functional intermediate form |
|
|
430 | (10) |
|
Pipelining and Scheduling |
|
|
440 | (24) |
|
Loop scheduling without resource bounds |
|
|
444 | (4) |
|
Resource-bounded loop pipelining |
|
|
448 | (8) |
|
|
456 | (8) |
|
|
464 | (20) |
|
|
465 | (3) |
|
|
468 | (2) |
|
|
470 | (6) |
|
|
476 | (1) |
|
|
477 | (3) |
|
Garbage collection and the memory hierarchy |
|
|
480 | (4) |
Appendix: MiniJava Language Reference Manual |
|
484 | (3) |
|
|
484 | (1) |
|
|
484 | (2) |
|
|
486 | (1) |
Bibliography |
|
487 | (8) |
Index |
|
495 | |