mirror of
				https://github.com/YosysHQ/yosys
				synced 2025-10-31 03:32:29 +00:00 
			
		
		
		
	opt_muxtree: Update port_off and port_idx even for constant bits
Signed-off-by: gatecat <gatecat@ds0.me>
This commit is contained in:
		
							parent
							
								
									1667ad658b
								
							
						
					
					
						commit
						6a6d049f1c
					
				
					 1 changed files with 18 additions and 19 deletions
				
			
		|  | @ -372,28 +372,27 @@ struct OptMuxtreeWorker | ||||||
| 		int port_idx = 0, port_off = 0; | 		int port_idx = 0, port_off = 0; | ||||||
| 		vector<int> bits = sig2bits(sig, false); | 		vector<int> bits = sig2bits(sig, false); | ||||||
| 		for (int i = 0; i < GetSize(bits); i++) { | 		for (int i = 0; i < GetSize(bits); i++) { | ||||||
| 			if (bits[i] < 0) | 			if (bits[i] >= 0) { | ||||||
| 				continue; | 				if (knowledge.known_inactive.at(bits[i])) { | ||||||
| 			if (knowledge.known_inactive.at(bits[i])) { |  | ||||||
| 				sig[i] = State::S0; |  | ||||||
| 				did_something = true; |  | ||||||
| 			} else |  | ||||||
| 			if (knowledge.known_active.at(bits[i])) { |  | ||||||
| 				sig[i] = State::S1; |  | ||||||
| 				did_something = true; |  | ||||||
| 			} |  | ||||||
| 			if (width) { |  | ||||||
| 				if (ctrl_bits.count(bits[i])) { |  | ||||||
| 					sig[i] = ctrl_bits.at(bits[i]) == port_idx ? State::S1 : State::S0; |  | ||||||
| 					did_something = true; |  | ||||||
| 				} |  | ||||||
| 				if (++port_off == width) |  | ||||||
| 					port_idx++, port_off=0; |  | ||||||
| 			} else { |  | ||||||
| 				if (ctrl_bits.count(bits[i])) { |  | ||||||
| 					sig[i] = State::S0; | 					sig[i] = State::S0; | ||||||
| 					did_something = true; | 					did_something = true; | ||||||
|  | 				} else | ||||||
|  | 				if (knowledge.known_active.at(bits[i])) { | ||||||
|  | 					sig[i] = State::S1; | ||||||
|  | 					did_something = true; | ||||||
| 				} | 				} | ||||||
|  | 				if (ctrl_bits.count(bits[i])) { | ||||||
|  | 					if (width) { | ||||||
|  | 						sig[i] = ctrl_bits.at(bits[i]) == port_idx ? State::S1 : State::S0; | ||||||
|  | 					} else { | ||||||
|  | 						sig[i] = State::S0; | ||||||
|  | 					} | ||||||
|  | 					did_something = true; | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 			if (width) { | ||||||
|  | 				if (++port_off == width) | ||||||
|  | 					port_idx++, port_off=0; | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue