From: Clifford Wolf Date: Thu, 21 Nov 2013 20:26:56 +0000 (+0100) Subject: Fixed async proc detection in mem2reg X-Git-Tag: yosys-0.2.0~342 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=95c94a02fc55664b5895f95e54a7212213539068;p=yosys.git Fixed async proc detection in mem2reg --- diff --git a/frontends/ast/simplify.cc b/frontends/ast/simplify.cc index f1cce397c..a3518ff03 100644 --- a/frontends/ast/simplify.cc +++ b/frontends/ast/simplify.cc @@ -77,9 +77,13 @@ bool AstNode::simplify(bool const_fold, bool at_zero, bool in_lvalue, int stage, if (memflags & AstNode::MEM2REG_FL_EQ2) goto verbose_activate; + if (memflags & AstNode::MEM2REG_FL_SET_ASYNC) + goto verbose_activate; + if ((memflags & AstNode::MEM2REG_FL_SET_INIT) && (memflags & AstNode::MEM2REG_FL_SET_ELSE)) goto verbose_activate; + // log("Note: Not replacing memory %s with list of registers (flags=0x%08lx).\n", mem->str.c_str(), long(memflags)); continue; verbose_activate: @@ -94,6 +98,7 @@ bool AstNode::simplify(bool const_fold, bool at_zero, bool in_lvalue, int stage, } silent_activate: + // log("Note: Replacing memory %s with list of registers (flags=0x%08lx).\n", mem->str.c_str(), long(memflags)); mem2reg_set.insert(mem); } @@ -1349,12 +1354,11 @@ void AstNode::mem2reg_as_needed_pass1(std::map> std::map *proc_flags_p = NULL; if (type == AST_ALWAYS) { - bool sync_proc = false; - for (auto child : children) { + int count_edge_events = 0; + for (auto child : children) if (child->type == AST_POSEDGE || child->type == AST_NEGEDGE) - sync_proc = true; - } - if (!sync_proc) + count_edge_events++; + if (count_edge_events != 1) children_flags |= AstNode::MEM2REG_FL_ASYNC; proc_flags_p = new std::map; }