diff options
Diffstat (limited to 'passes/techmap')
| -rw-r--r-- | passes/techmap/extract_fa.cc | 12 | ||||
| -rw-r--r-- | passes/techmap/flowmap.cc | 5 | 
2 files changed, 11 insertions, 6 deletions
diff --git a/passes/techmap/extract_fa.cc b/passes/techmap/extract_fa.cc index 29700c37b..9f3bb525b 100644 --- a/passes/techmap/extract_fa.cc +++ b/passes/techmap/extract_fa.cc @@ -262,10 +262,14 @@ struct ExtractFaWorker  			pool<SigBit> new_leaves = leaves;  			new_leaves.erase(bit); -			if (cell->hasPort(ID::A)) new_leaves.insert(sigmap(SigBit(cell->getPort(ID::A)))); -			if (cell->hasPort(ID::B)) new_leaves.insert(sigmap(SigBit(cell->getPort(ID::B)))); -			if (cell->hasPort(ID(C))) new_leaves.insert(sigmap(SigBit(cell->getPort(ID(C))))); -			if (cell->hasPort(ID(D))) new_leaves.insert(sigmap(SigBit(cell->getPort(ID(D))))); +			for (auto port : {ID::A, ID::B, ID(C), ID(D)}) { +				if (!cell->hasPort(port)) +					continue; +				auto bit = sigmap(SigBit(cell->getPort(port))); +				if (!bit.wire) +					continue; +				new_leaves.insert(bit); +			}  			if (GetSize(new_leaves) > maxbreadth)  				continue; diff --git a/passes/techmap/flowmap.cc b/passes/techmap/flowmap.cc index 5807178dd..a2ad87f7d 100644 --- a/passes/techmap/flowmap.cc +++ b/passes/techmap/flowmap.cc @@ -394,7 +394,7 @@ struct FlowGraph  	pair<pool<RTLIL::SigBit>, pool<RTLIL::SigBit>> edge_cut()  	{ -		pool<RTLIL::SigBit> x, xi; +		pool<RTLIL::SigBit> x = {source}, xi; // X and X̅ in the paper  		NodePrime source_prime = {source, true};  		pool<NodePrime> visited; @@ -437,6 +437,7 @@ struct FlowGraph  		for (auto collapsed_node : collapsed[sink])  			xi.insert(collapsed_node); +		log_assert(x[source] && !xi[source]);  		log_assert(!x[sink] && xi[sink]);  		return {x, xi};  	} @@ -1050,7 +1051,7 @@ struct FlowmapWorker  				auto cut_inputs = cut_lut_at_gate(lut, lut_gate);  				pool<RTLIL::SigBit> gate_inputs = cut_inputs.first, other_inputs = cut_inputs.second; -				if (gate_inputs.empty() && (int)other_inputs.size() == order) +				if (gate_inputs.empty() && (int)other_inputs.size() >= order)  				{  					if (debug_relax)  						log("      Breaking would result in a (k+1)-LUT.\n");  | 
