Optimize muxes in DfgPeephole

This commit is contained in:
Geza Lore
2026-03-27 07:50:05 +00:00
parent 2759f2ab16
commit f12cdac8da
3 changed files with 37 additions and 0 deletions
+27
View File
@@ -1274,6 +1274,33 @@ class V3DfgPeephole final : public DfgVisitor {
}
}
void visit(DfgMux* const vtxp) override {
DfgVertex* const fromp = vtxp->fromp();
DfgVertex* const lsbp = vtxp->lsbp();
FileLine* const flp = vtxp->fileline();
if (DfgConst* const lsbConstp = lsbp->cast<DfgConst>()) {
APPLYING(REPLACE_MUX_WITH_SEL) {
replace(make<DfgSel>(vtxp, fromp, lsbConstp->num().toUInt()));
return;
}
}
if (isZero(fromp)) {
APPLYING(FOLD_MUX_FROM_ZERO) {
replace(makeZero(flp, vtxp->width()));
return;
}
}
if (isOnes(fromp)) {
APPLYING(FOLD_MUX_FROM_ONES) {
replace(makeOnes(flp, vtxp->width()));
return;
}
}
}
//=========================================================================
// DfgVertexBinary - bitwise
//=========================================================================
+3
View File
@@ -31,6 +31,8 @@
_FOR_EACH_DFG_PEEPHOLE_OPTIMIZATION_APPLY(macro, FOLD_ASSOC_BINARY_LHS_OF_RHS) \
_FOR_EACH_DFG_PEEPHOLE_OPTIMIZATION_APPLY(macro, FOLD_ASSOC_BINARY_RHS_OF_LHS) \
_FOR_EACH_DFG_PEEPHOLE_OPTIMIZATION_APPLY(macro, FOLD_BINARY) \
_FOR_EACH_DFG_PEEPHOLE_OPTIMIZATION_APPLY(macro, FOLD_MUX_FROM_ONES) \
_FOR_EACH_DFG_PEEPHOLE_OPTIMIZATION_APPLY(macro, FOLD_MUX_FROM_ZERO) \
_FOR_EACH_DFG_PEEPHOLE_OPTIMIZATION_APPLY(macro, FOLD_SEL) \
_FOR_EACH_DFG_PEEPHOLE_OPTIMIZATION_APPLY(macro, FOLD_SELF_EQ) \
_FOR_EACH_DFG_PEEPHOLE_OPTIMIZATION_APPLY(macro, FOLD_SELF_GT) \
@@ -117,6 +119,7 @@
_FOR_EACH_DFG_PEEPHOLE_OPTIMIZATION_APPLY(macro, REPLACE_EXTEND) \
_FOR_EACH_DFG_PEEPHOLE_OPTIMIZATION_APPLY(macro, REPLACE_LOGAND_WITH_AND) \
_FOR_EACH_DFG_PEEPHOLE_OPTIMIZATION_APPLY(macro, REPLACE_LOGOR_WITH_OR) \
_FOR_EACH_DFG_PEEPHOLE_OPTIMIZATION_APPLY(macro, REPLACE_MUX_WITH_SEL) \
_FOR_EACH_DFG_PEEPHOLE_OPTIMIZATION_APPLY(macro, REPLACE_NESTED_CONCAT_OF_ADJOINING_SELS_ON_LHS) \
_FOR_EACH_DFG_PEEPHOLE_OPTIMIZATION_APPLY(macro, REPLACE_NESTED_CONCAT_OF_ADJOINING_SELS_ON_RHS) \
_FOR_EACH_DFG_PEEPHOLE_OPTIMIZATION_APPLY(macro, REPLACE_NOT_EQ) \