| Index: src/IceOperand.h
|
| diff --git a/src/IceOperand.h b/src/IceOperand.h
|
| index 4ae217c5f3b36676469e1dd635920ecd0d1e0704..b46cade6b06634ff0cee10c76a8400d5bea571b3 100644
|
| --- a/src/IceOperand.h
|
| +++ b/src/IceOperand.h
|
| @@ -117,9 +117,21 @@ public:
|
| return Kind >= kConst_Base && Kind <= kConst_Num;
|
| }
|
|
|
| + // Judge if this given immediate should be randomized or pooled
|
| + // By default should return false, only constant integers should
|
| + // truly go through this method.
|
| + virtual bool shouldBeRandomizedOrPooled(const GlobalContext *Ctx) {
|
| + (void)Ctx;
|
| + return false;
|
| + }
|
| +
|
| + // Whether we should pool this constant. Usually Float/Doubled Relocatables
|
| + // and pooled Integers should be flaged true.
|
| + bool shouldBePooled;
|
| +
|
| protected:
|
| Constant(OperandKind Kind, Type Ty, uint32_t PoolEntryID)
|
| - : Operand(Kind, Ty), PoolEntryID(PoolEntryID) {
|
| + : Operand(Kind, Ty), shouldBePooled(false), PoolEntryID(PoolEntryID) {
|
| Vars = nullptr;
|
| NumVars = 0;
|
| }
|
| @@ -160,6 +172,11 @@ public:
|
| return Operand->getKind() == K;
|
| }
|
|
|
| + virtual bool shouldBeRandomizedOrPooled(const GlobalContext *Ctx) override {
|
| + (void)Ctx;
|
| + return false;
|
| + }
|
| +
|
| private:
|
| ConstantPrimitive(Type Ty, PrimType Value, uint32_t PoolEntryID)
|
| : Constant(K, Ty, PoolEntryID), Value(Value) {}
|
| @@ -182,6 +199,10 @@ inline void ConstantInteger32::dump(const Cfg *, Ostream &Str) const {
|
| Str << static_cast<int32_t>(getValue());
|
| }
|
|
|
| +// Specialization of the template member function for ConstantInteger32
|
| +template <>
|
| +bool ConstantInteger32::shouldBeRandomizedOrPooled(const GlobalContext *Ctx);
|
| +
|
| template <>
|
| inline void ConstantInteger64::dump(const Cfg *, Ostream &Str) const {
|
| if (!ALLOW_DUMP)
|
|
|