Creating the target machine and the sub-target
So far, we’ve implemented the instruction selection classes and a couple of other classes. Now, we need to set up how our backend will work. Like the optimization pipeline, a backend is divided into passes. Configuring those passes is the main task of the M88kTargetMachine
class. In addition, we need to specify which features are available for instruction selection. Usually, a platform is a family of CPUs, which all have a common set of instructions but differ by specific extensions. For example, some CPUs have vector instructions, while others do not. In LLVM IR, a function can have attributes attached that specify for which CPU this function should be compiled, or what features are available. In other words, each function could have a different configuration, which is captured in the M88kSubTarget
class.
Implementing M88kSubtarget
Let’s implement the M88kSubtarget
class first. The declaration is stored in the M88kSubtarget...