Welcome to MiniC’s documentation!
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 api/Lib.Statement 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 api/Lib.RiscV.
RISC-V instructions take arguments of various kinds, as defined in the api/Lib.Operands.
At some point, we will need some basic functions about oriented and non oriented graphs, those are present in api/Lib.Graphes.
Linear Intermediate representation
The api/Lib.LinearCode 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 api/Lib.Allocator.
Control Flow Graph Intermediate representation
The classes for the CFG and its basic blocks are in the api/Lib.CFG. Each block ends with a terminator, as documented in the api/Lib.Terminator.
SSA form
The translation of the CFG into SSA form makes use of dominance frontiers. Functions to work with dominance are defined in the api/Lib.Dominators.
Phi nodes, a special kind of statement that appears in CFGs in SSA form, are defined in the api/Lib.PhiNode.