Major Tasks in Code Generation
In addition to the basic conversion from an intermediate representation into a linear sequence of machine instructions, a typical code generator tries to optimize the generated code in some way.
Tasks which are typically part of a sophisticated compiler's "code generation" phase include:
- Instruction selection: which instructions to use.
- Instruction scheduling: in which order to put those instructions. Scheduling is a speed optimization that can have a critical effect on pipelined machines.
- Register allocation: the allocation of variables to processor registers
- Debug data generation if required so the code can be debugged.
Instruction selection is typically carried out by doing a recursive postorder traversal on the abstract syntax tree, matching particular tree configurations against templates; for example, the tree W := ADD(X,MUL(Y,Z)) might be transformed into a linear sequence of instructions by recursively generating the sequences for t1 := X and t2 := MUL(Y,Z), and then emitting the instruction ADD W, t1, t2.
In a compiler that uses an intermediate language, there may be two instruction selection stages — one to convert the parse tree into intermediate code, and a second phase much later to convert the intermediate code into instructions from the instruction set of the target machine. This second phase does not require a tree traversal; it can be done linearly, and typically involves a simple replacement of intermediate-language operations with their corresponding opcodes. However, if the compiler is actually a language translator (for example, one that converts Eiffel to C), then the second code-generation phase may involve building a tree from the linear intermediate code.
Read more about this topic: Code Generation (compiler)
Famous quotes containing the words major, tasks, code and/or generation:
“What, really, is wanted from a neighborhood? Convenience, certainly, an absence of major aggravation, to be sure. But perhaps most of all, ideally, what is wanted is a comfortable background, a breathing space of intermission between the intensities of private life and the calculations of public life.”
—Joseph Epstein (b. 1937)
“Everything I do is done within sight of the Führer, so that my faults or mistakes are never hidden from him. I do my very utmost to live and act in such a manner that the Führer should remain satisfied with me; I am hard-working; but whether I shall always be able to cope with the tasks entrusted to me in the future as well, is an open question.”
—Martin Bormann (19001945)
“Faultless honesty is a sine qua non of business life. Not alone the honesty according to the moral code and the Bible. When I speak of honesty I refer to the small, hidden, evasive meannesses of our natures. I speak of the honesty of ourselves to ourselves.”
—Alice Foote MacDougall (18671945)
“Their virtues lived in their children. The family changed its persons but not its manners, and they continued a blessing to the world from generation to generation.”
—Sarah Fielding (17101768)