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.

Indices and tables