This book presents a comprehensive structured up-to-date survey on instruction selection. The
survey is structured according to two dimensions: approaches to instruction selection from the
past 45 years are organized and discussed according to their fundamental principles and
according to the characteristics of the supported machine instructions. The fundamental
principles are macro expansion tree covering DAG covering and graph covering. The machine
instruction characteristics introduced are single-output multi-output disjoint-output
inter-block and interdependent machine instructions. The survey also examines problems that
have yet to be addressed by existing approaches. The book is suitable for advanced
undergraduate students in computer science graduate students practitioners and researchers.