Eliminating common subexpression from machine code
The aim of the CSE algorithm is to eliminate common subexpressions to make machine code compact and remove unnecessary, duplicate code. Let's look at the code in the LLVM trunk to understand how it is implemented. The detailed code is in the lib/CodeGen/MachineCSE.cpp
file.
How to do it…
The
MachineCSE
class runs on a machine function, and hence it should inherit theMachineFunctionPass
class. It has various members, such asTargetInstructionInfo
, which is used to get information about the target instruction (used in performing CSE);TargetRegisterInfo
, which is used to get information about the target register (whether it belongs to a reserved register class, or to more such similar classes; andMachineDominatorTree
, which is used to get information about the dominator tree for the machine block:class MachineCSE : public MachineFunctionPass { const TargetInstrInfo *TII; const TargetRegisterInfo *TRI; AliasAnalysis *AA; MachineDominatorTree...