From cc774e8f9ae2e4d4ce7a8f93b46c2483d2e92c30 Mon Sep 17 00:00:00 2001 From: BuildTools Date: Sun, 3 Nov 2024 18:04:44 +0100 Subject: [PATCH 1/2] =?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 From 59197cf20a8652806090a32c73a2e221185b2264 Mon Sep 17 00:00:00 2001 From: shumeau Date: Mon, 4 Nov 2024 13:43:55 +0100 Subject: [PATCH 2/2] changing due date for lab5b --- TP05/tp5b.pdf | Bin 128092 -> 146057 bytes docs/html/.buildinfo | 2 +- docs/html/_modules/Lib/Allocator.html | 12 ++--- docs/html/_modules/Lib/CFG.html | 64 +++++++++++------------ docs/html/_modules/Lib/Dominators.html | 10 ++-- docs/html/_modules/Lib/FunctionData.html | 26 ++++----- docs/html/_modules/Lib/Graphes.html | 52 +++++++++--------- docs/html/_modules/Lib/LinearCode.html | 20 +++---- docs/html/_modules/Lib/Operands.html | 42 +++++++-------- docs/html/_modules/Lib/PhiNode.html | 12 ++--- docs/html/_modules/Lib/RiscV.html | 10 ++-- docs/html/_modules/Lib/Statement.html | 30 +++++------ docs/html/_modules/Lib/Terminator.html | 12 ++--- docs/html/api/Lib.Allocator.html | 2 +- docs/html/api/Lib.CFG.html | 2 +- docs/html/api/Lib.Dominators.html | 2 +- docs/html/api/Lib.Errors.html | 2 +- docs/html/api/Lib.FunctionData.html | 2 +- docs/html/api/Lib.Graphes.html | 2 +- docs/html/api/Lib.LinearCode.html | 2 +- docs/html/api/Lib.Operands.html | 2 +- docs/html/api/Lib.PhiNode.html | 2 +- docs/html/api/Lib.RiscV.html | 2 +- docs/html/api/Lib.Statement.html | 2 +- docs/html/api/Lib.Terminator.html | 2 +- docs/html/api/Lib.html | 2 +- docs/html/api/modules.html | 2 +- docs/html/index.html | 2 +- 28 files changed, 161 insertions(+), 161 deletions(-) diff --git a/TP05/tp5b.pdf b/TP05/tp5b.pdf index 2023fc1d49bc92e860231048c7a417b84f15b45f..132656003fa99f629e1377629365a4398b9da0bf 100644 GIT binary patch delta 58588 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 Wu9jAaY@D3DynKi>G?L0vi2ny|vtHo< delta 45910 zcmV(?K-a&C^$6VP2aqHKG%z`nv8O11)mmAP+eQ+8_pjh11y~%C&C`G%?8MGGu;Z*} z7K?=)7?jwOxaOgV)J&9M|NGX_-8{sR<4HEgzKG2}tE#^`Dc9OsuJzp`ck=xCkq1xL z@~qgmVi7x`?^)~W(fglVD~JB?E!PogV%^cK%JS0KanlIerFH%2@34>S1a1O=kWf7o9`B0VoP}67HtO)dEkCr zQkD(;uCdt_O?|&8Lti*<96dk|Bh=t>5rvnQ2chTqaeoy?N}iK?p+G6&MjpT+idaBz z7hZ^P@a%shpX;u;U3if#+YvukFO$GZ9WM$a5;b5WPOT*|7Vt(Ne18moC+qz(421p7 z!t?E>+8;X!vhzc`gcCwry&M*)oz*B{IFWi#o^{UcW2>fhI~0DUUK)O`8(i3Sa3`^S zL>AU~7itnTcWQM}>$^+r4Lp3;mi1ZLmw9|vmUw)_U@)wC zsV#B)0tZ_fI%qDDbj9U={;-Jc2Iu6^$&9EyKDe%r^2kc{?)zd9x^`PZZ>B&C$3TCe zgaQLiF0u1ryu8NqvlU8qu@qhmMglvq9Rb-nH>h*P6Ig$cS$@xt5;rE~4KU-m4yYR( zMaQ$kT)hk;i`13p2*7Eor|i0J-#)pzlHDQ5$@4 zL-&WbAeS_le?ifo|%Cc^>aJLU{selEiwm$IRSHZW>0=%=ut} z;=tD{e7d^;q`veLoNX;doH(8sUxY87gz3!js9dSgn>j#t;@WQ(0`6B4z~Dv>&J+Ow z4@Rlg3cydqpfrkqf<}wFLx--@nc-+DfC^|Xz1T^Ba-!v1RB1YgPGkzU@EZl7sYQ#e z5P(EDN>OrN9N4Eup&Q2T3ep&uUo|-{FE%G0A-%;O$>W;_W&+C#;le6?3hG74HfjPP z-wPct47Av8essgD>nb~RprfFlU2|~ur&)N0jvFQYZJ%#{9l&INwDIfWR@Sm@udkoY z?+UI+#POv~mq7q9b3=uRXh^pF`6%nI$jahZ`KGxA9hfH_e01s=%1}pVR4Z|WJEs1{ zFGY7R7w{*T|u4^?|O6oUxR9vbE^E1eu_t=b%-oV<<}&92a=Y+6;W%9) z22e@BPGLBLhwL)t;Go@+0#g&zz1T1>G_qrhgl)l(44q)kjJ1lUHF~rW5nc9)4Di&e z(S4u=5-uE;?eRv)Y5@3E9MJG!wq7?!>Ok`k<~8&J`=5)5LKB>zeD48-O7Cl4>)Ggg z_oeKAUvfmsN#wFrg|29CMIBTy{GddFn1IeJn|sqm>L;a~^h4V@AM z1C@zJX^5XbM8U8plK=nh zqO~f1MS2Su_zTic$Qp)SXItMMkNh+O9AN;TYBclC^sxzHM!ce+00;KqQz5(eUSU?Ad!W8 zLN(8a7{*Trs)T7CK_a7^Pe2Aom_YfsgY>|~^pGSEExr?Ede8AMb`lCU+#W8=bkL8N zi+IAEF-l2YbsVqu!xM*?1VkwkS4X~ognYWcisWmsLZVoA3^dK=NLWg1@yy+0of(y6 z{r#vni08S^JH{Ck-Z+>m{&L)Jnf#iBS#MT3ab>lJ1rzzhyZ|K&6U*+B(vZ zgrI1gW)6vMtISjikaMg7sBoIBSLEumS8|;&9R&aEkLZ440&d2LV1Y=*b44Mv(E-gEsRs;G+a%^ue{IN$j!Ym#4&$->cbu=6 zQX#0_4|9xyb4PWROk+g0=&pc&(F&4`-jO}lB650I3%6w{$ zsy?*uGLR*0!=)53e3&-$cf5)5U`ebn2=HG^sm{26V~O_jhlh?$ctI$A z%mI>iA24gIL`l@c9@=D@ly~p#GYc0_VDF?tK^;wbPb>he$-_0#d8Kek<;HBjhS!XSnEt}$9685gq)Wl&1ml%~LOa`_h z2`*Rr(E6uoUjP~l2JD<0n6yiu8f#LTV>crf;W~*obgr;}Ki%S(u<%R-=-Wmj$ojfJ zGQQz*_!n}BiUT%I;ZmiuKw=oqS^QFklx^3`6JANjhw-gCex@D;jy_F#Fx|>~q?9;O zpV1aIGN+TxiRTQI_%PDV2oum%)b}8qu`zfm$1AdjI1;<`W>_t@GRY6{}C z;&CqYthL2|k~ysd3%vl^uqYKKta#=-Lw`40-eOeVf_LI*26_U#lWVdwZAs=FsFMie ziphKsBlJM5GATv2DkT%BzZT&Hwv07%!Q4?ayyZKn716^)j1d$?PMSpH^nI04U`Ixd zRW@g@a5S|I%-pB|)A0ynjMnYATH_P#@W>@)R>cs13|Meqh7bdpn{;(`V68*NLtE$? zj`r8sUNy&Bkz;NP7Ox;-{-maK4L@bwhgH-sjR`ilnK9IW7|;G2)qAv!BKB0Bsdqe6 z*Q7FDR`;%tulKDy=FO4-ZSp~_8`IQk4z4C_t5k4g!ukBjGwSVmJVlAKj_gesHTaf! zR(cqJeA{@*HK?->`1o~9>+FT`w#zyWnlDVc9uGRg4Y9xld5pjhK8_0tBj~gDJwxxz zRz-d3ppNhBzTy3$*&ecL@)gj2GVTD|6Gh_-fBTP{>7w`3j_Ya1PaH=-<;QRT8ILb# zj`@Rkaho03Qe2wz|9%x;0k2cWvWttUCi%O6Z(yG1NzDNraZ!KFx{v5M56AV{|1Z?X z-_K(5@!1#fIf``Aae!7Z8L605eAi9ADT{U2er)QGdrZw|NIKt(vn8F!eGT4}#2*I! z8B7+NzsmYuL{@fD;daHP;TrwbpGK#O$o~o>)P6=6^S{dAU4OY=Ki?lF^r^j`&UNB{ zWcn6y*#b5f!T9_lfMD-+0S5Bo?eT}(ukK*(G1BhXMyVVI?F&VVzsIu7UCS3+&WAC+ zoI!~!+dok?FWaiiuI)2EoocnUsvJBFp67RT5x>2bJ=~U0q`moL@x?iI{)Z|shtpX= zUvPpKLanc+J9B?3jeSetKXm=+|3TA#G`jqM(DBE0AOB|-`-%Q@@UbttayIoH#Os`{ z)?7u&)n8{}?9IXx{B3~pFaAD$(qL0`>r#gHiJ)}`1a++zs}#{!1)wE;e#>XK7D(Cdg%nQ{om(VK2bSW)+gImm^7YjzjQ!$JX8#@cxP)0|pPu2YXZuJi&-QG2;u|17y>d9Sul44* z<@6X|0@%h6`qO7H`%*n#oxi@A0wF(fRe!Z$}i= zLo6zPwc*8X82HwrIC}q)SSgJEY!R2ok##Sr3d{4U%fbMjb8C9^k0YYh3sl69BA^Zk zk2!o3#(i$BZ>*=LuC!4?v`HK=X_JV+V_=1px`FR2yNJ9Nl3#NejJ@m+M6fEfCa@|t ztEQ{9NC(R%KB(izvB42y`vdXGaBMn4LAVT;{M&B!v9)dxTh_w`-hr8~mz-s4`Jx+n_cYdY&YVN`w?}w zZ}L9*et=r7t5tH7G=re|O-E+sz7x-$0Z{Fo(}QzTp45BAeG1?MvTAv_1b;#f`-9xd ze4qRjd7XGXVQw77+UJ;J_R3+z7KT|U<);#T#}zz;7k#LQN?-J`lpQ1ya|F>RyV71GkF2 zD#awhFasligg_~sLfw2T6h$F_q>ig}B=@rr_z$V!e^Hgo9L}p}RXJPTW;Hs9LH0m! zN}z7wt<8&#@_lRKapF?y_x(|TCa415+M%)116P7%wR$n%l3hvQNo^#xrq-5{69rCy zy!NjdD(a@Y)X*FFM0S?UbD_6S%s0dcV-aqk1JBGbFyaeA;07Stmmm>;1}!8?W6o3w zg_cyF!DG+9aG;TD)Tyn505?+XTtPk6>@KB?uRDsx%AmM!mgKGTBL%)7ELOQFM2QqqcQ{p!)xCgy9=3+M z{)PA_myk9}QP~KWnp-_sRCS}Lio5;r0P9wj1l_*`zg6RL>xSNwPfU{-45R&{NvfO)QIs*Tb3YNG+MY;`=Q z0%%d$_6oBVH(e6XU5p3~l^+Drtp}-7=S?DidkI-J;!RL%B^0skN?>MD6@?5{TQ`Ar zJ|t9Ylt7`w+Iuy5$m*fFtxB%$eBVH=_UaW@nDTWpDFD?!BDA5UpVW0?#@FIz0)0TW zPy=<5tQ#|ziuvY7z3esmlUnFUO-#lnP^vOo$y#oTxljd_X|!OpNFLNfnk|>o#=AFv z<=Y(H(+}R%#IDDpHaTHV|2a&(iE}Hh-A?F4onI%nGoX zUi;Z~-N){Fe{{Vl(^UXZ{WlI>koI}LKPz&V-8@V0n zi3}dLt+PLlQHwGWQ zq`w8sj&5c6_}>#={Nyf&>S7lnhv|Y*Esi%}fgYj@cHG-)umw9F-RhaT*zR&LE?~E{ z$P)x>lF#@-T2Tu3{v6*8c72z3qmaKFNBNjRGEz|#j{nmHbIn&VOU?DIqa zY3v0DWurd!j1Gpt;RgX`$HY5-yFANz{O3DQ^o0O7Ds_BdRMeqa-fT7|DC1jF*V#=e zF9_w>Cxh9RLVQ}SJM>Les5gd?GJk65uRW9wIbL5@gwK3)0F*YsVi%t>-{9hPJ;*3vl%Ws0h(Z_ zp#KAkt`H}aaVZm%kr@*NGdVIcld-2Lf3;fcZ`(!^|L(s+=zXDZ7QMTC=Po$7iEE@t zo7Q%5cSr(*5-FJ|MXDl|*mvmve)HH}K1|s@6h+`@-#fcA^P9&~%r-MIyFB^!=H%=< zDZ^Rf$}k9LH|trXW>Mg|K_F*0+3ceexbuZ{JorBlfpayN&ILAHLgC#tmTpYbf7N`U zl<%Cse?L#04{y%rk#KI_efSZZ1Lyq5w^#_BH}lB(@b-c$KV8kC@59?)aDg|l5={tT z=6h&S&iS{zXn_4hgYVF;Kfu`YtGTCOe_HB^%(VO(-fO(n^(H+o_}7CHpdH*p&NNI--^E2XUX~7u$q@m z{wGj3aW%mcw3xpmj9>H*YS>>EeVI{Og8b1E>U2_ug2_cZy~tPqz0)TbGZZa1`Ej8( z1eVM4Hm|bVeO{(*QCDesf9u_D)1vD2WA!$qpD`uB|IRn!lTP)|@|iT*sG<2i`woUl z;U-BOp)v|rCCO}|gc~W1dKWm6#>H*~ov5;|3S*d0{r{RT!Wdx>{s$oOJpivo7&-5# zajj+(@q&{M7w$rx_}Pg%SPVT2c3xY1}HfA`Q_dZFvVQgAhX zq_x455mOfRN5-z_Cx)(fbD20*n*$tz+{Vs2-(w5bs}(R5=yEpPDV-DwyE}W>ZplTY z+z=LB0Lmo>0AU<%t$n>91EaAC{@XUaR$pxe*%>dSKI`f*zMcD;9 zYd*XbPD(djDhxqvz*M(9gobO@EDu;I%9d9;G)1-1x6qS@f071$nF9dh>UqXCj8l( zA=HTI(TNW<0K&8e2x)C2G}aIc7r=GE$gg+B>W*b`f19UO^J-v-&`FWei1(jBB!{Cu zE&?zte0qCg^iS@Krfs;4=h9+6pmWvNi3#>g@I{qne=&&!BDDN3Dzlx|D1Dpg6+K=Z zG$%={Xe=j1BaG!s;7SSgjEsiK|0|?J6A6gtS>#j`KoEiLw3t~IUqHgzk4x>E6hjwd zYyp)7e>0#Ac!f`M`U8d}GU~~@)fpKx*STnzE>V+E(%Y9Y9dthMpJRG=;YDS(BeK8; zHqw8D=}{6q!*po}GzU@;*#X{||C+dZSn;js{8a^UU`RhI7?2HlLIjw}*#bHdn`DM>GsP=L}#Hy0Ymsyxr~>{O2+_o68> zg66T+Mw>z41M=tz=WAgM$VTr}n4Ri1(`82-0rC+%cgj3;2tXP`IgAq?UMmyz^e^iE zf3=S0&d&Jv4SJ`&*pRLa3lIFW)KStl-R*MS)zya-w5DaZcDP3gYL^ z8I8}$u8lb6+Q0>nmK5#X#Ga7{?zjImrf|f^hbzc|)z?VJ;o>H*a&`mTuHTpyqOQ(# zXVbLD7FJGz9Im|RjWS4=z#-5?13v?uxA+dFe?O0ygcU1r!LO)2SC&XYbiBYC2#Z;W4KyjrtSMR~XRS-H| zU!PBzHW=DD01(3vjAjj=DVjXuPa|-7xpr?$y$6@To=(XI#y3e6jXWPPeR+x2 zLU@eM0%E|2-IT5eKx<-YeGBUIu|4d{{NuNni_-@Dx@FyNKbwZU{dfbxP`yw051*&Z zJGk^N2$flwm`Y(4kfP(ph6%L%hMp#GM^x*Gi}DhKV2itLv<8*515*rVe?iXFD4rc+ zqLls6L@M^c6o)1}Ff>^b8hzXgCSBD}6UZlOz*=qH2@$7}katSZo`=WKZ#rg0w8%pR3;vbxfj zww#kiov?l{5Bmep6;k$8f8?cMzC_PVCH;(#YXU^i4U%w3(ZA=3;Ik(lc|TmzcP|t0 zTJ*&x7R7M@`8?WaQA3`hBP|m(4ge`ag^tAdur!>*w)$7Dp@ia89j{{XiNq97u}PuC zBWs7h!-Np6!%J%|D)i)?2^>?C-oq7Ft8PPBJJY_d^xeew$BCZ}fBST;c0&g~W~W6a zgT(d&YbmD#8e>!_6Th|5+Z&_4%(|0WcgU=ner-(K=PZjt& z39+;{3(E4qJ$#2PXEasdQAQIxz|$_e#3;!w#SYLl&WvK)Ih22zV>XVe(?&yJXytcS zV|jLoa-BEsZqh7+e{2WVF0VUw(G~_n32eMD>Vb{vokI9XP=Z@8x>%5AHB+V=Yj{CU&i2FTX z;+)K@XQOt^QQrfy0mn*X_Ei!&cU_VP)2(_I3MgwJc^Mizf8(BYg7Oh(Gw!hWj;o!u zgGzH(v;UHDeW_Qgmu+fp*aoW5KJ6-c;D7XRFIx-WT}?32^ZF@wLUfbnpu5m}(;Z}k zXMsV0XD(7R+=FP{2bX4`Z#b6Nv|X}cDth7JHhthiR;<}zq4G{gfEPFY7a0{o$e$>D zk@@WeoRfsYe*-b=6{*Wi(G6$swsQ8iKKU8`nXUyax9F|MFU0W-Pa#3k_#s}Q_hqCQ z1be`6*^oG@X;cVN?k*F+fCW?3?YN5M9ciKM5T>jeKMqjN@Re;(&QzPL)Tg zmSLV6u93qT%2ESF7F!GPCgysK(-uF8R5o2s>s)un$6K!8p3Ql_2` zWETGeN!T}Y^jgZgr~CZ_4V)nTh-Ez>AnFlJn`8-wfmBOv5|=etRYlv)?*tkO%Un}n z;|+zzqpbHj@hu#kM>#a(i|rGQyX-kt0THWBRjZrtVH=z^LlkzM8n z7?3-Zei_+=k)Sme@4MqHqyS>Q_+^>ibJ|Y^aXsY2kzFd20eh%w69h*JAXZqMTC#tNX3tx`MRGNEQ~qsG<0M&FflgPq2MtS zCpJ4Oxh5A%4t8c7?8K@Vmba8=GBG8#z$ta=fOH5vJ58dQT5Cy8`k_VO_uorCd16Z5 ze`A0%EAAD5JZ%|wS=qeeZSwn~?b~;~JEjb%(0f`Xe*1>sbR;yNSfBt`N30$3RAeTn z8ShWH1g%Y5ccDWvO3LOYDA0Btk1R()GKbzF1biF?KyllJLk+hq^Y-gJ;`QhS588NJ z)L&9w7Grr_?r0JP7$ocF`bPR0_Eaize;VT$Vm>G5eol z&X4RH12gonBQ^%vZN9C$hyvpw`(Q(#)ex{-S9PJlR~6Azq*6UL7M?Z$S=L1&O=l@| zJ`qv0&I&|wtKv^t-DhBOO~;8mVv9B7i)P0e#*%_&=q8*rkuO3eG5;0E27HTMf8eRj zGS0IM#qw0x%eW;YUxRMT$cW=fg&HoWO;fK5i@MlE=H_h7!GN57{MaGYQ;lXpF)Q?3 zqkm%(;hMa8Ae<`g@<6D5fXmS3AA`%Z?8^b;_#XhiHM?IBKJ3VZYD)tRU*^%kTpgCjnQ*J!-QLxN9lJc-K^6lSUw^} z*kw^baZpCt$5D6>!?eF=oGImS+DcJGHxZ!+5(1kp^E&y|!B02C=kKB0SFxoJu=66ga2Z7?hX!dXQn$%^OaWb&xk$ zYZ%~A*6C=L7Z3{K?3X^jod&{BFueTW%^9F_T8 zr!}(b()Uc#M{6np&!iKMW%Yl$Q+;l;aVdow12s4_ld-2LkxvDG$Ps>@U!fomp%9B^ zv)Mch?8B_>9n8YldS-(Jwqa0IOGB6$Atd2ocXRU&Jb&U9V?JI7^iDl@hb-)$E<8{P{w768=|#^4`vc_Z%xO zpm2GGrE6RDcD@LI!^k^-@nW8Nub-aJlfb*aeEkZmm3RK?85Uyi={)gXKYPv}Z{E(K z?e(+Yae}8X6Ae%>@&(j{-ucfwsls-WA@XR|m(ch8?OcYiKFxoLqFp^Q)6P{qZ2lQq zpK$T*^NY)?>*sHcTmx}&S0KQL>tD~FU!VPPCO}QWOpsQ8qRdZXH7mAf?>+>x71aMa z3w)WSvs>!5okdFcVG={Rnq8g!b{6#2oJKt@r?Ht@e| z12o=fJCDdby|LX}D8N)^rmDiaroh<_WmEe@r7WVvkAmDer?OJ3G`#T9E*ASk5S za>tyj-G)EUK_oNDL%P5LMN>7Vc#DlCDUmCzK5-7T9XkfsK4NFwYJm#m^Pe!21sG*! zjnWv)J6f}>H+#K#cXxO9;lqUa2pRZ^%B=msU6e|&h&P?G$W~6*mXRN*(2ngbH?dG0 z_$m~CeLIzK=?`WREN?)6ftT-Y@Kafhr5;SlHLTymk!n#Vct|*MiGXxJnDJCtp+K0- z-4vhZe;=p-{)q{J7cz}NyevL+MJAtzpX;Byw&v8tfqF81%3>WVs_Ji>T2zOT(9y&?yvW{z4_Rz*Rbdp_9p;2 zqyreT!Q2RG6m7Ta^xd*tIrmz37}ByaV`EcW{euR>%nyVbS|^IsY6Bl`yHH*=#SyMG zT|iVU$~{I5Ywh0v7}s`cnRq&H?XA=;Zc-|?ae_q&R@3nBk~UmclPVX1?~EO=ttmc# zuFB#tp;{IBQJfAi8Rp&*jx5nomIPv>wMzsGya5Nz70p}*9-^^@EUY9@#XUI`mW&{J zyK8tn-x}T8Sr{B~&raP=oDJa{_y_b~Xv&c@WjaEk6nMSi36gmmkwgaK<;4w`4jQLH zIWl%VSWR%8C0;>`7oYgcijTvJX3r*n*Y51pXhkc!`P_l9z>aIUn73_Hl(_|Ur~y=E zIhxZ&SSy)vmSG+h(u@ICEN#EQ#S5PI;i5atfrua-u+do9%?Y45UM; zk^LvakEHdO@mDSY7(;-%3W1|kd52mz6B5EzlggRw%d#$?KJ|C^69Ptfr(@fH^OjU$ zoEa|U%o57&))+yGD#sf9Cfm1~1pTUv3{NQU*iHhs0HCt#Ef(Nj7NkL7mVg?t#(qkV zY3gSp>GTL7t%fQgxsLUz*klf^k+?m=y+lK?G7{cR${EDIN}Yq*=AR4h$x z0ajSB@U)MYz^{KQnw8$@deOFj`4nPDKqJFx)96Sf3;}b?vNRzt27~<+F*Ah4MapBJ zyV(Iyvy5U0Ka3p>`1^bjrx+o`35Ez!1Uw(hmsEdcTJ0RY<)Y9Rf%8g#hOH@2PEvCv zV_(L}n3^lFZcEMM5Lk2Sn7Ijj(t!_yNnk24kifbFDH3xy{hrVxa@)IqnnQRpw9O#H zI4K1f07h&O0TCDQ^c-!rYVhV*BKw3rU}=f}j!c?B7$>L?f0`l`N$AHQ#J~(L5%ylW5|;AH}8rf&GRXtq0h1@*yFjSQ&< zUVure5en%i(%rx-wAu52iY{=o_sN7m(uMpI*@*Bu_Q^)W3lrH*IJQVZmn3Cw6f!`I zh2a!2YEh0ZQxB8rWXQ|5dc|MHqbx#|S@O~&oA_CvL>#Rc&WUyas3B884FU$}wL9*2 zO=~_Vl7ipSsRcb1LFtO2@y)O>*xk*kEl*N49{~;p=?SUUt(oh(~V}oRSaz&I_E{v z5i>vyrcc;HsvQOH&I~Qx=4v+u!P@aaR|x7&h&7?!7??xn^}Y=b;siW~8hA2rlLBb7 z97PMi&w-HAmCJg;QPyJ;o4LER)V}4uIR#^x=r#>y=8>6y$0W|dLKgI5E$T?;(5*ND ziXj98iF3v;%H`vWJ-`Xu$7$>v23?$70dehQYexIA%*gC>f~1yqP3X~{$rjA2VdA+Ybz;* z7w}tdca^4)l?>SEX&4S5f<)N^VZk8BH*&0#Z%Z`lR20cQN2y*qci{ z!4yjB8A{J`xBN>u)Hxajm$KZJ6(SpcSVJ~Nx^FOlYFgLWg1QFx|Cc#L)!tx@)*27T zqY8s^Ba98_!(&-CHe>;t8~RYFsOZ=oGPVX^ z>s3E@dU7QRp$*{n(i&~PwF%T?UGy`dz=|lN47TKFK(I)%zs-pwlq*gHfR))@a|!?| z^5I>7b1;^Oj_D*E#*{T~39O$k8o6Hhphz5ujP1z54wR5RR+KoP4;4T}t|7#(T)qNE z+wh3b(o}HnC}A8sT3n{P;e@#{8#?7RFo`jhwmo(!M~g>zh(=SrGi1lv^JeH=`z~&& zO}Gn!oDbW&s@mT?caRyYZ&v@pWgdwT<*nT`)bt$uu*$4`ij(uRd;< zdU$McILKn7xCV6+p3Zf|3w6&UmL^$$y(+Cxc)4pM4FO^-1{gLGop95EDd)E(Hh@xP z+5a)C5lv<_!c;)8@xMrFgsJr7B>j%0#??9JF)#yhN4x`WstNQssY^&?dDV*R`MmmB zk0}PbP>G*_3KpRReT!l4LdtmPq_ASgSOIf?W>Y-2+|ZFGBZ(u6Qg%;ySiYivSL1X3 z(6A+Zor@y07nPpN!4S*KYafR(Shxb(dYrnq<7Ps>68c(6&UBR>cVPHm>% zxs9v)aWVuN<)*fdn7x@u?PcbFF8sp}R8WA(=TuaYMEwNz1G0kIDz_iARBr5x7dhI8 zSxlp>hH?MW#QFM87bfn6+V^27t&JFojnhDzW+J332G#Aq71245my@|v{K~F*E z)ruW$82NELB8V6OinQ}qSgy%9j17o1c4&!>;N}-ZbFmkdfL6LDo9#A#WKocN6`4eC z+!5<8m1K|>N8dI?U9?#TDOzoIkdiaZF>TJmj-PCK0`fx`tLCf!c=+N0 z{l-ax3Gn8rNQe-Ck%*w8U8Cno0!|B=aE}OmM;KMa%#`bMhZ#J@t~u~CKQhpJ(`T5s zpcDtp(pp7k9)|#m_-oyNxZ|LMIk3w!p2|Ef3krTZ(I#KgU_!D~)nhQqv3vE9Mv=`w zn$nuxHV_&PEG;)`EXy&$N#itv>6uPN>ti*FB6_nwrN2v|H(Qcs)qCOU<(HP7E~&iglQv_!8DVK>AL9aveZWJphCIQ_#8KT1b`jnxk(`ynA3INcF+|HjD8#W?x%rf)M&cU^n7`A-)8i3t-U zvj;XVTdVrDiLH%)`?ayDU8JawU*4bw7=0A5&Z#q)TvAL<)3wV^!bM@`1m^ zgCX5vlGPo7_${P0StXp*`r3Zu!@ zauVxF9Qtk;s>#)2^4F3_H%D@%j>5SElP?I@3CTa8BR6nWoOW z7pK$MbFN;$`w6>4=k%wS*od4L)7W|U@{E7{d@+TwcQ5~f8@zy>Xh8@o-$0LcPM`Cp zA&wIafkUUhg}J8}Q(wdRwEt@a?ed9iI}M}$@N*b_%FTOax;YT@h znDAv9IrDYS9Yx9Gyi(@Yb#Vi~%S~Rwr>UpfLt5$-u;(ddR@_d1Lwg7kcmq?nxGgvH z61U8nqLLG;<>5)2Y6^d8CxP>>!VUK81%tQ4qw{)?o$E$UE6o?NsdkL+yg?>RW-1^; z&45s;A=JEDH@Xa|3uFuN-xLC#V_D1dM^E7KP`Yuu-r z8(eGdEzGy%?}itDFlj0|S|z}Xnes@^66O)it&7bTX3@rS2+~P8hT;H8fl$>A0Zo|9 z5sQL$E*Z!>;>vo>JCs$!jXOXwaz434tubO<339%QoVp??_RK|Jg$(VCHu@tA1uLZ0}D(Sxc0RmnU%+7EdPwh?!Yu48gc5dB;6D>_7l*+ zV!|8-S!0OJt;Sdoc}|@b3trXH+8TESIgSIrQS~RYbGt|>V7Vw2*xsyDd!H+B@|2Us7e_ju|rO-+S%1MXU2=nKvyAu#}xwXCf|@urvPypFb89FA0FF0 zL}Cf+t(^80nl*>FJ0z{wr`Kiv>mICck*$k==5MRpymq%=MyRcnc0+9#(lHmQ?__JX zYiM@vuqz;~s(5sfXEN`u06IWR3q4R%u)nD5ea;%sb~gb0{xMC#4eWV4oSqqr1}i$- z&#R7q0TiZ~DJye8XNtI~tZxDVCg9Z}wPu1h(=1}_>n_bcZjfkW6!Tz7sw~M?#T>Cu z*c4`;$ce$Pj6ZeWaD)6t(lg`r2xJQEifUD4o9%!N`ML`Z9Nvk%LO1bKGyOVm?(*DV zpHS$f!~o6M0ue0qjhuJOWlgi2QA9&GNFuX;HMm0GQ&zrl8#c|nURh@vJ7vu#(obVI z@Ks+j(K32^+`z;B$OHnF9DB}_N#EdmzsEyC14oL0Y5}J%jJbl^ z4oQikOwt*1K}Xv40F53O>aCef7E&S=qkq_3wIR`rzgHPsTWn|7 z>~0$gM6gZFSZoT?*tJ-N`$LctBd{py9~CBWlrbA&V!;km=Z?*I(-~Pwd$}i(BHuBh zcVXZHwGH=f@-p9LP5!aoWV?p6?}#mb04F@O1#+<10{E5jXOWYHSvQ*5UlbpQF*?xR zin`j9aEdMb9(0BqNV*#{DlQO34&YG~oShajaRzRUrNZ^K|LMHm-a#w9WZc!;m zzx(bz-NSeJ+~I%hPe^4I-<9p~2D0=U`QWSy$754R#WXiNH_- zXJ@i1|GZrn^P=HjWwyz=MJy~njj>0iK9I}qa9+!5z2=Mq&VNcZH4hwf2u{v(BhOEPr4Y{ep+DK(OpXnIU7Vkcv-3b2wNO|;hQg4|wBfkwrW3u?w>3Ii9Z^~zK=rKQ__~BQ1y2_DjE&Z9 zrl5^KP|mOWHV~sdh0a=Wbf_d5X6WGSVS0-x8>YByglTkt(`A!{h91}?3i$;;Df}?F zY1i;WOzwHs@PB}ye$?w~&^a~mx}`~q76zxb?Cm+Pr&#vI;}gf$jpljI*;68QUT|1< zM46ODIp5Y#Ionp~t9axb(l-a=62ji{Iqg>msAp+T+VJifS98;jNTiUVW$l{8(Z)0K z&v!7?#^Z^9th6@-nyXgb-=$%1+AUU_%&&VMCETbDg921lLVP{bzCTi1#ajwKZIe+z z?y`&j)0A?K1>Z}U=w`zU`uRLvbQl7_RLJR>mfhVubyu9j^-vP6qQ~S#7X-gc8eiL* z_3*?kWl99qqMFg|0`)H?G-(lN=VubojL{1ifFv;nd(Ft0& z)JR=~3gOM3e`=qhkJp!w1-z!em-P1q{rxKr>xaFX4PQI%c{Fa(_nPc(RDygS_MMMR zQqTIGa!kLJFmeC|AJ3-rdH+j)aKM~b)$YCsCeP-p-!5Xh&35&Dr`_H+h&AkLe}BBS zpJO4e+WnSMUU}b%2V8qP!m)u1dw}HiZvMZ5e!I&Te_tb;w_~#T6__5C&8N@CdXG;3 zBa8A^f%ar?49OuHUy0Yq$5ka(2Wy z&Hf+ge>2pP9)-S5;70M@<;{L~uTA*oA_&C(uJ)n{1Z|KYOO42XOpYFOqWwT0=IFg^ zicYE?=wqq6cB3?S+QIF53RLRGX*{@wf2`U|MaoV?W$wUwNjM%`4(|3t50eT> z)L{B`Mb8kRTdukw#0Nkkx?rH{rc6-go~v6~mpL|12sOP-!l<1xg^-_fV1LFxhZkx# z)eLoeOCGAu9i-wHItzoR00ZOQdpCfB-NVppbg#jxt-Zjl3zk886ZCN9DHxUNi{tlS ze^mD}iKi{>ReaHU18iX-KT?t#FfERbhh>@-B%#IygW74!9u$3 zEW#@(`kAHX79Dg8Z&Z5XYcDnIH74m?%2$m$E4!!-A!W5~%_rwh6egfQSH^15d&@Tl60Cd4oa+~gsVWwz~l@n1d23WrK z?wBVQvPElCLaqZ8yILw!0X+ib$8<^H#ws0p(b0MhzDQs$k3BGRAte6p`exX^{VGhl zzT$xa6YIkpYT!)KzKmIL9br&&kO!1hVK{i%);^3FcU#KC>*tu?F-3{1kZ>9Zf2R_; zjImfIU~*Hs4|H|=eC6-cS(M=O>nO$oMnFXiXuqcZOBpqLbdC$Ot33NQ=?@S;gibj6 z?pe`wLOOi+9QxY6dyc?3`H6k@EU(IY_gsGD`mhz>c1bx`#UnRNiR%Xzy|+|Gq$e{{ zM3UPuFLj#S6l2CjVHSha4F+P!fA8~h!@IsE96VVVyy!5jmbR2`S$yq==w{l|sCian zpVV+|tov};kL1CIdF9$Z_So9{$Zb{AswWS>72IT>at;MSo*OD<-e8#>d)~f#dG<_t zX5%-=gWXt=%N{O5DXdHu>s(+r6zZ1dtlCvvB^2$lw5sUeMkW@ld-2Lf9+XYZ`;Nae%G&b2A@X;}g1j|MY zTHk}bsN`ArK_aC6B`*Pk0*|_8 z%+0WyXgZ8`qS{&0dRh#da$E@~)Vki!xw+~Xx43^UbHC}JXKRv8x;O3O_p74Je>%nP z=trH@Zyypud2p?d&AkA zIU^#rooT!C!HNtm@gUnD*B3?I!mIP_Rd$p;#{(kmImX(e&0OwL%{mn5KSBwM;_7y?e-13POfnO;to{)ct6|2<7|Hyb@aV zqv14Z*N;(%!INgioe{l-o=*v`uKsg%M zCzE_w&^(kO@HHslDw+ql?8S%X2{3j+};If z#8j*9Xi!?;!XBcmwsVdUCHuJ^4^IjlZty=ir0lf#(A4XB6ACnTj_q8LQ5{aC??&?~?92I;RK%wb1kFO^9m z;Ud&Wrh`bnUo_=~RQ+hu3h8>$T+)K?fqi6A!ijp(Z1C_g^Oz@GDO_9qhNG+$UmG`^ z{pB;hh!3B5#&OHOcgCaplr#Ra9?vFx^ItvjaV}`Is|O!~e_qUnMUC5RUe;q$0-06P zSyyGXuP^I-a#aqeVq9OI?d(A6y2!cOIbc&hIe4a}HVPMa#kXqttyJGgxwEP+8+s|W zoYu2~ClFuqY0>UNc5wRB-tp152gM)xud|b)F5h8)%6i&7zshTrp@Zyoe*1vUn(y5~ zF&)>P{4klpUReY;dsC@h?>g3l@~-9=W!!i%pns z%8&VV@saJs>|uUgj&9&K?F6+m@TtR5emQM-nThsWe}|{10p@vXkYzQ0J5s8xzK@!G zR1Wv5%TYlRPCgy-2}n93R21`vr`kC9X+C*Xl$TdcyAtl#6xY8}l=IQ6cGQYgjtWi5 z->IjQ9atsxlAi6k8gLdnt@CO+;Zrxffh^R(mB9)#2gUnxSRB9Hf1JFk46aOuzv&@f z^Jgo=f5neM@RPy@w=uK6dN&?7U{~CJp81**eDvES_!TP6p9=+lQS2epsFQ7Y7%f`i zwZp*^GOB+hbu4F#l{B(kPAgrJ!e6}qpI^Rce!(99s}qb;`s>Ote~%Q{`FEl%BKs;CYJG=1)=y@n5zc9q)|nr&kE8it_5l3KkKs3Kd60uw|)Kwyp7MSkm;7)rfcLnofjLf z)%VG4ih_S@?4^TrPW6(Rl!W&WlO->bL{TT9uU1>png}Vk#5K4XC$%N6wJ*cKrW2E~g%kubGB`7n zv8O11tytS`<3`gg&A@@3$=U)oi%bwuA}te^NJXT^QNBKP zY0{ERFDAe~*y>BMy1S~*sp^g=t4Tchc=2w2arr?hKgp!>&QInKlSEGvXQXp#GA|~- z2q&Yd5*Gfu*ooQC^VyF$aDV;j$9rh_OgV9X0}U;%-bGWbt#CL`@>ZaTxQ&#!x{Hh! zbChu6`VL0!zr~IhKSj=;PQQcM@3?t4`*?jnpWSiq>gFcO#Ha7Cq9g`kC14ZLuk#-+ zX7h{RFBBXpo+vtj&1B-;WVyNc<=1#p!1xc7Seh)IJd@OBVx5vY@z7pR?l1m*5g(g> zB(+BtNxjUhog_+0?;KkNj-*8nJ9sK#Yl#u_u**rQE4 z9Ma-*>|#8@<%a~Fkakj?7CqUWO=O&yUQ$YO7pPUy)M_oN zme=0yqG=*3oW#v_Wx*SG#*s%DDQg~oXm9|x*;P&5j_pl(>CCX=bjl}uy))ybSA*QQ zBdVN?P4=Q_wad4U?bsQWOzq#%R5Y8nwM|W$N~hFh3LedRkLGBWV(h%BwDHk#+ctk& zw|7#%_$}W>I;NQLnW!7|xlhHa`Vu*`H==~sOOI8=(!H#AjZuZJap0AloY+-=%l#T- zZx^MpKoofee&pbDu_ziAubYVD4BF2qUw15!*9UHF(bvTTi+qk_y$&k6hJP0&&!Hv~ zE>R7|4k~@5paHq(Nbxyw6htV_))D^E*uE|Kr1sddQ)R7G5K1SG*yM;Q2XODowwo@S zqFmuRICA^x{p??11RXJAK9vA}^g&m!UxPb@%^jK^c{?5`%5}fdFOl+eGKO%$0!zej zQOdChQr^n+Jc8b%(R2Vmni}BufbCu6#j2zc#ioUsC4p}F#JvuCc@Q~(Ji&0k3$tJd zo@(g`Raf!^ebsV1=bu&66k!D-ArlJpg^CRHXg zICfVbS~&0w1LcC-iyfGMj&@2++tMCiMDqtCYr&-TPpZX!M3`j#Y${B(|keM0{o-}>EV54c~5;6OuBipxw6OlWJG>2r{ z|I*qjmRXi2s5zE8gDq<#Qx!T&@+xnQmMp4!(m zejjFg9YzIkqhNED^d(W;{L`tFHb; z1oP(#*u=ydX_oK=Mu(%G(H0?oz2<_J3E75a0F=keXcw4&*NFib{c13#`Damfq>}P0 zsA4Y0GvFb2>}{H9`igFSh%!5l(>Neh_Xu^2&<_z7h@>D7xtbCqwxLE*E+j=Z=4%JW zgixg|>-|sUU4IVVFlL~9&9wjxQy_7gv!}d?v&4`MhUF6vR7YWbn&bh$UJan#mb;eN zB_CsLlS!9Z`WpV;`|!NrE@|BH+>G{F~Rs(FJx928XhLko(1+-O5M~@TBT(h$IeaperAX ze?n!F^;msooTF|m=2!hk9urQ5dOU0#;mz9?G>`F4s|ZwSby zmJhqj(em{~Q836)2WDJAD4h!`sDKaPl>s#w{iTeRrH#wC=SV!77s&qtMkFJ&lVc|8mR%N*MKs)E3ZOH`J9k@>noH(Jv zbW_z`FS+B!BXJQF;4Z_O);f#)7WWtY=c5}A7qj6ICo$GNQtdxnJ<#K%nAjr5s3nek z;@+V-zMzEr2Twf&YNVMh-TqcpeqszvC!4W<+saU9Co(gkN}ESeK_9l|NG{hJid;2P zT0&YKxtha8$fRdE+~|Z869zhz{51~w0VX(|GiuQwRj5C3_((xpA|A1Yk0c~XQMd}C zoIZBkA^&c|OnBwsHA6vzV;ntChdGkRN_H~flYv?Uf| zYZ#2_{+mrzSDSoIawCq!B$*B`33s!r_qVg@{r#2P6k{m~xZe$)ZY>flG z$@#)%Yi&ZM95gNVtM;|dkWtorZH`Y3by6ySgN55> z&1C8ME__;BoTqL`x+;Bjp~*7;<}>N*=TT4tRbZmip1y+v!pj$6@FM^UQye}?5sV6G zhSy)lBwCi(foXlusq{87!9cxFaP%WRy)I4@L8ve9`e)gK3|)tu%x^DX{WU&M7_Thc z@Zhsckn!gR`U{Mzfu{;(Ze(+l7kv$rMwJw|;|&3f2b1EK6t{yF0oDhTY?u_cZ5;t% zM3d2(6u04F0o_THlA9E_(yIZ$GLwOw6t||{0ctXnho2M_F(5HBGB*k@Ol59obZ9al zG&eCYmw_Dt6a+OjFgKI2rzn4Yly_89>(Yk>0Rib9q=Y6-Na#)Jy(7I7NC=UTKuGAl zh=3qXL_m=uO%zc;no^{Q2uP6*f|MxId*_SCbB^45*ZS7}XFoIZ&irQHJ)57~#7tBb zf^vasp^z9+aWRkr03+`2g24bJ#X#iz{OV{Z7z0NkHNY6C0zg~>C@y~mlmLN105Aqm z3iuZjLwuN}A=U>B`xOC_kOD}^%FD}jArLQPOU z@Lxj#h>C+i|K&4xhr4Azh@C=A>cFV6DsChI~{x(SbZGa*n|2+r%eE*sP@TR)Hm7cc9-}m^JQxkvbih{tAFo1-#3;>Kq zg9FGx0C7A?1A@c>aJ+bb0MsAfEl>=J!r+epys(%MfEx-;{_C1#qya$HU#8zA2LNjP zA$b5$^Iwvc0RRpDkSqXb_=oV3#{ZHW2mmzsLy`cX*&mVu0L}j;d3+Y|AHrvG{gKx*wdi|-5pS2eh4M&~p zRva(Z`yArMqR$~-na`i|cws&Wu#fw>0DMZ!ImAa`&mn(ay6+#vFF4Tu9OAVGoI||U zz(2L{M+2eg-@W|jhid|cBQfRyUjMG&uP^y87XQs=7&OWQY6XX2+|P#?f-z{gza2;n zgui0YujijPhyUFSH8qrfkf?+lKvV)hB5`SaqjGW*A^#ERibbRGJNDPl3BOl#uZGW>f?7m2@`C%`DQU6 zZR}~1=+JhVSaV&Az7xV|S>6*}hNbjA``a=KA01*EQKHSEtn||t9)}~8zHgm&&9)Q( zTIuvjcIN5LoBj6ek(GDZUD0GcYB}pqytNJVm0u1xw*eDsuZPr>3O6T=q-j z5-*zUo{=)SgbEu>>&BsgWlMR==~?;&*0@?dV@dl|MYqYV&!sYZYSA4UHKLANp{G*Y z!-&Ex?S}X#J9aARpxHptp6hd0gl*me#T0)rl9t=jW5;UHZwljyqqpW#zcMXxaF{X2 z^p%Bz*O%b{$;krQFWp(x%&%K&$Lf;vg(Bm2@+J=0N`9garIe`-D1vTpQ0ye6&^7ax zn0>TLs$hgv1P@Zw2)OR3LOU3c8_nBn7?n>)X7B2u3Oh?bDqkxHn=N>gG#+sonNLqI!N#xPSa!1*5 zj=f)6Z8A+NRTgh+{nC2UgFxJ>kXLcH0NIx7B(Bxo`TIIJ_DiNWofRJ}=@pg98`V+@ znEq^t);;}M&9ygzPTb@cES~uq#W#N+`+!OBNN7ZD=H~UP?$$7vVrBD5k4>?(L=72C zloD&7uGoHDm{D(D;Q8#Vcsg+7$acT|eqKr>c|o@!e6+ljM~`$Yhss;o!kuBJE4Dgq z@0kiW-!zj18!MA#(q7dO#U?CfXb$3>(!_tkL1!)IMZ!bm0IpS>34otgk@BD3k4Fw$AM-aJM~K`xg?`3pt3by#^?p1}e93M_a49Py zV(11^B>zRh`0+qFlGV656q3!5>O-kpdm|PH5PbGC<**xa&*-6p_ECSlM={ISaA32Y zrADqK#J^RpYBSOMxd~ySXNu|=;ysSG7&qoOr>iR9CW>ntj?tJ9H zGG6{J@SQ8tN+SX46xK_B@B(e_u060k<`qOQo&U9|XJmbwGh{dN`>c};;zxYvJBzBH zW|REf!>_5QeVVs8+6R9}NOYjh?q>EC&fP&bj03n8PDo(uG=jxULpQ#vadpI`8IRzC z32j1~`%4Rpc+a};KkfF87dVrvESucK5eCLtfcmxlSTz>%BzCQkJqaFOadqji%+W!nkSEh zqI54VweGDxkXL`A?6P&s9LkNcY^BO{rKT~ilCQfPSAuagJwELjDDfKID-eVP@Sf3+ zBabZxD`;3-NPjeZzbXX-&YVmHN;{N)AQ%>G@v6SlIp6iJbNxpt$9Iiq2VC*2^NAOE zpH}S4o7G29N8gZj9@I_y8r`sBP;~PkjwDeNv-G&G^U8m;y1o`yN7Vhj&0<&Xv3|cV zo8ATKGp7QqM>7#mtKM{yYz^AZ3C1DqX+ovkD))j76AtdKy*s&LH^PtOH>-UA9;7;{ z-Akw)TAZiLGLbZ2GEsb+C9)MxYj8#$MEoQG*C{yq;s<~rZou>T`&gYS3X8Jb9%3u@ zHKwBiE)Rc?WgmZ_L)CXg&XDT0J8$JbywzySo{G&2ZK?*g8<)RuZX1#@TT_}}QV>cW zs#iD@iZEaip1XV568lnCB;_Qc)hude)vd6VhKp!aFg7kIWwiqENS&91(C7&`nDR@R zn&zvQFIVMhU8>6W!!wQ>L%DEbSZ|w@)3aL=w0^L{xUUl^|r<@ zB#30wyF~eF)6sq$_2022F9OYz#?}0JT#Q%>RAX-p`Up={zuEoR&=lRwSCinPE)6G{ z(b#{P+$AKaV~A{sYn6O?!lTA+X23h&na(3LBZ?$zUy3qMdQOR_rWu$EN=Lmu ze7&4o3!O}B=#b(~FEb#m<`w~e?i^qDS6Mb@G+*(=<*x?=CQTQGHWcHjYxu<1u}pu{ z^KV=^7X>q$;jyHIdtTLa6t`B~GXh^akM`j91{Hi{y0Nmw1N19I5rntsUFcrBB^JfB zit_5M_SPw>7Ouz6C9#ewN4VRY)m$`LntlQ}K69{ZWvshNTSD^{W0JA~V|C%bYUS%l zLT`O!67;y3ZC|#sdBs``7epf?HMoC0+icFG8~}1wH{Bq)935r*_VxJftPkL6H;Q3D zFV`hQeItwY>k~R@rndy%urbvA)M(Ror*|YA{K@#<`P~ks!o{gXM0lA%e)?z}>Ta;` z9vM~r^NY*o8JO37OxD=XWk7)BHHnF?(}*k^zHW;Xzq}Vtub|}`eJ24DiUrfTT@TDoSqm*Fu*qn8U;AvMdQsy|EW$aqygO`6WHop7m2jQBhg@DXeaJ(ZEDpdza-2ooxYCpf#M8CBo@ISwWdk6V zusy{PMCCfHCt`eXtv+wVOi_RL-IGte)hBJyp-!g6TUk6$1ygxRn_KSF+#gO;wt98e zkWgs`3-MggdVRomZLQPfLP$MGInv@R_hxh$kNZC3Q-4J1GjLE@W{y00j;<<+q6b5h zwQZcd)u!F}CSi_S8;^2}VdQ%*cK)|uZMIT+?Mn%sH9!C~W-v_e3K4(5joCMzmSmjKV)QZ!0qIXIM|HEyvc&s`FRWxJsVBzzFRmseT}xc;+yWD zrxJ|3A3|T=dW)kSxjPC{88u^8Azd+B=kKKF^;cZGn z4|L5Giy1KJx0$IOg9i24v|MUgyKRHf*OcsHQF%#fP9U;r8Tv7{Py^#lkqLlguSKBu zw%4jgl6q~YpLu_``NB`d?v?tM>!b67^#b}0eLUEVyC*E$QKeMACu7jSyNkyT9-%se zl*!rGYj^Iv8M8id$#~{PElZ#s7F4%Mw0FCbNkV7EC0eWN zPRcrG{p)}6d-?SQi^A4gIMr6P`BIqNn5tlr?fYX+4^c>~+wP4qf{Qq~F4@cwbg%Bc z05)=+YAa>0WWh8-nDC*=okXL=yU%De^Gdt1J*ymtqwE8+M|`~T%CqyESjzqU_!^xU zzP-{?Z&`*ORapN_Q13Fy2EEymW(sc_x4^fC-6nsbzB0ko-lA$}X8zun%vHf0DzhW# z7ST7N@h_u|D#3wDrId?#C^;zow_&$8T|B&VKMHW6&vP8B8>D`4i;)_MGf83M-)?7y zBO3gb(lV7pSx1kia>H9zX|I+>Y{>l7A1z<)Z(XP9P(*J9S31Yrd1%49$T$7EFNO1Z zE$4r^N$V7*+&XBe&M1_g>a$<0?<`9=^He!@+~^~M*dKq=A1Ri{Q-Ej&8rqw$lgfXwNXb)uveDgsKkf zU23&aD8^g@tX1*4jEo5NLRV>@&Tflvzajk|+0qdgE3aa}D|&B_seb&HWS5M1OXJgP zE(|T#O?Sm&WAZd1_BcMDA=E{AEC1GujI+zoS!2IYI#@m9I}h_zri2}}Y<*rDVg`__>&u@fr^&5%#~)VK^I+1gKr=@Qtwn!sEzmi-AJ z^5W%7&ZGJ_E|_k0TcEq%`ngI?hNa$>tk>pRCG;-QbuBynK_o%uQ1^V5xnGmo@bl@| z<&q0@a;-0jR60!!Cg~FE0vl~$7&3pWhMOSCQXSOlfL`SE`mR`IsX3 zcQzxCMwPyk!bgFpVsBcu*VJ$-3ad=AjJ3HzKM6_Ml7?Cr_AVpx_F_UM-$s4SUl$(B znTnaUcSJrQxq#vml}oP)zK9}VWpsN%dXU!ymrIEvQ#dQ>~>m7+)AWJqg=FK)B*IJJ(^2lD6CA{M+yJEwbKL;7wEw;1_>fr6f zY2kY~)>P>}ykvk=i!ZeJ5uKzwa*ErYA|hFgm48s6OSa$p*(9bXefYtn8aiyl1Xp25 zyB@I>;Z<)(k*L){&Bz83&E+rqvfyec1&*1SCw7UwDA9l#)Wc>tX5N49vh5SFmUe=4 zxz=N=U?wrsN8D+CGPCKNJ+@FF!@8?5H%g}eoXWU=a7k+*^SwFimD1Dc07V#iK=^pk z5tsSr;8_O4?e?J0ZC$7vC7~v`(3e9gkL_!#GN-oPz-B?5eN9NArR}nYZSx^W%qkz< zf!8a#mlvc`Ovmb@%YlD16`^kHxkL?CRu=5#CyNI&st!t_)8V!gI%nU&tX2J)w={^E z?Zh@EELJjnc?H8x(nFgF@1=8K9`VaiecM)BNy+YmJaB5wOvoh)nLRmd5o<3jWX`-* z#YBEr*_~crLzX;&U5k5XaTIr3_2XgBiu!yi2e*sYSVv%^VM>4PVYuuK%O?Vy2op@}dlkC(Cr$v1 zYX!-BDY5)C1N|&DHIwp82ylPQ!>N8`j3sBq<+m&hK0cH&B_5wP%#$}>S&wXTUHU&z zv*sm}fu#%I>XFp(L2#eh)#$gdZI)NQ4+oPPIS?U?wj2EzE|%1 zTkBi?nZ3_>&OYUN&WwAk+IoBnmaykg6_^u}56CYl2|xlpkVt?qzaYWAdk^4HFwz$0 zqy$DnB>_Mo0icM0kf5L-0E~Y`AxYE+ZB3M$p{6SWZ2j9qP)GzIBqk;zLLejvu(X9B z0neeX6d?FFWs6X; z^?+Jx+ae)003_TM`ZsOhWC?{k*g8SAVF=sbEdlTW1qJ`drf*{lv3G(Z5CG7BOjB>`5R90HP2G-~|NOqH^~DKs`{!3h+C@ zkfTzzPN@_&p<05I{iTH}y9X1qdkKA~BTUEfNO^DBU6nfPnHpNK6nQpmK|V z00GroBn%KxzeOm8N4E&2pm~c>3R<@arSSM4B#u(hzC}U+0o{LFgi_GEMIrzJ{ab{p z&)^>lm5$yi2P<89dEP#eJ=$p|9~h-=xqd4f1&?U z5dCd;aRod4aRh%=s@3fgRBl$bZhyr1ZHBqR|2TkhvHk<1lDch?2&xq}p3XK}v;QB`qKosM0TjX!#3Pt?2YW~Sw5&?gK!T;@{pP>(+#O4aiZh?>cZ+niC6UO?f0XYlU@sSUPu zLh5@u|FhKXD-;pMUv5T;ZtOf&A+m5Ve2C|BJ0`QC~n%s0S26FgXT;NCn$f z1~;6RD=@nAt@Pr|FE&NQnY4$4kR0RLUN(<#Q&opt6fG=E=(>}&CkjIc$GjQ2cTW2} z%v#a|=91L1kZ8*7%Zht^Ih|*RE!I$GOBjQ7zgTj_GWl-2&K**VCs3i8Os*g0}%7-l41R`steX0w&8ybHA4$2$MWM#TLACR11cgoPNAAntrExwC` zH`or(J|^|f!e^F<%1)nX1h{-HIQFKF}Opin$P^u_gds=%posTwf<%H@e}!1f{TAI z_4oQ4aQ$7>f|pj`@{WE|Z&3LUxhn8|BT zlO6t*Lbj6pA?4COHtXFm-`!JHE}iFCAocMWo{atNj-tzSGxx;WII;wi)Vp8nHuqwZ zU##uich0MKnW&in*CHvj-SsBpq-Ao@W@cDD3C1KMwZ-W_XwnddytrWj?c0Bq)1%J? zr89Z&_rn6%{CPQO$)H2CF%6)i!%$^jO+u>hP}JZrj;ORm^(Y z)kSA9gRq!dc)qc!QtRlW40v|HUVex6YAIWca}*&g`1@3$PhcbHhsSAGt`Ri z?=C^;Hj6WvKfidiAqtqojixXCBK_se#Vi^ioe_yc^sf1o;)MKCTiY3_l+~?0#qoej z%*ENLSIe-D&d2H>7uJ7A>;&UThiL>UzaEz0I_UIh<5A+K>7^pN6kxRSX~xX(xL7*sg*sVj=Myqx7|ZC~DFhh@H8r#=hUBKCISrL@L_9r(BPdK_jAdSMOG0Bgi3 z+NN|yA*ohxRM*`VUf&3RV=D~5l$%44sO-ADpt^TbhCl?Hu?6H5WW_iN5mPNEPZ$THK~oH{Y9Z}h44`E zPJJ#!pEudV(sAkhlCwWj!zq2H}a$>DjyP_8)&ENhIG4iLy1mV-mg zDPTG8)SE3Z67olXPVJbM3XF7HrssDdHKGdB9P6v;E!8))q#1UWuQM#))^pMitI8Ws zH%u$){NOeBjALu}gvmX@lq_$@83RCvs^A@1zskHfXsCY*q7WfjKl86M9q)1Mp1`eT z;(FrmxzUN@oC&S;CwcqxhBjBeJ&MV9ypCB%Z+%hhh=rS{5{8f48~Ehl>&GfL@ffS} zk?tyPJw5na4^5WY>0ynz7osjt({dG9eTU7Q6aLC=bj zjpulGW?_GS0WUiT1rI+pY&fA4USuW`om*_fn6vd`>APdcROP#xtHab!?Blr-tng{= zdxvf3a~Gq*=)pl$=)g36-=ovgNlB(U?#L4rm3ew6rnEsP>~Gz@eb4o*Eq`fL?ae;Y z5-bwmx`ZsK??h&kDDfwa+>gC+q!vy5IK{)8`Qm?SjyL6HN8b!5`^gbzk{9)ox z_uB`9)4ykHz{hvrY1*{JTz&agdOZkaJ@U-fS{iH^v-5h@Udo_+?JY*rn|V=SOeSCW zuB3l^=5@ARELW_17U>br`}5Xa1Zl@?4Hw|hB0~8cUDSBp;|#2R-CoS=%n6YQW=)z8 zU@N;UBt15H07KW@ODf~$I$9kTmc+j4XXuODZ%2quCRCQZVpp)uNgE zkJeTRsQDg@l%K!%)zxpylCy3!?GTN}`@(;15-&KE6U`02`E#fy%oNE^!$fUVu{w{3d(vu+G6B+6+aLZPY0V88C!f|x{K*N~D| zVLy<=fMa1h{;}9bY!R;X(6g08hi7|*hMy~RV|r}r=ccGstkS^;V)vPTX6lNNm1}=< zq*I*?8bwMHgPTlW(rhSV1%0FXQqe$0h%Lz)!`FS|kP#L=&|;Y!wgbZEh$oN#IZ-T@ zYOTdyFs$bOQQEtV+a+)Xi#t#SdtaAnCa-(;*VS?FYh_;IjdMn&s_4Klw!L##OQkuA zno=iex%2zNG+4qPmGpHaq3>&!K>&XlE)2(~1`Nd-6;v8o=Q(Kd;3Ex@C6CzQ3K!Ar zYi|j=tNc4J@h+-zad&6qp;VCpHiBF~x^IGU>7)6ugAegbZ6%x(M@Yw)Zc@AeJUJ^7 zSjz%xPtLs`;15M#dJJTR;;bb)Mv^; zumZfDAlTf&*VnAswDGl_%Dm$~a|5ZS`Q9n3#q%2pNwle1+8BDqI8W)6lev`1i*M@G zApy8>iqN6#(~qvj_IjV@<0A!cxcEq)$@t6ou{##&Z?-V5E<9vlTpz~7#{Z7T(I%t0 zWoMEtfX=O+4C!v}tJiIR37>ybTcaT(G_axQs3)NLp&uDC>3xOMB|8_)ll|n^QhZ;{ z$W+c7x*R+aUR6stexL4XKt*TU1?Xmd(p)em_L55wLqTEA5kS4F2Gc*al(*RlvJh?C zl;4T%Hu?dWzM9~k(Vt$#7y5XaLOFX@VZuGN@cObk-tjvIE(9l1jeLI+7T8-ZO13-Q z@il=(F;xg*jMtEKENa>aoj`9Z$R9$-`n*)K^OAy{gM>hX#z5lLaim3;6oR)_BaaPx zclzxeGC1_+BtisVBISXHbaLcfH4`S?4Wuaamj#i7Bb{%{x^fgTS-%X?3_g2R!*MjlW_Lmv6XdYY`BV4HuWOhJpTpC0cHUxeGQkl9~R77fUUpbbf`3J`JH(2Us3@Nsifv_9nY zyN3zb_LY9Ot`NRHmS-~c0#TS4rrb}$I~gP{L{2@jvgIkO=7KjgkgKY;)M&irpS&pm z3PqtP&hv3nE~!QizWQT2O8BQYKo(`E>#sy=&1aYk9&LX|M7%6LVSB@UE$;YW!@^= z9EwVp9S)1Ji|s|06Cpt={`A$QDHPIF((V&Nr8$ z$~SZA4{@K-`KCquwE7_#6HYi)e_>9rIX^C-e~<~>zjiOjxQy5|`iASu8^fIT(2u zR;F7qoMK1)nP&pS1G$`)NuIo_bBc%c;BPCr+X842syi7D*({JaZ0q!oQaoUw-ZW6nDd|;4P~$&>gbER@@#~MuG6Um~D6?`Tlna+wfmPki3ZZ?_1-C`Hy zSV$Naa}uk3wfW}z&>ri7b+B*eoOLddLLu)+fVKDCW@~D?ul2BF;wRRpd?0l=v#lTlIQqGKV^6Vl|NP811{)Cp{bs+Oua6xQ z=Zv(I$j?p8O_HbZm@&08X2$TL1+jnTCfN|RdEQHksUEVR(xCak^rrqPwfDsS-pntT z2SCh$vpOV84_{vPNzGM7WaMNDF<>~!zzZ))Dvz-!N_`L0@T0mv4(osC<8B-|7t; zY)ObPQ&5>7Cl_9ek{Qaws{QnYuMF}Pt43}jTA6kD2V~xkpRcfVUM3_Lk8ETi?VVF_ zW^J_RJ2pDDZQJbFwr%r`la6iMNykRVd}G_{pkq(I@0>YRXR4;A=58+LZa+`0+IwI8 z{;T$SYOnS0=H?}K)MAv3(kD;+GHer!G&;n2!gmorB-!%!DlN6(6@L!x*QPXcHLU1R zVRpt`JKVf)JKo!DiVkStjVXFV6r_I$vhJezW>muvo>io!^td|q`xW9mw*N3@qt z@39@WGC!uT6?jM%lz0=9HD5OiI<(e(aV4%1JePQWK-uTUpXxwl0(KB*zMAJ@{aUUJ z^Lihh*YEW&fD&BxVSR2o)-XbMO`hI3Y4!|~Yg3r1=uFD`VG!W?^JDV_p^L}vP^6PC z-y5JNdBCwZQEF>3Hy8i5x)t#0xUP`HHIDLoA(5bKvSG??u57hSYks6Ku|)ct%$wUV z`9lb|*pf}>&9mf-ny+h?(v5UJOdS&#?9bncQbg#@HnLHjFnURUu8A-ScUML~RQOKm zwF`N`ig2-uPi4hz53hK>ma2q<9;LF z%WE^xDM$V0I-2VeAaaf=W{KMwh?V_YaRq4El2fjO^KimjWeM|76$dXyB6TTZE^bqU zV2jLV+?H3p4%iYetHyz0p<0vZht{7BJ%~&9&EB)^WwDsOryrU~g;m&k38JO}EiVE{ z@VK#UI#qn|=)BIea{*5j(`l=2A*(+~a`(2vxpDYQq+6U?D7_YvJT*K7mJt-bQ6d>1 z(p)8~OJ2xjg&!gr)`i}Pm0HuYUh)}oPnv5IdRi;uooCxSX4_q(NlhPn2%{LX^d!(y z?OfA@1a9ocL&|)=zcLiZWNwbwHzEOyswqDz-d0yO@z#{9i-sz!NsqPD{TP%Xhl6mUCH{T9p`olp!k9iUvd|cg zLul*N*bAPg;2EXA zvuDi#hI8qz+e|)0_lVD$NP1e=oXW;u z00I&7AFX+Op@A(vho~PZajAz1F`dSWnYetG^P#Jnc~MN5 zJL%vmf@A}lNGP1!lgyr?=etnFC#TT2gfGu?v8!Ubvg10LGB2QSfwuTxpYi)+h zETR{$4x@B}DM9RGhOVxTj0}!@ijW3Y`@!I>Sg*R1;Q84_nOtFQ<8q^BLuAo!5}f{L zd=;`}QCvyR`ClSH{jw&ur6ZIJY2h&fP7&9H{&cMNu6w%P#4s^pvtfFQLI(Awyxez6 zDNTS0Uar&$zmCv}g+Xg~Y>i@)MD798IQ)idd(DbQvuo2VJIywPYL8;igHTIVT4?t} z9ZcK`4Z$Dv)V5kZU+L!%xstc0{@Xu2UJ@WgUNDz$KMNqg>JPkzt^DrVFxVY5$e^h)C>EdCt+yb-kHJj@+uI8w+7&82y*E}VC= zrXBN`%EG~-LDX@zwQ8usOGy?#)*5b~sB;T_ONm`&&+@&3fL<|lf@n+oWv^R2ucAb& z#u^Jc_E*CXV2TnML;CMoLzN_s02Q{P(3K#WiT3PU?o&ilXE4WWUqHC|;r?>ZE$8i2 z0)4Dq#;)}`{kGc-vameIzOAsA%CV(H4O!=ITilC%p~y-S7yMxlTuQJ2j>D6(WD^5D z81tXhv^;?dFE=G6xkG^@;2mP1SS_cQ*p2Z{RyheEorDPT?_@5b5C#+?`2tts=Kz+oHs7sRD5Qfx9Y5o_`1_iNB`JTfI?yu|xL%mU_4>P^ z8~x`g+aV~Wf6QQ|nd91^$AwAH7Y7=vz#KHn3GuA(RX z4hrc}MmkfjMtdNxHZaBZcTZRfBxOoG_=5le_{<#Ts!sGM3;>Vv#oUw};SpM-De8HP z)$V7Md%Gxj^;}8x+~8?f^X-oT(wd`%*!#Dv$v37Z0ZXllq)jghDxCg)hp9J9JyX{( zktyj>&~azkGC3O(cu`-_xts_CDcRuXzbeD&3^X2KBJodIGqmXF#E4KUP0nXKP&f<# z)KC*=g*#LZ!JKCFKDiAadWu_}xyTv;snpRo+*E#swXT5J zIcFH$LyvW+EhKRtQm~RbHW%gj7#RKW;N##^r+p+J7Cdub%B62x;foG0rG1MsL{bXK z0~+=l{4I!2@lgft5#Try?O(Vsp|;xsF2suMhco<{G=isIR~-Iy5tBPGikZxK4@(eM zbNi7&N%jpemZ-7~(PJy@!1Aqyt_W^^E!TLR031Kn#RLGbM+c8XN{ zR8S^e>g~E-5?=d~fBAF+KF9c#C{Ko`-n%G6lMxJ;PLZA6>=N2vimUYG$X~H~ZoxJ#x~?%P>+9&@$Cd9E^$|eWqs2UtIZ+?%8N(*O7+TU7zYg?Xc$h zFtKhjF;u_e*=W)Qq{k8Wi)o~Q9|R!`i^h~-5fW2&QOQin%wY6rYeH{ZSm#ZC4YNb} znYC9(*Sq+)UY3{7I;lrNVFql@Z%p8GR>A~rTn;jR6_NMnEd>TC1%K#k^nsxED7 z#`bHC5w{IeTSvz$EUfOrmuCW;t^reML4TFaVt_R$7Dd39qdRe-dIwROFXEim8GK#U z*~~cBs?luhkX7>DP9x_pV0dfKJ*A!&Y}z*4A-buVA8K&@E&Ewy9V;8#*}@&ATr#=3SnV_r#_2*L*j0bRX>O;@^6RSPLy-35djd1 z@on!#jeDNwXtF8tUbPpZ_CKwV{VT{!fgZ9^@qa#}EfjN1B{@jLqIXNUvX6EBYlx}1 zVG;N0d!vsUWnS-P02r@#YAkn~Bw2->r8H*bZz4(i_cR>?)c`)@xa1aHTQ<%gZ9GaT zEggZ`F`Ds%*Wx*&>o4z0@O0GC*Wc4O4d0iZKrs%%qV-!>0>iy@ZM~Nyyr!A9t+lJq zawBDCUB_R1M`le?tDdeXrsiQ^M%5!z$`8Z{dq(*I)rGW6OBM(Z*#(Rc8UW9-0Kk!FZ2y!64t0U}aB zEVY~W=5+3RIr=Z(5sUZQ2lO=4AYge^lV9mVArRjFxg?EJQqyT#%{OuVovCV6;4<&* z|NEJ)FnnCG1mLWzzE%59p-nq^P?1dWJ+RI6mt|T87oL|>f*o^*1O5Ors{`L(@g}t& zmjd>j8D=*y-?2q9t%^rK%f}Ug&6($?hixWV`dhzSybZW`<1Q#fBcy`v+7dQ`DBr;z zlZFW{Yx635WI=>+M#HW#HDeJAs=RmztOQ(@#XC%b-T<2?XG^ABm{&Sn8gEPUbd3)p zh+54_91GQT>T%E}(#=u!r_3(?s^+T0ZEhP&&VP3s`I#L^(l7q^-1x zezx+7Xsg_f(LnC|l^}!#v_vIcasa`O1ztSk%2=x1P%$@!BUjOAH!)7Ix0H!NV2K+> zjC;V}8UPi;l+cpSQx1D6dfOQzC(*9T8y0zrl0GhGU!%wV;P-rhvuIFSv+V22bP*vr zTCxZ-Tc;olpZTlvla-N2di<HR@%aa$2d?f#Vb_ZMKlNyB!kBNY;DRE)H-d28KGy+$cP zDad4@d~$UQ^tv_$$3$Et=6<{#CaPX!_WY!5wuwvur3$vOSl^i-9~1tY{89Mgrag)o zj@|l{Ai0P;>edCd>sEqB!qWn$i>=N}?M@nOpR<@@3qAJ9MB6Hy`=HrKE=R8+6k=?g z{Su%LUS;9YWLuJn`|xkW^|ecDqAEc~IOO}v(g@+M(ya`Yu?$1Y`1?j5G?dj>|5qme zx-#469iqO8dO+MSywdsn-XI6Xqia^~OOle#!`ZNvm$L)M9RA@&$14?5aaJ{J4sWBL zC;YLY&8c|`ZvzVoS@q4dHbQFk(eu+|_%wi5tJlo$H7-cuAtcYXFlb-7tXuuV7q-c& zECE^u#Af2a^pFNYowONFul8!pA>QbUjHbz@iT7ajMqG!Y`A69T8Nqu-H^##B z;hXsFN%woELj`f)N^T&P`&K?P{L?gJ3h&uG_FbM&y;C}Tj|0S!QCeCotWA|My8QLTx4g4$1|Zlw6G7>Wm7i0hW|if)2uw6j(u*wuuLd z1PBw7MHeSQF2-xA$+T`>2G3?t2K!DN{_#GY#cb88O)b2CoZ;m_Fw7~K+nQ8;`CyN- zX>-3fy;)MXLH60s3&F`LuAvuOi%*bKrN@7nOSs^&{pGG*zV54HyJp^2bRehGZD7r5 z{w`>BxRv?93c+{wu=t*f$1t$dP!-T~}iaH%>iKbmQByMid^KLDptbyGp`9|E5JfXw%Nbt2esnkVQm{G~XLxyFa| z4n^AuSE}Im=cUw7rBy>M#GbKizB3rKB=}Hy@lt5Ya%p69w&L`$pmx2Ekg`lfAAqZ* z;?~TY=bm!z@h1xoLz{82kS;CI=G?)DA~o^dXi|o_Irn3v9UjWPFzW~QG z=r0~nA7V1m&((w2Y?=f7qEAMmV}XQUXUf!UngFW&sbObhrZRL!m)K{vGiV&!;pXa* zTJUhl38;a=4b+!0<66Cm=t&)CzToKv7h=Kts~9A6n&xO9hNmQNhC3;K%xOFA2!|c% z4BBb#5rFc}IP6Ufu-x-RkU<0Ra=p9f+^!F`SaNk*x`P|x0OI>8cV3&eP{CUe`RUsk z^GK<#V0Mjp&*QB3MK$IBj$X^=WwieTz51JE9m{7!Ih`^F?NT2u09bqb$l4A(JzhQ@ zjZW_ke!=qNo~jmm#n$K2m8L02$+4^!@7@Lb$rr%fcsKhW3s}#EKhyuvE9&qH^Un4c z;68ON|GM3ZRdK478B-2baVYajOvYz|1 z=2^)lXEnK&Zn&KO_6LkPN5i=UFJwbkE zfn+_1JUNlAkSmAT(D~cw5Ap#qaMP27!wpi=IQaL-_HQExugQ{?P+o3%UUWsfQiaVOB}bH@{O!o~ ziRH zELmdNZ|lG<^*wl;>fK!8xB7yEKBNiO z3^bf-L9`ij6K>}8`N%Zx5nmiPa0HHh?Ijb9AkpB%U?by8n0Hg=9G%*A z>w>>*<6Kp)5e8eo^?a7PEz6uO7UEh9JQ|DOi7ltYh(PET_ZeUx+>6YilEGc?flR zH+a7w_VwvdiSyI2+sv=MmHTCtwHubmX?O2lyP1CfS)Afyw$-$jdE0UFp@1%q!m=}K51vb!<*PLfOu8ohN^va)u;r!CF4kYk zT^A!8AVSC)1b1<3O zraJW@%83$aWvr00h~Ka)Ow%I*;Q1S}eZE*OFkr?sloJA3Yc~B##F*(ifRGyEZZY?E z;{apOc)dubNTZn(v1&<+O2N)t-*3H$QE0g#EYczXeaSTTK^tsSNDo&!x1DA6J@h@* zJ@^}GR9Jm!2SC8ukC**-U<|)MKKYeb%I1#as(p#uP8e2gdb+e!XhjY z!df=|%Ep?s8k)#95s2Xlg3NNFKmSGBU(o-zpNaV~#J?fkW|@WbHWd$;&w8&rs_@=( z(=S_+>I8%UC<8+UDvp1*%fa0s=u*23aUVY^!0Kud_uOEkBfT>opD7Ru=;|^OJ_@^C z`gG7dA@1pX+Xl>c#Mzv!;46Jmyge*~Ru%q5@tLM;$G;S3l>fg&apV7|`2SP2gAQulVUe_{M z3~Dg>KOrE*|s(w4oMgD-Wk*cx7zVHcj0CElvd-!bnk!w!sK(BA z9DH6zINe;^eUW>)Fu=v8V6VJAF9b)w7zX<6-0{N3&tG3{V8jNa_i88Z?f* zt;)^YdR#uJECbm_ftyW_#f*cgaVfz~&$F-(`3#+!W~A!Z7Cc0(eY8pO$V`L5 zZdX6vNP_0zj=qq}KbcbMciVVfgg^YfdF3waPYuEh+f{ERd%ZG;Ip;i4C$GMStm}PN z)(Xnp>L?uVJ6#cpo*Dw0m1}%%(BIz#TcFC045pu^z5IE3(C60bYt1b;PuuJ^+Wr{m z)h~FLq`Gy(>TZ9uT9C-EcI&p;02iA-;oOqzf=YxNV5kkH!HvOD5XA(LaSXwm9#)`O z;`TGaGLXm&i&eEK4G#H?xkeTnOS$0=w(gk@Qjw|WM_ zr90QEIClPxdqKb(T-gU67-NXRE=lomUW0%m>J%1h@n6WkwCFeXE%`VElc%iE=mPpE ztRnvw!!Ae)0K!xrd9;$C3^pp|{&N8_Dq}gLml4J_IW3l`i#kh~q}EXS+58*DuuuGA zbOEcyJM+s?wIHOR#rxgXLA795ZuUK8^27`3WNza}@)Mw1kXYbcwt(9rhdS40num1U zEa&@SgS;pq>Z>ht6nY+W5qh49;Y|kD9;>(34fa(bdfx1EB=CAZ5;*uhkGT^)uV6b8 zIAb+rF=;dz0b(6{Q~m9K_7~nRjC) zq&ZEfJEnFmqQbT-buapL~xq96Vnggx|j%9q+GLAltI zzHib1?EW`G8~snAiIssG|Ci9@|C`W8j=zLf^RLj__Z@Nm6&m8dLM!Y3525j25nL_o zbFl&c5t^Udw#R%7<@V#$dWDougzTu~1?%Rot zsjDd}3@<0DYJ^>5km!ClO^UwnyRZ}|5KeS!C+Yj>j=xtx%d)dTE$}G)r`y@<54p0J zARfu($8JE|jO&!<#j>N?j1VA<9$12q!fYf?Y}(8dcf#GCf0dT$_*I|o)_wwZ^SJMi zu{??2U@?jLKa=kRvn+?xiBmYg^_U*i-MD+(VhwE5nZny?4PxClLhQ3MJ=<7*&>2O) zXpN_HVFQs6GCYO-#^4$Q7`6JbG8+?_`NnC6Rr8KGnYV(g&Ea#n&*Nq}zr^;$eO~rR z@pWq1xec z$~=m7X=0BKrJHZzXej>Snt8W;bvvzyBCgc1xk+Cyln^a7eKUPaa7#c^(jv=LfzJww z2^8rI%@m1}_129sl-{GkS4qvKXJxZTYn0!s%t-sS4-QAcQX&M77Hy#fQHmE8OE4Rf zj|;FRt2WmxPd1HYh~3q)Dh%aMiNd$K+2Q|~iJkS{uD8qAc~wEXU~{!bS>5V0Hj%Eo9I;QaEs3V>+rIdcsRIL4c_sie1B? zgf?wm(USo6dW_Ec9kQAMK1_Oh_yZYZ*i><0I>-pkz+CXZ=}!S~MWltq4OsQ9(LsY( zvXaIM)X7j|(A+S=i!35pIC!H_@4J0P}#3p~Ph$Whvfjhy_?=Z~eaO42O zk$B&jc@yRaino|QChB@Y#05o!X+{N_#wj@WZ>)|-2p^~2e%1BglFF#;(%%I3t zAz5wlApJelSy`>QWjorPSvY3)=fYPw9%<~a58y64b$~R}nxtg?JwF3{MN#_K}oGzAE4?N_!8CuFoVK6T0mV`TooY)AyA1 z?CPnTd;xArK*;>j^Q7K@?r_x$gbni2a{UHS#z=Aw6is(@ed;u3?#@7p66a~II5%?= zz~RgEH=zW@=UD3j71Fd998|gBNDl_r^2zjL%8(VlCVPezA)|dl_-3UaE|>|J21a=m z(kVPEykQFtg3(^vP+gUfvwvpr8D5eUfg zUI!a-XUab@e}0+CG(%~aaqGMV-xhXpGh)0OH=M-uDp0;habJOI<90-{$P};lC*}^q zR;Tpj#kyW30h`8!G##-!7z+Wz)xpKjCc}C1+X~nh7ya;&C!GvBq(u9yE#|(7UW`N+ zcDS4ArK5KDW99Zal&;(2F6Vq)!~P52pL~D(wv7_idKi7*CXjx-EA~akw0#z6ei}ss z85qrPCs^GZM8*j*4I~HlHs>YF#LfmqTo($FD`o|u@+`k6b%~$_wB7+CzNS*mf)TK% z6<)r7l6&)J3ftCjX4Z+y${8uZ*)Dv!G%ld#mxV;C)Ap7gIqUqeU|v1k&ptZ7jr^9DT3(eLh@4|zvWC^Jw`Y{#qw7;M0b;VxouHM z`Y@T9Ts-0luB7E|`t>r+-&{azZ}~g@&8LvFd}17Wg)`GZX}lF}Hhl*twZOsFffO?^ zWJ9#MkHH{gc(*A2ohejyJRYi?PdZ;3{5WcOj8~BqD9ihn=UqXD`Ij@qYv4)|PenD8 zc({P3pemGco+=kW_iRA}Q(pSpf3$^(@Gy=95bkuvOps_mst-Tsfq(}i2+OBx7i~=( zWij`&v{EC~b!rVoZG#LZ0kZN3_+nVRDjE7LltJXUS^-BeAH9^E7z=7K;{sVm=(Ldp zZN_EAVXwR?YXQIO+3egO4pe3QaWisOMNu`niX0l3Hp@6bWc)CD21G{47!9!#Icote zvt~_u&8)Arn8_;q9Dy|5k0Hc#{0xMj`br40Fi^wPe2S1zPCgqtm8L2|7)dzs?MJjn zis{6S*J$3~rK!NkU7Vm9$uJRI78F_a^it4~<2Wi(e=GH9OBqQVI+mFwlCnn`2mMxM zOHK_986u7bXeD<*R&p}A{ShBlpazL;6xR&#%2|>ImsTOfjN0{Oqby?7@yy?2Ja7#%z!WP{>PVT^zNde{MZ$kKqrpd zZK)(FT>?kRbk-2ie%k-z?%}yCkCU7C!{3hspK(nqXw7@JBwMD?^v))Cr|)t+MbFu6 z0I_y@IC%HiSpa7yk~`+sSXVa~r#B-XcEgbSu-(J_`A`3d1tH*dSCl&^2C`dn{>F>9 z>~7+#jX=v8M$ss_cDS;|OdR|-zx-6dT33uM)-J7AN%&p=<82K1*P>WJR^LL z1CF zHTvf7M1@pf2%jXW_AtNNhla7O_X=(2$5J_l>0z}h_K#lRd_p=~AfA<15 zWGD9CY_rYj3I7h>B|At3NA1x*=tTG240+bKt(DATuKx0?HEDf5uf7{B~&0B!7%0G2`u7=BnLj zhawtL*a}OfiX5XRXE^O3W}6d2pzC^$94r1A@ah}FKeZt={Q!ai&IfjDV*&%Td*E^l}pVA7#Ee=FaQ_C6A%GczVqz zMp8oG66GV$QXK9tySx=v99!!g#+ic#3Pr|f*ilCh{kCLlmtx{Unb0daCuP+NtM&Oc zqP8ZZ>hA2sbAr2OsxiiM;LO}4^k;p94|U2T$k9(dRDQY9&}$Y0bd+X0D@Jk9v31JJ z$x~J&$m$x`&(%@ba3@aSQkqw*TNH4VaA{6g$%Uo4ji8VS6vDgrotYRrWi4t1pH7W= z=qaH){Z`GGd&~T;;bBPm_hlD&(A-Y6!!JwY5|;2wvwEbZ%?AylYbDK0mJgfeDH^^K zT^QD8t6u8VZNC@5iMcB`#ZN{k$krWHHeyO1l+3mjeT-}0>)pT)VpMfNcJ4r@_kRHX8Az(d-4yq36stvBQR~3 z4-C?*{lW>`bBUF)wHA>4mRh@S`85u>0Rpy`xI~Aq6r4JMrxuLO-zXtF+O5Hny0*B` zdPm~xLKiHII*>$Q^AunZZS71eQ?seD^_GH?upQTS(#n0i>&eCWaNDrR|1M`j9g;FZ z^$8yv#Qx)6uHVAJMGkYkXBkigkzVQVrFpc9-YxT)}tPrisy;T;uLirWSIL}qsbhWTFAH?ThI^6 z)GV=yG-@7JbtP7GoAM}~*R`82Byx3HD@a}EJzCen5+G@&N)-n4LrR+FSo^p;F$KK> zt?Aq!&0s`y=4WO{#=__C*;Sy$PlEQitLP3^6vL|oh{Oz1UGoepgH zrYts(XPShPWUhCQ2-q8k3Uv5c>QLvW=GO_E$WVK83Au51UmOG(-gh6fWEoH0Kj58Rxw8=AtLPg;Jz^V5Wax5*ojs*#WhWB7Sgfa(TN z-mxo^i^5J#C@S2N=mH8eAU!NuaFhdk93kccZ$q8Yr5;tB=K7>+Kxqmf?M1OwnGYdN zMG-ebbVq}IsRBf(f{dvGmD?bC^ywWp`s{Z>RLhI~Zoz(Ksi|;hlRKvN0Y&hy1J&gZ z^R6EEFpoG-HGBy(^RYWrD~J7_C9l!6Rh_3>ec?A}VEAWXkpKm9CA(AtCi@Wz_Th*r z%r{5K(ZY4oj~Z9FVc)SrlsqB*u650vNozUv&XZn^zUg0UeQfO0$j}PBpy>C5cZEr% z2U(>DYI%aWFd;eY;?wn!Of;4!2$BLM&Y~Bz6yIA9iU=4;%npVU)l$>^0@$#HS>jlb ztO*Pi=s=i3jRD|;&=H4~zH5KCk1Bj~Z)pt7nt@fIDS}!0=#}b#o5~+<55XEkm9!T6 zDdn{}o@$jHesq<*ISHHhqaTl>K*9tApM>Cn(W^LtjB+e)CTGKgzR}F)Z&x;5bA!2?(UPN1y!!i@oi?)3 diff --git a/docs/html/.buildinfo b/docs/html/.buildinfo index 1f994e9..f2ba597 100644 --- a/docs/html/.buildinfo +++ b/docs/html/.buildinfo @@ -1,4 +1,4 @@ # Sphinx build info version 1 # This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. -config: 486d1ff73ffb3f41d31651516deff8a8 +config: 33a23b4514891ef44049bf19634072fc tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/docs/html/_modules/Lib/Allocator.html b/docs/html/_modules/Lib/Allocator.html index 0abe9c5..2c64d77 100644 --- a/docs/html/_modules/Lib/Allocator.html +++ b/docs/html/_modules/Lib/Allocator.html @@ -92,7 +92,7 @@
[docs]class Allocator(): - """General base class for Naive, AllInMem and Smart Allocators. + """General base class for Naive, AllInMem and Smart Allocators. Replace all temporaries in the code with actual data locations. Allocation is done in two steps: @@ -118,23 +118,23 @@ pass
[docs] def replace(self, old_instr: Instruction) -> List[Instruction]: - """Transform an instruction with temporaries into a list of instructions.""" + """Transform an instruction with temporaries into a list of instructions.""" return [old_instr]
[docs] def rewriteCode(self, listcode) -> None: - """Modify the code to replace temporaries with + """Modify the code to replace temporaries with registers or memory locations. """ listcode.iter_statements(self.replace)
[docs]class NaiveAllocator(Allocator): - """Naive Allocator: try to assign a register to each temporary, + """Naive Allocator: try to assign a register to each temporary, fails if there are more temporaries than registers. """
[docs] def replace(self, old_instr: Instruction) -> List[Instruction]: - """Replace Temporary operands with the corresponding allocated Register.""" + """Replace Temporary operands with the corresponding allocated Register.""" new_args: List[Operand] = [] for arg in old_instr.args(): if isinstance(arg, Temporary): @@ -145,7 +145,7 @@ return [new_instr]
[docs] def prepare(self) -> None: - """Allocate all temporaries to registers. + """Allocate all temporaries to registers. Fail if there are too many temporaries.""" regs = list(GP_REGS) # Get a writable copy temp_allocation: Dict[Temporary, DataLocation] = dict() diff --git a/docs/html/_modules/Lib/CFG.html b/docs/html/_modules/Lib/CFG.html index 6764529..12e2257 100644 --- a/docs/html/_modules/Lib/CFG.html +++ b/docs/html/_modules/Lib/CFG.html @@ -102,7 +102,7 @@
[docs]class Block: - """ + """ A basic block of a :py:class:`CFG` is made of three main parts: - a start :py:class:`label <Lib.Statement.Label>` that uniquely identifies the block in the CFG @@ -138,7 +138,7 @@ return s
[docs] def to_dot(self) -> str: # pragma: no cover - """Outputs all statements of the block as a string.""" + """Outputs all statements of the block as a string.""" # dot is weird: lines ending with \l instead of \n are left-aligned. NEWLINE = '\\l ' instr = [] @@ -153,11 +153,11 @@ return str(self._label)
[docs] def get_body(self) -> List[BlockInstr]: - """Return the statements in the body of the block (no phi-node nor the terminator).""" + """Return the statements in the body of the block (no phi-node nor the terminator).""" return self._instructions
[docs] def get_all_statements(self) -> List[Statement]: - """ + """ Return all statements of the block (including phi-nodes and the terminator, but not the label of the block). """ @@ -166,7 +166,7 @@ [self.get_terminator()])
[docs] def get_body_and_terminator(self) -> List[Statement]: - """ + """ Return all statements of the block, except phi-nodes (and the label of the block). """ @@ -174,39 +174,39 @@ [self.get_terminator()])
[docs] def get_label(self) -> Label: - """Return the label of the block.""" + """Return the label of the block.""" return self._label
[docs] def get_in(self) -> List['Block']: - """Return the list of blocks with an edge to the considered block.""" + """Return the list of blocks with an edge to the considered block.""" return self._in
[docs] def get_terminator(self) -> Terminator: - """Return the terminator of the block.""" + """Return the terminator of the block.""" return self._terminator
[docs] def set_terminator(self, term: Terminator) -> None: - """Set the terminator of the block.""" + """Set the terminator of the block.""" self._terminator = term
[docs] def get_phis(self) -> List[Statement]: - """Return the list of all φ instructions of the block.""" + """Return the list of all φ instructions of the block.""" return self._phis
[docs] def add_phi(self, phi: Statement) -> None: - """Add a φ instruction to the block.""" + """Add a φ instruction to the block.""" self._phis.append(phi)
[docs] def set_phis(self, phis: List[Statement]) -> None: - """Replace the φ instructions in the block by the given list `phis`.""" + """Replace the φ instructions in the block by the given list `phis`.""" self._phis = phis
[docs] def remove_all_phis(self) -> None: - """Remove all φ instructions in the block.""" + """Remove all φ instructions in the block.""" self._phis = []
[docs] def iter_statements(self, f) -> None: - """Iterate over instructions. + """Iterate over instructions. For each real instruction i (not label or comment), replace it with the list of instructions given by f(i). @@ -225,12 +225,12 @@ .format(self.get_terminator(), end_statements))
[docs] def add_instruction(self, instr: BlockInstr) -> None: - """Add an instruction to the body of the block.""" + """Add an instruction to the body of the block.""" self._instructions.append(instr)
[docs]class CFG: - """ + """ A complete control-flow graph representing a function. This class is mainly made of a list of basic :py:class:`Block`, a label indicating the :py:meth:`entry point of the function <get_start>`, @@ -254,7 +254,7 @@ self._end = self.fdata.fresh_label("end") def _init_blks(self) -> None: - """Add a block for division by 0.""" + """Add a block for division by 0.""" # Label for the address of the error message # This address is added by print_code label_div_by_zero_msg = Label(self.fdata._label_div_by_zero.name + "_msg") @@ -267,53 +267,53 @@ self.add_block(blk)
[docs] def get_start(self) -> Label: - """Return the entry label of the CFG.""" + """Return the entry label of the CFG.""" return self._start
[docs] def set_start(self, start: Label) -> None: - """Set the entry label of the CFG.""" + """Set the entry label of the CFG.""" assert (start in self._blocks) self._start = start
[docs] def get_end(self) -> Label: - """Return the exit label of the CFG.""" + """Return the exit label of the CFG.""" return self._end
[docs] def add_block(self, blk: Block) -> None: - """Add a new block to the CFG.""" + """Add a new block to the CFG.""" self._blocks[blk._label] = blk
[docs] def get_block(self, name: Label) -> Block: - """Return the block with label `name`.""" + """Return the block with label `name`.""" return self._blocks[name]
[docs] def get_blocks(self) -> List[Block]: - """Return all the blocks.""" + """Return all the blocks.""" return [b for b in self._blocks.values()]
[docs] def get_entries(self) -> List[Block]: - """Return all the blocks with no predecessors.""" + """Return all the blocks with no predecessors.""" return [b for b in self._blocks.values() if not b.get_in()]
[docs] def add_edge(self, src: Block, dest: Block) -> None: - """Add the edge src -> dest in the control flow graph.""" + """Add the edge src -> dest in the control flow graph.""" dest.get_in().append(src)
# assert (dest.get_label() in src.get_terminator().targets())
[docs] def remove_edge(self, src: Block, dest: Block) -> None: - """Remove the edge src -> dest in the control flow graph.""" + """Remove the edge src -> dest in the control flow graph.""" dest.get_in().remove(src)
# assert (dest.get_label() not in src.get_terminator().targets())
[docs] def out_blocks(self, block: Block) -> List[Block]: - """ + """ Return the list of blocks in the CFG targeted by the Terminator of Block block. """ return [self.get_block(dest) for dest in block.get_terminator().targets()]
[docs] def gather_defs(self) -> Dict[Any, Set[Block]]: - """ + """ Return a dictionary associating variables to all the blocks containing one of their definitions. """ @@ -328,12 +328,12 @@ return defs
[docs] def iter_statements(self, f) -> None: - """Apply f to all instructions in all the blocks.""" + """Apply f to all instructions in all the blocks.""" for b in self.get_blocks(): b.iter_statements(f)
[docs] def linearize_naive(self) -> Iterator[Statement]: - """ + """ Linearize the given control flow graph as a list of instructions. Naive procedure that adds jumps everywhere. """ @@ -353,13 +353,13 @@
[docs] def print_code(self, output, linearize=(lambda cfg: list(cfg.linearize_naive())), comment=None) -> None: - """Print the linearization of the CFG.""" + """Print the linearization of the CFG.""" statements = linearize(self) _print_code(statements, self.fdata, output, init_label=self._start, fin_label=self._end, fin_div0=False, comment=comment)
[docs] def print_dot(self, filename, DF=None, view=False) -> None: # pragma: no cover - """Print the CFG as a graph.""" + """Print the CFG as a graph.""" graph = Digraph() # nodes for name, blk in self._blocks.items(): diff --git a/docs/html/_modules/Lib/Dominators.html b/docs/html/_modules/Lib/Dominators.html index 657816f..7c2f30f 100644 --- a/docs/html/_modules/Lib/Dominators.html +++ b/docs/html/_modules/Lib/Dominators.html @@ -92,7 +92,7 @@
[docs]def computeDom(cfg: CFG) -> Dict[Block, Set[Block]]: - """ + """ `computeDom(cfg)` computes the table associating blocks to their dominators in `cfg`. It works by solving the equation system. @@ -123,7 +123,7 @@
[docs]def printDT(filename: str, graph: Dict[Block, Set[Block]]) -> None: # pragma: no cover - """Display a graphical rendering of the given domination tree.""" + """Display a graphical rendering of the given domination tree.""" dot = Digraph() for k in graph: dot.node(str(k.get_label())) @@ -135,7 +135,7 @@
[docs]def computeDT(cfg: CFG, dominators: Dict[Block, Set[Block]], dom_graphs: bool, basename: str) -> Dict[Block, Set[Block]]: - """ + """ `computeDT(cfg, dominators)` computes the domination tree of `cfg` using the previously computed `dominators`. It returns `DT`, a dictionary which associates a block with its children @@ -174,7 +174,7 @@ DT: Dict[Block, Set[Block]], b: Block, DF: Dict[Block, Set[Block]]) -> None: - """ + """ `_computeDF_at_block(...)` computes the dominance frontier at the given block, by updating `DF`. @@ -192,7 +192,7 @@
[docs]def computeDF(cfg: CFG, dominators: Dict[Block, Set[Block]], DT: Dict[Block, Set[Block]], dom_graphs: bool, basename: str ) -> Dict[Block, Set[Block]]: - """ + """ `computeDF(...)` computes the dominance frontier of a CFG. It returns `DF` which associates a block to its frontier. diff --git a/docs/html/_modules/Lib/FunctionData.html b/docs/html/_modules/Lib/FunctionData.html index ef804b1..d4179ba 100644 --- a/docs/html/_modules/Lib/FunctionData.html +++ b/docs/html/_modules/Lib/FunctionData.html @@ -94,7 +94,7 @@
[docs]class FunctionData: - """ + """ Stores some metadata on a RiscV function: name of the function, label names, temporary variables (using :py:class:`Lib.Operands.TemporaryPool`), @@ -119,18 +119,18 @@ self._label_div_by_zero = self.fresh_label("div_by_zero")
[docs] def get_name(self) -> str: - """Return the name of the function.""" + """Return the name of the function.""" return self._name
[docs] def fresh_tmp(self) -> Temporary: - """ + """ Return a new fresh Temporary, which is added to the pool. """ return self._pool.fresh_tmp()
[docs] def fresh_offset(self) -> Offset: - """ + """ Return a new offset in the memory stack. Offsets are decreasing relative to FP. """ @@ -144,20 +144,20 @@ return Offset(FP, -8 * self._dec)
[docs] def get_offset(self) -> int: - """ + """ Return the current offset in the memory stack. """ return self._dec
def _fresh_label_name(self, name) -> str: - """ + """ Return a new unique label name based on the given string. """ self._nblabel = self._nblabel + 1 return name + "_" + str(self._nblabel) + "_" + self._name
[docs] def fresh_label(self, name) -> Label: - """ + """ Return a new label, with a unique name based on the given string. """ return Label(self._fresh_label_name(name))
@@ -171,7 +171,7 @@ def _iter_statements( listIns: List[_T], f: Callable[[_T], List[_T]]) -> List[_T | Comment]: - """Iterate over instructions. + """Iterate over instructions. For each real instruction i (not label or comment), replace it with the list of instructions given by f(i). """ @@ -191,7 +191,7 @@ def _print_code(listIns: List, fdata: FunctionData, output, init_label=None, fin_label=None, fin_div0=False, comment=None) -> None: - """ + """ Please use print_code from LinearCode or CFG, not directly this one. Print the instructions from listIns, forming fdata, on output. @@ -214,9 +214,9 @@ # We use t0 because it is caller-saved output.write(""" .text - .globl {0} + .globl {0} {0}: - li t0, {1} + li t0, {1} sub sp, sp, t0 sd ra, 0(sp) sd fp, 8(sp) @@ -226,7 +226,7 @@ if init_label is not None: # Add a jump to init_label before the generated code. output.write(""" - j {0} + j {0} """.format(init_label)) output.write("\n\n##Generated Code\n") # Generated code @@ -243,7 +243,7 @@ output.write(""" ld ra, 0(sp) ld fp, 8(sp) - li t0, {0} + li t0, {0} add sp, sp, t0 ret """.format(cardoffset)) diff --git a/docs/html/_modules/Lib/Graphes.html b/docs/html/_modules/Lib/Graphes.html index 8530b26..049b6c4 100644 --- a/docs/html/_modules/Lib/Graphes.html +++ b/docs/html/_modules/Lib/Graphes.html @@ -87,7 +87,7 @@
[docs]class GraphError(Exception): - """Exception raised for self loops. + """Exception raised for self loops. """ message: str @@ -97,7 +97,7 @@
[docs]class GeneralGraph(object): - """ + """ General class regrouping similarities between directed and non oriented graphs. The only differences between the two are: @@ -113,7 +113,7 @@ graph_dict: Dict[Any, Set] def __init__(self, graph_dict=None): - """ + """ Initializes a graph object. If no dictionary or None is given, an empty dictionary will be used. @@ -123,11 +123,11 @@ self.graph_dict = graph_dict
[docs] def vertices(self) -> List[Any]: - """Return the vertices of a graph.""" + """Return the vertices of a graph.""" return list(self.graph_dict.keys())
[docs] def add_vertex(self, vertex: Any) -> None: - """ + """ If the vertex "vertex" is not in self.graph_dict, a key "vertex" with an empty list as a value is added to the dictionary. @@ -137,7 +137,7 @@ self.graph_dict[vertex] = set()
[docs] def edges(self) -> List[Set]: - """Return the edges of the graph.""" + """Return the edges of the graph.""" return []
def __str__(self): @@ -150,7 +150,7 @@ return res
[docs] def dfs_traversal(self, root: Any) -> List[Any]: - """ + """ Compute a depth first search of the graph, from the vertex root. """ @@ -165,11 +165,11 @@ return seen
[docs] def is_reachable_from(self, v1: Any, v2: Any) -> bool: - """True if there is a path from v1 to v2.""" + """True if there is a path from v1 to v2.""" return v2 in self.dfs_traversal(v1)
[docs] def connected_components(self) -> List[List[Any]]: - """ + """ Compute the list of all connected components of the graph, each component being a list of vetices. """ @@ -183,7 +183,7 @@ return components
[docs] def bfs_traversal(self, root: Any) -> List[Any]: - """ + """ Compute a breadth first search of the graph, from the vertex root. """ @@ -199,10 +199,10 @@
[docs]class Graph(GeneralGraph): - """Class for non oriented graphs.""" + """Class for non oriented graphs."""
[docs] def edges(self) -> List[Set]: - """ + """ A static method generating the set of edges (they appear twice in the dictionnary). Return a list of sets. @@ -215,7 +215,7 @@ return edges
[docs] def add_edge(self, edge: Tuple[Any, Any]) -> None: - """ + """ Add an edge in the graph. edge should be a pair and not (c,c) (we call g.add_edge((v1,v2))) @@ -234,7 +234,7 @@ self.graph_dict[vertex2] = {vertex1}
[docs] def print_dot(self, name: str, colors={}) -> None: - """Print the graph.""" + """Print the graph.""" color_names = ['red', 'blue', 'green', 'yellow', 'cyan', 'magenta'] + \ [f"grey{i}" for i in range(0, 100, 10)] color_shapes = ['ellipse', 'box', 'diamond', 'trapezium', 'egg', @@ -261,20 +261,20 @@ dot.render(name, view=True) # print in pdf
[docs] def delete_vertex(self, vertex: Any) -> None: - """Delete a vertex and all the adjacent edges.""" + """Delete a vertex and all the adjacent edges.""" gdict = self.graph_dict for neighbour in gdict[vertex]: gdict[neighbour].remove(vertex) del gdict[vertex]
[docs] def delete_edge(self, edge: Tuple[Any, Any]): - """Delete an edge.""" + """Delete an edge.""" (v1, v2) = edge self.graph_dict[v1].remove(v2) self.graph_dict[v2].remove(v1)
[docs] def color(self) -> Dict[Any, int]: - """ + """ Color the graph with an unlimited number of colors. Return a dict vertex -> color, where color is an integer (0, 1, ...). """ @@ -283,7 +283,7 @@ # see algo of the course
[docs] def color_with_k_colors(self, K=None, avoidingnodes=()) -> Tuple[Dict[Any, int], bool, List]: - """ + """ Color with <= K colors (if K is unspecified, use unlimited colors). Return 3 values: @@ -336,18 +336,18 @@
[docs]class DiGraph(GeneralGraph): - """Class for directed graphs.""" + """Class for directed graphs."""
[docs] def pred(self, v: Any) -> Set: - """Return all predecessors of the vertex `v` in the graph.""" + """Return all predecessors of the vertex `v` in the graph.""" return {src for src, dests in self.graph_dict.items() if v in dests}
[docs] def neighbourhoods(self) -> List[Tuple[Any, Set]]: - """Return all neighbourhoods in the graph.""" + """Return all neighbourhoods in the graph.""" return list(self.graph_dict.items())
[docs] def edges(self) -> List[Set]: - """ A static method generating the set of edges""" + """ A static method generating the set of edges""" edges = [] for vertex in self.graph_dict: for neighbour in self.graph_dict[vertex]: @@ -355,7 +355,7 @@ return edges
[docs] def add_edge(self, edge: Tuple[Any, Any]) -> None: - """ + """ Add an edge in the graph. edge should be a pair and not (c,c) (we call g.add_edge((v1,v2))) @@ -369,7 +369,7 @@ self.graph_dict[vertex2] = set()
[docs] def print_dot(self, name: str) -> None: - """Print the graph.""" + """Print the graph.""" dot = Digraph(comment='Conflict Graph') for k in self.graph_dict: shape = None @@ -381,14 +381,14 @@ dot.render(name, view=True) # print in pdf
[docs] def delete_vertex(self, vertex: Any) -> None: - """Delete a vertex and all the adjacent edges.""" + """Delete a vertex and all the adjacent edges.""" for node, neighbours in self.graph_dict.items(): if vertex in neighbours: neighbours.remove(vertex) del self.graph_dict[vertex]
[docs] def delete_edge(self, edge: Tuple[Any, Any]) -> None: - """Delete an edge.""" + """Delete an edge.""" (v1, v2) = edge self.graph_dict[v1].remove(v2)
diff --git a/docs/html/_modules/Lib/LinearCode.html b/docs/html/_modules/Lib/LinearCode.html index cc12086..63046f3 100644 --- a/docs/html/_modules/Lib/LinearCode.html +++ b/docs/html/_modules/Lib/LinearCode.html @@ -97,7 +97,7 @@
[docs]class LinearCode: - """ + """ Representation of a RiscV program as a list of instructions. :py:meth:`add_instruction` is repeatedly called in the codegen visitor @@ -111,7 +111,7 @@ the RiscV program to a file. """ - """ + """ The :py:attr:`fdata` member variable contains some meta-information on the program, for instance to allocate a new temporary. See :py:class:`Lib.FunctionData.FunctionData`. @@ -125,7 +125,7 @@ self.fdata = FunctionData(name)
[docs] def add_instruction(self, i: CodeStatement) -> None: - """ + """ Utility function to add an instruction in the program. See also :py:mod:`Lib.RiscV` to generate relevant instructions. @@ -133,7 +133,7 @@ self._listIns.append(i)
[docs] def iter_statements(self, f) -> None: - """Iterate over instructions. + """Iterate over instructions. For each real instruction i (not label or comment), replace it with the list of instructions given by f(i). """ @@ -144,20 +144,20 @@ self._listIns = new_list_ins
[docs] def get_instructions(self) -> List[CodeStatement]: - """Return the list of instructions of the program.""" + """Return the list of instructions of the program.""" return self._listIns
# each instruction has its own "add in list" version
[docs] def add_label(self, s: Label) -> None: - """Add a label in the program.""" + """Add a label in the program.""" return self.add_instruction(s)
[docs] def add_comment(self, s: str) -> None: - """Add a comment in the program.""" + """Add a comment in the program.""" self.add_instruction(Comment(s))
[docs] def add_instruction_PRINTLN_INT(self, reg: DataLocation) -> None: - """Print integer value, with newline. (see Expand)""" + """Print integer value, with newline. (see Expand)""" # A print instruction generates the temp it prints. self.add_instruction(mv(A0, reg)) self.add_instruction(call(Function('println_int')))
@@ -166,12 +166,12 @@ return '\n'.join(map(str, self._listIns))
[docs] def print_code(self, output, comment=None) -> None: - """Outputs the RiscV program as text to a file at the given path.""" + """Outputs the RiscV program as text to a file at the given path.""" _print_code(self._listIns, self.fdata, output, init_label=None, fin_label=None, fin_div0=True, comment=comment)
[docs] def print_dot(self, filename: str, DF=None, view=False) -> None: # pragma: no cover - """Outputs the RiscV program as graph to a file at the given path.""" + """Outputs the RiscV program as graph to a file at the given path.""" # import graphviz here so that students who don't have it can still work on lab4 from graphviz import Digraph graph = Digraph() diff --git a/docs/html/_modules/Lib/Operands.html b/docs/html/_modules/Lib/Operands.html index e2aead9..16ce5a7 100644 --- a/docs/html/_modules/Lib/Operands.html +++ b/docs/html/_modules/Lib/Operands.html @@ -118,7 +118,7 @@
[docs]class Condition(Operand): - """Condition, i.e. comparison operand for a CondJump. + """Condition, i.e. comparison operand for a CondJump. Example usage : @@ -144,7 +144,7 @@ raise MiniCInternalError(f"Unsupported comparison operator {optype}")
[docs] def negate(self) -> 'Condition': - """Return the opposite condition.""" + """Return the opposite condition.""" return Condition(opnot_dict[self._op])
def __str__(self): @@ -152,7 +152,7 @@
[docs]class Function(Operand): - """Operand for build-in function call.""" + """Operand for build-in function call.""" _name: str @@ -164,7 +164,7 @@
[docs]class DataLocation(Operand): - """ A Data Location is either a register, a temporary + """ A Data Location is either a register, a temporary or a place in memory (offset). """ @@ -181,7 +181,7 @@
[docs]class Register(DataLocation): - """ A (physical) register.""" + """ A (physical) register.""" _number: int @@ -234,7 +234,7 @@
[docs]class Offset(DataLocation): - """ Offset = address in memory computed with base + offset.""" + """ Offset = address in memory computed with base + offset.""" _basereg: Register _offset: int @@ -247,12 +247,12 @@ return ("{}({})".format(self._offset, self._basereg))
[docs] def get_offset(self) -> int: - """Return the value of the offset.""" + """Return the value of the offset.""" return self._offset
[docs]class Immediate(DataLocation): - """Immediate operand (integer).""" + """Immediate operand (integer).""" _val: int @@ -264,7 +264,7 @@
[docs]class Temporary(DataLocation): - """Temporary, a location that has not been allocated yet. + """Temporary, a location that has not been allocated yet. It will later be mapped to a physical register (Register) or to a memory location (Offset). """ @@ -279,12 +279,12 @@ return ("temp_{}".format(str(self._number)))
[docs] def get_alloced_loc(self) -> DataLocation: - """Return the DataLocation allocated to this Temporary.""" + """Return the DataLocation allocated to this Temporary.""" return self._pool.get_alloced_loc(self)
[docs]class TemporaryPool: - """Manage a pool of temporaries.""" + """Manage a pool of temporaries.""" _all_temps: List[Temporary] _current_num: int @@ -296,20 +296,20 @@ self._allocation = dict()
[docs] def get_all_temps(self) -> List[Temporary]: - """Return all the temporaries of the pool.""" + """Return all the temporaries of the pool.""" return self._all_temps
[docs] def get_alloced_loc(self, t: Temporary) -> DataLocation: - """Get the actual DataLocation allocated for the temporary t.""" + """Get the actual DataLocation allocated for the temporary t.""" return self._allocation[t]
[docs] def add_tmp(self, t: Temporary): - """Add a temporary to the pool.""" + """Add a temporary to the pool.""" self._all_temps.append(t) self._allocation[t] = t # While no allocation, return the temporary itself
[docs] def set_temp_allocation(self, allocation: Dict[Temporary, DataLocation]) -> None: - """Give a mapping from temporaries to actual registers. + """Give a mapping from temporaries to actual registers. The argument allocation must be a dict from Temporary to DataLocation other than Temporary (typically Register or Offset). Typing enforces that keys are Temporary and values are Datalocation. @@ -322,7 +322,7 @@ self._allocation = allocation
[docs] def fresh_tmp(self) -> Temporary: - """Give a new fresh Temporary and add it to the pool.""" + """Give a new fresh Temporary and add it to the pool.""" t = Temporary(self._current_num, self) self._current_num += 1 self.add_tmp(t) @@ -330,7 +330,7 @@
[docs]class Renamer: - """Manage a renaming of temporaries.""" + """Manage a renaming of temporaries.""" _pool: TemporaryPool _env: Dict[Temporary, Temporary] @@ -340,21 +340,21 @@ self._env = dict()
[docs] def fresh(self, t: Temporary) -> Temporary: - """Give a fresh rename for a Temporary.""" + """Give a fresh rename for a Temporary.""" new_t = self._pool.fresh_tmp() self._env[t] = new_t return new_t
[docs] def replace(self, t: Temporary) -> Temporary: - """Give the rename for a Temporary (which is itself if it is not renamed).""" + """Give the rename for a Temporary (which is itself if it is not renamed).""" return self._env.get(t, t)
[docs] def defined(self, t: Temporary) -> bool: - """True if the Temporary is renamed.""" + """True if the Temporary is renamed.""" return t in self._env
[docs] def copy(self): - """Give a copy of the Renamer.""" + """Give a copy of the Renamer.""" r = Renamer(self._pool) r._env = self._env.copy() return r
diff --git a/docs/html/_modules/Lib/PhiNode.html b/docs/html/_modules/Lib/PhiNode.html index c3b36b5..3f607ff 100644 --- a/docs/html/_modules/Lib/PhiNode.html +++ b/docs/html/_modules/Lib/PhiNode.html @@ -95,7 +95,7 @@
[docs]@dataclass 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 links each corresponding predecessor in the CFG @@ -106,26 +106,26 @@ srcs: Dict[Label, Operand]
[docs] def defined(self) -> List[Operand]: - """Return the variable defined by the φ node.""" + """Return the variable defined by the φ node.""" return [self.var]
[docs] def get_srcs(self) -> Dict[Label, Operand]: - """ + """ Return the dictionnary associating for each previous block the corresponding variable. """ return self.srcs
[docs] def used(self) -> List[Operand]: - """Return the variables used by the statement.""" + """Return the variables used by the statement.""" return list(self.srcs.values())
[docs] def rename(self, renamer: Renamer) -> None: - """Rename the variable defined by the φ node with a fresh name.""" + """Rename the variable defined by the φ node with a fresh name.""" if isinstance(self.var, Temporary): self.var = renamer.fresh(self.var)
[docs] def rename_from(self, renamer: Renamer, label: Label) -> None: - """Rename the variable associated to the block identified by `label`.""" + """Rename the variable associated to the block identified by `label`.""" if label in self.srcs: t = self.srcs[label] if isinstance(t, Temporary): diff --git a/docs/html/_modules/Lib/RiscV.html b/docs/html/_modules/Lib/RiscV.html index 6e3ca50..fa3caf5 100644 --- a/docs/html/_modules/Lib/RiscV.html +++ b/docs/html/_modules/Lib/RiscV.html @@ -90,17 +90,17 @@
[docs]def call(function: Function) -> Instru3A: - """Function call.""" + """Function call.""" return Instru3A('call', function)
[docs]def jump(label: Label) -> AbsoluteJump: - """Unconditional jump to label.""" + """Unconditional jump to label.""" return AbsoluteJump(label)
[docs]def conditional_jump(label: Label, op1: Operand, cond: Condition, op2: Operand): - """Add a conditional jump to the code. + """Add a conditional jump to the code. This is a wrapper around bge, bgt, beq, ... c is a Condition, like Condition('bgt'), Condition(MiniCParser.EQ), ... """ @@ -141,12 +141,12 @@
[docs]def land(dr: Operand, sr1: Operand, sr2orimm7: Operand) -> Instru3A: - """And instruction (cannot be called `and` due to Python and).""" + """And instruction (cannot be called `and` due to Python and).""" return Instru3A("and", dr, sr1, sr2orimm7)
[docs]def lor(dr: Operand, sr1: Operand, sr2orimm7: Operand) -> Instru3A: - """Or instruction (cannot be called `or` due to Python or).""" + """Or instruction (cannot be called `or` due to Python or).""" return Instru3A("or", dr, sr1, sr2orimm7)
diff --git a/docs/html/_modules/Lib/Statement.html b/docs/html/_modules/Lib/Statement.html index d8435b7..04ea512 100644 --- a/docs/html/_modules/Lib/Statement.html +++ b/docs/html/_modules/Lib/Statement.html @@ -95,7 +95,7 @@
[docs]def regset_to_string(registerset) -> str: - """Utility function: pretty-prints a set of locations.""" + """Utility function: pretty-prints a set of locations.""" return "{" + ",".join(str(x) for x in registerset) + "}"
@@ -105,32 +105,32 @@
[docs]@dataclass(unsafe_hash=True) class Statement: - """A Statement, which is an instruction, a comment or a label.""" + """A Statement, which is an instruction, a comment or a label."""
[docs] def defined(self) -> List[Operand]: - """Operands defined (written) in this instruction""" + """Operands defined (written) in this instruction""" return []
[docs] def used(self) -> List[Operand]: - """Operands used (read) in this instruction""" + """Operands used (read) in this instruction""" return []
[docs] def substitute(self: TStatement, subst: Dict[Operand, Operand]) -> TStatement: - """Return a new instruction, cloned from this one, replacing operands + """Return a new instruction, cloned from this one, replacing operands that appear as key in subst by their value.""" raise Exception( "substitute: Operands {} are not present in instruction {}" .format(subst, self))
[docs] def with_args(self: TStatement, new_args: List[Operand]) -> TStatement: - """Return a new instruction, cloned from this one, where operands have + """Return a new instruction, cloned from this one, where operands have been replaced by new_args.""" raise Exception( "substitute: Operands {} are not present in instruction {}" .format(new_args, self))
[docs] def printIns(self, stream): - """ + """ Print the statement on the given output. Should never be called on the base class. """ @@ -139,7 +139,7 @@
[docs]@dataclass(unsafe_hash=True) class Comment(Statement): - """A comment.""" + """A comment.""" comment: str def __str__(self): # use only for print_dot ! @@ -151,7 +151,7 @@
[docs]@dataclass(unsafe_hash=True) class Label(Statement, Operand): - """A label is both a Statement and an Operand.""" + """A label is both a Statement and an Operand.""" name: str def __str__(self): @@ -170,7 +170,7 @@ _read_only: bool
[docs] def is_read_only(self): - """ + """ True if the instruction only reads from its operands. Otherwise, the first operand is considered as the destination @@ -182,7 +182,7 @@ raise NotImplementedError
[docs] def args(self) -> List[Operand]: - """List of operands the instruction takes""" + """List of operands the instruction takes""" raise NotImplementedError
[docs] def defined(self): @@ -214,7 +214,7 @@ return hash((self.ins, *self.args()))
[docs] def printIns(self, stream): - """Print the instruction on the given output.""" + """Print the instruction on the given output.""" print(' ', str(self), file=stream)
@@ -273,7 +273,7 @@
[docs]@dataclass(init=False) class AbsoluteJump(Instruction): - """ An Absolute Jump is a specific kind of instruction""" + """ An Absolute Jump is a specific kind of instruction""" ins = "j" label: Label _read_only = True @@ -305,13 +305,13 @@ return hash(super)
[docs] def targets(self) -> List[Label]: - """Return the labels targetted by the AbsoluteJump.""" + """Return the labels targetted by the AbsoluteJump.""" return [self.label]
[docs]@dataclass(init=False) class ConditionalJump(Instruction): - """ A Conditional Jump is a specific kind of instruction""" + """ A Conditional Jump is a specific kind of instruction""" cond: Condition label: Label op1: Operand diff --git a/docs/html/_modules/Lib/Terminator.html b/docs/html/_modules/Lib/Terminator.html index 2194c58..f0c0dc8 100644 --- a/docs/html/_modules/Lib/Terminator.html +++ b/docs/html/_modules/Lib/Terminator.html @@ -108,7 +108,7 @@
[docs]@dataclass(unsafe_hash=True) class Return(Statement): - """A terminator that marks the end of the function.""" + """A terminator that marks the end of the function.""" def __str__(self): return ("return") @@ -117,7 +117,7 @@ print("return", file=stream)
[docs] def targets(self) -> List[Label]: - """Return the labels targetted by the Return terminator.""" + """Return the labels targetted by the Return terminator.""" return []
[docs] def args(self) -> List[Operand]: @@ -146,7 +146,7 @@
[docs]@dataclass(init=False) class BranchingTerminator(Instruction): - """A terminating statement with a condition.""" + """A terminating statement with a condition.""" #: The condition of the branch cond: Condition @@ -173,7 +173,7 @@ return [self.op1, self.op2, self.label_then, self.label_else]
[docs] def targets(self) -> List[Label]: - """Return the labels targetted by the Branching terminator.""" + """Return the labels targetted by the Branching terminator.""" return [self.label_then, self.label_else]
[docs] def rename(self, renamer: Renamer): @@ -213,7 +213,7 @@
[docs]def jump2terminator(j: ConditionalJump | AbsoluteJump | None, next_label: Label | None) -> Terminator: - """ + """ Construct the Terminator associated to the potential jump j to the potential label next_label. """ @@ -227,7 +227,7 @@ return BranchingTerminator(j.cond, j.op1, j.op2, j.label, label_else) case AbsoluteJump(): return AbsoluteJump(label=j.label) - case _: + case _: if next_label: return AbsoluteJump(next_label) else: diff --git a/docs/html/api/Lib.Allocator.html b/docs/html/api/Lib.Allocator.html index a9bb12c..585183a 100644 --- a/docs/html/api/Lib.Allocator.html +++ b/docs/html/api/Lib.Allocator.html @@ -1,7 +1,7 @@ - + Lib.Allocator module — MiniC documentation diff --git a/docs/html/api/Lib.CFG.html b/docs/html/api/Lib.CFG.html index 68bbd2c..f978664 100644 --- a/docs/html/api/Lib.CFG.html +++ b/docs/html/api/Lib.CFG.html @@ -1,7 +1,7 @@ - + Lib.CFG module — MiniC documentation diff --git a/docs/html/api/Lib.Dominators.html b/docs/html/api/Lib.Dominators.html index 9fe1b1f..be0cfe3 100644 --- a/docs/html/api/Lib.Dominators.html +++ b/docs/html/api/Lib.Dominators.html @@ -1,7 +1,7 @@ - + Lib.Dominators module — MiniC documentation diff --git a/docs/html/api/Lib.Errors.html b/docs/html/api/Lib.Errors.html index b0f8251..f1c4dd0 100644 --- a/docs/html/api/Lib.Errors.html +++ b/docs/html/api/Lib.Errors.html @@ -1,7 +1,7 @@ - + Lib.Errors module — MiniC documentation diff --git a/docs/html/api/Lib.FunctionData.html b/docs/html/api/Lib.FunctionData.html index 1da9c94..b713ba6 100644 --- a/docs/html/api/Lib.FunctionData.html +++ b/docs/html/api/Lib.FunctionData.html @@ -1,7 +1,7 @@ - + Lib.FunctionData module — MiniC documentation diff --git a/docs/html/api/Lib.Graphes.html b/docs/html/api/Lib.Graphes.html index e917ae8..8715b63 100644 --- a/docs/html/api/Lib.Graphes.html +++ b/docs/html/api/Lib.Graphes.html @@ -1,7 +1,7 @@ - + Lib.Graphes module — MiniC documentation diff --git a/docs/html/api/Lib.LinearCode.html b/docs/html/api/Lib.LinearCode.html index 428159c..135da3e 100644 --- a/docs/html/api/Lib.LinearCode.html +++ b/docs/html/api/Lib.LinearCode.html @@ -1,7 +1,7 @@ - + Lib.LinearCode module — MiniC documentation diff --git a/docs/html/api/Lib.Operands.html b/docs/html/api/Lib.Operands.html index c6babbb..77fd567 100644 --- a/docs/html/api/Lib.Operands.html +++ b/docs/html/api/Lib.Operands.html @@ -1,7 +1,7 @@ - + Lib.Operands module — MiniC documentation diff --git a/docs/html/api/Lib.PhiNode.html b/docs/html/api/Lib.PhiNode.html index 22ab0ee..30d9044 100644 --- a/docs/html/api/Lib.PhiNode.html +++ b/docs/html/api/Lib.PhiNode.html @@ -1,7 +1,7 @@ - + Lib.PhiNode module — MiniC documentation diff --git a/docs/html/api/Lib.RiscV.html b/docs/html/api/Lib.RiscV.html index db2c035..43d0bb6 100644 --- a/docs/html/api/Lib.RiscV.html +++ b/docs/html/api/Lib.RiscV.html @@ -1,7 +1,7 @@ - + Lib.RiscV module — MiniC documentation diff --git a/docs/html/api/Lib.Statement.html b/docs/html/api/Lib.Statement.html index b67d408..5372635 100644 --- a/docs/html/api/Lib.Statement.html +++ b/docs/html/api/Lib.Statement.html @@ -1,7 +1,7 @@ - + Lib.Statement module — MiniC documentation diff --git a/docs/html/api/Lib.Terminator.html b/docs/html/api/Lib.Terminator.html index 769a35a..b1bac9f 100644 --- a/docs/html/api/Lib.Terminator.html +++ b/docs/html/api/Lib.Terminator.html @@ -1,7 +1,7 @@ - + Lib.Terminator module — MiniC documentation diff --git a/docs/html/api/Lib.html b/docs/html/api/Lib.html index 7870a6f..56b21c3 100644 --- a/docs/html/api/Lib.html +++ b/docs/html/api/Lib.html @@ -1,7 +1,7 @@ - + Lib package — MiniC documentation diff --git a/docs/html/api/modules.html b/docs/html/api/modules.html index 013bbb6..e20adb6 100644 --- a/docs/html/api/modules.html +++ b/docs/html/api/modules.html @@ -1,7 +1,7 @@ - + MiniC — MiniC documentation diff --git a/docs/html/index.html b/docs/html/index.html index 7868ea9..18c304a 100644 --- a/docs/html/index.html +++ b/docs/html/index.html @@ -1,7 +1,7 @@ - + Welcome to MiniC’s documentation! — MiniC documentation