Commit 5594cd3b authored by Markus Holzer's avatar Markus Holzer
Browse files

Remove symbol replacement

parent e2d3dd60
Pipeline #40018 passed with stages
in 13 minutes and 29 seconds
...@@ -607,13 +607,7 @@ def move_constants_before_loop(ast_node): ...@@ -607,13 +607,7 @@ def move_constants_before_loop(ast_node):
get_blocks(ast_node, all_blocks) get_blocks(ast_node, all_blocks)
for block in all_blocks: for block in all_blocks:
children = block.take_child_nodes() children = block.take_child_nodes()
# Every time a symbol can be replaced in the current block because the assignment
# was found in a parent block, but with a different lhs symbol (same rhs)
# the outer symbol is inserted here as key.
substitute_variables = {}
for child in children: for child in children:
# Before traversing the next child, all symbols are substituted first.
child.subs(substitute_variables)
if not isinstance(child, ast.SympyAssignment): # only move SympyAssignments if not isinstance(child, ast.SympyAssignment): # only move SympyAssignments
block.append(child) block.append(child)
...@@ -629,14 +623,7 @@ def move_constants_before_loop(ast_node): ...@@ -629,14 +623,7 @@ def move_constants_before_loop(ast_node):
exists_already = False exists_already = False
if not exists_already: if not exists_already:
rhs_identical = check_if_assignment_already_in_block(child, target, True) target.insert_before(child, child_to_insert_before)
if rhs_identical:
# there is already an assignment out there with the same rhs
# -> replace all lhs symbols in this block with the lhs of the outer assignment
# -> remove the local assignment (do not re-append child to the former block)
substitute_variables[child.lhs] = rhs_identical.lhs
else:
target.insert_before(child, child_to_insert_before)
elif exists_already and exists_already.rhs == child.rhs: elif exists_already and exists_already.rhs == child.rhs:
if target.args.index(exists_already) > target.args.index(child_to_insert_before): if target.args.index(exists_already) > target.args.index(child_to_insert_before):
assert target.args.count(exists_already) == 1 assert target.args.count(exists_already) == 1
...@@ -650,7 +637,6 @@ def move_constants_before_loop(ast_node): ...@@ -650,7 +637,6 @@ def move_constants_before_loop(ast_node):
new_symbol = TypedSymbol(sp.Dummy().name, child.lhs.dtype) new_symbol = TypedSymbol(sp.Dummy().name, child.lhs.dtype)
target.insert_before(ast.SympyAssignment(new_symbol, child.rhs, is_const=child.is_const), target.insert_before(ast.SympyAssignment(new_symbol, child.rhs, is_const=child.is_const),
child_to_insert_before) child_to_insert_before)
substitute_variables[child.lhs] = new_symbol
def split_inner_loop(ast_node: ast.Node, symbol_groups): def split_inner_loop(ast_node: ast.Node, symbol_groups):
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment