diff options
Diffstat (limited to 'frontends/ast')
| -rw-r--r-- | frontends/ast/simplify.cc | 12 | 
1 files changed, 12 insertions, 0 deletions
diff --git a/frontends/ast/simplify.cc b/frontends/ast/simplify.cc index a9608369c..ae46e4bc9 100644 --- a/frontends/ast/simplify.cc +++ b/frontends/ast/simplify.cc @@ -1337,6 +1337,7 @@ bool AstNode::simplify(bool const_fold, bool at_zero, bool in_lvalue, int stage,  			str.clear();  			type = AST_ASSIGN;  			children.push_back(children_list.at(0)); +			children.back()->was_checked = true;  			children.push_back(node);  			did_something = true;  		} @@ -1373,6 +1374,7 @@ bool AstNode::simplify(bool const_fold, bool at_zero, bool in_lvalue, int stage,  			str.clear();  			type = AST_ASSIGN;  			children.push_back(children_list[0]); +			children.back()->was_checked = true;  			children.push_back(node);  			did_something = true;  		} @@ -1531,6 +1533,7 @@ skip_dynamic_range_lvalue_expansion:;  			wire_tmp_id->str = wire_tmp->str;  			newNode->children.push_back(new AstNode(AST_ASSIGN_EQ, wire_tmp_id, children[1]->clone())); +			newNode->children.back()->was_checked = true;  			int cursor = 0;  			for (auto child : children[0]->children) @@ -1816,6 +1819,7 @@ skip_dynamic_range_lvalue_expansion:;  					AstNode *regid = new AstNode(AST_IDENTIFIER);  					regid->str = reg->str;  					regid->id2ast = reg; +					regid->was_checked = true;  					AstNode *rhs = nullptr; @@ -2202,6 +2206,8 @@ skip_dynamic_range_lvalue_expansion:;  			AstNode *always = new AstNode(AST_ALWAYS, new AstNode(AST_BLOCK,  					new AstNode(AST_ASSIGN_EQ, lvalue, clone()))); +			always->children[0]->children[0]->was_checked = true; +  			current_ast_mod->children.push_back(always);  			goto replace_fcall_with_id; @@ -2251,6 +2257,7 @@ skip_dynamic_range_lvalue_expansion:;  						AstNode *assign = child->is_input ?  								new AstNode(AST_ASSIGN_EQ, wire_id->clone(), arg) :  								new AstNode(AST_ASSIGN_EQ, arg, wire_id->clone()); +						assign->children[0]->was_checked = true;  						for (auto it = current_block->children.begin(); it != current_block->children.end(); it++) {  							if (*it != current_block_child) @@ -2321,6 +2328,7 @@ skip_dynamic_range_lvalue_expansion:;  					AstNode *assign = child->is_input ?  							new AstNode(AST_ASSIGN_EQ, wire_id, arg) :  							new AstNode(AST_ASSIGN_EQ, arg, wire_id); +					assign->children[0]->was_checked = true;  					for (auto it = current_block->children.begin(); it != current_block->children.end(); it++) {  						if (*it != current_block_child) @@ -2760,6 +2768,7 @@ AstNode *AstNode::readmem(bool is_readmemh, std::string mem_filename, AstNode *m  				block->children.push_back(new AstNode(AST_ASSIGN_EQ, new AstNode(AST_IDENTIFIER, new AstNode(AST_RANGE, AstNode::mkconst_int(cursor, false))), value));  				block->children.back()->children[0]->str = memory->str;  				block->children.back()->children[0]->id2ast = memory; +				block->children.back()->children[0]->was_checked = true;  			}  			cursor += increment; @@ -3021,6 +3030,7 @@ bool AstNode::mem2reg_as_needed_pass2(pool<AstNode*> &mem2reg_set, AstNode *mod,  		AstNode *newNode = clone();  		newNode->type = AST_ASSIGN_EQ;  		async_block->children[0]->children.push_back(newNode); +		async_block->children[0]->children.back()->children[0]->was_checked = true;  		newNode = new AstNode(AST_NONE);  		newNode->cloneInto(this); @@ -3065,6 +3075,7 @@ bool AstNode::mem2reg_as_needed_pass2(pool<AstNode*> &mem2reg_set, AstNode *mod,  		AstNode *assign_addr = new AstNode(AST_ASSIGN_EQ, new AstNode(AST_IDENTIFIER), children[0]->children[0]->children[0]->clone());  		assign_addr->children[0]->str = id_addr; +		assign_addr->children[0]->str = was_checked;  		block->children.insert(block->children.begin()+assign_idx+1, assign_addr);  		AstNode *case_node = new AstNode(AST_CASE, new AstNode(AST_IDENTIFIER)); @@ -3088,6 +3099,7 @@ bool AstNode::mem2reg_as_needed_pass2(pool<AstNode*> &mem2reg_set, AstNode *mod,  		children[0]->id2ast = NULL;  		children[0]->str = id_data;  		type = AST_ASSIGN_EQ; +		children[0]->was_checked = true;  		did_something = true;  	}  | 
