diff --git a/MiniC/Lib/PhiNode.py b/MiniC/Lib/PhiNode.py
index 0cb5b55..1548b4f 100644
--- a/MiniC/Lib/PhiNode.py
+++ b/MiniC/Lib/PhiNode.py
@@ -17,8 +17,9 @@ class PhiNode(Statement):
"""
A φ node is a renaming in the CFG, of the form temp_x = φ(temp_0, ..., temp_n).
The field var contains the variable temp_x.
- The field srcs relies for each precedent block in the CFG, identified with its label,
- the variable temp_i of the φ node.
+ The field srcs links each corresponding predecessor in the CFG
+ ---identified by its label---, to the variable temp_i of the φ
+ node.
"""
var: DataLocation
srcs: Dict[Label, Operand]
diff --git a/PLANNING.md b/PLANNING.md
index b46b3b8..41da8d4 100644
--- a/PLANNING.md
+++ b/PLANNING.md
@@ -83,3 +83,10 @@ _Academic first semester 2024-2025_
* Control Flow Graph under SSA Form [TP05a](TP05/tp5a.pdf).
* Code in [MiniC/TP05/](MiniC/TP05/).
* Documentation (updated) [here](docs/html/index.html).
+
+# Week 8:
+
+- :hammer: Lab 5b (1/2): Monday 04/11/2023, 13h30-15h30. Room E001 (Samuel Humeau & Emma Nardino)
+
+ * Smart Register Allocation [TP05b](TP05/tp5b.pdf).
+ * Code in [MiniC/TP05/](MiniC/TP05/).
diff --git a/TP05/tp5b.pdf b/TP05/tp5b.pdf
new file mode 100644
index 0000000..2023fc1
Binary files /dev/null and b/TP05/tp5b.pdf differ
diff --git a/docs/html/_modules/Lib/PhiNode.html b/docs/html/_modules/Lib/PhiNode.html
index 6165fcc..c3b36b5 100644
--- a/docs/html/_modules/Lib/PhiNode.html
+++ b/docs/html/_modules/Lib/PhiNode.html
@@ -98,8 +98,9 @@
"""
A φ node is a renaming in the CFG, of the form temp_x = φ(temp_0, ..., temp_n).
The field var contains the variable temp_x.
- The field srcs relies for each precedent block in the CFG, identified with its label,
- the variable temp_i of the φ node.
+ The field srcs links each corresponding predecessor in the CFG
+ ---identified by its label---, to the variable temp_i of the φ
+ node.
"""
var: DataLocation
srcs: Dict[Label, Operand]
diff --git a/docs/html/api/Lib.PhiNode.html b/docs/html/api/Lib.PhiNode.html
index c14e794..22ab0ee 100644
--- a/docs/html/api/Lib.PhiNode.html
+++ b/docs/html/api/Lib.PhiNode.html
@@ -105,8 +105,9 @@ b._phis for a Bases: Statement
A φ node is a renaming in the CFG, of the form temp_x = φ(temp_0, …, temp_n).
The field var contains the variable temp_x.
-The field srcs relies for each precedent block in the CFG, identified with its label,
-the variable temp_i of the φ node.
+The field srcs links each corresponding predecessor in the CFG
+—identified by its label—, to the variable temp_i of the φ
+node.
-
var: DataLocation
diff --git a/docs/html/searchindex.js b/docs/html/searchindex.js
index 3acac44..32e361c 100644
--- a/docs/html/searchindex.js
+++ b/docs/html/searchindex.js
@@ -1 +1 @@
-Search.setIndex({"docnames": ["api/Lib", "api/Lib.Allocator", "api/Lib.CFG", "api/Lib.Dominators", "api/Lib.Errors", "api/Lib.FunctionData", "api/Lib.Graphes", "api/Lib.LinearCode", "api/Lib.Operands", "api/Lib.PhiNode", "api/Lib.RiscV", "api/Lib.Statement", "api/Lib.Terminator", "api/modules", "index"], "filenames": ["api/Lib.rst", "api/Lib.Allocator.rst", "api/Lib.CFG.rst", "api/Lib.Dominators.rst", "api/Lib.Errors.rst", "api/Lib.FunctionData.rst", "api/Lib.Graphes.rst", "api/Lib.LinearCode.rst", "api/Lib.Operands.rst", "api/Lib.PhiNode.rst", "api/Lib.RiscV.rst", "api/Lib.Statement.rst", "api/Lib.Terminator.rst", "api/modules.rst", "index.rst"], "titles": ["Lib package", "Lib.Allocator module", "Lib.CFG module", "Lib.Dominators module", "Lib.Errors module", "Lib.FunctionData module", "Lib.Graphes module", "Lib.LinearCode module", "Lib.Operands module", "Lib.PhiNode module", "Lib.RiscV module", "Lib.Statement module", "Lib.Terminator module", "MiniC", "Welcome to MiniC\u2019s documentation!"], "terms": {"alloc": [0, 7, 8, 13], "prepar": [0, 1, 14], "replac": [0, 1, 2, 7, 8, 11, 12, 14], "rewritecod": [0, 1, 14], "naivealloc": [0, 1, 13, 14], "cfg": [0, 3, 9, 12, 13, 14], "block": [0, 2, 3, 9, 12, 13, 14], "to_dot": [0, 2, 14], "get_bodi": [0, 2, 14], "get_all_stat": [0, 2, 14], "get_body_and_termin": [0, 2, 14], "get_label": [0, 2, 14], "get_in": [0, 2, 14], "get_termin": [0, 2, 14], "set_termin": [0, 2, 14], "get_phi": [0, 2, 14], "add_phi": [0, 2, 14], "set_phi": [0, 2, 14], "remove_all_phi": [0, 2, 14], "iter_stat": [0, 1, 2, 7, 14], "add_instruct": [0, 2, 7, 14], "fdata": [0, 1, 2, 5, 7, 14], "get_start": [0, 2, 14], "set_start": [0, 2, 14], "get_end": [0, 2, 14], "add_block": [0, 2, 14], "get_block": [0, 2, 14], "get_entri": [0, 2, 14], "add_edg": [0, 2, 6, 14], "remove_edg": [0, 2, 14], "out_block": [0, 2, 14], "gather_def": [0, 2, 14], "linearize_na": [0, 2, 14], "print_cod": [0, 2, 7, 14], "print_dot": [0, 2, 6, 7, 14], "domin": [0, 13, 14], "computedom": [0, 3, 13, 14], "printdt": [0, 3, 13, 14], "computedt": [0, 3, 13, 14], "computedf": [0, 3, 13, 14], "error": [0, 13, 14], "minicruntimeerror": [0, 4, 13, 14], "minicinternalerror": [0, 4, 13, 14], "minicunsupportederror": [0, 4, 13, 14], "minictypeerror": [0, 4, 13, 14], "allocationerror": [0, 4, 13, 14], "functiondata": [0, 1, 2, 7, 13, 14], "get_nam": [0, 5, 14], "fresh_tmp": [0, 5, 8, 14], "fresh_offset": [0, 5, 14], "get_offset": [0, 5, 8, 14], "fresh_label": [0, 5, 14], "get_label_div_by_zero": [0, 5, 14], "graph": [0, 2, 3, 7, 13], "grapherror": [0, 6, 13, 14], "messag": [0, 6, 14], "generalgraph": [0, 6, 13, 14], "graph_dict": [0, 6, 14], "vertic": [0, 6, 14], "add_vertex": [0, 6, 14], "edg": [0, 2, 6, 14], "dfs_travers": [0, 6, 14], "is_reachable_from": [0, 6, 14], "connected_compon": [0, 6, 14], "bfs_travers": [0, 6, 14], "delete_vertex": [0, 6, 14], "delete_edg": [0, 6, 14], "color": [0, 6, 14], "color_with_k_color": [0, 6, 14], "digraph": [0, 6, 13, 14], "pred": [0, 6, 14], "neighbourhood": [0, 6, 14], "linearcod": [0, 1, 5, 12, 13, 14], "get_instruct": [0, 7, 14], "add_label": [0, 7, 14], "add_com": [0, 7, 14], "add_instruction_println_int": [0, 7, 14], "operand": [0, 1, 5, 9, 10, 11, 12, 13, 14], "condit": [0, 8, 10, 11, 12, 13, 14], "negat": [0, 8, 14], "function": [0, 2, 3, 5, 7, 8, 10, 11, 12, 13, 14], "dataloc": [0, 7, 8, 9, 13, 14], "regist": [0, 1, 8, 13, 14], "zero": [0, 8, 13, 14], "ra": [0, 8, 13, 14], "sp": [0, 8, 13, 14], "gp": [0, 8, 13, 14], "tp": [0, 8, 13, 14], "A": [0, 2, 6, 8, 9, 11, 12, 13, 14], "": [0, 7, 8, 13], "t": [0, 8, 13, 14], "a0": [0, 8, 13, 14], "a1": [0, 8, 13, 14], "fp": [0, 5, 8, 13, 14], "gp_reg": [0, 8, 13, 14], "offset": [0, 5, 8, 13, 14], "immedi": [0, 8, 10, 13, 14], "temporari": [0, 1, 5, 7, 8, 13], "get_alloced_loc": [0, 8, 14], "temporarypool": [0, 1, 5, 8, 13, 14], "get_all_temp": [0, 8, 14], "add_tmp": [0, 8, 14], "set_temp_alloc": [0, 1, 8, 14], "renam": [0, 8, 9, 11, 12, 13, 14], "fresh": [0, 5, 8, 9, 14], "defin": [0, 1, 5, 8, 9, 10, 11, 14], "copi": [0, 8, 14], "phinod": [0, 13, 14], "var": [0, 9, 14], "src": [0, 2, 9, 14], "get_src": [0, 9, 14], "us": [0, 3, 5, 6, 8, 9, 11, 12, 14], "rename_from": [0, 9, 14], "printin": [0, 9, 11, 12, 14], "riscv": [0, 2, 5, 7, 8, 9, 11, 13, 14], "call": [0, 1, 3, 6, 7, 8, 9, 10, 11, 12, 13, 14], "jump": [0, 2, 10, 11, 12, 13, 14], "conditional_jump": [0, 10, 13, 14], "add": [0, 1, 2, 6, 7, 8, 10, 13, 14], "mul": [0, 10, 13, 14], "div": [0, 10, 13, 14], "rem": [0, 10, 13, 14], "sub": [0, 10, 13, 14], "land": [0, 10, 13, 14], "lor": [0, 10, 13, 14], "xor": [0, 10, 13, 14], "li": [0, 10, 13, 14], "mv": [0, 10, 13, 14], "ld": [0, 10, 13, 14], "sd": [0, 10, 13, 14], "statement": [0, 2, 9, 12, 13, 14], "regset_to_str": [0, 11, 13, 14], "substitut": [0, 11, 12, 14], "with_arg": [0, 11, 12, 14], "comment": [0, 2, 7, 11, 13, 14], "label": [0, 2, 5, 7, 9, 10, 11, 12, 13, 14], "name": [0, 2, 5, 6, 7, 8, 9, 11, 14], "instruct": [0, 1, 2, 7, 10, 11, 12, 13, 14], "ins": [0, 11, 14], "is_read_onli": [0, 11, 12, 14], "arg": [0, 11, 12, 14], "instru3a": [0, 2, 7, 10, 11, 13, 14], "absolutejump": [0, 2, 7, 10, 11, 12, 13, 14], "target": [0, 2, 11, 12, 14], "conditionaljump": [0, 7, 11, 12, 13, 14], "cond": [0, 10, 11, 12, 14], "op1": [0, 10, 11, 12, 14], "op2": [0, 10, 11, 12, 14], "termin": [0, 2, 13, 14], "return": [0, 1, 2, 3, 5, 6, 7, 8, 9, 11, 12, 13, 14], "branchingtermin": [0, 2, 12, 13, 14], "label_then": [0, 12, 14], "label_els": [0, 12, 14], "jump2termin": [0, 12, 13, 14], "thi": [1, 2, 3, 5, 8, 10, 11, 12], "file": [1, 5, 7, 8], "base": [1, 2, 4, 5, 6, 7, 8, 9, 11, 12], "class": [1, 2, 5, 6, 7, 8, 9, 11, 12, 14], "na\u00efv": 1, "implement": [1, 14], "sourc": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14], "object": [1, 2, 5, 6, 7, 8, 11, 14], "gener": [1, 6, 7, 8], "naiv": [1, 2, 14], "allinmem": 1, "smart": 1, "all": [1, 2, 6, 8, 14], "code": [1, 2, 7, 10, 14], "actual": [1, 6, 8], "data": [1, 8, 14], "locat": [1, 8, 11], "i": [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12], "done": [1, 6], "two": [1, 6, 12], "step": 1, "first": [1, 6, 11, 12], "respons": 1, "map": [1, 8], "from": [1, 6, 8, 11, 12], "where": [1, 6, 11, 12], "thei": [1, 6], "should": [1, 6, 9, 11, 12, 14], "store": [1, 5], "memori": [1, 5, 8, 14], "Then": 1, "each": [1, 2, 6, 7, 9, 12, 14], "order": 1, "previous": [1, 3], "assign": 1, "possibli": 1, "some": [1, 5, 7, 14], "befor": [1, 14], "after": 1, "concret": 1, "list": [1, 2, 6, 7, 8, 9, 11, 12, 14], "origin": 1, "The": [1, 6, 7, 8, 9, 11, 12, 14], "iter": [1, 2, 7], "over": [1, 2, 7], "handl": 1, "transpar": 1, "none": [1, 2, 3, 6, 7, 8, 9, 11, 12], "old_instr": 1, "transform": 1, "an": [1, 2, 3, 6, 7, 11], "listcod": 1, "modifi": 1, "try": 1, "fail": [1, 6], "ar": [1, 5, 6, 8, 9, 11, 12, 14], "more": 1, "than": [1, 8], "correspond": [1, 9], "too": 1, "mani": 1, "itself": [2, 8], "its": [2, 3, 8, 9, 11, 14], "basic": [2, 14], "inst": 2, "made": 2, "three": [2, 12], "main": 2, "part": 2, "start": 2, "uniqu": [2, 5], "identifi": [2, 9], "bodi": 2, "exclud": 2, "branch": [2, 8, 11, 12], "repres": [2, 14], "final": 2, "point": [2, 14], "successor": [2, 12], "see": [2, 7], "document": 2, "further": 2, "explan": 2, "str": [2, 3, 5, 6, 7, 8, 11], "output": [2, 7, 9, 11, 12], "string": [2, 5, 8], "phi": [2, 14], "node": [2, 6, 9, 14], "nor": 2, "includ": 2, "except": [2, 4, 6], "consid": [2, 11], "term": 2, "set": [2, 3, 6, 11], "\u03c6": [2, 9], "given": [2, 3, 5, 7, 9, 11, 12], "remov": 2, "f": [2, 7], "For": [2, 7], "real": [2, 7], "assum": 2, "instr": 2, "complet": [2, 7], "control": 2, "flow": 2, "mainli": 2, "indic": 2, "entri": [2, 3], "exit": 2, "As": 2, "linear": [2, 7], "metadata": [2, 5], "about": [2, 14], "can": 2, "found": 2, "member": [2, 7], "variabl": [2, 5, 7, 9], "blk": 2, "new": [2, 5, 7, 8, 11, 12], "predecessor": [2, 6], "dest": 2, "dict": [2, 3, 6, 8, 9, 11, 12], "ani": [2, 6], "dictionari": [2, 3, 6], "associ": [2, 3, 9, 12], "contain": [2, 5, 7, 9], "one": [2, 8, 11, 12], "definit": 2, "appli": 2, "procedur": 2, "everywher": 2, "lambda": 2, "print": [2, 6, 7, 9, 11, 12], "filenam": [2, 3, 7], "df": [2, 3, 7], "view": [2, 7], "fals": [2, 7, 12], "util": [3, 5, 7, 11], "work": [3, 5, 14], "do": [3, 6], "hesit": 3, "look": 3, "get": [3, 8], "better": 3, "understand": [3, 14], "algorithm": 3, "comput": [3, 6, 8], "tabl": 3, "It": [3, 8, 11], "solv": 3, "equat": 3, "system": 3, "helper": 3, "dure": [3, 12], "ssa": [3, 9], "displai": 3, "graphic": 3, "render": 3, "tree": 3, "dom_graph": 3, "bool": [3, 6, 8, 12], "basenam": 3, "dt": 3, "which": [3, 5, 8, 11], "children": 3, "frontier": [3, 14], "well": 5, "common": 5, "differ": [5, 6, 8], "intermedi": 5, "represent": [5, 7], "div_by_zero": 5, "usual": 5, "indirectli": 5, "through": 5, "we": [5, 6, 8, 14], "ad": [5, 6], "pool": [5, 8], "stack": 5, "decreas": 5, "rel": 5, "int": [5, 6, 8], "current": 5, "python": [6, 10, 14], "orient": [6, 14], "non": [6, 11, 12, 14], "rais": 6, "self": 6, "loop": 6, "regroup": 6, "similar": 6, "between": 6, "direct": 6, "onli": [6, 11], "how": 6, "delet": 6, "vertex": 6, "undirect": 6, "If": 6, "kei": [6, 8, 11, 12], "empti": 6, "valu": [6, 7, 8, 11, 12], "otherwis": [6, 11], "noth": 6, "ha": [6, 8], "root": 6, "depth": 6, "search": [6, 14], "v1": 6, "v2": 6, "true": [6, 8, 11, 12], "path": [6, 7], "connect": 6, "compon": 6, "being": 6, "vetic": 6, "breadth": 6, "static": 6, "method": [6, 8], "appear": [6, 11, 12, 14], "twice": 6, "dictionnari": [6, 9], "tupl": 6, "pair": 6, "c": [6, 10], "g": 6, "adjac": 6, "unlimit": 6, "number": [6, 8], "integ": [6, 7, 8], "0": [6, 8], "1": 6, "k": 6, "avoidingnod": 6, "unspecifi": 6, "3": [6, 11, 14], "boolean": 6, "succeed": 6, "belong": 6, "continu": 6, "even": 6, "algo": 6, "v": [6, 14], "cap": [7, 10, 12], "codegener": [7, 10], "api": [7, 10], "program": 7, "repeatedli": 7, "codegen": 7, "visitor": 7, "build": [7, 8, 12], "meta": 7, "inform": 7, "instanc": 7, "debug": 7, "purpos": [7, 8], "allow": [7, 8, 14], "also": [7, 8], "relev": 7, "reg": 7, "newlin": 7, "expand": 7, "text": 7, "subclass": 8, "address": [8, 11, 14], "constant": 8, "yet": 8, "shortcut": 8, "optyp": 8, "e": 8, "comparison": 8, "condjump": 8, "exampl": 8, "usag": 8, "beq": [8, 10], "equal": 8, "minicpars": [8, 10], "lt": 8, "lower": 8, "constructor": 8, "argument": [8, 14], "shall": 8, "all_op": 8, "oper": 8, "gt": 8, "opdict": 8, "opposit": 8, "either": 8, "place": 8, "physic": 8, "cours": 8, "a2": 8, "a3": 8, "a4": 8, "a5": 8, "a6": 8, "a7": 8, "s1": 8, "s2": 8, "s3": 8, "s4": 8, "s5": 8, "s6": 8, "s7": 8, "s8": 8, "s9": 8, "s10": 8, "s11": 8, "t0": 8, "t1": 8, "t2": 8, "t3": 8, "t4": 8, "t5": 8, "t6": 8, "frame": 8, "pointer": 8, "save": 8, "usabl": 8, "basereg": 8, "val": 8, "been": [8, 11, 12], "later": 8, "manag": 8, "give": [8, 14], "must": 8, "other": [8, 11], "typic": 8, "type": [8, 12], "enforc": 8, "check": 8, "inde": 8, "under": 9, "form": 9, "temp_x": 9, "temp_0": 9, "temp_n": 9, "These": [9, 14], "particular": 9, "kind": [9, 11, 12, 14], "expect": 9, "field": 9, "b": 9, "_phi": 9, "reli": 9, "preced": 9, "temp_i": 9, "previou": 9, "stream": [9, 11, 12], "never": [9, 11, 12], "mif08": [10, 12], "uncondit": 10, "wrapper": 10, "around": 10, "bge": 10, "bgt": 10, "like": 10, "eq": 10, "dr": 10, "sr1": 10, "sr2orimm7": 10, "And": 10, "cannot": 10, "due": 10, "Or": 10, "imm7": 10, "sr": 10, "mem": 10, "asm": 11, "inherit": 11, "In": 11, "turn": 11, "regular": 11, "registerset": 11, "pretti": 11, "written": 11, "read": 11, "subst": [11, 12], "tstatement": 11, "clone": [11, 12], "new_arg": [11, 12], "have": [11, 12, 14], "both": [11, 12], "destin": [11, 12], "take": [11, 12, 14], "absolut": 11, "specif": 11, "j": [11, 12], "librari": 12, "end": [12, 14], "There": 12, "anoth": 12, "unlik": 12, "wa": 12, "specifi": 12, "mark": 12, "construct": 12, "extract": 12, "chunk": 12, "second": 12, "alia": 12, "next_label": 12, "potenti": 12, "lib": [13, 14], "packag": 13, "submodul": 13, "modul": [13, 14], "content": 13, "risc": 14, "page": 14, "variou": 14, "folder": 14, "you": 14, "edit": 14, "them": 14, "assembli": 14, "won": 14, "creat": 14, "directli": 14, "veri": 14, "often": 14, "instead": 14, "easili": 14, "standard": 14, "pseudo": 14, "At": 14, "need": 14, "those": 14, "present": 14, "model": 14, "lab": 14, "4a": 14, "translat": 14, "make": 14, "special": 14, "index": 14}, "objects": {"": [[0, 0, 0, "-", "Lib"]], "Lib": [[1, 0, 0, "-", "Allocator"], [2, 0, 0, "-", "CFG"], [3, 0, 0, "-", "Dominators"], [4, 0, 0, "-", "Errors"], [5, 0, 0, "-", "FunctionData"], [6, 0, 0, "-", "Graphes"], [7, 0, 0, "-", "LinearCode"], [8, 0, 0, "-", "Operands"], [9, 0, 0, "-", "PhiNode"], [10, 0, 0, "-", "RiscV"], [11, 0, 0, "-", "Statement"], [12, 0, 0, "-", "Terminator"]], "Lib.Allocator": [[1, 1, 1, "", "Allocator"], [1, 1, 1, "", "NaiveAllocator"]], "Lib.Allocator.Allocator": [[1, 2, 1, "", "prepare"], [1, 2, 1, "", "replace"], [1, 2, 1, "", "rewriteCode"]], "Lib.Allocator.NaiveAllocator": [[1, 2, 1, "", "prepare"], [1, 2, 1, "", "replace"]], "Lib.CFG": [[2, 1, 1, "", "Block"], [2, 1, 1, "", "CFG"]], "Lib.CFG.Block": [[2, 2, 1, "", "add_instruction"], [2, 2, 1, "", "add_phi"], [2, 2, 1, "", "get_all_statements"], [2, 2, 1, "", "get_body"], [2, 2, 1, "", "get_body_and_terminator"], [2, 2, 1, "", "get_in"], [2, 2, 1, "", "get_label"], [2, 2, 1, "", "get_phis"], [2, 2, 1, "", "get_terminator"], [2, 2, 1, "", "iter_statements"], [2, 2, 1, "", "remove_all_phis"], [2, 2, 1, "", "set_phis"], [2, 2, 1, "", "set_terminator"], [2, 2, 1, "", "to_dot"]], "Lib.CFG.CFG": [[2, 2, 1, "", "add_block"], [2, 2, 1, "", "add_edge"], [2, 3, 1, "", "fdata"], [2, 2, 1, "", "gather_defs"], [2, 2, 1, "", "get_block"], [2, 2, 1, "", "get_blocks"], [2, 2, 1, "", "get_end"], [2, 2, 1, "", "get_entries"], [2, 2, 1, "", "get_start"], [2, 2, 1, "", "iter_statements"], [2, 2, 1, "", "linearize_naive"], [2, 2, 1, "", "out_blocks"], [2, 2, 1, "", "print_code"], [2, 2, 1, "", "print_dot"], [2, 2, 1, "", "remove_edge"], [2, 2, 1, "", "set_start"]], "Lib.Dominators": [[3, 4, 1, "", "computeDF"], [3, 4, 1, "", "computeDT"], [3, 4, 1, "", "computeDom"], [3, 4, 1, "", "printDT"]], "Lib.Errors": [[4, 5, 1, "", "AllocationError"], [4, 5, 1, "", "MiniCInternalError"], [4, 5, 1, "", "MiniCRuntimeError"], [4, 5, 1, "", "MiniCTypeError"], [4, 5, 1, "", "MiniCUnsupportedError"]], "Lib.FunctionData": [[5, 1, 1, "", "FunctionData"]], "Lib.FunctionData.FunctionData": [[5, 2, 1, "", "fresh_label"], [5, 2, 1, "", "fresh_offset"], [5, 2, 1, "", "fresh_tmp"], [5, 2, 1, "", "get_label_div_by_zero"], [5, 2, 1, "", "get_name"], [5, 2, 1, "", "get_offset"]], "Lib.Graphes": [[6, 1, 1, "", "DiGraph"], [6, 1, 1, "", "GeneralGraph"], [6, 1, 1, "", "Graph"], [6, 5, 1, "", "GraphError"]], "Lib.Graphes.DiGraph": [[6, 2, 1, "", "add_edge"], [6, 2, 1, "", "delete_edge"], [6, 2, 1, "", "delete_vertex"], [6, 2, 1, "", "edges"], [6, 2, 1, "", "neighbourhoods"], [6, 2, 1, "", "pred"], [6, 2, 1, "", "print_dot"]], "Lib.Graphes.GeneralGraph": [[6, 2, 1, "", "add_vertex"], [6, 2, 1, "", "bfs_traversal"], [6, 2, 1, "", "connected_components"], [6, 2, 1, "", "dfs_traversal"], [6, 2, 1, "", "edges"], [6, 3, 1, "", "graph_dict"], [6, 2, 1, "", "is_reachable_from"], [6, 2, 1, "", "vertices"]], "Lib.Graphes.Graph": [[6, 2, 1, "", "add_edge"], [6, 2, 1, "", "color"], [6, 2, 1, "", "color_with_k_colors"], [6, 2, 1, "", "delete_edge"], [6, 2, 1, "", "delete_vertex"], [6, 2, 1, "", "edges"], [6, 2, 1, "", "print_dot"]], "Lib.Graphes.GraphError": [[6, 3, 1, "", "message"]], "Lib.LinearCode": [[7, 1, 1, "", "LinearCode"]], "Lib.LinearCode.LinearCode": [[7, 2, 1, "", "add_comment"], [7, 2, 1, "", "add_instruction"], [7, 2, 1, "", "add_instruction_PRINTLN_INT"], [7, 2, 1, "", "add_label"], [7, 3, 1, "", "fdata"], [7, 2, 1, "", "get_instructions"], [7, 2, 1, "", "iter_statements"], [7, 2, 1, "", "print_code"], [7, 2, 1, "", "print_dot"]], "Lib.Operands": [[8, 6, 1, "", "A"], [8, 6, 1, "", "A0"], [8, 6, 1, "", "A1"], [8, 1, 1, "", "Condition"], [8, 1, 1, "", "DataLocation"], [8, 6, 1, "", "FP"], [8, 1, 1, "", "Function"], [8, 6, 1, "", "GP"], [8, 6, 1, "", "GP_REGS"], [8, 1, 1, "", "Immediate"], [8, 1, 1, "", "Offset"], [8, 1, 1, "", "Operand"], [8, 6, 1, "", "RA"], [8, 1, 1, "", "Register"], [8, 1, 1, "", "Renamer"], [8, 6, 1, "", "S"], [8, 6, 1, "", "SP"], [8, 6, 1, "", "T"], [8, 6, 1, "", "TP"], [8, 1, 1, "", "Temporary"], [8, 1, 1, "", "TemporaryPool"], [8, 6, 1, "", "ZERO"]], "Lib.Operands.Condition": [[8, 2, 1, "", "negate"]], "Lib.Operands.Offset": [[8, 2, 1, "", "get_offset"]], "Lib.Operands.Renamer": [[8, 2, 1, "", "copy"], [8, 2, 1, "", "defined"], [8, 2, 1, "", "fresh"], [8, 2, 1, "", "replace"]], "Lib.Operands.Temporary": [[8, 2, 1, "", "get_alloced_loc"]], "Lib.Operands.TemporaryPool": [[8, 2, 1, "", "add_tmp"], [8, 2, 1, "", "fresh_tmp"], [8, 2, 1, "", "get_all_temps"], [8, 2, 1, "", "get_alloced_loc"], [8, 2, 1, "", "set_temp_allocation"]], "Lib.PhiNode": [[9, 1, 1, "", "PhiNode"]], "Lib.PhiNode.PhiNode": [[9, 2, 1, "", "defined"], [9, 2, 1, "", "get_srcs"], [9, 2, 1, "", "printIns"], [9, 2, 1, "", "rename"], [9, 2, 1, "", "rename_from"], [9, 3, 1, "", "srcs"], [9, 2, 1, "", "used"], [9, 3, 1, "", "var"]], "Lib.RiscV": [[10, 4, 1, "", "add"], [10, 4, 1, "", "call"], [10, 4, 1, "", "conditional_jump"], [10, 4, 1, "", "div"], [10, 4, 1, "", "jump"], [10, 4, 1, "", "land"], [10, 4, 1, "", "ld"], [10, 4, 1, "", "li"], [10, 4, 1, "", "lor"], [10, 4, 1, "", "mul"], [10, 4, 1, "", "mv"], [10, 4, 1, "", "rem"], [10, 4, 1, "", "sd"], [10, 4, 1, "", "sub"], [10, 4, 1, "", "xor"]], "Lib.Statement": [[11, 1, 1, "", "AbsoluteJump"], [11, 1, 1, "", "Comment"], [11, 1, 1, "", "ConditionalJump"], [11, 1, 1, "", "Instru3A"], [11, 1, 1, "", "Instruction"], [11, 1, 1, "", "Label"], [11, 1, 1, "", "Statement"], [11, 4, 1, "", "regset_to_string"]], "Lib.Statement.AbsoluteJump": [[11, 2, 1, "", "args"], [11, 3, 1, "", "ins"], [11, 3, 1, "", "label"], [11, 2, 1, "", "rename"], [11, 2, 1, "", "substitute"], [11, 2, 1, "", "targets"], [11, 2, 1, "", "with_args"]], "Lib.Statement.Comment": [[11, 3, 1, "", "comment"], [11, 2, 1, "", "printIns"]], "Lib.Statement.ConditionalJump": [[11, 2, 1, "", "args"], [11, 3, 1, "", "cond"], [11, 3, 1, "", "label"], [11, 3, 1, "", "op1"], [11, 3, 1, "", "op2"], [11, 2, 1, "", "rename"], [11, 2, 1, "", "substitute"], [11, 2, 1, "", "with_args"]], "Lib.Statement.Instru3A": [[11, 2, 1, "", "args"], [11, 2, 1, "", "rename"], [11, 2, 1, "", "substitute"], [11, 2, 1, "", "with_args"]], "Lib.Statement.Instruction": [[11, 2, 1, "", "args"], [11, 2, 1, "", "defined"], [11, 3, 1, "", "ins"], [11, 2, 1, "", "is_read_only"], [11, 2, 1, "", "printIns"], [11, 2, 1, "", "rename"], [11, 2, 1, "", "used"]], "Lib.Statement.Label": [[11, 3, 1, "", "name"], [11, 2, 1, "", "printIns"]], "Lib.Statement.Statement": [[11, 2, 1, "", "defined"], [11, 2, 1, "", "printIns"], [11, 2, 1, "", "substitute"], [11, 2, 1, "", "used"], [11, 2, 1, "", "with_args"]], "Lib.Terminator": [[12, 1, 1, "", "BranchingTerminator"], [12, 1, 1, "", "Return"], [12, 6, 1, "", "Terminator"], [12, 4, 1, "", "jump2terminator"]], "Lib.Terminator.BranchingTerminator": [[12, 2, 1, "", "args"], [12, 3, 1, "", "cond"], [12, 3, 1, "", "label_else"], [12, 3, 1, "", "label_then"], [12, 3, 1, "", "op1"], [12, 3, 1, "", "op2"], [12, 2, 1, "", "rename"], [12, 2, 1, "", "substitute"], [12, 2, 1, "", "targets"], [12, 2, 1, "", "with_args"]], "Lib.Terminator.Return": [[12, 2, 1, "", "args"], [12, 2, 1, "", "is_read_only"], [12, 2, 1, "", "printIns"], [12, 2, 1, "", "rename"], [12, 2, 1, "", "substitute"], [12, 2, 1, "", "targets"], [12, 2, 1, "", "with_args"]]}, "objtypes": {"0": "py:module", "1": "py:class", "2": "py:method", "3": "py:attribute", "4": "py:function", "5": "py:exception", "6": "py:data"}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "class", "Python class"], "2": ["py", "method", "Python method"], "3": ["py", "attribute", "Python attribute"], "4": ["py", "function", "Python function"], "5": ["py", "exception", "Python exception"], "6": ["py", "data", "Python data"]}, "titleterms": {"lib": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], "packag": 0, "submodul": 0, "modul": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], "content": [0, 14], "alloc": [1, 14], "cfg": 2, "domin": 3, "error": 4, "functiondata": 5, "graph": [6, 14], "linearcod": 7, "operand": 8, "phinod": 9, "riscv": 10, "statement": 11, "termin": 12, "minic": [13, 14], "welcom": 14, "": 14, "document": 14, "base": 14, "librari": 14, "linear": 14, "intermedi": 14, "represent": 14, "temporari": 14, "control": 14, "flow": 14, "ssa": 14, "form": 14, "indic": 14, "tabl": 14}, "envversion": {"sphinx.domains.c": 2, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 8, "sphinx.domains.index": 1, "sphinx.domains.javascript": 2, "sphinx.domains.math": 2, "sphinx.domains.python": 3, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.viewcode": 1, "sphinx": 57}, "alltitles": {"Lib package": [[0, "lib-package"]], "Submodules": [[0, "submodules"]], "Module contents": [[0, "module-Lib"]], "Lib.Allocator module": [[1, "module-Lib.Allocator"]], "Lib.CFG module": [[2, "module-Lib.CFG"]], "Lib.Dominators module": [[3, "module-Lib.Dominators"]], "Lib.Errors module": [[4, "module-Lib.Errors"]], "Lib.FunctionData module": [[5, "module-Lib.FunctionData"]], "Lib.Graphes module": [[6, "module-Lib.Graphes"]], "Lib.LinearCode module": [[7, "module-Lib.LinearCode"]], "Lib.Operands module": [[8, "module-Lib.Operands"]], "Lib.PhiNode module": [[9, "module-Lib.PhiNode"]], "Lib.RiscV module": [[10, "module-Lib.RiscV"]], "Lib.Statement module": [[11, "module-Lib.Statement"]], "Lib.Terminator module": [[12, "module-Lib.Terminator"]], "MiniC": [[13, "minic"]], "Welcome to MiniC\u2019s documentation!": [[14, "welcome-to-minic-s-documentation"]], "Contents:": [[14, null]], "Base library": [[14, "base-library"]], "Linear Intermediate representation": [[14, "linear-intermediate-representation"]], "Temporary allocation": [[14, "temporary-allocation"]], "Control Flow Graph Intermediate representation": [[14, "control-flow-graph-intermediate-representation"]], "SSA form": [[14, "ssa-form"]], "Indices and tables": [[14, "indices-and-tables"]]}, "indexentries": {"lib": [[0, "module-Lib"]], "module": [[0, "module-Lib"], [1, "module-Lib.Allocator"], [2, "module-Lib.CFG"], [3, "module-Lib.Dominators"], [4, "module-Lib.Errors"], [5, "module-Lib.FunctionData"], [6, "module-Lib.Graphes"], [7, "module-Lib.LinearCode"], [8, "module-Lib.Operands"], [9, "module-Lib.PhiNode"], [10, "module-Lib.RiscV"], [11, "module-Lib.Statement"], [12, "module-Lib.Terminator"]], "allocator (class in lib.allocator)": [[1, "Lib.Allocator.Allocator"]], "lib.allocator": [[1, "module-Lib.Allocator"]], "naiveallocator (class in lib.allocator)": [[1, "Lib.Allocator.NaiveAllocator"]], "prepare() (lib.allocator.allocator method)": [[1, "Lib.Allocator.Allocator.prepare"]], "prepare() (lib.allocator.naiveallocator method)": [[1, "Lib.Allocator.NaiveAllocator.prepare"]], "replace() (lib.allocator.allocator method)": [[1, "Lib.Allocator.Allocator.replace"]], "replace() (lib.allocator.naiveallocator method)": [[1, "Lib.Allocator.NaiveAllocator.replace"]], "rewritecode() (lib.allocator.allocator method)": [[1, "Lib.Allocator.Allocator.rewriteCode"]], "block (class in lib.cfg)": [[2, "Lib.CFG.Block"]], "cfg (class in lib.cfg)": [[2, "Lib.CFG.CFG"]], "lib.cfg": [[2, "module-Lib.CFG"]], "add_block() (lib.cfg.cfg method)": [[2, "Lib.CFG.CFG.add_block"]], "add_edge() (lib.cfg.cfg method)": [[2, "Lib.CFG.CFG.add_edge"]], "add_instruction() (lib.cfg.block method)": [[2, "Lib.CFG.Block.add_instruction"]], "add_phi() (lib.cfg.block method)": [[2, "Lib.CFG.Block.add_phi"]], "fdata (lib.cfg.cfg attribute)": [[2, "Lib.CFG.CFG.fdata"]], "gather_defs() (lib.cfg.cfg method)": [[2, "Lib.CFG.CFG.gather_defs"]], "get_all_statements() (lib.cfg.block method)": [[2, "Lib.CFG.Block.get_all_statements"]], "get_block() (lib.cfg.cfg method)": [[2, "Lib.CFG.CFG.get_block"]], "get_blocks() (lib.cfg.cfg method)": [[2, "Lib.CFG.CFG.get_blocks"]], "get_body() (lib.cfg.block method)": [[2, "Lib.CFG.Block.get_body"]], "get_body_and_terminator() (lib.cfg.block method)": [[2, "Lib.CFG.Block.get_body_and_terminator"]], "get_end() (lib.cfg.cfg method)": [[2, "Lib.CFG.CFG.get_end"]], "get_entries() (lib.cfg.cfg method)": [[2, "Lib.CFG.CFG.get_entries"]], "get_in() (lib.cfg.block method)": [[2, "Lib.CFG.Block.get_in"]], "get_label() (lib.cfg.block method)": [[2, "Lib.CFG.Block.get_label"]], "get_phis() (lib.cfg.block method)": [[2, "Lib.CFG.Block.get_phis"]], "get_start() (lib.cfg.cfg method)": [[2, "Lib.CFG.CFG.get_start"]], "get_terminator() (lib.cfg.block method)": [[2, "Lib.CFG.Block.get_terminator"]], "iter_statements() (lib.cfg.block method)": [[2, "Lib.CFG.Block.iter_statements"]], "iter_statements() (lib.cfg.cfg method)": [[2, "Lib.CFG.CFG.iter_statements"]], "linearize_naive() (lib.cfg.cfg method)": [[2, "Lib.CFG.CFG.linearize_naive"]], "out_blocks() (lib.cfg.cfg method)": [[2, "Lib.CFG.CFG.out_blocks"]], "print_code() (lib.cfg.cfg method)": [[2, "Lib.CFG.CFG.print_code"]], "print_dot() (lib.cfg.cfg method)": [[2, "Lib.CFG.CFG.print_dot"]], "remove_all_phis() (lib.cfg.block method)": [[2, "Lib.CFG.Block.remove_all_phis"]], "remove_edge() (lib.cfg.cfg method)": [[2, "Lib.CFG.CFG.remove_edge"]], "set_phis() (lib.cfg.block method)": [[2, "Lib.CFG.Block.set_phis"]], "set_start() (lib.cfg.cfg method)": [[2, "Lib.CFG.CFG.set_start"]], "set_terminator() (lib.cfg.block method)": [[2, "Lib.CFG.Block.set_terminator"]], "to_dot() (lib.cfg.block method)": [[2, "Lib.CFG.Block.to_dot"]], "lib.dominators": [[3, "module-Lib.Dominators"]], "computedf() (in module lib.dominators)": [[3, "Lib.Dominators.computeDF"]], "computedt() (in module lib.dominators)": [[3, "Lib.Dominators.computeDT"]], "computedom() (in module lib.dominators)": [[3, "Lib.Dominators.computeDom"]], "printdt() (in module lib.dominators)": [[3, "Lib.Dominators.printDT"]], "allocationerror": [[4, "Lib.Errors.AllocationError"]], "lib.errors": [[4, "module-Lib.Errors"]], "minicinternalerror": [[4, "Lib.Errors.MiniCInternalError"]], "minicruntimeerror": [[4, "Lib.Errors.MiniCRuntimeError"]], "minictypeerror": [[4, "Lib.Errors.MiniCTypeError"]], "minicunsupportederror": [[4, "Lib.Errors.MiniCUnsupportedError"]], "functiondata (class in lib.functiondata)": [[5, "Lib.FunctionData.FunctionData"]], "lib.functiondata": [[5, "module-Lib.FunctionData"]], "fresh_label() (lib.functiondata.functiondata method)": [[5, "Lib.FunctionData.FunctionData.fresh_label"]], "fresh_offset() (lib.functiondata.functiondata method)": [[5, "Lib.FunctionData.FunctionData.fresh_offset"]], "fresh_tmp() (lib.functiondata.functiondata method)": [[5, "Lib.FunctionData.FunctionData.fresh_tmp"]], "get_label_div_by_zero() (lib.functiondata.functiondata method)": [[5, "Lib.FunctionData.FunctionData.get_label_div_by_zero"]], "get_name() (lib.functiondata.functiondata method)": [[5, "Lib.FunctionData.FunctionData.get_name"]], "get_offset() (lib.functiondata.functiondata method)": [[5, "Lib.FunctionData.FunctionData.get_offset"]], "digraph (class in lib.graphes)": [[6, "Lib.Graphes.DiGraph"]], "generalgraph (class in lib.graphes)": [[6, "Lib.Graphes.GeneralGraph"]], "graph (class in lib.graphes)": [[6, "Lib.Graphes.Graph"]], "grapherror": [[6, "Lib.Graphes.GraphError"]], "lib.graphes": [[6, "module-Lib.Graphes"]], "add_edge() (lib.graphes.digraph method)": [[6, "Lib.Graphes.DiGraph.add_edge"]], "add_edge() (lib.graphes.graph method)": [[6, "Lib.Graphes.Graph.add_edge"]], "add_vertex() (lib.graphes.generalgraph method)": [[6, "Lib.Graphes.GeneralGraph.add_vertex"]], "bfs_traversal() (lib.graphes.generalgraph method)": [[6, "Lib.Graphes.GeneralGraph.bfs_traversal"]], "color() (lib.graphes.graph method)": [[6, "Lib.Graphes.Graph.color"]], "color_with_k_colors() (lib.graphes.graph method)": [[6, "Lib.Graphes.Graph.color_with_k_colors"]], "connected_components() (lib.graphes.generalgraph method)": [[6, "Lib.Graphes.GeneralGraph.connected_components"]], "delete_edge() (lib.graphes.digraph method)": [[6, "Lib.Graphes.DiGraph.delete_edge"]], "delete_edge() (lib.graphes.graph method)": [[6, "Lib.Graphes.Graph.delete_edge"]], "delete_vertex() (lib.graphes.digraph method)": [[6, "Lib.Graphes.DiGraph.delete_vertex"]], "delete_vertex() (lib.graphes.graph method)": [[6, "Lib.Graphes.Graph.delete_vertex"]], "dfs_traversal() (lib.graphes.generalgraph method)": [[6, "Lib.Graphes.GeneralGraph.dfs_traversal"]], "edges() (lib.graphes.digraph method)": [[6, "Lib.Graphes.DiGraph.edges"]], "edges() (lib.graphes.generalgraph method)": [[6, "Lib.Graphes.GeneralGraph.edges"]], "edges() (lib.graphes.graph method)": [[6, "Lib.Graphes.Graph.edges"]], "graph_dict (lib.graphes.generalgraph attribute)": [[6, "Lib.Graphes.GeneralGraph.graph_dict"]], "is_reachable_from() (lib.graphes.generalgraph method)": [[6, "Lib.Graphes.GeneralGraph.is_reachable_from"]], "message (lib.graphes.grapherror attribute)": [[6, "Lib.Graphes.GraphError.message"]], "neighbourhoods() (lib.graphes.digraph method)": [[6, "Lib.Graphes.DiGraph.neighbourhoods"]], "pred() (lib.graphes.digraph method)": [[6, "Lib.Graphes.DiGraph.pred"]], "print_dot() (lib.graphes.digraph method)": [[6, "Lib.Graphes.DiGraph.print_dot"]], "print_dot() (lib.graphes.graph method)": [[6, "Lib.Graphes.Graph.print_dot"]], "vertices() (lib.graphes.generalgraph method)": [[6, "Lib.Graphes.GeneralGraph.vertices"]], "lib.linearcode": [[7, "module-Lib.LinearCode"]], "linearcode (class in lib.linearcode)": [[7, "Lib.LinearCode.LinearCode"]], "add_comment() (lib.linearcode.linearcode method)": [[7, "Lib.LinearCode.LinearCode.add_comment"]], "add_instruction() (lib.linearcode.linearcode method)": [[7, "Lib.LinearCode.LinearCode.add_instruction"]], "add_instruction_println_int() (lib.linearcode.linearcode method)": [[7, "Lib.LinearCode.LinearCode.add_instruction_PRINTLN_INT"]], "add_label() (lib.linearcode.linearcode method)": [[7, "Lib.LinearCode.LinearCode.add_label"]], "fdata (lib.linearcode.linearcode attribute)": [[7, "Lib.LinearCode.LinearCode.fdata"]], "get_instructions() (lib.linearcode.linearcode method)": [[7, "Lib.LinearCode.LinearCode.get_instructions"]], "iter_statements() (lib.linearcode.linearcode method)": [[7, "Lib.LinearCode.LinearCode.iter_statements"]], "print_code() (lib.linearcode.linearcode method)": [[7, "Lib.LinearCode.LinearCode.print_code"]], "print_dot() (lib.linearcode.linearcode method)": [[7, "Lib.LinearCode.LinearCode.print_dot"]], "a (in module lib.operands)": [[8, "Lib.Operands.A"]], "a0 (in module lib.operands)": [[8, "Lib.Operands.A0"]], "a1 (in module lib.operands)": [[8, "Lib.Operands.A1"]], "condition (class in lib.operands)": [[8, "Lib.Operands.Condition"]], "datalocation (class in lib.operands)": [[8, "Lib.Operands.DataLocation"]], "fp (in module lib.operands)": [[8, "Lib.Operands.FP"]], "function (class in lib.operands)": [[8, "Lib.Operands.Function"]], "gp (in module lib.operands)": [[8, "Lib.Operands.GP"]], "gp_regs (in module lib.operands)": [[8, "Lib.Operands.GP_REGS"]], "immediate (class in lib.operands)": [[8, "Lib.Operands.Immediate"]], "lib.operands": [[8, "module-Lib.Operands"]], "offset (class in lib.operands)": [[8, "Lib.Operands.Offset"]], "operand (class in lib.operands)": [[8, "Lib.Operands.Operand"]], "ra (in module lib.operands)": [[8, "Lib.Operands.RA"]], "register (class in lib.operands)": [[8, "Lib.Operands.Register"]], "renamer (class in lib.operands)": [[8, "Lib.Operands.Renamer"]], "s (in module lib.operands)": [[8, "Lib.Operands.S"]], "sp (in module lib.operands)": [[8, "Lib.Operands.SP"]], "t (in module lib.operands)": [[8, "Lib.Operands.T"]], "tp (in module lib.operands)": [[8, "Lib.Operands.TP"]], "temporary (class in lib.operands)": [[8, "Lib.Operands.Temporary"]], "temporarypool (class in lib.operands)": [[8, "Lib.Operands.TemporaryPool"]], "zero (in module lib.operands)": [[8, "Lib.Operands.ZERO"]], "add_tmp() (lib.operands.temporarypool method)": [[8, "Lib.Operands.TemporaryPool.add_tmp"]], "copy() (lib.operands.renamer method)": [[8, "Lib.Operands.Renamer.copy"]], "defined() (lib.operands.renamer method)": [[8, "Lib.Operands.Renamer.defined"]], "fresh() (lib.operands.renamer method)": [[8, "Lib.Operands.Renamer.fresh"]], "fresh_tmp() (lib.operands.temporarypool method)": [[8, "Lib.Operands.TemporaryPool.fresh_tmp"]], "get_all_temps() (lib.operands.temporarypool method)": [[8, "Lib.Operands.TemporaryPool.get_all_temps"]], "get_alloced_loc() (lib.operands.temporary method)": [[8, "Lib.Operands.Temporary.get_alloced_loc"]], "get_alloced_loc() (lib.operands.temporarypool method)": [[8, "Lib.Operands.TemporaryPool.get_alloced_loc"]], "get_offset() (lib.operands.offset method)": [[8, "Lib.Operands.Offset.get_offset"]], "negate() (lib.operands.condition method)": [[8, "Lib.Operands.Condition.negate"]], "replace() (lib.operands.renamer method)": [[8, "Lib.Operands.Renamer.replace"]], "set_temp_allocation() (lib.operands.temporarypool method)": [[8, "Lib.Operands.TemporaryPool.set_temp_allocation"]], "lib.phinode": [[9, "module-Lib.PhiNode"]], "phinode (class in lib.phinode)": [[9, "Lib.PhiNode.PhiNode"]], "defined() (lib.phinode.phinode method)": [[9, "Lib.PhiNode.PhiNode.defined"]], "get_srcs() (lib.phinode.phinode method)": [[9, "Lib.PhiNode.PhiNode.get_srcs"]], "printins() (lib.phinode.phinode method)": [[9, "Lib.PhiNode.PhiNode.printIns"]], "rename() (lib.phinode.phinode method)": [[9, "Lib.PhiNode.PhiNode.rename"]], "rename_from() (lib.phinode.phinode method)": [[9, "Lib.PhiNode.PhiNode.rename_from"]], "srcs (lib.phinode.phinode attribute)": [[9, "Lib.PhiNode.PhiNode.srcs"]], "used() (lib.phinode.phinode method)": [[9, "Lib.PhiNode.PhiNode.used"]], "var (lib.phinode.phinode attribute)": [[9, "Lib.PhiNode.PhiNode.var"]], "lib.riscv": [[10, "module-Lib.RiscV"]], "add() (in module lib.riscv)": [[10, "Lib.RiscV.add"]], "call() (in module lib.riscv)": [[10, "Lib.RiscV.call"]], "conditional_jump() (in module lib.riscv)": [[10, "Lib.RiscV.conditional_jump"]], "div() (in module lib.riscv)": [[10, "Lib.RiscV.div"]], "jump() (in module lib.riscv)": [[10, "Lib.RiscV.jump"]], "land() (in module lib.riscv)": [[10, "Lib.RiscV.land"]], "ld() (in module lib.riscv)": [[10, "Lib.RiscV.ld"]], "li() (in module lib.riscv)": [[10, "Lib.RiscV.li"]], "lor() (in module lib.riscv)": [[10, "Lib.RiscV.lor"]], "mul() (in module lib.riscv)": [[10, "Lib.RiscV.mul"]], "mv() (in module lib.riscv)": [[10, "Lib.RiscV.mv"]], "rem() (in module lib.riscv)": [[10, "Lib.RiscV.rem"]], "sd() (in module lib.riscv)": [[10, "Lib.RiscV.sd"]], "sub() (in module lib.riscv)": [[10, "Lib.RiscV.sub"]], "xor() (in module lib.riscv)": [[10, "Lib.RiscV.xor"]], "absolutejump (class in lib.statement)": [[11, "Lib.Statement.AbsoluteJump"]], "comment (class in lib.statement)": [[11, "Lib.Statement.Comment"]], "conditionaljump (class in lib.statement)": [[11, "Lib.Statement.ConditionalJump"]], "instru3a (class in lib.statement)": [[11, "Lib.Statement.Instru3A"]], "instruction (class in lib.statement)": [[11, "Lib.Statement.Instruction"]], "label (class in lib.statement)": [[11, "Lib.Statement.Label"]], "lib.statement": [[11, "module-Lib.Statement"]], "statement (class in lib.statement)": [[11, "Lib.Statement.Statement"]], "args() (lib.statement.absolutejump method)": [[11, "Lib.Statement.AbsoluteJump.args"]], "args() (lib.statement.conditionaljump method)": [[11, "Lib.Statement.ConditionalJump.args"]], "args() (lib.statement.instru3a method)": [[11, "Lib.Statement.Instru3A.args"]], "args() (lib.statement.instruction method)": [[11, "Lib.Statement.Instruction.args"]], "comment (lib.statement.comment attribute)": [[11, "Lib.Statement.Comment.comment"]], "cond (lib.statement.conditionaljump attribute)": [[11, "Lib.Statement.ConditionalJump.cond"]], "defined() (lib.statement.instruction method)": [[11, "Lib.Statement.Instruction.defined"]], "defined() (lib.statement.statement method)": [[11, "Lib.Statement.Statement.defined"]], "ins (lib.statement.absolutejump attribute)": [[11, "Lib.Statement.AbsoluteJump.ins"]], "ins (lib.statement.instruction attribute)": [[11, "Lib.Statement.Instruction.ins"]], "is_read_only() (lib.statement.instruction method)": [[11, "Lib.Statement.Instruction.is_read_only"]], "label (lib.statement.absolutejump attribute)": [[11, "Lib.Statement.AbsoluteJump.label"]], "label (lib.statement.conditionaljump attribute)": [[11, "Lib.Statement.ConditionalJump.label"]], "name (lib.statement.label attribute)": [[11, "Lib.Statement.Label.name"]], "op1 (lib.statement.conditionaljump attribute)": [[11, "Lib.Statement.ConditionalJump.op1"]], "op2 (lib.statement.conditionaljump attribute)": [[11, "Lib.Statement.ConditionalJump.op2"]], "printins() (lib.statement.comment method)": [[11, "Lib.Statement.Comment.printIns"]], "printins() (lib.statement.instruction method)": [[11, "Lib.Statement.Instruction.printIns"]], "printins() (lib.statement.label method)": [[11, "Lib.Statement.Label.printIns"]], "printins() (lib.statement.statement method)": [[11, "Lib.Statement.Statement.printIns"]], "regset_to_string() (in module lib.statement)": [[11, "Lib.Statement.regset_to_string"]], "rename() (lib.statement.absolutejump method)": [[11, "Lib.Statement.AbsoluteJump.rename"]], "rename() (lib.statement.conditionaljump method)": [[11, "Lib.Statement.ConditionalJump.rename"]], "rename() (lib.statement.instru3a method)": [[11, "Lib.Statement.Instru3A.rename"]], "rename() (lib.statement.instruction method)": [[11, "Lib.Statement.Instruction.rename"]], "substitute() (lib.statement.absolutejump method)": [[11, "Lib.Statement.AbsoluteJump.substitute"]], "substitute() (lib.statement.conditionaljump method)": [[11, "Lib.Statement.ConditionalJump.substitute"]], "substitute() (lib.statement.instru3a method)": [[11, "Lib.Statement.Instru3A.substitute"]], "substitute() (lib.statement.statement method)": [[11, "Lib.Statement.Statement.substitute"]], "targets() (lib.statement.absolutejump method)": [[11, "Lib.Statement.AbsoluteJump.targets"]], "used() (lib.statement.instruction method)": [[11, "Lib.Statement.Instruction.used"]], "used() (lib.statement.statement method)": [[11, "Lib.Statement.Statement.used"]], "with_args() (lib.statement.absolutejump method)": [[11, "Lib.Statement.AbsoluteJump.with_args"]], "with_args() (lib.statement.conditionaljump method)": [[11, "Lib.Statement.ConditionalJump.with_args"]], "with_args() (lib.statement.instru3a method)": [[11, "Lib.Statement.Instru3A.with_args"]], "with_args() (lib.statement.statement method)": [[11, "Lib.Statement.Statement.with_args"]], "branchingterminator (class in lib.terminator)": [[12, "Lib.Terminator.BranchingTerminator"]], "lib.terminator": [[12, "module-Lib.Terminator"]], "return (class in lib.terminator)": [[12, "Lib.Terminator.Return"]], "terminator (in module lib.terminator)": [[12, "Lib.Terminator.Terminator"]], "args() (lib.terminator.branchingterminator method)": [[12, "Lib.Terminator.BranchingTerminator.args"]], "args() (lib.terminator.return method)": [[12, "Lib.Terminator.Return.args"]], "cond (lib.terminator.branchingterminator attribute)": [[12, "Lib.Terminator.BranchingTerminator.cond"]], "is_read_only() (lib.terminator.return method)": [[12, "Lib.Terminator.Return.is_read_only"]], "jump2terminator() (in module lib.terminator)": [[12, "Lib.Terminator.jump2terminator"]], "label_else (lib.terminator.branchingterminator attribute)": [[12, "Lib.Terminator.BranchingTerminator.label_else"]], "label_then (lib.terminator.branchingterminator attribute)": [[12, "Lib.Terminator.BranchingTerminator.label_then"]], "op1 (lib.terminator.branchingterminator attribute)": [[12, "Lib.Terminator.BranchingTerminator.op1"]], "op2 (lib.terminator.branchingterminator attribute)": [[12, "Lib.Terminator.BranchingTerminator.op2"]], "printins() (lib.terminator.return method)": [[12, "Lib.Terminator.Return.printIns"]], "rename() (lib.terminator.branchingterminator method)": [[12, "Lib.Terminator.BranchingTerminator.rename"]], "rename() (lib.terminator.return method)": [[12, "Lib.Terminator.Return.rename"]], "substitute() (lib.terminator.branchingterminator method)": [[12, "Lib.Terminator.BranchingTerminator.substitute"]], "substitute() (lib.terminator.return method)": [[12, "Lib.Terminator.Return.substitute"]], "targets() (lib.terminator.branchingterminator method)": [[12, "Lib.Terminator.BranchingTerminator.targets"]], "targets() (lib.terminator.return method)": [[12, "Lib.Terminator.Return.targets"]], "with_args() (lib.terminator.branchingterminator method)": [[12, "Lib.Terminator.BranchingTerminator.with_args"]], "with_args() (lib.terminator.return method)": [[12, "Lib.Terminator.Return.with_args"]]}})
\ No newline at end of file
+Search.setIndex({"docnames": ["api/Lib", "api/Lib.Allocator", "api/Lib.CFG", "api/Lib.Dominators", "api/Lib.Errors", "api/Lib.FunctionData", "api/Lib.Graphes", "api/Lib.LinearCode", "api/Lib.Operands", "api/Lib.PhiNode", "api/Lib.RiscV", "api/Lib.Statement", "api/Lib.Terminator", "api/modules", "index"], "filenames": ["api/Lib.rst", "api/Lib.Allocator.rst", "api/Lib.CFG.rst", "api/Lib.Dominators.rst", "api/Lib.Errors.rst", "api/Lib.FunctionData.rst", "api/Lib.Graphes.rst", "api/Lib.LinearCode.rst", "api/Lib.Operands.rst", "api/Lib.PhiNode.rst", "api/Lib.RiscV.rst", "api/Lib.Statement.rst", "api/Lib.Terminator.rst", "api/modules.rst", "index.rst"], "titles": ["Lib package", "Lib.Allocator module", "Lib.CFG module", "Lib.Dominators module", "Lib.Errors module", "Lib.FunctionData module", "Lib.Graphes module", "Lib.LinearCode module", "Lib.Operands module", "Lib.PhiNode module", "Lib.RiscV module", "Lib.Statement module", "Lib.Terminator module", "MiniC", "Welcome to MiniC\u2019s documentation!"], "terms": {"alloc": [0, 7, 8, 13], "prepar": [0, 1, 14], "replac": [0, 1, 2, 7, 8, 11, 12, 14], "rewritecod": [0, 1, 14], "naivealloc": [0, 1, 13, 14], "cfg": [0, 3, 9, 12, 13, 14], "block": [0, 2, 3, 9, 12, 13, 14], "to_dot": [0, 2, 14], "get_bodi": [0, 2, 14], "get_all_stat": [0, 2, 14], "get_body_and_termin": [0, 2, 14], "get_label": [0, 2, 14], "get_in": [0, 2, 14], "get_termin": [0, 2, 14], "set_termin": [0, 2, 14], "get_phi": [0, 2, 14], "add_phi": [0, 2, 14], "set_phi": [0, 2, 14], "remove_all_phi": [0, 2, 14], "iter_stat": [0, 1, 2, 7, 14], "add_instruct": [0, 2, 7, 14], "fdata": [0, 1, 2, 5, 7, 14], "get_start": [0, 2, 14], "set_start": [0, 2, 14], "get_end": [0, 2, 14], "add_block": [0, 2, 14], "get_block": [0, 2, 14], "get_entri": [0, 2, 14], "add_edg": [0, 2, 6, 14], "remove_edg": [0, 2, 14], "out_block": [0, 2, 14], "gather_def": [0, 2, 14], "linearize_na": [0, 2, 14], "print_cod": [0, 2, 7, 14], "print_dot": [0, 2, 6, 7, 14], "domin": [0, 13, 14], "computedom": [0, 3, 13, 14], "printdt": [0, 3, 13, 14], "computedt": [0, 3, 13, 14], "computedf": [0, 3, 13, 14], "error": [0, 13, 14], "minicruntimeerror": [0, 4, 13, 14], "minicinternalerror": [0, 4, 13, 14], "minicunsupportederror": [0, 4, 13, 14], "minictypeerror": [0, 4, 13, 14], "allocationerror": [0, 4, 13, 14], "functiondata": [0, 1, 2, 7, 13, 14], "get_nam": [0, 5, 14], "fresh_tmp": [0, 5, 8, 14], "fresh_offset": [0, 5, 14], "get_offset": [0, 5, 8, 14], "fresh_label": [0, 5, 14], "get_label_div_by_zero": [0, 5, 14], "graph": [0, 2, 3, 7, 13], "grapherror": [0, 6, 13, 14], "messag": [0, 6, 14], "generalgraph": [0, 6, 13, 14], "graph_dict": [0, 6, 14], "vertic": [0, 6, 14], "add_vertex": [0, 6, 14], "edg": [0, 2, 6, 14], "dfs_travers": [0, 6, 14], "is_reachable_from": [0, 6, 14], "connected_compon": [0, 6, 14], "bfs_travers": [0, 6, 14], "delete_vertex": [0, 6, 14], "delete_edg": [0, 6, 14], "color": [0, 6, 14], "color_with_k_color": [0, 6, 14], "digraph": [0, 6, 13, 14], "pred": [0, 6, 14], "neighbourhood": [0, 6, 14], "linearcod": [0, 1, 5, 12, 13, 14], "get_instruct": [0, 7, 14], "add_label": [0, 7, 14], "add_com": [0, 7, 14], "add_instruction_println_int": [0, 7, 14], "operand": [0, 1, 5, 9, 10, 11, 12, 13, 14], "condit": [0, 8, 10, 11, 12, 13, 14], "negat": [0, 8, 14], "function": [0, 2, 3, 5, 7, 8, 10, 11, 12, 13, 14], "dataloc": [0, 7, 8, 9, 13, 14], "regist": [0, 1, 8, 13, 14], "zero": [0, 8, 13, 14], "ra": [0, 8, 13, 14], "sp": [0, 8, 13, 14], "gp": [0, 8, 13, 14], "tp": [0, 8, 13, 14], "A": [0, 2, 6, 8, 9, 11, 12, 13, 14], "": [0, 7, 8, 13], "t": [0, 8, 13, 14], "a0": [0, 8, 13, 14], "a1": [0, 8, 13, 14], "fp": [0, 5, 8, 13, 14], "gp_reg": [0, 8, 13, 14], "offset": [0, 5, 8, 13, 14], "immedi": [0, 8, 10, 13, 14], "temporari": [0, 1, 5, 7, 8, 13], "get_alloced_loc": [0, 8, 14], "temporarypool": [0, 1, 5, 8, 13, 14], "get_all_temp": [0, 8, 14], "add_tmp": [0, 8, 14], "set_temp_alloc": [0, 1, 8, 14], "renam": [0, 8, 9, 11, 12, 13, 14], "fresh": [0, 5, 8, 9, 14], "defin": [0, 1, 5, 8, 9, 10, 11, 14], "copi": [0, 8, 14], "phinod": [0, 13, 14], "var": [0, 9, 14], "src": [0, 2, 9, 14], "get_src": [0, 9, 14], "us": [0, 3, 5, 6, 8, 9, 11, 12, 14], "rename_from": [0, 9, 14], "printin": [0, 9, 11, 12, 14], "riscv": [0, 2, 5, 7, 8, 9, 11, 13, 14], "call": [0, 1, 3, 6, 7, 8, 9, 10, 11, 12, 13, 14], "jump": [0, 2, 10, 11, 12, 13, 14], "conditional_jump": [0, 10, 13, 14], "add": [0, 1, 2, 6, 7, 8, 10, 13, 14], "mul": [0, 10, 13, 14], "div": [0, 10, 13, 14], "rem": [0, 10, 13, 14], "sub": [0, 10, 13, 14], "land": [0, 10, 13, 14], "lor": [0, 10, 13, 14], "xor": [0, 10, 13, 14], "li": [0, 10, 13, 14], "mv": [0, 10, 13, 14], "ld": [0, 10, 13, 14], "sd": [0, 10, 13, 14], "statement": [0, 2, 9, 12, 13, 14], "regset_to_str": [0, 11, 13, 14], "substitut": [0, 11, 12, 14], "with_arg": [0, 11, 12, 14], "comment": [0, 2, 7, 11, 13, 14], "label": [0, 2, 5, 7, 9, 10, 11, 12, 13, 14], "name": [0, 2, 5, 6, 7, 8, 9, 11, 14], "instruct": [0, 1, 2, 7, 10, 11, 12, 13, 14], "ins": [0, 11, 14], "is_read_onli": [0, 11, 12, 14], "arg": [0, 11, 12, 14], "instru3a": [0, 2, 7, 10, 11, 13, 14], "absolutejump": [0, 2, 7, 10, 11, 12, 13, 14], "target": [0, 2, 11, 12, 14], "conditionaljump": [0, 7, 11, 12, 13, 14], "cond": [0, 10, 11, 12, 14], "op1": [0, 10, 11, 12, 14], "op2": [0, 10, 11, 12, 14], "termin": [0, 2, 13, 14], "return": [0, 1, 2, 3, 5, 6, 7, 8, 9, 11, 12, 13, 14], "branchingtermin": [0, 2, 12, 13, 14], "label_then": [0, 12, 14], "label_els": [0, 12, 14], "jump2termin": [0, 12, 13, 14], "thi": [1, 2, 3, 5, 8, 10, 11, 12], "file": [1, 5, 7, 8], "base": [1, 2, 4, 5, 6, 7, 8, 9, 11, 12], "class": [1, 2, 5, 6, 7, 8, 9, 11, 12, 14], "na\u00efv": 1, "implement": [1, 14], "sourc": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14], "object": [1, 2, 5, 6, 7, 8, 11, 14], "gener": [1, 6, 7, 8], "naiv": [1, 2, 14], "allinmem": 1, "smart": 1, "all": [1, 2, 6, 8, 14], "code": [1, 2, 7, 10, 14], "actual": [1, 6, 8], "data": [1, 8, 14], "locat": [1, 8, 11], "i": [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12], "done": [1, 6], "two": [1, 6, 12], "step": 1, "first": [1, 6, 11, 12], "respons": 1, "map": [1, 8], "from": [1, 6, 8, 11, 12], "where": [1, 6, 11, 12], "thei": [1, 6], "should": [1, 6, 9, 11, 12, 14], "store": [1, 5], "memori": [1, 5, 8, 14], "Then": 1, "each": [1, 2, 6, 7, 9, 12, 14], "order": 1, "previous": [1, 3], "assign": 1, "possibli": 1, "some": [1, 5, 7, 14], "befor": [1, 14], "after": 1, "concret": 1, "list": [1, 2, 6, 7, 8, 9, 11, 12, 14], "origin": 1, "The": [1, 6, 7, 8, 9, 11, 12, 14], "iter": [1, 2, 7], "over": [1, 2, 7], "handl": 1, "transpar": 1, "none": [1, 2, 3, 6, 7, 8, 9, 11, 12], "old_instr": 1, "transform": 1, "an": [1, 2, 3, 6, 7, 11], "listcod": 1, "modifi": 1, "try": 1, "fail": [1, 6], "ar": [1, 5, 6, 8, 9, 11, 12, 14], "more": 1, "than": [1, 8], "correspond": [1, 9], "too": 1, "mani": 1, "itself": [2, 8], "its": [2, 3, 8, 9, 11, 14], "basic": [2, 14], "inst": 2, "made": 2, "three": [2, 12], "main": 2, "part": 2, "start": 2, "uniqu": [2, 5], "identifi": [2, 9], "bodi": 2, "exclud": 2, "branch": [2, 8, 11, 12], "repres": [2, 14], "final": 2, "point": [2, 14], "successor": [2, 12], "see": [2, 7], "document": 2, "further": 2, "explan": 2, "str": [2, 3, 5, 6, 7, 8, 11], "output": [2, 7, 9, 11, 12], "string": [2, 5, 8], "phi": [2, 14], "node": [2, 6, 9, 14], "nor": 2, "includ": 2, "except": [2, 4, 6], "consid": [2, 11], "term": 2, "set": [2, 3, 6, 11], "\u03c6": [2, 9], "given": [2, 3, 5, 7, 9, 11, 12], "remov": 2, "f": [2, 7], "For": [2, 7], "real": [2, 7], "assum": 2, "instr": 2, "complet": [2, 7], "control": 2, "flow": 2, "mainli": 2, "indic": 2, "entri": [2, 3], "exit": 2, "As": 2, "linear": [2, 7], "metadata": [2, 5], "about": [2, 14], "can": 2, "found": 2, "member": [2, 7], "variabl": [2, 5, 7, 9], "blk": 2, "new": [2, 5, 7, 8, 11, 12], "predecessor": [2, 6, 9], "dest": 2, "dict": [2, 3, 6, 8, 9, 11, 12], "ani": [2, 6], "dictionari": [2, 3, 6], "associ": [2, 3, 9, 12], "contain": [2, 5, 7, 9], "one": [2, 8, 11, 12], "definit": 2, "appli": 2, "procedur": 2, "everywher": 2, "lambda": 2, "print": [2, 6, 7, 9, 11, 12], "filenam": [2, 3, 7], "df": [2, 3, 7], "view": [2, 7], "fals": [2, 7, 12], "util": [3, 5, 7, 11], "work": [3, 5, 14], "do": [3, 6], "hesit": 3, "look": 3, "get": [3, 8], "better": 3, "understand": [3, 14], "algorithm": 3, "comput": [3, 6, 8], "tabl": 3, "It": [3, 8, 11], "solv": 3, "equat": 3, "system": 3, "helper": 3, "dure": [3, 12], "ssa": [3, 9], "displai": 3, "graphic": 3, "render": 3, "tree": 3, "dom_graph": 3, "bool": [3, 6, 8, 12], "basenam": 3, "dt": 3, "which": [3, 5, 8, 11], "children": 3, "frontier": [3, 14], "well": 5, "common": 5, "differ": [5, 6, 8], "intermedi": 5, "represent": [5, 7], "div_by_zero": 5, "usual": 5, "indirectli": 5, "through": 5, "we": [5, 6, 8, 14], "ad": [5, 6], "pool": [5, 8], "stack": 5, "decreas": 5, "rel": 5, "int": [5, 6, 8], "current": 5, "python": [6, 10, 14], "orient": [6, 14], "non": [6, 11, 12, 14], "rais": 6, "self": 6, "loop": 6, "regroup": 6, "similar": 6, "between": 6, "direct": 6, "onli": [6, 11], "how": 6, "delet": 6, "vertex": 6, "undirect": 6, "If": 6, "kei": [6, 8, 11, 12], "empti": 6, "valu": [6, 7, 8, 11, 12], "otherwis": [6, 11], "noth": 6, "ha": [6, 8], "root": 6, "depth": 6, "search": [6, 14], "v1": 6, "v2": 6, "true": [6, 8, 11, 12], "path": [6, 7], "connect": 6, "compon": 6, "being": 6, "vetic": 6, "breadth": 6, "static": 6, "method": [6, 8], "appear": [6, 11, 12, 14], "twice": 6, "dictionnari": [6, 9], "tupl": 6, "pair": 6, "c": [6, 10], "g": 6, "adjac": 6, "unlimit": 6, "number": [6, 8], "integ": [6, 7, 8], "0": [6, 8], "1": 6, "k": 6, "avoidingnod": 6, "unspecifi": 6, "3": [6, 11, 14], "boolean": 6, "succeed": 6, "belong": 6, "continu": 6, "even": 6, "algo": 6, "v": [6, 14], "cap": [7, 10, 12], "codegener": [7, 10], "api": [7, 10], "program": 7, "repeatedli": 7, "codegen": 7, "visitor": 7, "build": [7, 8, 12], "meta": 7, "inform": 7, "instanc": 7, "debug": 7, "purpos": [7, 8], "allow": [7, 8, 14], "also": [7, 8], "relev": 7, "reg": 7, "newlin": 7, "expand": 7, "text": 7, "subclass": 8, "address": [8, 11, 14], "constant": 8, "yet": 8, "shortcut": 8, "optyp": 8, "e": 8, "comparison": 8, "condjump": 8, "exampl": 8, "usag": 8, "beq": [8, 10], "equal": 8, "minicpars": [8, 10], "lt": 8, "lower": 8, "constructor": 8, "argument": [8, 14], "shall": 8, "all_op": 8, "oper": 8, "gt": 8, "opdict": 8, "opposit": 8, "either": 8, "place": 8, "physic": 8, "cours": 8, "a2": 8, "a3": 8, "a4": 8, "a5": 8, "a6": 8, "a7": 8, "s1": 8, "s2": 8, "s3": 8, "s4": 8, "s5": 8, "s6": 8, "s7": 8, "s8": 8, "s9": 8, "s10": 8, "s11": 8, "t0": 8, "t1": 8, "t2": 8, "t3": 8, "t4": 8, "t5": 8, "t6": 8, "frame": 8, "pointer": 8, "save": 8, "usabl": 8, "basereg": 8, "val": 8, "been": [8, 11, 12], "later": 8, "manag": 8, "give": [8, 14], "must": 8, "other": [8, 11], "typic": 8, "type": [8, 12], "enforc": 8, "check": 8, "inde": 8, "under": 9, "form": 9, "temp_x": 9, "temp_0": 9, "temp_n": 9, "These": [9, 14], "particular": 9, "kind": [9, 11, 12, 14], "expect": 9, "field": 9, "b": 9, "_phi": 9, "link": 9, "temp_i": 9, "previou": 9, "stream": [9, 11, 12], "never": [9, 11, 12], "mif08": [10, 12], "uncondit": 10, "wrapper": 10, "around": 10, "bge": 10, "bgt": 10, "like": 10, "eq": 10, "dr": 10, "sr1": 10, "sr2orimm7": 10, "And": 10, "cannot": 10, "due": 10, "Or": 10, "imm7": 10, "sr": 10, "mem": 10, "asm": 11, "inherit": 11, "In": 11, "turn": 11, "regular": 11, "registerset": 11, "pretti": 11, "written": 11, "read": 11, "subst": [11, 12], "tstatement": 11, "clone": [11, 12], "new_arg": [11, 12], "have": [11, 12, 14], "both": [11, 12], "destin": [11, 12], "take": [11, 12, 14], "absolut": 11, "specif": 11, "j": [11, 12], "librari": 12, "end": [12, 14], "There": 12, "anoth": 12, "unlik": 12, "wa": 12, "specifi": 12, "mark": 12, "construct": 12, "extract": 12, "chunk": 12, "second": 12, "alia": 12, "next_label": 12, "potenti": 12, "lib": [13, 14], "packag": 13, "submodul": 13, "modul": [13, 14], "content": 13, "risc": 14, "page": 14, "variou": 14, "folder": 14, "you": 14, "edit": 14, "them": 14, "assembli": 14, "won": 14, "creat": 14, "directli": 14, "veri": 14, "often": 14, "instead": 14, "easili": 14, "standard": 14, "pseudo": 14, "At": 14, "need": 14, "those": 14, "present": 14, "model": 14, "lab": 14, "4a": 14, "translat": 14, "make": 14, "special": 14, "index": 14}, "objects": {"": [[0, 0, 0, "-", "Lib"]], "Lib": [[1, 0, 0, "-", "Allocator"], [2, 0, 0, "-", "CFG"], [3, 0, 0, "-", "Dominators"], [4, 0, 0, "-", "Errors"], [5, 0, 0, "-", "FunctionData"], [6, 0, 0, "-", "Graphes"], [7, 0, 0, "-", "LinearCode"], [8, 0, 0, "-", "Operands"], [9, 0, 0, "-", "PhiNode"], [10, 0, 0, "-", "RiscV"], [11, 0, 0, "-", "Statement"], [12, 0, 0, "-", "Terminator"]], "Lib.Allocator": [[1, 1, 1, "", "Allocator"], [1, 1, 1, "", "NaiveAllocator"]], "Lib.Allocator.Allocator": [[1, 2, 1, "", "prepare"], [1, 2, 1, "", "replace"], [1, 2, 1, "", "rewriteCode"]], "Lib.Allocator.NaiveAllocator": [[1, 2, 1, "", "prepare"], [1, 2, 1, "", "replace"]], "Lib.CFG": [[2, 1, 1, "", "Block"], [2, 1, 1, "", "CFG"]], "Lib.CFG.Block": [[2, 2, 1, "", "add_instruction"], [2, 2, 1, "", "add_phi"], [2, 2, 1, "", "get_all_statements"], [2, 2, 1, "", "get_body"], [2, 2, 1, "", "get_body_and_terminator"], [2, 2, 1, "", "get_in"], [2, 2, 1, "", "get_label"], [2, 2, 1, "", "get_phis"], [2, 2, 1, "", "get_terminator"], [2, 2, 1, "", "iter_statements"], [2, 2, 1, "", "remove_all_phis"], [2, 2, 1, "", "set_phis"], [2, 2, 1, "", "set_terminator"], [2, 2, 1, "", "to_dot"]], "Lib.CFG.CFG": [[2, 2, 1, "", "add_block"], [2, 2, 1, "", "add_edge"], [2, 3, 1, "", "fdata"], [2, 2, 1, "", "gather_defs"], [2, 2, 1, "", "get_block"], [2, 2, 1, "", "get_blocks"], [2, 2, 1, "", "get_end"], [2, 2, 1, "", "get_entries"], [2, 2, 1, "", "get_start"], [2, 2, 1, "", "iter_statements"], [2, 2, 1, "", "linearize_naive"], [2, 2, 1, "", "out_blocks"], [2, 2, 1, "", "print_code"], [2, 2, 1, "", "print_dot"], [2, 2, 1, "", "remove_edge"], [2, 2, 1, "", "set_start"]], "Lib.Dominators": [[3, 4, 1, "", "computeDF"], [3, 4, 1, "", "computeDT"], [3, 4, 1, "", "computeDom"], [3, 4, 1, "", "printDT"]], "Lib.Errors": [[4, 5, 1, "", "AllocationError"], [4, 5, 1, "", "MiniCInternalError"], [4, 5, 1, "", "MiniCRuntimeError"], [4, 5, 1, "", "MiniCTypeError"], [4, 5, 1, "", "MiniCUnsupportedError"]], "Lib.FunctionData": [[5, 1, 1, "", "FunctionData"]], "Lib.FunctionData.FunctionData": [[5, 2, 1, "", "fresh_label"], [5, 2, 1, "", "fresh_offset"], [5, 2, 1, "", "fresh_tmp"], [5, 2, 1, "", "get_label_div_by_zero"], [5, 2, 1, "", "get_name"], [5, 2, 1, "", "get_offset"]], "Lib.Graphes": [[6, 1, 1, "", "DiGraph"], [6, 1, 1, "", "GeneralGraph"], [6, 1, 1, "", "Graph"], [6, 5, 1, "", "GraphError"]], "Lib.Graphes.DiGraph": [[6, 2, 1, "", "add_edge"], [6, 2, 1, "", "delete_edge"], [6, 2, 1, "", "delete_vertex"], [6, 2, 1, "", "edges"], [6, 2, 1, "", "neighbourhoods"], [6, 2, 1, "", "pred"], [6, 2, 1, "", "print_dot"]], "Lib.Graphes.GeneralGraph": [[6, 2, 1, "", "add_vertex"], [6, 2, 1, "", "bfs_traversal"], [6, 2, 1, "", "connected_components"], [6, 2, 1, "", "dfs_traversal"], [6, 2, 1, "", "edges"], [6, 3, 1, "", "graph_dict"], [6, 2, 1, "", "is_reachable_from"], [6, 2, 1, "", "vertices"]], "Lib.Graphes.Graph": [[6, 2, 1, "", "add_edge"], [6, 2, 1, "", "color"], [6, 2, 1, "", "color_with_k_colors"], [6, 2, 1, "", "delete_edge"], [6, 2, 1, "", "delete_vertex"], [6, 2, 1, "", "edges"], [6, 2, 1, "", "print_dot"]], "Lib.Graphes.GraphError": [[6, 3, 1, "", "message"]], "Lib.LinearCode": [[7, 1, 1, "", "LinearCode"]], "Lib.LinearCode.LinearCode": [[7, 2, 1, "", "add_comment"], [7, 2, 1, "", "add_instruction"], [7, 2, 1, "", "add_instruction_PRINTLN_INT"], [7, 2, 1, "", "add_label"], [7, 3, 1, "", "fdata"], [7, 2, 1, "", "get_instructions"], [7, 2, 1, "", "iter_statements"], [7, 2, 1, "", "print_code"], [7, 2, 1, "", "print_dot"]], "Lib.Operands": [[8, 6, 1, "", "A"], [8, 6, 1, "", "A0"], [8, 6, 1, "", "A1"], [8, 1, 1, "", "Condition"], [8, 1, 1, "", "DataLocation"], [8, 6, 1, "", "FP"], [8, 1, 1, "", "Function"], [8, 6, 1, "", "GP"], [8, 6, 1, "", "GP_REGS"], [8, 1, 1, "", "Immediate"], [8, 1, 1, "", "Offset"], [8, 1, 1, "", "Operand"], [8, 6, 1, "", "RA"], [8, 1, 1, "", "Register"], [8, 1, 1, "", "Renamer"], [8, 6, 1, "", "S"], [8, 6, 1, "", "SP"], [8, 6, 1, "", "T"], [8, 6, 1, "", "TP"], [8, 1, 1, "", "Temporary"], [8, 1, 1, "", "TemporaryPool"], [8, 6, 1, "", "ZERO"]], "Lib.Operands.Condition": [[8, 2, 1, "", "negate"]], "Lib.Operands.Offset": [[8, 2, 1, "", "get_offset"]], "Lib.Operands.Renamer": [[8, 2, 1, "", "copy"], [8, 2, 1, "", "defined"], [8, 2, 1, "", "fresh"], [8, 2, 1, "", "replace"]], "Lib.Operands.Temporary": [[8, 2, 1, "", "get_alloced_loc"]], "Lib.Operands.TemporaryPool": [[8, 2, 1, "", "add_tmp"], [8, 2, 1, "", "fresh_tmp"], [8, 2, 1, "", "get_all_temps"], [8, 2, 1, "", "get_alloced_loc"], [8, 2, 1, "", "set_temp_allocation"]], "Lib.PhiNode": [[9, 1, 1, "", "PhiNode"]], "Lib.PhiNode.PhiNode": [[9, 2, 1, "", "defined"], [9, 2, 1, "", "get_srcs"], [9, 2, 1, "", "printIns"], [9, 2, 1, "", "rename"], [9, 2, 1, "", "rename_from"], [9, 3, 1, "", "srcs"], [9, 2, 1, "", "used"], [9, 3, 1, "", "var"]], "Lib.RiscV": [[10, 4, 1, "", "add"], [10, 4, 1, "", "call"], [10, 4, 1, "", "conditional_jump"], [10, 4, 1, "", "div"], [10, 4, 1, "", "jump"], [10, 4, 1, "", "land"], [10, 4, 1, "", "ld"], [10, 4, 1, "", "li"], [10, 4, 1, "", "lor"], [10, 4, 1, "", "mul"], [10, 4, 1, "", "mv"], [10, 4, 1, "", "rem"], [10, 4, 1, "", "sd"], [10, 4, 1, "", "sub"], [10, 4, 1, "", "xor"]], "Lib.Statement": [[11, 1, 1, "", "AbsoluteJump"], [11, 1, 1, "", "Comment"], [11, 1, 1, "", "ConditionalJump"], [11, 1, 1, "", "Instru3A"], [11, 1, 1, "", "Instruction"], [11, 1, 1, "", "Label"], [11, 1, 1, "", "Statement"], [11, 4, 1, "", "regset_to_string"]], "Lib.Statement.AbsoluteJump": [[11, 2, 1, "", "args"], [11, 3, 1, "", "ins"], [11, 3, 1, "", "label"], [11, 2, 1, "", "rename"], [11, 2, 1, "", "substitute"], [11, 2, 1, "", "targets"], [11, 2, 1, "", "with_args"]], "Lib.Statement.Comment": [[11, 3, 1, "", "comment"], [11, 2, 1, "", "printIns"]], "Lib.Statement.ConditionalJump": [[11, 2, 1, "", "args"], [11, 3, 1, "", "cond"], [11, 3, 1, "", "label"], [11, 3, 1, "", "op1"], [11, 3, 1, "", "op2"], [11, 2, 1, "", "rename"], [11, 2, 1, "", "substitute"], [11, 2, 1, "", "with_args"]], "Lib.Statement.Instru3A": [[11, 2, 1, "", "args"], [11, 2, 1, "", "rename"], [11, 2, 1, "", "substitute"], [11, 2, 1, "", "with_args"]], "Lib.Statement.Instruction": [[11, 2, 1, "", "args"], [11, 2, 1, "", "defined"], [11, 3, 1, "", "ins"], [11, 2, 1, "", "is_read_only"], [11, 2, 1, "", "printIns"], [11, 2, 1, "", "rename"], [11, 2, 1, "", "used"]], "Lib.Statement.Label": [[11, 3, 1, "", "name"], [11, 2, 1, "", "printIns"]], "Lib.Statement.Statement": [[11, 2, 1, "", "defined"], [11, 2, 1, "", "printIns"], [11, 2, 1, "", "substitute"], [11, 2, 1, "", "used"], [11, 2, 1, "", "with_args"]], "Lib.Terminator": [[12, 1, 1, "", "BranchingTerminator"], [12, 1, 1, "", "Return"], [12, 6, 1, "", "Terminator"], [12, 4, 1, "", "jump2terminator"]], "Lib.Terminator.BranchingTerminator": [[12, 2, 1, "", "args"], [12, 3, 1, "", "cond"], [12, 3, 1, "", "label_else"], [12, 3, 1, "", "label_then"], [12, 3, 1, "", "op1"], [12, 3, 1, "", "op2"], [12, 2, 1, "", "rename"], [12, 2, 1, "", "substitute"], [12, 2, 1, "", "targets"], [12, 2, 1, "", "with_args"]], "Lib.Terminator.Return": [[12, 2, 1, "", "args"], [12, 2, 1, "", "is_read_only"], [12, 2, 1, "", "printIns"], [12, 2, 1, "", "rename"], [12, 2, 1, "", "substitute"], [12, 2, 1, "", "targets"], [12, 2, 1, "", "with_args"]]}, "objtypes": {"0": "py:module", "1": "py:class", "2": "py:method", "3": "py:attribute", "4": "py:function", "5": "py:exception", "6": "py:data"}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "class", "Python class"], "2": ["py", "method", "Python method"], "3": ["py", "attribute", "Python attribute"], "4": ["py", "function", "Python function"], "5": ["py", "exception", "Python exception"], "6": ["py", "data", "Python data"]}, "titleterms": {"lib": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], "packag": 0, "submodul": 0, "modul": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], "content": [0, 14], "alloc": [1, 14], "cfg": 2, "domin": 3, "error": 4, "functiondata": 5, "graph": [6, 14], "linearcod": 7, "operand": 8, "phinod": 9, "riscv": 10, "statement": 11, "termin": 12, "minic": [13, 14], "welcom": 14, "": 14, "document": 14, "base": 14, "librari": 14, "linear": 14, "intermedi": 14, "represent": 14, "temporari": 14, "control": 14, "flow": 14, "ssa": 14, "form": 14, "indic": 14, "tabl": 14}, "envversion": {"sphinx.domains.c": 2, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 8, "sphinx.domains.index": 1, "sphinx.domains.javascript": 2, "sphinx.domains.math": 2, "sphinx.domains.python": 3, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.viewcode": 1, "sphinx": 57}, "alltitles": {"Lib package": [[0, "lib-package"]], "Submodules": [[0, "submodules"]], "Module contents": [[0, "module-Lib"]], "Lib.Allocator module": [[1, "module-Lib.Allocator"]], "Lib.CFG module": [[2, "module-Lib.CFG"]], "Lib.Dominators module": [[3, "module-Lib.Dominators"]], "Lib.Errors module": [[4, "module-Lib.Errors"]], "Lib.FunctionData module": [[5, "module-Lib.FunctionData"]], "Lib.Graphes module": [[6, "module-Lib.Graphes"]], "Lib.LinearCode module": [[7, "module-Lib.LinearCode"]], "Lib.Operands module": [[8, "module-Lib.Operands"]], "Lib.PhiNode module": [[9, "module-Lib.PhiNode"]], "Lib.RiscV module": [[10, "module-Lib.RiscV"]], "Lib.Statement module": [[11, "module-Lib.Statement"]], "Lib.Terminator module": [[12, "module-Lib.Terminator"]], "MiniC": [[13, "minic"]], "Welcome to MiniC\u2019s documentation!": [[14, "welcome-to-minic-s-documentation"]], "Contents:": [[14, null]], "Base library": [[14, "base-library"]], "Linear Intermediate representation": [[14, "linear-intermediate-representation"]], "Temporary allocation": [[14, "temporary-allocation"]], "Control Flow Graph Intermediate representation": [[14, "control-flow-graph-intermediate-representation"]], "SSA form": [[14, "ssa-form"]], "Indices and tables": [[14, "indices-and-tables"]]}, "indexentries": {"lib": [[0, "module-Lib"]], "module": [[0, "module-Lib"], [1, "module-Lib.Allocator"], [2, "module-Lib.CFG"], [3, "module-Lib.Dominators"], [4, "module-Lib.Errors"], [5, "module-Lib.FunctionData"], [6, "module-Lib.Graphes"], [7, "module-Lib.LinearCode"], [8, "module-Lib.Operands"], [9, "module-Lib.PhiNode"], [10, "module-Lib.RiscV"], [11, "module-Lib.Statement"], [12, "module-Lib.Terminator"]], "allocator (class in lib.allocator)": [[1, "Lib.Allocator.Allocator"]], "lib.allocator": [[1, "module-Lib.Allocator"]], "naiveallocator (class in lib.allocator)": [[1, "Lib.Allocator.NaiveAllocator"]], "prepare() (lib.allocator.allocator method)": [[1, "Lib.Allocator.Allocator.prepare"]], "prepare() (lib.allocator.naiveallocator method)": [[1, "Lib.Allocator.NaiveAllocator.prepare"]], "replace() (lib.allocator.allocator method)": [[1, "Lib.Allocator.Allocator.replace"]], "replace() (lib.allocator.naiveallocator method)": [[1, "Lib.Allocator.NaiveAllocator.replace"]], "rewritecode() (lib.allocator.allocator method)": [[1, "Lib.Allocator.Allocator.rewriteCode"]], "block (class in lib.cfg)": [[2, "Lib.CFG.Block"]], "cfg (class in lib.cfg)": [[2, "Lib.CFG.CFG"]], "lib.cfg": [[2, "module-Lib.CFG"]], "add_block() (lib.cfg.cfg method)": [[2, "Lib.CFG.CFG.add_block"]], "add_edge() (lib.cfg.cfg method)": [[2, "Lib.CFG.CFG.add_edge"]], "add_instruction() (lib.cfg.block method)": [[2, "Lib.CFG.Block.add_instruction"]], "add_phi() (lib.cfg.block method)": [[2, "Lib.CFG.Block.add_phi"]], "fdata (lib.cfg.cfg attribute)": [[2, "Lib.CFG.CFG.fdata"]], "gather_defs() (lib.cfg.cfg method)": [[2, "Lib.CFG.CFG.gather_defs"]], "get_all_statements() (lib.cfg.block method)": [[2, "Lib.CFG.Block.get_all_statements"]], "get_block() (lib.cfg.cfg method)": [[2, "Lib.CFG.CFG.get_block"]], "get_blocks() (lib.cfg.cfg method)": [[2, "Lib.CFG.CFG.get_blocks"]], "get_body() (lib.cfg.block method)": [[2, "Lib.CFG.Block.get_body"]], "get_body_and_terminator() (lib.cfg.block method)": [[2, "Lib.CFG.Block.get_body_and_terminator"]], "get_end() (lib.cfg.cfg method)": [[2, "Lib.CFG.CFG.get_end"]], "get_entries() (lib.cfg.cfg method)": [[2, "Lib.CFG.CFG.get_entries"]], "get_in() (lib.cfg.block method)": [[2, "Lib.CFG.Block.get_in"]], "get_label() (lib.cfg.block method)": [[2, "Lib.CFG.Block.get_label"]], "get_phis() (lib.cfg.block method)": [[2, "Lib.CFG.Block.get_phis"]], "get_start() (lib.cfg.cfg method)": [[2, "Lib.CFG.CFG.get_start"]], "get_terminator() (lib.cfg.block method)": [[2, "Lib.CFG.Block.get_terminator"]], "iter_statements() (lib.cfg.block method)": [[2, "Lib.CFG.Block.iter_statements"]], "iter_statements() (lib.cfg.cfg method)": [[2, "Lib.CFG.CFG.iter_statements"]], "linearize_naive() (lib.cfg.cfg method)": [[2, "Lib.CFG.CFG.linearize_naive"]], "out_blocks() (lib.cfg.cfg method)": [[2, "Lib.CFG.CFG.out_blocks"]], "print_code() (lib.cfg.cfg method)": [[2, "Lib.CFG.CFG.print_code"]], "print_dot() (lib.cfg.cfg method)": [[2, "Lib.CFG.CFG.print_dot"]], "remove_all_phis() (lib.cfg.block method)": [[2, "Lib.CFG.Block.remove_all_phis"]], "remove_edge() (lib.cfg.cfg method)": [[2, "Lib.CFG.CFG.remove_edge"]], "set_phis() (lib.cfg.block method)": [[2, "Lib.CFG.Block.set_phis"]], "set_start() (lib.cfg.cfg method)": [[2, "Lib.CFG.CFG.set_start"]], "set_terminator() (lib.cfg.block method)": [[2, "Lib.CFG.Block.set_terminator"]], "to_dot() (lib.cfg.block method)": [[2, "Lib.CFG.Block.to_dot"]], "lib.dominators": [[3, "module-Lib.Dominators"]], "computedf() (in module lib.dominators)": [[3, "Lib.Dominators.computeDF"]], "computedt() (in module lib.dominators)": [[3, "Lib.Dominators.computeDT"]], "computedom() (in module lib.dominators)": [[3, "Lib.Dominators.computeDom"]], "printdt() (in module lib.dominators)": [[3, "Lib.Dominators.printDT"]], "allocationerror": [[4, "Lib.Errors.AllocationError"]], "lib.errors": [[4, "module-Lib.Errors"]], "minicinternalerror": [[4, "Lib.Errors.MiniCInternalError"]], "minicruntimeerror": [[4, "Lib.Errors.MiniCRuntimeError"]], "minictypeerror": [[4, "Lib.Errors.MiniCTypeError"]], "minicunsupportederror": [[4, "Lib.Errors.MiniCUnsupportedError"]], "functiondata (class in lib.functiondata)": [[5, "Lib.FunctionData.FunctionData"]], "lib.functiondata": [[5, "module-Lib.FunctionData"]], "fresh_label() (lib.functiondata.functiondata method)": [[5, "Lib.FunctionData.FunctionData.fresh_label"]], "fresh_offset() (lib.functiondata.functiondata method)": [[5, "Lib.FunctionData.FunctionData.fresh_offset"]], "fresh_tmp() (lib.functiondata.functiondata method)": [[5, "Lib.FunctionData.FunctionData.fresh_tmp"]], "get_label_div_by_zero() (lib.functiondata.functiondata method)": [[5, "Lib.FunctionData.FunctionData.get_label_div_by_zero"]], "get_name() (lib.functiondata.functiondata method)": [[5, "Lib.FunctionData.FunctionData.get_name"]], "get_offset() (lib.functiondata.functiondata method)": [[5, "Lib.FunctionData.FunctionData.get_offset"]], "digraph (class in lib.graphes)": [[6, "Lib.Graphes.DiGraph"]], "generalgraph (class in lib.graphes)": [[6, "Lib.Graphes.GeneralGraph"]], "graph (class in lib.graphes)": [[6, "Lib.Graphes.Graph"]], "grapherror": [[6, "Lib.Graphes.GraphError"]], "lib.graphes": [[6, "module-Lib.Graphes"]], "add_edge() (lib.graphes.digraph method)": [[6, "Lib.Graphes.DiGraph.add_edge"]], "add_edge() (lib.graphes.graph method)": [[6, "Lib.Graphes.Graph.add_edge"]], "add_vertex() (lib.graphes.generalgraph method)": [[6, "Lib.Graphes.GeneralGraph.add_vertex"]], "bfs_traversal() (lib.graphes.generalgraph method)": [[6, "Lib.Graphes.GeneralGraph.bfs_traversal"]], "color() (lib.graphes.graph method)": [[6, "Lib.Graphes.Graph.color"]], "color_with_k_colors() (lib.graphes.graph method)": [[6, "Lib.Graphes.Graph.color_with_k_colors"]], "connected_components() (lib.graphes.generalgraph method)": [[6, "Lib.Graphes.GeneralGraph.connected_components"]], "delete_edge() (lib.graphes.digraph method)": [[6, "Lib.Graphes.DiGraph.delete_edge"]], "delete_edge() (lib.graphes.graph method)": [[6, "Lib.Graphes.Graph.delete_edge"]], "delete_vertex() (lib.graphes.digraph method)": [[6, "Lib.Graphes.DiGraph.delete_vertex"]], "delete_vertex() (lib.graphes.graph method)": [[6, "Lib.Graphes.Graph.delete_vertex"]], "dfs_traversal() (lib.graphes.generalgraph method)": [[6, "Lib.Graphes.GeneralGraph.dfs_traversal"]], "edges() (lib.graphes.digraph method)": [[6, "Lib.Graphes.DiGraph.edges"]], "edges() (lib.graphes.generalgraph method)": [[6, "Lib.Graphes.GeneralGraph.edges"]], "edges() (lib.graphes.graph method)": [[6, "Lib.Graphes.Graph.edges"]], "graph_dict (lib.graphes.generalgraph attribute)": [[6, "Lib.Graphes.GeneralGraph.graph_dict"]], "is_reachable_from() (lib.graphes.generalgraph method)": [[6, "Lib.Graphes.GeneralGraph.is_reachable_from"]], "message (lib.graphes.grapherror attribute)": [[6, "Lib.Graphes.GraphError.message"]], "neighbourhoods() (lib.graphes.digraph method)": [[6, "Lib.Graphes.DiGraph.neighbourhoods"]], "pred() (lib.graphes.digraph method)": [[6, "Lib.Graphes.DiGraph.pred"]], "print_dot() (lib.graphes.digraph method)": [[6, "Lib.Graphes.DiGraph.print_dot"]], "print_dot() (lib.graphes.graph method)": [[6, "Lib.Graphes.Graph.print_dot"]], "vertices() (lib.graphes.generalgraph method)": [[6, "Lib.Graphes.GeneralGraph.vertices"]], "lib.linearcode": [[7, "module-Lib.LinearCode"]], "linearcode (class in lib.linearcode)": [[7, "Lib.LinearCode.LinearCode"]], "add_comment() (lib.linearcode.linearcode method)": [[7, "Lib.LinearCode.LinearCode.add_comment"]], "add_instruction() (lib.linearcode.linearcode method)": [[7, "Lib.LinearCode.LinearCode.add_instruction"]], "add_instruction_println_int() (lib.linearcode.linearcode method)": [[7, "Lib.LinearCode.LinearCode.add_instruction_PRINTLN_INT"]], "add_label() (lib.linearcode.linearcode method)": [[7, "Lib.LinearCode.LinearCode.add_label"]], "fdata (lib.linearcode.linearcode attribute)": [[7, "Lib.LinearCode.LinearCode.fdata"]], "get_instructions() (lib.linearcode.linearcode method)": [[7, "Lib.LinearCode.LinearCode.get_instructions"]], "iter_statements() (lib.linearcode.linearcode method)": [[7, "Lib.LinearCode.LinearCode.iter_statements"]], "print_code() (lib.linearcode.linearcode method)": [[7, "Lib.LinearCode.LinearCode.print_code"]], "print_dot() (lib.linearcode.linearcode method)": [[7, "Lib.LinearCode.LinearCode.print_dot"]], "a (in module lib.operands)": [[8, "Lib.Operands.A"]], "a0 (in module lib.operands)": [[8, "Lib.Operands.A0"]], "a1 (in module lib.operands)": [[8, "Lib.Operands.A1"]], "condition (class in lib.operands)": [[8, "Lib.Operands.Condition"]], "datalocation (class in lib.operands)": [[8, "Lib.Operands.DataLocation"]], "fp (in module lib.operands)": [[8, "Lib.Operands.FP"]], "function (class in lib.operands)": [[8, "Lib.Operands.Function"]], "gp (in module lib.operands)": [[8, "Lib.Operands.GP"]], "gp_regs (in module lib.operands)": [[8, "Lib.Operands.GP_REGS"]], "immediate (class in lib.operands)": [[8, "Lib.Operands.Immediate"]], "lib.operands": [[8, "module-Lib.Operands"]], "offset (class in lib.operands)": [[8, "Lib.Operands.Offset"]], "operand (class in lib.operands)": [[8, "Lib.Operands.Operand"]], "ra (in module lib.operands)": [[8, "Lib.Operands.RA"]], "register (class in lib.operands)": [[8, "Lib.Operands.Register"]], "renamer (class in lib.operands)": [[8, "Lib.Operands.Renamer"]], "s (in module lib.operands)": [[8, "Lib.Operands.S"]], "sp (in module lib.operands)": [[8, "Lib.Operands.SP"]], "t (in module lib.operands)": [[8, "Lib.Operands.T"]], "tp (in module lib.operands)": [[8, "Lib.Operands.TP"]], "temporary (class in lib.operands)": [[8, "Lib.Operands.Temporary"]], "temporarypool (class in lib.operands)": [[8, "Lib.Operands.TemporaryPool"]], "zero (in module lib.operands)": [[8, "Lib.Operands.ZERO"]], "add_tmp() (lib.operands.temporarypool method)": [[8, "Lib.Operands.TemporaryPool.add_tmp"]], "copy() (lib.operands.renamer method)": [[8, "Lib.Operands.Renamer.copy"]], "defined() (lib.operands.renamer method)": [[8, "Lib.Operands.Renamer.defined"]], "fresh() (lib.operands.renamer method)": [[8, "Lib.Operands.Renamer.fresh"]], "fresh_tmp() (lib.operands.temporarypool method)": [[8, "Lib.Operands.TemporaryPool.fresh_tmp"]], "get_all_temps() (lib.operands.temporarypool method)": [[8, "Lib.Operands.TemporaryPool.get_all_temps"]], "get_alloced_loc() (lib.operands.temporary method)": [[8, "Lib.Operands.Temporary.get_alloced_loc"]], "get_alloced_loc() (lib.operands.temporarypool method)": [[8, "Lib.Operands.TemporaryPool.get_alloced_loc"]], "get_offset() (lib.operands.offset method)": [[8, "Lib.Operands.Offset.get_offset"]], "negate() (lib.operands.condition method)": [[8, "Lib.Operands.Condition.negate"]], "replace() (lib.operands.renamer method)": [[8, "Lib.Operands.Renamer.replace"]], "set_temp_allocation() (lib.operands.temporarypool method)": [[8, "Lib.Operands.TemporaryPool.set_temp_allocation"]], "lib.phinode": [[9, "module-Lib.PhiNode"]], "phinode (class in lib.phinode)": [[9, "Lib.PhiNode.PhiNode"]], "defined() (lib.phinode.phinode method)": [[9, "Lib.PhiNode.PhiNode.defined"]], "get_srcs() (lib.phinode.phinode method)": [[9, "Lib.PhiNode.PhiNode.get_srcs"]], "printins() (lib.phinode.phinode method)": [[9, "Lib.PhiNode.PhiNode.printIns"]], "rename() (lib.phinode.phinode method)": [[9, "Lib.PhiNode.PhiNode.rename"]], "rename_from() (lib.phinode.phinode method)": [[9, "Lib.PhiNode.PhiNode.rename_from"]], "srcs (lib.phinode.phinode attribute)": [[9, "Lib.PhiNode.PhiNode.srcs"]], "used() (lib.phinode.phinode method)": [[9, "Lib.PhiNode.PhiNode.used"]], "var (lib.phinode.phinode attribute)": [[9, "Lib.PhiNode.PhiNode.var"]], "lib.riscv": [[10, "module-Lib.RiscV"]], "add() (in module lib.riscv)": [[10, "Lib.RiscV.add"]], "call() (in module lib.riscv)": [[10, "Lib.RiscV.call"]], "conditional_jump() (in module lib.riscv)": [[10, "Lib.RiscV.conditional_jump"]], "div() (in module lib.riscv)": [[10, "Lib.RiscV.div"]], "jump() (in module lib.riscv)": [[10, "Lib.RiscV.jump"]], "land() (in module lib.riscv)": [[10, "Lib.RiscV.land"]], "ld() (in module lib.riscv)": [[10, "Lib.RiscV.ld"]], "li() (in module lib.riscv)": [[10, "Lib.RiscV.li"]], "lor() (in module lib.riscv)": [[10, "Lib.RiscV.lor"]], "mul() (in module lib.riscv)": [[10, "Lib.RiscV.mul"]], "mv() (in module lib.riscv)": [[10, "Lib.RiscV.mv"]], "rem() (in module lib.riscv)": [[10, "Lib.RiscV.rem"]], "sd() (in module lib.riscv)": [[10, "Lib.RiscV.sd"]], "sub() (in module lib.riscv)": [[10, "Lib.RiscV.sub"]], "xor() (in module lib.riscv)": [[10, "Lib.RiscV.xor"]], "absolutejump (class in lib.statement)": [[11, "Lib.Statement.AbsoluteJump"]], "comment (class in lib.statement)": [[11, "Lib.Statement.Comment"]], "conditionaljump (class in lib.statement)": [[11, "Lib.Statement.ConditionalJump"]], "instru3a (class in lib.statement)": [[11, "Lib.Statement.Instru3A"]], "instruction (class in lib.statement)": [[11, "Lib.Statement.Instruction"]], "label (class in lib.statement)": [[11, "Lib.Statement.Label"]], "lib.statement": [[11, "module-Lib.Statement"]], "statement (class in lib.statement)": [[11, "Lib.Statement.Statement"]], "args() (lib.statement.absolutejump method)": [[11, "Lib.Statement.AbsoluteJump.args"]], "args() (lib.statement.conditionaljump method)": [[11, "Lib.Statement.ConditionalJump.args"]], "args() (lib.statement.instru3a method)": [[11, "Lib.Statement.Instru3A.args"]], "args() (lib.statement.instruction method)": [[11, "Lib.Statement.Instruction.args"]], "comment (lib.statement.comment attribute)": [[11, "Lib.Statement.Comment.comment"]], "cond (lib.statement.conditionaljump attribute)": [[11, "Lib.Statement.ConditionalJump.cond"]], "defined() (lib.statement.instruction method)": [[11, "Lib.Statement.Instruction.defined"]], "defined() (lib.statement.statement method)": [[11, "Lib.Statement.Statement.defined"]], "ins (lib.statement.absolutejump attribute)": [[11, "Lib.Statement.AbsoluteJump.ins"]], "ins (lib.statement.instruction attribute)": [[11, "Lib.Statement.Instruction.ins"]], "is_read_only() (lib.statement.instruction method)": [[11, "Lib.Statement.Instruction.is_read_only"]], "label (lib.statement.absolutejump attribute)": [[11, "Lib.Statement.AbsoluteJump.label"]], "label (lib.statement.conditionaljump attribute)": [[11, "Lib.Statement.ConditionalJump.label"]], "name (lib.statement.label attribute)": [[11, "Lib.Statement.Label.name"]], "op1 (lib.statement.conditionaljump attribute)": [[11, "Lib.Statement.ConditionalJump.op1"]], "op2 (lib.statement.conditionaljump attribute)": [[11, "Lib.Statement.ConditionalJump.op2"]], "printins() (lib.statement.comment method)": [[11, "Lib.Statement.Comment.printIns"]], "printins() (lib.statement.instruction method)": [[11, "Lib.Statement.Instruction.printIns"]], "printins() (lib.statement.label method)": [[11, "Lib.Statement.Label.printIns"]], "printins() (lib.statement.statement method)": [[11, "Lib.Statement.Statement.printIns"]], "regset_to_string() (in module lib.statement)": [[11, "Lib.Statement.regset_to_string"]], "rename() (lib.statement.absolutejump method)": [[11, "Lib.Statement.AbsoluteJump.rename"]], "rename() (lib.statement.conditionaljump method)": [[11, "Lib.Statement.ConditionalJump.rename"]], "rename() (lib.statement.instru3a method)": [[11, "Lib.Statement.Instru3A.rename"]], "rename() (lib.statement.instruction method)": [[11, "Lib.Statement.Instruction.rename"]], "substitute() (lib.statement.absolutejump method)": [[11, "Lib.Statement.AbsoluteJump.substitute"]], "substitute() (lib.statement.conditionaljump method)": [[11, "Lib.Statement.ConditionalJump.substitute"]], "substitute() (lib.statement.instru3a method)": [[11, "Lib.Statement.Instru3A.substitute"]], "substitute() (lib.statement.statement method)": [[11, "Lib.Statement.Statement.substitute"]], "targets() (lib.statement.absolutejump method)": [[11, "Lib.Statement.AbsoluteJump.targets"]], "used() (lib.statement.instruction method)": [[11, "Lib.Statement.Instruction.used"]], "used() (lib.statement.statement method)": [[11, "Lib.Statement.Statement.used"]], "with_args() (lib.statement.absolutejump method)": [[11, "Lib.Statement.AbsoluteJump.with_args"]], "with_args() (lib.statement.conditionaljump method)": [[11, "Lib.Statement.ConditionalJump.with_args"]], "with_args() (lib.statement.instru3a method)": [[11, "Lib.Statement.Instru3A.with_args"]], "with_args() (lib.statement.statement method)": [[11, "Lib.Statement.Statement.with_args"]], "branchingterminator (class in lib.terminator)": [[12, "Lib.Terminator.BranchingTerminator"]], "lib.terminator": [[12, "module-Lib.Terminator"]], "return (class in lib.terminator)": [[12, "Lib.Terminator.Return"]], "terminator (in module lib.terminator)": [[12, "Lib.Terminator.Terminator"]], "args() (lib.terminator.branchingterminator method)": [[12, "Lib.Terminator.BranchingTerminator.args"]], "args() (lib.terminator.return method)": [[12, "Lib.Terminator.Return.args"]], "cond (lib.terminator.branchingterminator attribute)": [[12, "Lib.Terminator.BranchingTerminator.cond"]], "is_read_only() (lib.terminator.return method)": [[12, "Lib.Terminator.Return.is_read_only"]], "jump2terminator() (in module lib.terminator)": [[12, "Lib.Terminator.jump2terminator"]], "label_else (lib.terminator.branchingterminator attribute)": [[12, "Lib.Terminator.BranchingTerminator.label_else"]], "label_then (lib.terminator.branchingterminator attribute)": [[12, "Lib.Terminator.BranchingTerminator.label_then"]], "op1 (lib.terminator.branchingterminator attribute)": [[12, "Lib.Terminator.BranchingTerminator.op1"]], "op2 (lib.terminator.branchingterminator attribute)": [[12, "Lib.Terminator.BranchingTerminator.op2"]], "printins() (lib.terminator.return method)": [[12, "Lib.Terminator.Return.printIns"]], "rename() (lib.terminator.branchingterminator method)": [[12, "Lib.Terminator.BranchingTerminator.rename"]], "rename() (lib.terminator.return method)": [[12, "Lib.Terminator.Return.rename"]], "substitute() (lib.terminator.branchingterminator method)": [[12, "Lib.Terminator.BranchingTerminator.substitute"]], "substitute() (lib.terminator.return method)": [[12, "Lib.Terminator.Return.substitute"]], "targets() (lib.terminator.branchingterminator method)": [[12, "Lib.Terminator.BranchingTerminator.targets"]], "targets() (lib.terminator.return method)": [[12, "Lib.Terminator.Return.targets"]], "with_args() (lib.terminator.branchingterminator method)": [[12, "Lib.Terminator.BranchingTerminator.with_args"]], "with_args() (lib.terminator.return method)": [[12, "Lib.Terminator.Return.with_args"]]}})
\ No newline at end of file