27 lines
No EOL
773 B
Markdown
27 lines
No EOL
773 B
Markdown
# Intermediate Representation
|
|
|
|
## Static Single Assignment
|
|
|
|
The SSA IR follows a simple rule: every value is assigned exactly once.
|
|
|
|
### Basic Blocks
|
|
|
|
Every function has a list of basic blocks. Basic blocks store values in the order they appear in the original code.
|
|
|
|
### Instructions
|
|
|
|
Instructions are no different from values. The calculation `1 + 2` is represented as 3 values using 2 int constants and 1 binary operation:
|
|
|
|
```
|
|
t0 = 1
|
|
t1 = 2
|
|
t2 = t0 + t1
|
|
```
|
|
|
|
All of these are considered values even in cases where the type of the value is `void` such as in procedural function calls with side effects.
|
|
|
|
### Pointers
|
|
|
|
There are no IDs or indices, therefore values don't know their position in a basic block.
|
|
|
|
Values reference other values by including a pointer to them. |