mirror of
				https://github.com/YosysHQ/yosys
				synced 2025-10-30 19:22:31 +00:00 
			
		
		
		
	Added RTLIL::IdString::in(...)
This commit is contained in:
		
							parent
							
								
									c7f99be3be
								
							
						
					
					
						commit
						ebbbe7fc83
					
				
					 2 changed files with 21 additions and 9 deletions
				
			
		|  | @ -170,20 +170,20 @@ namespace RTLIL | ||||||
| 			return std::string(global_id_storage_.at(index_)); | 			return std::string(global_id_storage_.at(index_)); | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		bool operator<(const IdString &rhs) const { | 		bool operator<(IdString rhs) const { | ||||||
| 			return index_ < rhs.index_; | 			return index_ < rhs.index_; | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		bool operator==(const IdString &rhs) const { return index_ == rhs.index_; } | 		bool operator==(IdString rhs) const { return index_ == rhs.index_; } | ||||||
| 		bool operator!=(const IdString &rhs) const { return index_ != rhs.index_; } | 		bool operator!=(IdString rhs) const { return index_ != rhs.index_; } | ||||||
| 
 | 
 | ||||||
| 		// The methods below are just convinience functions for better compatibility with std::string.
 | 		// The methods below are just convinience functions for better compatibility with std::string.
 | ||||||
| 
 | 
 | ||||||
| 		bool operator==(const std::string &rhs) const { return str() == rhs; } | 		bool operator==(const std::string &rhs) const { return str() == rhs; } | ||||||
| 		bool operator!=(const std::string &rhs) const { return str() != rhs; } | 		bool operator!=(const std::string &rhs) const { return str() != rhs; } | ||||||
| 
 | 
 | ||||||
| 		bool operator==(const char *rhs) const { return str() == rhs; } | 		bool operator==(const char *rhs) const { return strcmp(c_str(), rhs) == 0; } | ||||||
| 		bool operator!=(const char *rhs) const { return str() != rhs; } | 		bool operator!=(const char *rhs) const { return strcmp(c_str(), rhs) != 0; } | ||||||
| 
 | 
 | ||||||
| 		char operator[](size_t i) const { | 		char operator[](size_t i) const { | ||||||
| 			const char *p = c_str(); | 			const char *p = c_str(); | ||||||
|  | @ -220,6 +220,19 @@ namespace RTLIL | ||||||
| 				return (a == nullptr || b == nullptr) ? (a < b) : (a->name < b->name); | 				return (a == nullptr || b == nullptr) ? (a < b) : (a->name < b->name); | ||||||
| 			} | 			} | ||||||
| 		}; | 		}; | ||||||
|  | 
 | ||||||
|  | 		// often one needs to check if a given IdString is part of a list (for example a list
 | ||||||
|  | 		// of cell types). the following functions helps with that.
 | ||||||
|  | 
 | ||||||
|  | 		template<typename T, typename... Args> | ||||||
|  | 		bool in(T first, Args... rest) { | ||||||
|  | 			return in(first) || in(rest...); | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		bool in(IdString rhs) { return *this == rhs; } | ||||||
|  | 		bool in(const char *rhs) { return *this == rhs; } | ||||||
|  | 		bool in(const std::string &rhs) { return *this == rhs; } | ||||||
|  | 		bool in(const std::set<IdString> &rhs) { return rhs.count(*this) != 0; } | ||||||
| 	}; | 	}; | ||||||
| 
 | 
 | ||||||
| 	static inline std::string escape_id(std::string str) { | 	static inline std::string escape_id(std::string str) { | ||||||
|  |  | ||||||
|  | @ -109,10 +109,10 @@ struct WreduceWorker | ||||||
| 
 | 
 | ||||||
| 	void run_cell(Cell *cell) | 	void run_cell(Cell *cell) | ||||||
| 	{ | 	{ | ||||||
| 		if (config->supported_cell_types.count(cell->type) == 0) | 		if (!cell->type.in(config->supported_cell_types)) | ||||||
| 			return; | 			return; | ||||||
| 
 | 
 | ||||||
| 		if (cell->type == ID("$shl") || cell->type == ID("$shr") || cell->type == ID("$sshl") || cell->type == ID("$sshr")) | 		if (cell->type.in("$shl", "$shr", "$sshl", "$sshr")) | ||||||
| 			cell->setParam("\\B_SIGNED", false); | 			cell->setParam("\\B_SIGNED", false); | ||||||
| 
 | 
 | ||||||
| 		if (cell->hasParam("\\A_SIGNED")) | 		if (cell->hasParam("\\A_SIGNED")) | ||||||
|  | @ -135,8 +135,7 @@ struct WreduceWorker | ||||||
| 			bits_removed++; | 			bits_removed++; | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		if (cell->type == ID("$pos") || cell->type == ID("$bu0") || cell->type == ID("$add") || cell->type == ID("$mul") || | 		if (cell->type.in("$pos", "$bu0", "$add", "$mul", "$and", "$or", "$xor")) | ||||||
| 				cell->type == ID("$and") || cell->type == ID("$or") || cell->type == ID("$xor")) |  | ||||||
| 		{ | 		{ | ||||||
| 			bool is_signed = cell->getParam("\\A_SIGNED").as_bool(); | 			bool is_signed = cell->getParam("\\A_SIGNED").as_bool(); | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue