This results in Arcilator being unable to perform effective reset grouping in the GroupResetAndEnable pass.
// Canonicalize registers.
if (auto reg = dyn_cast<seq::FirRegOp>(&op)) {
OpBuilder builder(reg);
Value next;
// Note: this register will have an sync reset regardless.
if (reg.hasReset())
next = comb::MuxOp::create(builder, reg.getLoc(), reg.getReset(),
reg.getResetValue(), reg.getNext(), false);
else
next = reg.getNext();
Value presetValue;
// Materialize initial value, assume zero initialization as default.
if (reg.getPreset() && !reg.getPreset()->isZero()) {
assert(hw::type_isa<IntegerType>(reg.getType()) &&
"cannot lower non integer preset");
presetValue = circt::seq::createConstantInitialValue(
builder, reg.getLoc(),
IntegerAttr::get(reg.getType(), *reg.getPreset()));
}
Value compReg = seq::CompRegOp::create(
builder, reg.getLoc(), next.getType(), next, reg.getClk(),
reg.getNameAttr(), Value{}, Value{}, /*initialValue*/ presetValue,
reg.getInnerSymAttr());
reg.replaceAllUsesWith(compReg);
opsToDelete.push_back(reg);
continue;
}