mirror of
				https://github.com/YosysHQ/yosys
				synced 2025-10-31 03:32:29 +00:00 
			
		
		
		
	Fixed remaining cases where we check fo wire reg/wire incorrect assignments
on Yosys-generated assignments. In this case, offending code was: module top(input in, output out); function func; input arg; func = arg; endfunction assign out = func(in); endmodule
This commit is contained in:
		
							parent
							
								
									73d426bc87
								
							
						
					
					
						commit
						f6fe73b31f
					
				
					 1 changed files with 12 additions and 0 deletions
				
			
		|  | @ -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; | ||||
| 	} | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue