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:
“In the larger view the major forces of the depression now lie outside of the United States, and our recuperation has been retarded by the unwarranted degree of fear and apprehension created by these outside forces.”
—Herbert Hoover (18741964)
“I am of course confident that I will fulfil my tasks as a writer in all circumstancesfrom my grave even more successfully and more irrefutably than in my lifetime. No one can bar the road to truth, and to advance its cause I am prepared to accept even death. But may it be that repeated lessons will finally teach us not to stop the writers pen during his lifetime? At no time has this ennobled our history.”
—Alexander Solzhenitsyn (b. 1918)
“Wise Draco comes, deep in the midnight roll
Of black artillery; he comes, though late;
In code corroborating Calvins creed
And cynic tyrannies of honest kings;
He comes, nor parlies; and the Town, redeemed,
Gives thanks devout; nor, being thankful, heeds
The grimy slur on the Republics faith implied,
Which holds that Man is naturally good,
Andmoreis Natures Roman, never to be
scourged.”
—Herman Melville (18191891)
“What an infernal set of fools those schoolmarms must be! Well, if in order to please men they wish to live on air, let them. The sooner the present generation of women dies out, the better. We have idiots enough in the world now without such women propagating any more.”
—Elizabeth Cady Stanton (18151902)