Using AST numbering to generate IR code in SSA form
In order to generate IR code in SSA form from the AST, we use an approach called AST numbering. The basic idea is that for each basic block, we store the current value of local variables written to in this basic block.
Although it is simple, we will still need several steps. We will introduce the required data structure first, after which we will implement the reading and writing of values local to a basic block. We will then handle values that are used in several basic blocks and conclude by optimizing the phi
instructions created.
Defining the data structure to hold values
We use struct BasicBlockDef
to hold the information for a single block:
struct BasicBlockDef { llvm::DenseMap<Decl *, llvm::TrackingVH<llvm::Value>> Defs; // ... };
The LLVM class, llvm::Value
, represents a value in SSA form. The Value
class acts like a label on the result of a computation. It is created once, usually through an IR instruction...