Consider children of AstConcat in V3InstrCount
Previously V3InstrCount used to completely ignore an AstConcat, including its children (see the rational in the comment). The problem is the operands can be huge and expensive compound expressions (especially since DFG), and not just a simple variable reference. This fix gains some MT speed improvement.
This commit is contained in:
parent
afaa02709c
commit
1075b006b5
|
|
@ -146,11 +146,9 @@ private:
|
||||||
}
|
}
|
||||||
void visit(AstConcat* nodep) override {
|
void visit(AstConcat* nodep) override {
|
||||||
if (m_ignoreRemaining) return;
|
if (m_ignoreRemaining) return;
|
||||||
// Nop.
|
// Ignore the cost of the concat node itself. The problem with
|
||||||
//
|
// counting concat is that when we have many things concatted
|
||||||
// Ignore concat. The problem with counting concat is that when we
|
// together, it's not a single operation, but this:
|
||||||
// have many things concatted together, it's not a single
|
|
||||||
// operation, but this:
|
|
||||||
//
|
//
|
||||||
// concat(a, concat(b, concat(c, concat(d, ... ))))
|
// concat(a, concat(b, concat(c, concat(d, ... ))))
|
||||||
//
|
//
|
||||||
|
|
@ -162,7 +160,8 @@ private:
|
||||||
// cost is linear with the size of the data. We don't need to count
|
// cost is linear with the size of the data. We don't need to count
|
||||||
// the concat at all to reflect a linear cost; it's already there
|
// the concat at all to reflect a linear cost; it's already there
|
||||||
// in the width of the destination (which we count) and the sum of
|
// in the width of the destination (which we count) and the sum of
|
||||||
// the widths of the operands (ignored here).
|
// the cost of the operands.
|
||||||
|
iterateChildrenConst(nodep);
|
||||||
markCost(nodep);
|
markCost(nodep);
|
||||||
}
|
}
|
||||||
void visit(AstNodeIf* nodep) override {
|
void visit(AstNodeIf* nodep) override {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue