From cc774e8f9ae2e4d4ce7a8f93b46c2483d2e92c30 Mon Sep 17 00:00:00 2001 From: BuildTools Date: Sun, 3 Nov 2024 18:04:44 +0100 Subject: [PATCH] =?UTF-8?q?mise=20=C3=A0=20jour=20lab5b?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- MiniC/Lib/PhiNode.py | 5 +++-- PLANNING.md | 7 +++++++ TP05/tp5b.pdf | Bin 0 -> 128092 bytes docs/html/_modules/Lib/PhiNode.html | 5 +++-- docs/html/api/Lib.PhiNode.html | 5 +++-- docs/html/searchindex.js | 2 +- 6 files changed, 17 insertions(+), 7 deletions(-) create mode 100644 TP05/tp5b.pdf 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 0000000000000000000000000000000000000000..2023fc1d49bc92e860231048c7a417b84f15b45f GIT binary patch literal 128092 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 Dass`; literal 0 HcmV?d00001 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