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)

    “Personal change, growth, development, identity formation—these tasks that once were thought to belong to childhood and adolescence alone now are recognized as part of adult life as well. Gone is the belief that adulthood is, or ought to be, a time of internal peace and comfort, that growing pains belong only to the young; gone the belief that these are marker events—a job, a mate, a child—through which we will pass into a life of relative ease.”
    —Lillian Breslow Rubin (20th century)

    “Many people will say to working mothers, in effect, “I don’t think you can have it all.” The phrase for “have it all” is code for “have your cake and eat it too.” What these people really mean is that achievement in the workplace has always come at a price—usually a significant personal price; conversely, women who stayed home with their children were seen as having sacrificed a great deal of their own ambition for their families.”
    —Anne C. Weisberg (20th century)

    “Could it be that those who were reared in the postwar years really were spoiled, as we used to hear? Did a child-centered generation, raised in depression and war, produce a self-centered generation that resents children and parenthood?”
    —C. John Sommerville (20th century)