diff --git a/src/pairs/analysis/modules.py b/src/pairs/analysis/modules.py index 24ab2be28a5a81c837c8089c7135d5918ad0b8c8..d5311bc89780774ec5b647cb6110bb018b7b4743 100644 --- a/src/pairs/analysis/modules.py +++ b/src/pairs/analysis/modules.py @@ -39,8 +39,16 @@ class FetchModulesReferences(Visitor): self.visit(ast_node.capacity) def visit_AtomicInc(self, ast_node): + visit_once = self.visit_nodes_once + self.visit_nodes_once = False + # Force write after read for the same node (visited twice) + self.writing = False + self.visit(ast_node.elem) self.writing = True self.visit(ast_node.elem) + self.visit_nodes_once = visit_once + + self.writing = False self.visit(ast_node.value) diff --git a/src/pairs/transformations/expressions.py b/src/pairs/transformations/expressions.py index 1e1ab5e49abb98d489a2d0a8ed8d54424c2795c5..750bce6b0d8cb579c59ea542aac297c8f1dc9c76 100644 --- a/src/pairs/transformations/expressions.py +++ b/src/pairs/transformations/expressions.py @@ -194,18 +194,6 @@ class AddExpressionDeclarations(Mutator): return ast_node - def mutate_AtomicInc(self, ast_node): - self.writing = True - ast_node.elem = self.mutate(ast_node.elem) - self.writing = False - ast_node.value = self.mutate(ast_node.value) - atomic_inc_id = id(ast_node) - if atomic_inc_id not in self.declared_exprs and atomic_inc_id not in self.params: - self.push_decl(Decl(ast_node.sim, ast_node)) - self.declared_exprs.append(atomic_inc_id) - - return ast_node - def mutate_Block(self, ast_node): block_id = id(ast_node) self.decls[block_id] = []