summaryrefslogtreecommitdiff
path: root/frontends
diff options
context:
space:
mode:
authorClifford Wolf <clifford@clifford.at>2015-09-30 15:46:51 +0200
committerClifford Wolf <clifford@clifford.at>2015-09-30 15:46:51 +0200
commit9caeadf79713534a1fd5f51fb458af245c34dad9 (patch)
tree4ad5c393afaa873720039a15988c98477005b45b /frontends
parentc58bd5dc30f75880d83b8dde0f0805edff11d770 (diff)
Fixed detection of unconditional $readmem[hb]
Diffstat (limited to 'frontends')
-rw-r--r--frontends/ast/simplify.cc15
1 files changed, 11 insertions, 4 deletions
diff --git a/frontends/ast/simplify.cc b/frontends/ast/simplify.cc
index 6b6f1522..2e6892a8 100644
--- a/frontends/ast/simplify.cc
+++ b/frontends/ast/simplify.cc
@@ -1718,12 +1718,19 @@ skip_dynamic_range_lvalue_expansion:;
bool unconditional_init = false;
if (current_always->type == AST_INITIAL) {
+ pool<AstNode*> queue;
log_assert(current_always->children[0]->type == AST_BLOCK);
- for (auto n : current_always->children[0]->children)
- if (n == this) {
- unconditional_init = true;
- break;
+ queue.insert(current_always->children[0]);
+ while (!unconditional_init && !queue.empty()) {
+ pool<AstNode*> next_queue;
+ for (auto n : queue)
+ for (auto c : n->children) {
+ if (c == this)
+ unconditional_init = true;
+ next_queue.insert(c);
}
+ next_queue.swap(queue);
+ }
}
newNode = readmem(str == "\\$readmemh", node_filename->bitsAsConst().decode_string(), node_memory->id2ast, start_addr, finish_addr, unconditional_init);