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
MachineCSEclass runs on a machine function, and hence it should inherit the
MachineFunctionPassclass. It has various members, such as
TargetInstructionInfo, 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; and ...