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 api/Lib.Graphes.

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 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