diff options
| author | Marcelina KoĆcielnicka <mwk@0x04.net> | 2021-11-02 12:38:28 +0100 | 
|---|---|---|
| committer | Marcelina KoĆcielnicka <mwk@0x04.net> | 2021-11-02 13:18:15 +0100 | 
| commit | f346868cccb4bcc9de9c21e6e172a2d1cebf6dc8 (patch) | |
| tree | 57e7396364c035e2fbdfc6552ba05e0a9a23ba7a | |
| parent | 9cb5092ad137fc7154912f2e1b488beeeeae4b36 (diff) | |
| download | yosys-f346868cccb4bcc9de9c21e6e172a2d1cebf6dc8.tar.gz yosys-f346868cccb4bcc9de9c21e6e172a2d1cebf6dc8.tar.bz2 yosys-f346868cccb4bcc9de9c21e6e172a2d1cebf6dc8.zip  | |
flatten: Keep sigmap around between flatten_cell invocations.
Fixes #3064.
| -rw-r--r-- | passes/techmap/flatten.cc | 7 | 
1 files changed, 4 insertions, 3 deletions
diff --git a/passes/techmap/flatten.cc b/passes/techmap/flatten.cc index 616fee3f5..7e6df5d2c 100644 --- a/passes/techmap/flatten.cc +++ b/passes/techmap/flatten.cc @@ -77,7 +77,7 @@ struct FlattenWorker  {  	bool ignore_wb = false; -	void flatten_cell(RTLIL::Design *design, RTLIL::Module *module, RTLIL::Cell *cell, RTLIL::Module *tpl, std::vector<RTLIL::Cell*> &new_cells) +	void flatten_cell(RTLIL::Design *design, RTLIL::Module *module, RTLIL::Cell *cell, RTLIL::Module *tpl, SigMap &sigmap, std::vector<RTLIL::Cell*> &new_cells)  	{  		// Copy the contents of the flattened cell @@ -165,7 +165,6 @@ struct FlattenWorker  			for (auto bit : tpl_conn.first)  				tpl_driven.insert(bit); -		SigMap sigmap(module);  		for (auto &port_it : cell->connections())  		{  			IdString port_name = port_it.first; @@ -218,6 +217,7 @@ struct FlattenWorker  					log_id(module), log_id(cell), log_id(port_it.first), log_signal(new_conn.first), log_signal(new_conn.second));  			module->connect(new_conn); +			sigmap.add(new_conn.first, new_conn.second);  		}  		module->remove(cell); @@ -228,6 +228,7 @@ struct FlattenWorker  		if (!design->selected(module) || module->get_blackbox_attribute(ignore_wb))  			return; +		SigMap sigmap(module);  		std::vector<RTLIL::Cell*> worklist = module->selected_cells();  		while (!worklist.empty())  		{ @@ -251,7 +252,7 @@ struct FlattenWorker  			// If a design is fully selected and has a top module defined, topological sorting ensures that all cells  			// added during flattening are black boxes, and flattening is finished in one pass. However, when flattening  			// individual modules, this isn't the case, and the newly added cells might have to be flattened further. -			flatten_cell(design, module, cell, tpl, worklist); +			flatten_cell(design, module, cell, tpl, sigmap, worklist);  		}  	}  };  | 
