Skip to content
Snippets Groups Projects
Commit 603dafd5 authored by Rafael Ravedutti Lucio Machado's avatar Rafael Ravedutti Lucio Machado
Browse files

Fix LICM visitors and just render graph instead of viewing it

parent 6ea3745d
No related branches found
No related tags found
No related merge requests found
......@@ -19,9 +19,9 @@ class Visitor:
if method is not None:
method(ast_node)
else:
self.keep_visiting(ast_node)
self.visit_children(ast_node)
def keep_visiting(self, ast_node):
def visit_children(self, ast_node):
for c in ast_node.children():
self.visit(c)
......
......@@ -14,7 +14,7 @@ class ASTGraph:
self.graph.attr(size='6,6')
self.visitor = Visitor(ast_node, max_depth=max_depth)
def generate_and_view(self):
def render(self):
def generate_edges_for_node(ast_node, graph, generated):
node_id = id(ast_node)
if not isinstance(ast_node, BinOpDef) and node_id not in generated:
......@@ -31,6 +31,9 @@ class ASTGraph:
for node in self.visitor:
generate_edges_for_node(node, self.graph, generated)
self.graph.render()
def view(self):
self.graph.view()
def get_node_label(ast_node):
......
......@@ -199,5 +199,5 @@ class ParticleSimulation:
flatten_property_accesses(program)
simplify_expressions(program)
ASTGraph(self.kernels.lower(), "kernels").generate_and_view()
ASTGraph(self.kernels.lower(), "kernels").render()
self.code_gen.generate_program(self, program)
......@@ -55,37 +55,45 @@ class SetParentBlock(Visitor):
def visit_Assign(self, ast_node):
ast_node.parent_block = self.current_block
self.keep_visiting(ast_node)
self.visit_children(ast_node)
def visit_Block(self, ast_node):
ast_node.parent_block = self.current_block
self.blocks.append(ast_node)
self.keep_visiting(ast_node)
self.visit_children(ast_node)
self.blocks.pop()
def visit_BinOpDef(self, ast_node):
ast_node.parent_block = self.current_block
self.keep_visiting(ast_node)
self.visit_children(ast_node)
def visit_Branch(self, ast_node):
ast_node.parent_block = self.current_block
self.keep_visiting(ast_node)
self.visit_children(ast_node)
def visit_Filter(self, ast_node):
ast_node.parent_block = self.current_block
self.visit_children(ast_node)
def visit_For(self, ast_node):
ast_node.parent_block = self.current_block
self.keep_visiting(ast_node)
self.visit_children(ast_node)
def visit_ParticleFor(self, ast_node):
ast_node.parent_block = self.current_block
self.visit_children(ast_node)
def visit_Malloc(self, ast_node):
ast_node.parent_block = self.current_block
self.keep_visiting(ast_node)
self.visit_children(ast_node)
def visit_Realloc(self, ast_node):
ast_node.parent_block = self.current_block
self.keep_visiting(ast_node)
self.visit_children(ast_node)
def visit_While(self, ast_node):
ast_node.parent_block = self.current_block
self.keep_visiting(ast_node)
self.visit_children(ast_node)
def get_loop_parent_block(self, ast_node):
assert isinstance(ast_node, (For, While)), "Node must be a loop!"
......@@ -113,5 +121,5 @@ def move_loop_invariant_code(ast):
set_parent_block.visit()
set_block_variants = SetBlockVariants(ast)
set_block_variants.mutate()
licm = LICM(ast, set_loop_parents)
licm = LICM(ast)
licm.mutate()
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment