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:

    Let’s just call what happened in the eighties the reclamation of motherhood . . . by women I knew and loved, hard-driving women with major careers who were after not just babies per se or motherhood per se, but after a reconciliation with their memories of their own mothers. So having a baby wasn’t just having a baby. It became a major healing.
    Anne Taylor Fleming (20th century)

    A father who will pursue infant care tasks with ease and proficiency is simply a father who has never been led to believe he couldn’t.
    Michael K. Meyerhoff (20th century)

    Wise Draco comes, deep in the midnight roll
    Of black artillery; he comes, though late;
    In code corroborating Calvin’s 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 Republic’s faith implied,
    Which holds that Man is naturally good,
    And—more—is Nature’s Roman, never to be
    scourged.
    Herman Melville (1819–1891)

    It is a sort of ranger service. Arnold’s expedition is a daily experience with these settlers. They can prove that they were out at almost any time; and I think that all the first generation of them deserve a pension more than any that went to the Mexican war.
    Henry David Thoreau (1817–1862)