From 861e84f909b811a43875cde13c5f788496b8a2de Mon Sep 17 00:00:00 2001 From: BuildTools Date: Sun, 20 Oct 2024 19:14:34 +0200 Subject: [PATCH] =?UTF-8?q?mise=20=C3=A0=20jour=20pour=20tp5a?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- MiniC/Makefile | 2 +- MiniC/test_codegen.py | 1 + TP05/tp5a.pdf | Bin 0 -> 113010 bytes docs/html/_modules/Lib/Allocator.html | 3 + docs/html/_modules/Lib/CFG.html | 3 + docs/html/_modules/Lib/Dominators.html | 239 ++++++++++ docs/html/_modules/Lib/Errors.html | 3 + docs/html/_modules/Lib/FunctionData.html | 3 + docs/html/_modules/Lib/Graphes.html | 423 ++++++++++++++++++ docs/html/_modules/Lib/LinearCode.html | 3 + docs/html/_modules/Lib/Operands.html | 3 + docs/html/_modules/Lib/PhiNode.html | 173 +++++++ docs/html/_modules/Lib/RiscV.html | 3 + docs/html/_modules/Lib/Statement.html | 3 + docs/html/_modules/Lib/Terminator.html | 3 + docs/html/_modules/index.html | 6 + docs/html/_sources/api/Lib.Dominators.rst.txt | 7 + docs/html/_sources/api/Lib.Graphes.rst.txt | 7 + docs/html/_sources/api/Lib.PhiNode.rst.txt | 7 + docs/html/_sources/api/Lib.rst.txt | 3 + docs/html/api/Lib.Allocator.html | 3 + docs/html/api/Lib.CFG.html | 3 + docs/html/api/Lib.Dominators.html | 161 +++++++ docs/html/api/Lib.Errors.html | 3 + docs/html/api/Lib.FunctionData.html | 7 +- docs/html/api/Lib.Graphes.html | 352 +++++++++++++++ docs/html/api/Lib.LinearCode.html | 7 +- docs/html/api/Lib.Operands.html | 3 + docs/html/api/Lib.PhiNode.html | 191 ++++++++ docs/html/api/Lib.RiscV.html | 3 + docs/html/api/Lib.Statement.html | 3 + docs/html/api/Lib.Terminator.html | 5 + docs/html/api/Lib.html | 62 +++ docs/html/api/modules.html | 21 + docs/html/genindex.html | 158 ++++++- docs/html/index.html | 68 ++- docs/html/objects.inv | Bin 1631 -> 1963 bytes docs/html/py-modindex.html | 18 + docs/html/search.html | 3 + docs/html/searchindex.js | 2 +- 40 files changed, 1947 insertions(+), 21 deletions(-) create mode 100644 TP05/tp5a.pdf create mode 100644 docs/html/_modules/Lib/Dominators.html create mode 100644 docs/html/_modules/Lib/Graphes.html create mode 100644 docs/html/_modules/Lib/PhiNode.html create mode 100644 docs/html/_sources/api/Lib.Dominators.rst.txt create mode 100644 docs/html/_sources/api/Lib.Graphes.rst.txt create mode 100644 docs/html/_sources/api/Lib.PhiNode.rst.txt create mode 100644 docs/html/api/Lib.Dominators.html create mode 100644 docs/html/api/Lib.Graphes.html create mode 100644 docs/html/api/Lib.PhiNode.html diff --git a/MiniC/Makefile b/MiniC/Makefile index e37becc..82a722e 100644 --- a/MiniC/Makefile +++ b/MiniC/Makefile @@ -2,7 +2,7 @@ MYNAME = JohnDoe PACKAGE = MiniC # Example: stop at the first failed test: # make PYTEST_OPTS=-x test -PYTEST_OPTS = +PYTEST_OPTS = # Run the whole test infrastructure for a subset of test files e.g. # make FILTER='TP03/**/bad*.c' test ifdef FILTER diff --git a/MiniC/test_codegen.py b/MiniC/test_codegen.py index 05228cb..75e961e 100755 --- a/MiniC/test_codegen.py +++ b/MiniC/test_codegen.py @@ -85,6 +85,7 @@ ALL_IN_MEM_FILES.sort() ALL_FILES = list(set(ALL_FILES)) ALL_FILES.sort() + class TestCodeGen(TestExpectPragmas, TestCompiler): DISABLE_CODEGEN = DISABLE_CODEGEN SKIP_NOT_IMPLEMENTED = SKIP_NOT_IMPLEMENTED diff --git a/TP05/tp5a.pdf b/TP05/tp5a.pdf new file mode 100644 index 0000000000000000000000000000000000000000..2f7a69331c1322f5281b37724475c3e0190c2656 GIT binary patch literal 113010 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 library - RISC-V instructions
  • Base library - Operands
  • Base library - Function data
  • +
  • Base library - Graphs
  • Linear intermediate representation
  • Temporary allocation
  • Control Flow Graph - CFG and Basic blocks
  • Control Flow Graph - Terminators
  • +
  • SSA form - Dominance frontier
  • +
  • SSA form - Phi Nodes
  • diff --git a/docs/html/_modules/Lib/CFG.html b/docs/html/_modules/Lib/CFG.html index c9a0886..6764529 100644 --- a/docs/html/_modules/Lib/CFG.html +++ b/docs/html/_modules/Lib/CFG.html @@ -45,10 +45,13 @@
  • Base library - RISC-V instructions
  • Base library - Operands
  • Base library - Function data
  • +
  • Base library - Graphs
  • Linear intermediate representation
  • Temporary allocation
  • Control Flow Graph - CFG and Basic blocks
  • Control Flow Graph - Terminators
  • +
  • SSA form - Dominance frontier
  • +
  • SSA form - Phi Nodes
  • diff --git a/docs/html/_modules/Lib/Dominators.html b/docs/html/_modules/Lib/Dominators.html new file mode 100644 index 0000000..657816f --- /dev/null +++ b/docs/html/_modules/Lib/Dominators.html @@ -0,0 +1,239 @@ + + + + + + Lib.Dominators — MiniC documentation + + + + + + + + + + + + + + +
    + + +
    + +
    +
    +
    + +
    +
    +
    +
    + +

    Source code for Lib.Dominators

    +"""
    +Utility functions to work with dominators in a :py:class:`CFG <Lib.CFG.CFG>`.
    +
    +Do not hesitate to look at the source of the functions
    +to get a better understanding of the algorithms.
    +"""
    +
    +from typing import Dict, Set
    +from graphviz import Digraph
    +from Lib.CFG import Block, CFG
    +
    +
    +
    [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. + + This is an helper function called during SSA entry. + """ + all_blocks: Set[Block] = set(cfg.get_blocks()) + dominators: Dict[Block, Set[Block]] = dict() + for b in all_blocks: + if b.get_in(): # If b has some predecessor + dominators[b] = all_blocks + else: # If b has no predecessors + dominators[b] = {b} + new_dominators: Dict[Block, Set[Block]] = dict() + while True: + for b in all_blocks: + if b.get_in(): + dom_preds = [dominators[b2] for b2 in b.get_in()] + new_dominators[b] = {b}.union(set.intersection(*dom_preds)) + else: + new_dominators[b] = {b} + if dominators == new_dominators: + break + else: + dominators = new_dominators + new_dominators = dict() + return dominators
    + + +
    [docs]def printDT(filename: str, graph: Dict[Block, Set[Block]]) -> None: # pragma: no cover + """Display a graphical rendering of the given domination tree.""" + dot = Digraph() + for k in graph: + dot.node(str(k.get_label())) + for k in graph: + for v in graph[k]: + dot.edge(str(k.get_label()), str(v.get_label())) + dot.render(filename, view=True)
    + + +
    [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 + in the dominator tree. + + This is an helper function called during SSA entry. + """ + # First, compute the immediate dominators + idominators: Dict[Block, Block] = {} + for b, doms in dominators.items(): + # The immediate dominator of b is the unique vertex n ≠ b + # which dominates b and is dominated by all vertices in Dom(b) − b. + strict_doms = doms - {b} + idoms = set() + for n in strict_doms: + if strict_doms.issubset(dominators[n]): + idoms.add(n) + if idoms: + assert (len(idoms) == 1) + idominators[b] = idoms.pop() + # Then, simply inverse the relation to obtain the domination tree + DT = {b: set() for b in cfg.get_blocks()} + for i, idominator in idominators.items(): + DT[idominator].add(i) + # Print the domination tree if asked + if dom_graphs: + s = "{}.{}.ssa.DT.dot".format(basename, cfg.fdata.get_name()) + print("SSA - domination tree graph:", s) + printDT(s, DT) + return DT
    + + +def _computeDF_at_block( + cfg: CFG, + dominators: Dict[Block, Set[Block]], + 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`. + + This is an helper function called during SSA entry. + """ + S: Set[Block] = {succ for succ in cfg.out_blocks(b) if succ not in DT[b]} + for b_succ in DT[b]: + _computeDF_at_block(cfg, dominators, DT, b_succ, DF) + for b_frontier in DF[b_succ]: + if b not in (dominators[b_frontier] - {b_frontier}): + S.add(b_frontier) + DF[b] = S + + +
    [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. + + This is an helper function called during SSA entry. + """ + DF: Dict[Block, Set[Block]] = dict() + for b_entry in cfg.get_entries(): + _computeDF_at_block(cfg, dominators, DT, b_entry, DF) + # Print the domination frontier on the CFG if asked + if dom_graphs: + s = "{}.{}.ssa.DF.dot".format(basename, cfg.fdata.get_name()) + print("SSA - dominance frontier graph:", s) + cfg.print_dot(s, DF, True) + return DF
    +
    + +
    +
    + +
    +
    +
    +
    + + + + \ No newline at end of file diff --git a/docs/html/_modules/Lib/Errors.html b/docs/html/_modules/Lib/Errors.html index 6d661b7..8b2c260 100644 --- a/docs/html/_modules/Lib/Errors.html +++ b/docs/html/_modules/Lib/Errors.html @@ -45,10 +45,13 @@
  • Base library - RISC-V instructions
  • Base library - Operands
  • Base library - Function data
  • +
  • Base library - Graphs
  • Linear intermediate representation
  • Temporary allocation
  • Control Flow Graph - CFG and Basic blocks
  • Control Flow Graph - Terminators
  • +
  • SSA form - Dominance frontier
  • +
  • SSA form - Phi Nodes
  • diff --git a/docs/html/_modules/Lib/FunctionData.html b/docs/html/_modules/Lib/FunctionData.html index c0e5908..ef804b1 100644 --- a/docs/html/_modules/Lib/FunctionData.html +++ b/docs/html/_modules/Lib/FunctionData.html @@ -45,10 +45,13 @@
  • Base library - RISC-V instructions
  • Base library - Operands
  • Base library - Function data
  • +
  • Base library - Graphs
  • Linear intermediate representation
  • Temporary allocation
  • Control Flow Graph - CFG and Basic blocks
  • Control Flow Graph - Terminators
  • +
  • SSA form - Dominance frontier
  • +
  • SSA form - Phi Nodes
  • diff --git a/docs/html/_modules/Lib/Graphes.html b/docs/html/_modules/Lib/Graphes.html new file mode 100644 index 0000000..8530b26 --- /dev/null +++ b/docs/html/_modules/Lib/Graphes.html @@ -0,0 +1,423 @@ + + + + + + Lib.Graphes — MiniC documentation + + + + + + + + + + + + + + +
    + + +
    + +
    +
    +
    + +
    +
    +
    +
    + +

    Source code for Lib.Graphes

    +""" Python Classes for Oriented and Non Oriented Graphs
    +"""
    +
    +from graphviz import Digraph  # for dot output
    +from typing import List, Dict, Set, Tuple, Any
    +
    +
    +
    [docs]class GraphError(Exception): + """Exception raised for self loops. + """ + + message: str + + def __init__(self, message: str): + self.message = message
    + + +
    [docs]class GeneralGraph(object): + """ + General class regrouping similarities + between directed and non oriented graphs. + The only differences between the two are: + + - how to compute the set of edges + - how to add an edge + - how to print the graph + - how to delete a vertex + - how to delete an edge + - we only color undirected graphs + """ + + 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. + """ + if graph_dict is None: + graph_dict = {} + self.graph_dict = graph_dict + +
    [docs] def vertices(self) -> List[Any]: + """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. + Otherwise nothing has to be done. + """ + if vertex not in self.graph_dict: + self.graph_dict[vertex] = set()
    + +
    [docs] def edges(self) -> List[Set]: + """Return the edges of the graph.""" + return []
    + + def __str__(self): + res = "vertices: " + for k in self.graph_dict: + res += str(k) + " " + res += "\nedges: " + for edge in self.edges(): + res += str(edge) + " " + return res + +
    [docs] def dfs_traversal(self, root: Any) -> List[Any]: + """ + Compute a depth first search of the graph, + from the vertex root. + """ + seen: List[Any] = [] + todo: List[Any] = [root] + while len(todo) > 0: # while todo ... + current = todo.pop() + seen.append(current) + for neighbour in self.graph_dict[current]: + if neighbour not in seen: + todo.append(neighbour) + return seen
    + +
    [docs] def is_reachable_from(self, v1: Any, v2: Any) -> bool: + """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. + """ + components: List[List[Any]] = [] + done: List[Any] = [] + for v in self.vertices(): + if v not in done: + v_comp = self.dfs_traversal(v) + components.append(v_comp) + done.extend(v_comp) + return components
    + +
    [docs] def bfs_traversal(self, root: Any) -> List[Any]: + """ + Compute a breadth first search of the graph, + from the vertex root. + """ + seen: List[Any] = [] + todo: List[Any] = [root] + while len(todo) > 0: # while todo ... + current = todo.pop(0) # list.pop(0): for dequeuing (on the left...) ! + seen.append(current) + for neighbour in self.graph_dict[current]: + if neighbour not in seen: + todo.append(neighbour) + return seen
    + + +
    [docs]class Graph(GeneralGraph): + """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. + """ + edges = [] + for vertex in self.graph_dict: + for neighbour in self.graph_dict[vertex]: + if {neighbour, vertex} not in edges: + edges.append({vertex, neighbour}) + 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))) + """ + (vertex1, vertex2) = edge + if vertex1 == vertex2: + raise GraphError("Cannot add a self loop on vertex {} in an unoriented graph.".format( + str(vertex1))) + if vertex1 in self.graph_dict: + self.graph_dict[vertex1].add(vertex2) + else: + self.graph_dict[vertex1] = {vertex2} + if vertex2 in self.graph_dict: + self.graph_dict[vertex2].add(vertex1) + else: + self.graph_dict[vertex2] = {vertex1}
    + +
    [docs] def print_dot(self, name: str, colors={}) -> None: + """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', + 'parallelogram', 'house', 'triangle', 'pentagon', 'hexagon', + 'septagon', 'octagon'] + dot = Digraph(comment='Conflict Graph') + for k in self.graph_dict: + shape = None + if not colors: + color = "red" # Graph not colored: red for everyone + elif k not in colors: + color = "grey" # Node not colored: grey + else: + n = colors[k] + if n < len(color_names): + color = color_names[colors[k]] + else: + color = "black" # Too many colors anyway, it won't be readable. + shape = color_shapes[n % len(color_shapes)] + dot.node(str(k), color=color, shape=shape) + for (v1, v2) in self.edges(): + dot.edge(str(v1), str(v2), dir="none") + # print(dot.source) + dot.render(name, view=True) # print in pdf
    + +
    [docs] def delete_vertex(self, vertex: Any) -> None: + """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.""" + (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, ...). + """ + coloring, _, _ = self.color_with_k_colors() + return coloring
    + + # 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: + + - a dict vertex -> color + - a Boolean, True if the coloring succeeded + - the set of nodes actually colored + + Do not color vertices belonging to avoidingnodes. + + Continue even if the algo fails. + """ + if K is None: + K = len(self.graph_dict) + todo_vertices = [] + is_total = True + gcopy = Graph(self.graph_dict.copy()) + # suppress nodes that are not to be considered. + for node in avoidingnodes: + gcopy.delete_vertex(node) + # append nodes in the list according to their degree and node number: + while gcopy.graph_dict: + todo = list(gcopy.graph_dict) + todo.sort(key=lambda v: (len(gcopy.graph_dict[v]), str(v))) + lower = todo[0] + todo_vertices.append(lower) + gcopy.delete_vertex(lower) + # Now reverse the list: first elements are those with higher degree + # print(todo_vertices) + todo_vertices.reverse() # in place reversal + # print(todo_vertices) + coloring = {} + colored_nodes = [] + # gdict will be the coloring map to return + gdict = self.graph_dict + for v in todo_vertices: + seen_neighbours = [x for x in gdict[v] if x in coloring] + choose_among = [i for i in range(K) if not ( + i in [coloring[v1] for v1 in seen_neighbours])] + if choose_among: + # if the node can be colored, I choose the minimal color. + color = min(choose_among) + coloring[v] = color + colored_nodes.append(v) + else: + # if I cannot color some node, the coloring is not Total + # but I continue + is_total = False + return (coloring, is_total, colored_nodes)
    + + +
    [docs]class DiGraph(GeneralGraph): + """Class for directed graphs.""" + +
    [docs] def pred(self, v: Any) -> Set: + """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 list(self.graph_dict.items())
    + +
    [docs] def edges(self) -> List[Set]: + """ A static method generating the set of edges""" + edges = [] + for vertex in self.graph_dict: + for neighbour in self.graph_dict[vertex]: + edges.append((vertex, neighbour)) + 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))) + """ + (vertex1, vertex2) = edge + if vertex1 in self.graph_dict: + self.graph_dict[vertex1].add(vertex2) + else: + self.graph_dict[vertex1] = {vertex2} + if vertex2 not in self.graph_dict: + self.graph_dict[vertex2] = set()
    + +
    [docs] def print_dot(self, name: str) -> None: + """Print the graph.""" + dot = Digraph(comment='Conflict Graph') + for k in self.graph_dict: + shape = None + color = "grey" + dot.node(str(k), color=color, shape=shape) + for (v1, v2) in self.edges(): + dot.edge(str(v1), str(v2), dir="none") + # print(dot.source) + dot.render(name, view=True) # print in pdf
    + +
    [docs] def delete_vertex(self, vertex: Any) -> None: + """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.""" + (v1, v2) = edge + self.graph_dict[v1].remove(v2)
    +
    + +
    +
    + +
    +
    +
    +
    + + + + \ No newline at end of file diff --git a/docs/html/_modules/Lib/LinearCode.html b/docs/html/_modules/Lib/LinearCode.html index af2b72f..cc12086 100644 --- a/docs/html/_modules/Lib/LinearCode.html +++ b/docs/html/_modules/Lib/LinearCode.html @@ -45,10 +45,13 @@
  • Base library - RISC-V instructions
  • Base library - Operands
  • Base library - Function data
  • +
  • Base library - Graphs
  • Linear intermediate representation
  • Temporary allocation
  • Control Flow Graph - CFG and Basic blocks
  • Control Flow Graph - Terminators
  • +
  • SSA form - Dominance frontier
  • +
  • SSA form - Phi Nodes
  • diff --git a/docs/html/_modules/Lib/Operands.html b/docs/html/_modules/Lib/Operands.html index befdd1f..e2aead9 100644 --- a/docs/html/_modules/Lib/Operands.html +++ b/docs/html/_modules/Lib/Operands.html @@ -45,10 +45,13 @@
  • Base library - RISC-V instructions
  • Base library - Operands
  • Base library - Function data
  • +
  • Base library - Graphs
  • Linear intermediate representation
  • Temporary allocation
  • Control Flow Graph - CFG and Basic blocks
  • Control Flow Graph - Terminators
  • +
  • SSA form - Dominance frontier
  • +
  • SSA form - Phi Nodes
  • diff --git a/docs/html/_modules/Lib/PhiNode.html b/docs/html/_modules/Lib/PhiNode.html new file mode 100644 index 0000000..6165fcc --- /dev/null +++ b/docs/html/_modules/Lib/PhiNode.html @@ -0,0 +1,173 @@ + + + + + + Lib.PhiNode — MiniC documentation + + + + + + + + + + + + + + +
    + + +
    + +
    +
    +
    + +
    +
    +
    +
    + +

    Source code for Lib.PhiNode

    +"""
    +Classes for φ nodes in a RiscV CFG :py:class:`CFG <Lib.CFG.CFG>` under SSA Form:
    +:py:class:`PhiNode` for a statement of the form temp_x = φ(temp_0, ..., temp_n).
    +These particular kinds of statements are expected to be in the field
    +b._phis for a :py:class:`Block <Lib.CFG.Block>` b.
    +"""
    +
    +from dataclasses import dataclass
    +from typing import List, Dict
    +
    +from Lib.Operands import Operand, Temporary, DataLocation, Renamer
    +from Lib.Statement import Statement, Label
    +
    +
    +
    [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 relies for each precedent block in the CFG, identified with its label, + the variable temp_i of the φ node. + """ + var: DataLocation + srcs: Dict[Label, Operand] + +
    [docs] def defined(self) -> List[Operand]: + """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 list(self.srcs.values())
    + +
    [docs] def rename(self, renamer: Renamer) -> None: + """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`.""" + if label in self.srcs: + t = self.srcs[label] + if isinstance(t, Temporary): + if renamer.defined(t): + self.srcs[label] = renamer.replace(t) + else: + del self.srcs[label]
    + + def __str__(self): + return "{} = φ({})".format(self.var, self.srcs) + + def __hash__(self): + return hash((self.var, *self.srcs.items())) + +
    [docs] def printIns(self, stream): + print(' # ' + str(self), file=stream)
    +
    + +
    +
    + +
    +
    +
    +
    + + + + \ No newline at end of file diff --git a/docs/html/_modules/Lib/RiscV.html b/docs/html/_modules/Lib/RiscV.html index 9ecc4f4..6e3ca50 100644 --- a/docs/html/_modules/Lib/RiscV.html +++ b/docs/html/_modules/Lib/RiscV.html @@ -45,10 +45,13 @@
  • Base library - RISC-V instructions
  • Base library - Operands
  • Base library - Function data
  • +
  • Base library - Graphs
  • Linear intermediate representation
  • Temporary allocation
  • Control Flow Graph - CFG and Basic blocks
  • Control Flow Graph - Terminators
  • +
  • SSA form - Dominance frontier
  • +
  • SSA form - Phi Nodes
  • diff --git a/docs/html/_modules/Lib/Statement.html b/docs/html/_modules/Lib/Statement.html index 66469b0..d8435b7 100644 --- a/docs/html/_modules/Lib/Statement.html +++ b/docs/html/_modules/Lib/Statement.html @@ -45,10 +45,13 @@
  • Base library - RISC-V instructions
  • Base library - Operands
  • Base library - Function data
  • +
  • Base library - Graphs
  • Linear intermediate representation
  • Temporary allocation
  • Control Flow Graph - CFG and Basic blocks
  • Control Flow Graph - Terminators
  • +
  • SSA form - Dominance frontier
  • +
  • SSA form - Phi Nodes
  • diff --git a/docs/html/_modules/Lib/Terminator.html b/docs/html/_modules/Lib/Terminator.html index 80942ff..2194c58 100644 --- a/docs/html/_modules/Lib/Terminator.html +++ b/docs/html/_modules/Lib/Terminator.html @@ -45,10 +45,13 @@
  • Base library - RISC-V instructions
  • Base library - Operands
  • Base library - Function data
  • +
  • Base library - Graphs
  • Linear intermediate representation
  • Temporary allocation
  • Control Flow Graph - CFG and Basic blocks
  • Control Flow Graph - Terminators
  • +
  • SSA form - Dominance frontier
  • +
  • SSA form - Phi Nodes
  • diff --git a/docs/html/_modules/index.html b/docs/html/_modules/index.html index 2c66b33..b5eeb28 100644 --- a/docs/html/_modules/index.html +++ b/docs/html/_modules/index.html @@ -45,10 +45,13 @@
  • Base library - RISC-V instructions
  • Base library - Operands
  • Base library - Function data
  • +
  • Base library - Graphs
  • Linear intermediate representation
  • Temporary allocation
  • Control Flow Graph - CFG and Basic blocks
  • Control Flow Graph - Terminators
  • +
  • SSA form - Dominance frontier
  • +
  • SSA form - Phi Nodes
  • @@ -77,10 +80,13 @@

    All modules for which code is available

    diff --git a/docs/html/api/Lib.FunctionData.html b/docs/html/api/Lib.FunctionData.html index ee298fd..1da9c94 100644 --- a/docs/html/api/Lib.FunctionData.html +++ b/docs/html/api/Lib.FunctionData.html @@ -18,7 +18,7 @@ - + @@ -59,10 +59,13 @@ +
  • Base library - Graphs
  • Linear intermediate representation
  • Temporary allocation
  • Control Flow Graph - CFG and Basic blocks
  • Control Flow Graph - Terminators
  • +
  • SSA form - Dominance frontier
  • +
  • SSA form - Phi Nodes
  • @@ -151,7 +154,7 @@ Offsets are decreasing relative to FP.