Optimize muxes in DfgPeephole
This commit is contained in:
parent
2759f2ab16
commit
f12cdac8da
|
|
@ -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
|
||||
//=========================================================================
|
||||
|
|
|
|||
|
|
@ -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) \
|
||||
|
|
|
|||
|
|
@ -33,6 +33,8 @@ module t (
|
|||
wire logic [127:0] rand_aa = {2{rand_a}};
|
||||
wire logic [63:0] const_a;
|
||||
wire logic [63:0] const_b;
|
||||
wire logic [63:0] zero;
|
||||
wire logic [63:0] ones;
|
||||
wire logic signed [63:0] sconst_a;
|
||||
wire logic signed [63:0] sconst_b;
|
||||
logic [63:0] array [3:0];
|
||||
|
|
@ -305,6 +307,9 @@ module t (
|
|||
`signal(FOLD_SELF_LTS, srand_a < srand_a);
|
||||
`signal(FOLD_SELF_LE, rand_a <= rand_a);
|
||||
`signal(FOLD_SELF_LES, srand_a <= srand_a);
|
||||
`signal(FOLD_MUX_FROM_ONES, ones[rand_a[5:0]]);
|
||||
`signal(FOLD_MUX_FROM_ZERO, zero[rand_a[5:0]]);
|
||||
`signal(REPLACE_MUX_WITH_SEL, rand_a[const_a[5:0]]);
|
||||
|
||||
// Operators that should work wiht mismatched widths
|
||||
`signal(MISMATCHED_ShiftL,const_a << 4'd2);
|
||||
|
|
@ -366,4 +371,6 @@ module t (
|
|||
assign const_b = 64'h98badefc10325647;
|
||||
assign sconst_a = 64'hfedcba9876543210;
|
||||
assign sconst_b = 64'hba0123456789cdef;
|
||||
assign zero = '0;
|
||||
assign ones = '1;
|
||||
endmodule
|
||||
|
|
|
|||
Loading…
Reference in New Issue