Welcome to MiniC’s documentation!

Contents:

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.

Indices and tables