Trial 7
Due on December 4th 11:59 PM (Not accepted late).
Updates

None yet!

Overview

For this trial, you should enhance the x64 codegen module of ac such that the final code performs additional peephole optimization. In particular, you should ensure that the IRProgram::toX64 function performs the following optimizations:

  • Unconditional jumps to a successor instruction are disallowed
  • Subtraction by 0 or multiplication by 1 is eliminated
  • Subtraction by 1 uses the decrement instruction (decq)
  • Nop instructions are not emitted
You should ensure that the semantics of the program is preserved (i.e. adhere to the as-if principle). For the given optimizations, the main consideration is that if an instruction is eliminated, jumps should be forwarded. For example, if a nop is the target of a jump, the next (non-eliminated) instruction should instead be the target of that jump.

Deliverables

You may enhance your existing ac source code such that when the argument is provided, the codegen obeys the above constraints.

Submit a complete source code tarball, including a makefile.