An AbstractBURS_TreeNode is a node in a binary tree that is fed as input to BURS.
A few common utilities used for invoking BURS tree-pattern matching to do instruction selection.
Contains BURS helper functions common to all platforms.
A subclass of BURS_TreeNode for an IntConstantOperand.
Contains common BURS helper functions for platforms with memory operands.
Convert an IR object from LIR to MIR via BURS
Stage 4: Handle complex operators (those that expand to multiple basic blocks).
Stage 3: Block by block build DepGraph and do BURS based instruction selection.
Stage 2: Normalize usage of int constants to make less work in Stage 3.
Stage 1: Reduce the LIR operator set to a core set of operators.
This class contains code for quick and dirty instruction selection by forcing each instruction to be a tree and generating the trees in the same input as the input LIR instructions.
This class contains methods for invoking BURS tree-pattern matching from the OPT Compiler.
A special dependence graph for use by NormalBURS.
A special dependence graph node for use by NormalBURS.
Splits a large basic block into smaller ones with
After the transition to machine-specific IR, almost all remaining
operators can be directly mapped to machine instructions. The actual
transition is done by
which calls all the other classes. Some of these classes are
necessarily architecture-specific which is why they can be found in
the architecture-specific lir2mir packages.
A large part of the work of mapping of LIR instruction sequences to MIR instruction sequences is done by the BURS classes. We're using a custom fork of iburg that we call jburg. (NOTE: our jburg is not to be confused with JBurg). You can find it in our source tree. It is advised to take a look at it if you want to understand the BURS code. You should also get familiar with the generation of BURS classes in the build process.