Internals: Use C++11 constexpr for instruction count costs
No functional change.
This commit is contained in:
parent
33af14eba8
commit
b46664c70a
40
src/V3Ast.h
40
src/V3Ast.h
|
|
@ -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());
|
||||
|
|
|
|||
130
src/V3AstNodes.h
130
src/V3AstNodes.h
|
|
@ -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; }
|
||||
|
|
|
|||
Loading…
Reference in New Issue