Internals: Use C++11 constexpr for instruction count costs

No functional change.
This commit is contained in:
Geza Lore 2021-07-25 13:32:36 +01:00
parent 33af14eba8
commit b46664c70a
2 changed files with 85 additions and 85 deletions

View File

@ -1510,21 +1510,21 @@ public:
static void operator delete(void* obj, size_t size);
#endif
// CONSTANT ACCESSORS
static int instrCountBranch() { return 4; } ///< Instruction cycles to branch
static int instrCountDiv() { return 10; } ///< Instruction cycles to divide
static int instrCountDpi() { return 1000; } ///< Instruction cycles to call user function
static int instrCountLd() { return 2; } ///< Instruction cycles to load memory
static int instrCountMul() { return 3; } ///< Instruction cycles to multiply integers
static int instrCountPli() { return 20; } ///< Instruction cycles to call pli routines
static int instrCountDouble() { return 8; } ///< Instruction cycles to convert or do floats
static int instrCountDoubleDiv() { return 40; } ///< Instruction cycles to divide floats
static int instrCountDoubleTrig() { return 200; } ///< Instruction cycles to do trigonomics
static int instrCountString() { return 100; } ///< Instruction cycles to do string ops
/// Instruction cycles to call subroutine
static int instrCountCall() { return instrCountBranch() + 10; }
/// Instruction cycles to determine simulation time
static int instrCountTime() { return instrCountCall() + 5; }
// CONSTANTS
// The following are relative dynamic costs (~ execution cycle count) of various operations.
// They are used by V3InstCount to estimate the relative execution time of code fragments.
static constexpr int INSTR_COUNT_BRANCH = 4; // Branch
static constexpr int INSTR_COUNT_CALL = INSTR_COUNT_BRANCH + 10; // Subroutine call
static constexpr int INSTR_COUNT_LD = 2; // Load memory
static constexpr int INSTR_COUNT_INT_MUL = 3; // Integer multiply
static constexpr int INSTR_COUNT_INT_DIV = 10; // Integer divide
static constexpr int INSTR_COUNT_DBL = 8; // Convert or do float ops
static constexpr int INSTR_COUNT_DBL_DIV = 40; // Double divide
static constexpr int INSTR_COUNT_DBL_TRIG = 200; // Double trigonometric ops
static constexpr int INSTR_COUNT_STR = 100; // String ops
static constexpr int INSTR_COUNT_TIME = INSTR_COUNT_CALL + 5; // Determine simulation time
static constexpr int INSTR_COUNT_PLI = 20; // PLI routines
static constexpr int INSTR_COUNT_DPI = 1000; // DPI import function
// ACCESSORS
virtual string name() const { return ""; }
@ -2094,7 +2094,7 @@ public:
virtual bool sizeMattersLhs() const override { return false; }
virtual bool sizeMattersRhs() const override { return false; }
virtual bool sizeMattersThs() const override { return false; }
virtual int instrCount() const override { return instrCountBranch(); }
virtual int instrCount() const override { return INSTR_COUNT_BRANCH; }
virtual AstNode* cloneType(AstNode* condp, AstNode* expr1p, AstNode* expr2p) = 0;
};
@ -2229,7 +2229,7 @@ public:
AstNode* incsp() const { return op3p(); } // op3 = increment statements
AstNode* bodysp() const { return op4p(); } // op4 = body of loop
virtual bool isGateOptimizable() const override { return false; }
virtual int instrCount() const override { return instrCountBranch(); }
virtual int instrCount() const override { return INSTR_COUNT_BRANCH; }
virtual bool same(const AstNode* samep) const override { return true; }
};
@ -2256,7 +2256,7 @@ public:
void addElsesp(AstNode* newp) { addOp3p(newp); }
virtual bool isGateOptimizable() const override { return false; }
virtual bool isGateDedupable() const override { return true; }
virtual int instrCount() const override { return instrCountBranch(); }
virtual int instrCount() const override { return INSTR_COUNT_BRANCH; }
virtual bool same(const AstNode* samep) const override { return true; }
void branchPred(VBranchPred flag) { m_branchPred = flag; }
VBranchPred branchPred() const { return m_branchPred; }
@ -2274,7 +2274,7 @@ protected:
public:
ASTNODE_BASE_FUNCS(NodeCase)
virtual int instrCount() const override { return instrCountBranch(); }
virtual int instrCount() const override { return INSTR_COUNT_BRANCH; }
AstNode* exprp() const { return op1p(); } // op1 = case condition <expression>
AstCaseItem* itemsp() const {
return VN_CAST(op2p(), CaseItem);
@ -2644,7 +2644,7 @@ public:
virtual void dump(std::ostream& str = std::cout) const override;
virtual void cloneRelink() override;
virtual const char* broken() const override;
virtual int instrCount() const override { return instrCountCall(); }
virtual int instrCount() const override { return INSTR_COUNT_CALL; }
virtual bool same(const AstNode* samep) const override {
const AstNodeCCall* asamep = static_cast<const AstNodeCCall*>(samep);
return (funcp() == asamep->funcp() && argTypes() == asamep->argTypes());

View File

@ -2400,7 +2400,7 @@ public:
}
}
virtual int instrCount() const override {
return widthInstrs() * (access().isReadOrRW() ? instrCountLd() : 1);
return widthInstrs() * (access().isReadOrRW() ? INSTR_COUNT_LD : 1);
}
virtual string emitVerilog() override { V3ERROR_NA_RETURN(""); }
virtual string emitC() override { V3ERROR_NA_RETURN(""); }
@ -3584,7 +3584,7 @@ public:
if (m_dataDeclp && m_dataDeclp->clonep()) m_dataDeclp = m_dataDeclp->clonep();
}
virtual void dump(std::ostream& str) const override;
virtual int instrCount() const override { return 1 + 2 * instrCountLd(); }
virtual int instrCount() const override { return 1 + 2 * INSTR_COUNT_LD; }
virtual bool maybePointedTo() const override { return true; }
void binNum(int flag) { m_binNum = flag; }
int binNum() const { return m_binNum; }
@ -3627,7 +3627,7 @@ public:
if (m_declp->clonep()) m_declp = m_declp->clonep();
}
virtual void dump(std::ostream& str) const override;
virtual int instrCount() const override { return 1 + 2 * instrCountLd(); }
virtual int instrCount() const override { return 1 + 2 * INSTR_COUNT_LD; }
virtual bool same(const AstNode* samep) const override {
return declp() == static_cast<const AstCoverInc*>(samep)->declp();
}
@ -3650,7 +3650,7 @@ public:
setOp3p(changep);
}
ASTNODE_NODE_FUNCS(CoverToggle)
virtual int instrCount() const override { return 3 + instrCountBranch() + instrCountLd(); }
virtual int instrCount() const override { return 3 + INSTR_COUNT_BRANCH + INSTR_COUNT_LD; }
virtual bool same(const AstNode* samep) const override { return true; }
virtual bool isGateOptimizable() const override { return false; }
virtual bool isPredictOptimizable() const override { return true; }
@ -3743,7 +3743,7 @@ public:
addNOp2p(bodysp);
}
ASTNODE_NODE_FUNCS(CaseItem)
virtual int instrCount() const override { return widthInstrs() + instrCountBranch(); }
virtual int instrCount() const override { return widthInstrs() + INSTR_COUNT_BRANCH; }
AstNode* condsp() const { return op1p(); } // op1 = list of possible matching expressions
AstNode* bodysp() const { return op2p(); } // op2 = what to do
void condsp(AstNode* nodep) { setOp1p(nodep); }
@ -3787,7 +3787,7 @@ public:
}
ASTNODE_NODE_FUNCS(SFormatF)
virtual string name() const override { return m_text; }
virtual int instrCount() const override { return instrCountPli(); }
virtual int instrCount() const override { return INSTR_COUNT_PLI; }
virtual bool hasDType() const override { return true; }
virtual bool same(const AstNode* samep) const override {
return text() == static_cast<const AstSFormatF*>(samep)->text();
@ -3852,7 +3852,7 @@ public:
virtual bool same(const AstNode* samep) const override {
return displayType() == static_cast<const AstDisplay*>(samep)->displayType();
}
virtual int instrCount() const override { return instrCountPli(); }
virtual int instrCount() const override { return INSTR_COUNT_PLI; }
AstDisplayType displayType() const { return m_displayType; }
void displayType(AstDisplayType type) { m_displayType = type; }
// * = Add a newline for $display
@ -3916,7 +3916,7 @@ public:
virtual bool same(const AstNode* samep) const override {
return displayType() == static_cast<const AstElabDisplay*>(samep)->displayType();
}
virtual int instrCount() const override { return instrCountPli(); }
virtual int instrCount() const override { return INSTR_COUNT_PLI; }
AstDisplayType displayType() const { return m_displayType; }
void displayType(AstDisplayType type) { m_displayType = type; }
void fmtp(AstSFormatF* nodep) { addOp1p(nodep); } // op1 = To-String formatter
@ -3950,7 +3950,7 @@ public:
virtual bool isPure() const override { return true; }
virtual bool isOutputter() const override { return false; }
virtual bool cleanOut() const { return false; }
virtual int instrCount() const override { return instrCountPli(); }
virtual int instrCount() const override { return INSTR_COUNT_PLI; }
virtual bool same(const AstNode* samep) const override { return true; }
void fmtp(AstSFormatF* nodep) { addOp1p(nodep); } // op1 = To-String formatter
AstSFormatF* fmtp() const { return VN_CAST(op1p(), SFormatF); }
@ -3995,7 +3995,7 @@ public:
} // Though deleted before opt
virtual bool isPure() const override { return false; } // Though deleted before opt
virtual bool isOutputter() const override { return true; } // Though deleted before opt
virtual int instrCount() const override { return instrCountPli(); }
virtual int instrCount() const override { return INSTR_COUNT_PLI; }
AstNode* exprsp() const { return op1p(); } // op1 = Expressions to output
void exprsp(AstNode* nodep) { addOp1p(nodep); } // op1 = Expressions to output
};
@ -4326,7 +4326,7 @@ public:
} // Though deleted before opt
virtual bool isPure() const override { return false; } // Though deleted before opt
virtual bool isOutputter() const override { return true; } // Though deleted before opt
virtual int instrCount() const override { return instrCountPli(); }
virtual int instrCount() const override { return INSTR_COUNT_PLI; }
virtual bool same(const AstNode* samep) const override {
return m_off == static_cast<const AstMonitorOff*>(samep)->m_off;
}
@ -4438,7 +4438,7 @@ public:
AstNode* arrayp() const { return op1p(); } // op1 = array and index vars
AstNode* bodysp() const { return op4p(); } // op4 = body of loop
virtual bool isGateOptimizable() const override { return false; }
virtual int instrCount() const override { return instrCountBranch(); }
virtual int instrCount() const override { return INSTR_COUNT_BRANCH; }
virtual bool same(const AstNode* samep) const override { return true; }
};
@ -4455,7 +4455,7 @@ public:
virtual bool isGateOptimizable() const override {
return false;
} // Not relevant - converted to FOR
virtual int instrCount() const override { return instrCountBranch(); }
virtual int instrCount() const override { return INSTR_COUNT_BRANCH; }
virtual bool same(const AstNode* samep) const override { return true; }
};
@ -4488,7 +4488,7 @@ public:
void addBodysp(AstNode* newp) { addOp3p(newp); }
void addIncsp(AstNode* newp) { addOp4p(newp); }
virtual bool isGateOptimizable() const override { return false; }
virtual int instrCount() const override { return instrCountBranch(); }
virtual int instrCount() const override { return INSTR_COUNT_BRANCH; }
virtual bool same(const AstNode* samep) const override { return true; }
// Stop statement searchback here
virtual void addBeforeStmt(AstNode* newp, AstNode* belowp) override;
@ -4669,7 +4669,7 @@ public:
if (m_labelp->clonep()) m_labelp = m_labelp->clonep();
}
virtual void dump(std::ostream& str) const override;
virtual int instrCount() const override { return instrCountBranch(); }
virtual int instrCount() const override { return INSTR_COUNT_BRANCH; }
virtual bool same(const AstNode* samep) const override {
return labelp() == static_cast<const AstJumpGo*>(samep)->labelp();
}
@ -5065,7 +5065,7 @@ public:
virtual bool isPredictOptimizable() const override { return false; }
virtual bool isPure() const override { return false; }
virtual bool isOutputter() const override { return true; }
virtual int instrCount() const override { return instrCountPli(); }
virtual int instrCount() const override { return INSTR_COUNT_PLI; }
void timeunit(const VTimescale& flag) { m_timeunit = flag; }
VTimescale timeunit() const { return m_timeunit; }
};
@ -5164,7 +5164,7 @@ public:
virtual bool isPredictOptimizable() const override { return false; }
virtual bool isPure() const override { return false; }
virtual bool isOutputter() const override { return true; }
virtual int instrCount() const override { return instrCountPli(); }
virtual int instrCount() const override { return INSTR_COUNT_PLI; }
AstNode* unitsp() const { return op1p(); }
AstNode* precisionp() const { return op2p(); }
AstNode* suffixp() const { return op3p(); }
@ -5254,7 +5254,7 @@ public:
if (m_declp->clonep()) m_declp = m_declp->clonep();
}
virtual void dump(std::ostream& str) const override;
virtual int instrCount() const override { return 10 + 2 * instrCountLd(); }
virtual int instrCount() const override { return 10 + 2 * INSTR_COUNT_LD; }
virtual bool hasDType() const override { return true; }
virtual bool same(const AstNode* samep) const override {
return declp() == static_cast<const AstTraceInc*>(samep)->declp();
@ -5432,7 +5432,7 @@ public:
virtual bool cleanOut() const override { return true; }
virtual bool isGateOptimizable() const override { return false; }
virtual bool isPredictOptimizable() const override { return false; }
virtual int instrCount() const override { return instrCountPli(); }
virtual int instrCount() const override { return INSTR_COUNT_PLI; }
virtual bool same(const AstNode* samep) const override { return true; }
AstNode* seedp() const { return op1p(); }
bool reset() const { return m_reset; }
@ -5462,7 +5462,7 @@ public:
virtual bool sizeMattersRhs() const override { return false; }
virtual bool isGateOptimizable() const override { return false; }
virtual bool isPredictOptimizable() const override { return false; }
virtual int instrCount() const override { return instrCountPli(); }
virtual int instrCount() const override { return INSTR_COUNT_PLI; }
};
class AstTime final : public AstNodeTermop {
@ -5479,7 +5479,7 @@ public:
virtual bool cleanOut() const override { return true; }
virtual bool isGateOptimizable() const override { return false; }
virtual bool isPredictOptimizable() const override { return false; }
virtual int instrCount() const override { return instrCountTime(); }
virtual int instrCount() const override { return INSTR_COUNT_TIME; }
virtual bool same(const AstNode* samep) const override { return true; }
virtual void dump(std::ostream& str = std::cout) const override;
void timeunit(const VTimescale& flag) { m_timeunit = flag; }
@ -5500,7 +5500,7 @@ public:
virtual bool cleanOut() const override { return true; }
virtual bool isGateOptimizable() const override { return false; }
virtual bool isPredictOptimizable() const override { return false; }
virtual int instrCount() const override { return instrCountTime(); }
virtual int instrCount() const override { return INSTR_COUNT_TIME; }
virtual bool same(const AstNode* samep) const override { return true; }
virtual void dump(std::ostream& str = std::cout) const override;
void timeunit(const VTimescale& flag) { m_timeunit = flag; }
@ -5525,7 +5525,7 @@ public:
virtual bool isGateOptimizable() const override { return false; }
virtual bool isSubstOptimizable() const override { return false; }
virtual bool isPredictOptimizable() const override { return false; }
virtual int instrCount() const override { return instrCountPli(); }
virtual int instrCount() const override { return INSTR_COUNT_PLI; }
virtual bool same(const AstNode* samep) const override { return true; }
};
@ -5561,7 +5561,7 @@ public:
virtual bool cleanOut() const override { return true; }
virtual bool cleanLhs() const override { return false; }
virtual bool sizeMattersLhs() const override { return false; }
virtual int instrCount() const override { return instrCountDouble(); }
virtual int instrCount() const override { return INSTR_COUNT_DBL; }
virtual bool doubleFlavor() const override { return true; }
};
class AstRedAnd final : public AstNodeUniop {
@ -5754,7 +5754,7 @@ public:
virtual bool cleanOut() const override { return false; }
virtual bool cleanLhs() const override { return false; } // Eliminated before matters
virtual bool sizeMattersLhs() const override { return false; } // Eliminated before matters
virtual int instrCount() const override { return instrCountDouble(); }
virtual int instrCount() const override { return INSTR_COUNT_DBL; }
};
class AstRToIRoundS final : public AstNodeUniop {
// Convert real to integer, with arbitrary sized output (not just "integer" format)
@ -5772,7 +5772,7 @@ public:
virtual bool cleanOut() const override { return false; }
virtual bool cleanLhs() const override { return false; }
virtual bool sizeMattersLhs() const override { return false; }
virtual int instrCount() const override { return instrCountDouble(); }
virtual int instrCount() const override { return INSTR_COUNT_DBL; }
};
class AstIToRD final : public AstNodeUniop {
// $itor where lhs is unsigned
@ -5788,7 +5788,7 @@ public:
virtual bool cleanOut() const override { return false; }
virtual bool cleanLhs() const override { return true; }
virtual bool sizeMattersLhs() const override { return false; }
virtual int instrCount() const override { return instrCountDouble(); }
virtual int instrCount() const override { return INSTR_COUNT_DBL; }
};
class AstISToRD final : public AstNodeUniop {
// $itor where lhs is signed
@ -5805,7 +5805,7 @@ public:
virtual bool cleanOut() const override { return false; }
virtual bool cleanLhs() const override { return true; }
virtual bool sizeMattersLhs() const override { return false; }
virtual int instrCount() const override { return instrCountDouble(); }
virtual int instrCount() const override { return INSTR_COUNT_DBL; }
};
class AstRealToBits final : public AstNodeUniop {
public:
@ -5822,7 +5822,7 @@ public:
virtual bool cleanOut() const override { return false; }
virtual bool cleanLhs() const override { return false; } // Eliminated before matters
virtual bool sizeMattersLhs() const override { return false; } // Eliminated before matters
virtual int instrCount() const override { return instrCountDouble(); }
virtual int instrCount() const override { return INSTR_COUNT_DBL; }
};
class AstBitsToRealD final : public AstNodeUniop {
public:
@ -5839,7 +5839,7 @@ public:
virtual bool cleanOut() const override { return false; }
virtual bool cleanLhs() const override { return false; } // Eliminated before matters
virtual bool sizeMattersLhs() const override { return false; } // Eliminated before matters
virtual int instrCount() const override { return instrCountDouble(); }
virtual int instrCount() const override { return INSTR_COUNT_DBL; }
};
class AstCLog2 final : public AstNodeUniop {
@ -6213,7 +6213,7 @@ public:
virtual bool cleanOut() const override { return true; }
virtual bool cleanLhs() const override { return false; }
virtual bool sizeMattersLhs() const override { return false; }
virtual int instrCount() const override { return instrCountDoubleTrig(); }
virtual int instrCount() const override { return INSTR_COUNT_DBL_TRIG; }
virtual bool doubleFlavor() const override { return true; }
};
@ -6551,7 +6551,7 @@ public:
virtual bool cleanRhs() const override { return true; }
virtual bool sizeMattersLhs() const override { return false; }
virtual bool sizeMattersRhs() const override { return false; }
virtual int instrCount() const override { return widthInstrs() + instrCountBranch(); }
virtual int instrCount() const override { return widthInstrs() + INSTR_COUNT_BRANCH; }
};
class AstLogAnd final : public AstNodeBiop {
public:
@ -6574,7 +6574,7 @@ public:
virtual bool cleanRhs() const override { return true; }
virtual bool sizeMattersLhs() const override { return false; }
virtual bool sizeMattersRhs() const override { return false; }
virtual int instrCount() const override { return widthInstrs() + instrCountBranch(); }
virtual int instrCount() const override { return widthInstrs() + INSTR_COUNT_BRANCH; }
};
class AstLogEq final : public AstNodeBiCom {
public:
@ -6597,7 +6597,7 @@ public:
virtual bool cleanRhs() const override { return true; }
virtual bool sizeMattersLhs() const override { return false; }
virtual bool sizeMattersRhs() const override { return false; }
virtual int instrCount() const override { return widthInstrs() + instrCountBranch(); }
virtual int instrCount() const override { return widthInstrs() + INSTR_COUNT_BRANCH; }
};
class AstLogIf final : public AstNodeBiop {
public:
@ -6620,7 +6620,7 @@ public:
virtual bool cleanRhs() const override { return true; }
virtual bool sizeMattersLhs() const override { return false; }
virtual bool sizeMattersRhs() const override { return false; }
virtual int instrCount() const override { return widthInstrs() + instrCountBranch(); }
virtual int instrCount() const override { return widthInstrs() + INSTR_COUNT_BRANCH; }
};
class AstOr final : public AstNodeBiComAsv {
public:
@ -6733,7 +6733,7 @@ public:
virtual bool cleanRhs() const override { return false; }
virtual bool sizeMattersLhs() const override { return false; }
virtual bool sizeMattersRhs() const override { return false; }
virtual int instrCount() const override { return instrCountDouble(); }
virtual int instrCount() const override { return INSTR_COUNT_DBL; }
virtual bool doubleFlavor() const override { return true; }
};
class AstEqN final : public AstNodeBiCom {
@ -6757,7 +6757,7 @@ public:
virtual bool cleanRhs() const override { return false; }
virtual bool sizeMattersLhs() const override { return false; }
virtual bool sizeMattersRhs() const override { return false; }
virtual int instrCount() const override { return instrCountString(); }
virtual int instrCount() const override { return INSTR_COUNT_STR; }
virtual bool stringFlavor() const override { return true; }
};
class AstNeq final : public AstNodeBiCom {
@ -6803,7 +6803,7 @@ public:
virtual bool cleanRhs() const override { return false; }
virtual bool sizeMattersLhs() const override { return false; }
virtual bool sizeMattersRhs() const override { return false; }
virtual int instrCount() const override { return instrCountDouble(); }
virtual int instrCount() const override { return INSTR_COUNT_DBL; }
virtual bool doubleFlavor() const override { return true; }
};
class AstNeqN final : public AstNodeBiCom {
@ -6827,7 +6827,7 @@ public:
virtual bool cleanRhs() const override { return false; }
virtual bool sizeMattersLhs() const override { return false; }
virtual bool sizeMattersRhs() const override { return false; }
virtual int instrCount() const override { return instrCountString(); }
virtual int instrCount() const override { return INSTR_COUNT_STR; }
virtual bool stringFlavor() const override { return true; }
};
class AstLt final : public AstNodeBiop {
@ -6873,7 +6873,7 @@ public:
virtual bool cleanRhs() const override { return false; }
virtual bool sizeMattersLhs() const override { return false; }
virtual bool sizeMattersRhs() const override { return false; }
virtual int instrCount() const override { return instrCountDouble(); }
virtual int instrCount() const override { return INSTR_COUNT_DBL; }
virtual bool doubleFlavor() const override { return true; }
};
class AstLtS final : public AstNodeBiop {
@ -6920,7 +6920,7 @@ public:
virtual bool cleanRhs() const override { return false; }
virtual bool sizeMattersLhs() const override { return false; }
virtual bool sizeMattersRhs() const override { return false; }
virtual int instrCount() const override { return instrCountString(); }
virtual int instrCount() const override { return INSTR_COUNT_STR; }
virtual bool stringFlavor() const override { return true; }
};
class AstGt final : public AstNodeBiop {
@ -6966,7 +6966,7 @@ public:
virtual bool cleanRhs() const override { return false; }
virtual bool sizeMattersLhs() const override { return false; }
virtual bool sizeMattersRhs() const override { return false; }
virtual int instrCount() const override { return instrCountDouble(); }
virtual int instrCount() const override { return INSTR_COUNT_DBL; }
virtual bool doubleFlavor() const override { return true; }
};
class AstGtS final : public AstNodeBiop {
@ -7013,7 +7013,7 @@ public:
virtual bool cleanRhs() const override { return false; }
virtual bool sizeMattersLhs() const override { return false; }
virtual bool sizeMattersRhs() const override { return false; }
virtual int instrCount() const override { return instrCountString(); }
virtual int instrCount() const override { return INSTR_COUNT_STR; }
virtual bool stringFlavor() const override { return true; }
};
class AstGte final : public AstNodeBiop {
@ -7061,7 +7061,7 @@ public:
virtual bool cleanRhs() const override { return false; }
virtual bool sizeMattersLhs() const override { return false; }
virtual bool sizeMattersRhs() const override { return false; }
virtual int instrCount() const override { return instrCountDouble(); }
virtual int instrCount() const override { return INSTR_COUNT_DBL; }
virtual bool doubleFlavor() const override { return true; }
};
class AstGteS final : public AstNodeBiop {
@ -7108,7 +7108,7 @@ public:
virtual bool cleanRhs() const override { return false; }
virtual bool sizeMattersLhs() const override { return false; }
virtual bool sizeMattersRhs() const override { return false; }
virtual int instrCount() const override { return instrCountString(); }
virtual int instrCount() const override { return INSTR_COUNT_STR; }
virtual bool stringFlavor() const override { return true; }
};
class AstLte final : public AstNodeBiop {
@ -7156,7 +7156,7 @@ public:
virtual bool cleanRhs() const override { return false; }
virtual bool sizeMattersLhs() const override { return false; }
virtual bool sizeMattersRhs() const override { return false; }
virtual int instrCount() const override { return instrCountDouble(); }
virtual int instrCount() const override { return INSTR_COUNT_DBL; }
virtual bool doubleFlavor() const override { return true; }
};
class AstLteS final : public AstNodeBiop {
@ -7203,7 +7203,7 @@ public:
virtual bool cleanRhs() const override { return false; }
virtual bool sizeMattersLhs() const override { return false; }
virtual bool sizeMattersRhs() const override { return false; }
virtual int instrCount() const override { return instrCountString(); }
virtual int instrCount() const override { return INSTR_COUNT_STR; }
virtual bool stringFlavor() const override { return true; }
};
class AstShiftL final : public AstNodeBiop {
@ -7324,7 +7324,7 @@ public:
virtual bool cleanRhs() const override { return false; }
virtual bool sizeMattersLhs() const override { return false; }
virtual bool sizeMattersRhs() const override { return false; }
virtual int instrCount() const override { return instrCountDouble(); }
virtual int instrCount() const override { return INSTR_COUNT_DBL; }
virtual bool doubleFlavor() const override { return true; }
};
class AstSub final : public AstNodeBiop {
@ -7370,7 +7370,7 @@ public:
virtual bool cleanRhs() const override { return false; }
virtual bool sizeMattersLhs() const override { return false; }
virtual bool sizeMattersRhs() const override { return false; }
virtual int instrCount() const override { return instrCountDouble(); }
virtual int instrCount() const override { return INSTR_COUNT_DBL; }
virtual bool doubleFlavor() const override { return true; }
};
class AstMul final : public AstNodeBiComAsv {
@ -7394,7 +7394,7 @@ public:
virtual bool cleanRhs() const override { return true; }
virtual bool sizeMattersLhs() const override { return true; }
virtual bool sizeMattersRhs() const override { return true; }
virtual int instrCount() const override { return widthInstrs() * instrCountMul(); }
virtual int instrCount() const override { return widthInstrs() * INSTR_COUNT_INT_MUL; }
};
class AstMulD final : public AstNodeBiComAsv {
public:
@ -7417,7 +7417,7 @@ public:
virtual bool cleanRhs() const override { return false; }
virtual bool sizeMattersLhs() const override { return true; }
virtual bool sizeMattersRhs() const override { return true; }
virtual int instrCount() const override { return instrCountDouble(); }
virtual int instrCount() const override { return INSTR_COUNT_DBL; }
virtual bool doubleFlavor() const override { return true; }
};
class AstMulS final : public AstNodeBiComAsv {
@ -7442,7 +7442,7 @@ public:
virtual bool cleanRhs() const override { return true; }
virtual bool sizeMattersLhs() const override { return true; }
virtual bool sizeMattersRhs() const override { return true; }
virtual int instrCount() const override { return widthInstrs() * instrCountMul(); }
virtual int instrCount() const override { return widthInstrs() * INSTR_COUNT_INT_MUL; }
virtual bool signedFlavor() const override { return true; }
};
class AstDiv final : public AstNodeBiop {
@ -7465,7 +7465,7 @@ public:
virtual bool cleanRhs() const override { return true; }
virtual bool sizeMattersLhs() const override { return true; }
virtual bool sizeMattersRhs() const override { return true; }
virtual int instrCount() const override { return widthInstrs() * instrCountDiv(); }
virtual int instrCount() const override { return widthInstrs() * INSTR_COUNT_INT_DIV; }
};
class AstDivD final : public AstNodeBiop {
public:
@ -7488,7 +7488,7 @@ public:
virtual bool cleanRhs() const override { return false; }
virtual bool sizeMattersLhs() const override { return false; }
virtual bool sizeMattersRhs() const override { return false; }
virtual int instrCount() const override { return instrCountDoubleDiv(); }
virtual int instrCount() const override { return INSTR_COUNT_DBL_DIV; }
virtual bool doubleFlavor() const override { return true; }
};
class AstDivS final : public AstNodeBiop {
@ -7511,7 +7511,7 @@ public:
virtual bool cleanRhs() const override { return true; }
virtual bool sizeMattersLhs() const override { return true; }
virtual bool sizeMattersRhs() const override { return true; }
virtual int instrCount() const override { return widthInstrs() * instrCountDiv(); }
virtual int instrCount() const override { return widthInstrs() * INSTR_COUNT_INT_DIV; }
virtual bool signedFlavor() const override { return true; }
};
class AstModDiv final : public AstNodeBiop {
@ -7534,7 +7534,7 @@ public:
virtual bool cleanRhs() const override { return true; }
virtual bool sizeMattersLhs() const override { return true; }
virtual bool sizeMattersRhs() const override { return true; }
virtual int instrCount() const override { return widthInstrs() * instrCountDiv(); }
virtual int instrCount() const override { return widthInstrs() * INSTR_COUNT_INT_DIV; }
};
class AstModDivS final : public AstNodeBiop {
public:
@ -7556,7 +7556,7 @@ public:
virtual bool cleanRhs() const override { return true; }
virtual bool sizeMattersLhs() const override { return true; }
virtual bool sizeMattersRhs() const override { return true; }
virtual int instrCount() const override { return widthInstrs() * instrCountDiv(); }
virtual int instrCount() const override { return widthInstrs() * INSTR_COUNT_INT_DIV; }
virtual bool signedFlavor() const override { return true; }
};
class AstPow final : public AstNodeBiop {
@ -7580,7 +7580,7 @@ public:
virtual bool cleanRhs() const override { return true; }
virtual bool sizeMattersLhs() const override { return true; }
virtual bool sizeMattersRhs() const override { return false; }
virtual int instrCount() const override { return widthInstrs() * instrCountMul() * 10; }
virtual int instrCount() const override { return widthInstrs() * INSTR_COUNT_INT_MUL * 10; }
};
class AstPowD final : public AstNodeBiop {
public:
@ -7602,7 +7602,7 @@ public:
virtual bool cleanRhs() const override { return false; }
virtual bool sizeMattersLhs() const override { return false; }
virtual bool sizeMattersRhs() const override { return false; }
virtual int instrCount() const override { return instrCountDoubleDiv() * 5; }
virtual int instrCount() const override { return INSTR_COUNT_DBL_DIV * 5; }
virtual bool doubleFlavor() const override { return true; }
};
class AstPowSU final : public AstNodeBiop {
@ -7628,7 +7628,7 @@ public:
virtual bool cleanRhs() const override { return true; }
virtual bool sizeMattersLhs() const override { return true; }
virtual bool sizeMattersRhs() const override { return false; }
virtual int instrCount() const override { return widthInstrs() * instrCountMul() * 10; }
virtual int instrCount() const override { return widthInstrs() * INSTR_COUNT_INT_MUL * 10; }
virtual bool signedFlavor() const override { return true; }
};
class AstPowSS final : public AstNodeBiop {
@ -7654,7 +7654,7 @@ public:
virtual bool cleanRhs() const override { return true; }
virtual bool sizeMattersLhs() const override { return true; }
virtual bool sizeMattersRhs() const override { return false; }
virtual int instrCount() const override { return widthInstrs() * instrCountMul() * 10; }
virtual int instrCount() const override { return widthInstrs() * INSTR_COUNT_INT_MUL * 10; }
virtual bool signedFlavor() const override { return true; }
};
class AstPowUS final : public AstNodeBiop {
@ -7680,7 +7680,7 @@ public:
virtual bool cleanRhs() const override { return true; }
virtual bool sizeMattersLhs() const override { return true; }
virtual bool sizeMattersRhs() const override { return false; }
virtual int instrCount() const override { return widthInstrs() * instrCountMul() * 10; }
virtual int instrCount() const override { return widthInstrs() * INSTR_COUNT_INT_MUL * 10; }
virtual bool signedFlavor() const override { return true; }
};
class AstPreAdd final : public AstNodeTriop {
@ -7921,7 +7921,7 @@ public:
virtual bool cleanRhs() const override { return true; }
virtual bool sizeMattersLhs() const override { return false; }
virtual bool sizeMattersRhs() const override { return false; }
virtual int instrCount() const override { return instrCountString(); }
virtual int instrCount() const override { return INSTR_COUNT_STR; }
virtual bool stringFlavor() const override { return true; }
};
class AstReplicate final : public AstNodeBiop {
@ -8084,7 +8084,7 @@ public:
virtual bool cleanRhs() const override { return false; }
virtual bool sizeMattersLhs() const override { return false; }
virtual bool sizeMattersRhs() const override { return false; }
virtual int instrCount() const override { return instrCountDoubleTrig(); }
virtual int instrCount() const override { return INSTR_COUNT_DBL_TRIG; }
virtual bool doubleFlavor() const override { return true; }
};
@ -8788,7 +8788,7 @@ public:
}
//
virtual void name(const string& name) override { m_name = name; }
virtual int instrCount() const override { return dpiImportPrototype() ? instrCountDpi() : 0; }
virtual int instrCount() const override { return dpiImportPrototype() ? INSTR_COUNT_DPI : 0; }
VBoolOrUnknown isConst() const { return m_isConst; }
void isConst(bool flag) { m_isConst.setTrueOrFalse(flag); }
void isConst(VBoolOrUnknown flag) { m_isConst = flag; }