Merge remote-tracking branch 'origin/xaig_dff' into eddie/exp
diff --git a/passes/hierarchy/submod.cc b/passes/hierarchy/submod.cc
index cf27d23..b21b0de 100644
--- a/passes/hierarchy/submod.cc
+++ b/passes/hierarchy/submod.cc
@@ -34,7 +34,6 @@
 	RTLIL::Design *design;
 	RTLIL::Module *module;
 	SigMap sigmap;
-	std::map<RTLIL::SigBit, RTLIL::SigBit> replace_const;
 
 	bool copy_mode;
 	bool hidden_mode;
@@ -231,7 +230,9 @@
 				if (new_wire->port_id > 0) {
 					// Prevents "ERROR: Mismatch in directionality ..." when flattening
 					if (new_wire->port_output)
-						old_sig.replace(replace_const);
+						for (auto &b : old_sig)
+							if (!b.wire)
+								b = module->addWire(NEW_ID);
 					new_cell->setPort(new_wire->name, old_sig);
 				}
 			}
@@ -265,11 +266,6 @@
 			if (wire->port_output)
 				sigmap.add(wire);
 		}
-		auto wire = module->addWire(NEW_ID);
-		replace_const.emplace(State::S0, wire);
-		replace_const.emplace(State::S1, wire);
-		replace_const.emplace(State::Sx, wire);
-		replace_const.emplace(State::Sz, wire);
 
 		if (opt_name.empty())
 		{
diff --git a/techlibs/xilinx/synth_xilinx.cc b/techlibs/xilinx/synth_xilinx.cc
index 606bda5..239937f 100644
--- a/techlibs/xilinx/synth_xilinx.cc
+++ b/techlibs/xilinx/synth_xilinx.cc
@@ -538,6 +538,7 @@
 				else
 					abc9_opts += " -lut +/xilinx/abc9_xc7.lut";
 				run("abc9" + abc9_opts);
+				run("clean");
 				run("clkpart -unpart clkpart");
 			}
 			else {
@@ -545,8 +546,8 @@
 					run("abc -luts 2:2,3,6:5" + string(retime ? " -dff" : ""));
 				else
 					run("abc -luts 2:2,3,6:5,10,20" + string(retime ? " -dff" : ""));
+				run("clean");
 			}
-			run("clean");
 
 			// This shregmap call infers fixed length shift registers after abc
 			//   has performed any necessary retiming