In this book we have discussed, examined, and assessed numerous methods of instruction selection. Starting with monolithic instruction selectors, which were typically created ad hoc and by hand, the field advanced into retargetable macro-expanding designs that could be generated from a declarative machine description of the target machine. These were in turn later succeeded by the more powerful principle of tree covering, which led to the introduction of several formal methodologies that made it possible to verify the correctness of the instruction selector. Simultaneous developments were also made to combine macro expansion with peephole optimization, which has proven a very effective methodology. The principle of tree covering later evolved into the more general forms of DAG covering and graph covering, yielding more powerful methods of instruction selection at the expense of increased computational complexity. Since optimal DAG covering and graph covering are both NP-complete, most such designs often applied heuristics to reduce the search space. Lastly, more recent developments have given rise to new approaches where the task of instruction selection is modeled using methods from combinatorial optimization. An accessible overview of all studied techniques is available in Appendix A, and a publication timeline diagram is shown in Appendix B.
KeywordsTree Covering Register Allocation Assembly Code Graph Covering Instruction Schedule
Unable to display preview. Download preview PDF.