Code Generation (compiler) - Major Tasks in Code Generation

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:

    “Self-esteem evolves in kids primarily through the quality of our relationships with them. Because they can’t see themselves directly, children know themselves by reflection. For the first several years of their lives, you are their major influence. Later on, teachers and friends come into the picture. But especially at the beginning, you’re it with a capital I.”
    —Stephanie Martson (20th century)

    “More than ten million women march to work every morning side by side with the men. Steadily the importance of women is gaining not only in the routine tasks of industry but in executive responsibility. I include also the woman who stays at home as the guardian of the welfare of the family. She is a partner in the job and wages. Women constitute a part of our industrial achievement.”
    —Herbert Hoover (1874–1964)

    “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 (1867–1945)

    “I do not mean to imply that the good old days were perfect. But the institutions and structure—the web—of society needed reform, not demolition. To have cut the institutional and community strands without replacing them with new ones proved to be a form of abuse to one generation and to the next. For so many Americans, the tragedy was not in dreaming that life could be better; the tragedy was that the dreaming ended.”
    —Richard Louv (20th century)