mirror of
				https://github.com/YosysHQ/yosys
				synced 2025-11-03 21:09:12 +00:00 
			
		
		
		
	kernel: optimise Module::remove(const pool<RTLIL::Wire*>()
This commit is contained in:
		
							parent
							
								
									a076052fe4
								
							
						
					
					
						commit
						b567f03c26
					
				
					 2 changed files with 9 additions and 10 deletions
				
			
		| 
						 | 
					@ -1586,30 +1586,25 @@ void RTLIL::Module::remove(const pool<RTLIL::Wire*> &wires)
 | 
				
			||||||
		const pool<RTLIL::Wire*> *wires_p;
 | 
							const pool<RTLIL::Wire*> *wires_p;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		void operator()(RTLIL::SigSpec &sig) {
 | 
							void operator()(RTLIL::SigSpec &sig) {
 | 
				
			||||||
			std::vector<RTLIL::SigChunk> chunks = sig;
 | 
								for (auto &c : sig.chunks_)
 | 
				
			||||||
			for (auto &c : chunks)
 | 
					 | 
				
			||||||
				if (c.wire != NULL && wires_p->count(c.wire)) {
 | 
									if (c.wire != NULL && wires_p->count(c.wire)) {
 | 
				
			||||||
					c.wire = module->addWire(NEW_ID, c.width);
 | 
										c.wire = module->addWire(NEW_ID, c.width);
 | 
				
			||||||
					c.offset = 0;
 | 
										c.offset = 0;
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
			sig = chunks;
 | 
					 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		void operator()(RTLIL::SigSpec &lhs, RTLIL::SigSpec &rhs) {
 | 
							void operator()(RTLIL::SigSpec &lhs, RTLIL::SigSpec &rhs) {
 | 
				
			||||||
			log_assert(GetSize(lhs) == GetSize(rhs));
 | 
								log_assert(GetSize(lhs) == GetSize(rhs));
 | 
				
			||||||
			RTLIL::SigSpec new_lhs, new_rhs;
 | 
								lhs.unpack();
 | 
				
			||||||
 | 
								rhs.unpack();
 | 
				
			||||||
			for (int i = 0; i < GetSize(lhs); i++) {
 | 
								for (int i = 0; i < GetSize(lhs); i++) {
 | 
				
			||||||
				RTLIL::SigBit lhs_bit = lhs[i];
 | 
									RTLIL::SigBit &lhs_bit = lhs.bits_[i];
 | 
				
			||||||
				if (lhs_bit.wire != nullptr && wires_p->count(lhs_bit.wire))
 | 
									if (lhs_bit.wire != nullptr && wires_p->count(lhs_bit.wire))
 | 
				
			||||||
					continue;
 | 
										continue;
 | 
				
			||||||
				RTLIL::SigBit rhs_bit = rhs[i];
 | 
									RTLIL::SigBit &rhs_bit = rhs.bits_[i];
 | 
				
			||||||
				if (rhs_bit.wire != nullptr && wires_p->count(rhs_bit.wire))
 | 
									if (rhs_bit.wire != nullptr && wires_p->count(rhs_bit.wire))
 | 
				
			||||||
					continue;
 | 
										continue;
 | 
				
			||||||
				new_lhs.append(lhs_bit);
 | 
					 | 
				
			||||||
				new_rhs.append(rhs_bit);
 | 
					 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			lhs = new_lhs;
 | 
					 | 
				
			||||||
			rhs = new_rhs;
 | 
					 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -758,6 +758,10 @@ private:
 | 
				
			||||||
			unpack();
 | 
								unpack();
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Only used by Module::remove(const pool<Wire*> &wires)
 | 
				
			||||||
 | 
						// but cannot be more specific as it isn't yet declared
 | 
				
			||||||
 | 
						friend struct RTLIL::Module;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public:
 | 
					public:
 | 
				
			||||||
	SigSpec();
 | 
						SigSpec();
 | 
				
			||||||
	SigSpec(const RTLIL::SigSpec &other);
 | 
						SigSpec(const RTLIL::SigSpec &other);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue