Welcome to MiniC’s documentation!
- Base library - Errors
- Base library - Statement
- Base library - RISC-V instructions
- Base library - Operands
- Base library - Function data
- Base library - Graphs
- Linear intermediate representation
- Temporary allocation
- Control Flow Graph - CFG and Basic blocks
- Control Flow Graph - Terminators
- SSA form - Dominance frontier
- SSA form - Phi Nodes
These pages document the various Python sources in the Lib/ folder of MiniC. You should not have to edit them at all.
Base library
The Lib.Statement module defines various classes that represent RISC-V assembly statements, such as labels or 3-address instructions.
We won’t create objects of these classes directly very often. Instead, to easily create such statements for standard RISC-V assembly instructions and pseudo-instructions, we give you the Lib.RiscV module.
RISC-V instructions take arguments of various kinds, as defined in the Lib.Operands module.
At some point, we will need some basic functions about oriented and non oriented graphs, those are present in Lib.Graphes module.
Linear Intermediate representation
The Lib.LinearCode module allows to work with assembly source code modeled as a list of statements.
Temporary allocation
Before implementing the all-in-memory allocator of lab 4a, you should understand the naive allocator in the Lib.Allocator module.
Control Flow Graph Intermediate representation
The classes for the CFG and its basic blocks are in the Lib.CFG module. Each block ends with a terminator, as documented in the Lib.Terminator module.
SSA form
The translation of the CFG into SSA form makes use of dominance frontiers. Functions to work with dominance are defined in the Lib.Dominators module.
Phi nodes, a special kind of statement that appears in CFGs in SSA form, are defined in the Lib.PhiNode module.