mirror of
				https://github.com/YosysHQ/yosys
				synced 2025-10-31 03:32:29 +00:00 
			
		
		
		
	share: Cleanup and additional testing
Fixes a typo and adds another test case that triggers the fallback behavior as the existing tests all trigger the new optimization.
This commit is contained in:
		
							parent
							
								
									7593b5b224
								
							
						
					
					
						commit
						4b273a4ae9
					
				
					 3 changed files with 36 additions and 9 deletions
				
			
		|  | @ -1013,10 +1013,10 @@ struct ShareWorker | |||
| 		return bits; | ||||
| 	} | ||||
| 
 | ||||
| 	bool onesided_restrict_activiation_patterns( | ||||
| 	bool onesided_restrict_activation_patterns( | ||||
| 			pool<ssc_pair_t> &activation_patterns, const pool<std::pair<SigBit, State>> &other_bits) | ||||
| 	{ | ||||
| 		pool<ssc_pair_t> new_activiation_patterns; | ||||
| 		pool<ssc_pair_t> new_activation_patterns; | ||||
| 
 | ||||
| 		bool simplified = false; | ||||
| 
 | ||||
|  | @ -1032,22 +1032,22 @@ struct ShareWorker | |||
| 					simplified = true; | ||||
| 				} | ||||
| 			} | ||||
| 			new_activiation_patterns.emplace(std::move(new_pair)); | ||||
| 			new_activation_patterns.emplace(std::move(new_pair)); | ||||
| 		} | ||||
| 
 | ||||
| 		activation_patterns = std::move(new_activiation_patterns); | ||||
| 		activation_patterns = std::move(new_activation_patterns); | ||||
| 		return simplified; | ||||
| 	} | ||||
| 
 | ||||
| 	// Only valid if the patterns on their own (i.e. without considering their input cone) are mutually exclusive!
 | ||||
| 	bool restrict_activiation_patterns(pool<ssc_pair_t> &activation_patterns, pool<ssc_pair_t> &other_activation_patterns) | ||||
| 	bool restrict_activation_patterns(pool<ssc_pair_t> &activation_patterns, pool<ssc_pair_t> &other_activation_patterns) | ||||
| 	{ | ||||
| 		pool<std::pair<SigBit, State>> bits = pattern_bits(activation_patterns); | ||||
| 		pool<std::pair<SigBit, State>> other_bits = pattern_bits(other_activation_patterns); | ||||
| 
 | ||||
| 		bool simplified = false; | ||||
| 		simplified |= onesided_restrict_activiation_patterns(activation_patterns, other_bits); | ||||
| 		simplified |= onesided_restrict_activiation_patterns(other_activation_patterns, bits); | ||||
| 		simplified |= onesided_restrict_activation_patterns(activation_patterns, other_bits); | ||||
| 		simplified |= onesided_restrict_activation_patterns(other_activation_patterns, bits); | ||||
| 
 | ||||
| 		optimize_activation_patterns(activation_patterns); | ||||
| 		optimize_activation_patterns(other_activation_patterns); | ||||
|  | @ -1401,7 +1401,7 @@ struct ShareWorker | |||
| 				} else { | ||||
| 					log("      According to the SAT solver this pair of cells can be shared. (Pattern only case)\n"); | ||||
| 
 | ||||
| 					if (restrict_activiation_patterns(optimized_cell_activation_patterns, optimized_other_cell_activation_patterns)) { | ||||
| 					if (restrict_activation_patterns(optimized_cell_activation_patterns, optimized_other_cell_activation_patterns)) { | ||||
| 						for (auto &p : optimized_cell_activation_patterns) | ||||
| 							log("      Simplified activation pattern for cell %s: %s = %s\n", log_id(cell), log_signal(p.first), log_signal(p.second)); | ||||
| 
 | ||||
|  |  | |||
|  | @ -30,3 +30,26 @@ module test_2( | |||
| 	end | ||||
| endmodule | ||||
| 
 | ||||
| 
 | ||||
| module test_3( | ||||
| 	input [3:0] s, | ||||
| 	input [7:0] a, b, c, | ||||
| 	output reg [7:0] y0, | ||||
| 	output reg [7:0] y1, | ||||
| 	output reg [7:0] y2, | ||||
| 	output reg [7:0] y3, | ||||
| ); | ||||
| 	wire is_onehot = s & (s - 1); | ||||
| 
 | ||||
| 	always @* begin | ||||
| 		y0 <= 0; | ||||
| 		y1 <= 0; | ||||
| 		y2 <= 0; | ||||
| 		y3 <= 0; | ||||
| 		if (s < 3) y0 <= b / c; | ||||
| 		if (3 <= s && s < 6) y1 <= c / b; | ||||
| 		if (6 <= s && s < 9) y2 <= a / b; | ||||
| 		if (9 <= s && s < 12) y3 <= b / a; | ||||
| 	end | ||||
| endmodule | ||||
| 
 | ||||
|  |  | |||
|  | @ -3,11 +3,13 @@ proc;; | |||
| 
 | ||||
| copy test_1 gold_1 | ||||
| copy test_2 gold_2 | ||||
| share test_1 test_2;; | ||||
| copy test_3 gold_3 | ||||
| share test_1 test_2 test_3;; | ||||
| 
 | ||||
| select -assert-count 1 test_1/t:$mul | ||||
| select -assert-count 1 test_2/t:$mul | ||||
| select -assert-count 1 test_2/t:$div | ||||
| select -assert-count 1 test_3/t:$div | ||||
| 
 | ||||
| miter -equiv -flatten -make_outputs -make_outcmp gold_1 test_1 miter_1 | ||||
| sat -verify -prove trigger 0 -show-inputs -show-outputs miter_1 | ||||
|  | @ -15,3 +17,5 @@ sat -verify -prove trigger 0 -show-inputs -show-outputs miter_1 | |||
| miter -equiv -flatten -make_outputs -make_outcmp gold_2 test_2 miter_2 | ||||
| sat -verify -prove trigger 0 -show-inputs -show-outputs miter_2 | ||||
| 
 | ||||
| miter -equiv -flatten -make_outputs -make_outcmp gold_3 test_3 miter_3 | ||||
| sat -verify -prove trigger 0 -show-inputs -show-outputs miter_3 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue