Abstract
The back-ends of compilers are usually composed of the modules of: (1) the translation from low-level intermediate representations to instruction sequences for the target machine, (2) register allocation, (3) instruction scheduling and peephole optimization. The retargetable code generators generally consist of the machine independent programs and the machine dependent parts generated from the target machine descriptions. In this tutorial, several methods of pattern matching for (1) and the methods of instruction scheduling and software pipeling for (3) are explained. Finally, two examples in practical use, the retargetable code generators in COINS and in GCC, are explained respectively.