Chromium Code Reviews| Index: src/IceOperand.h |
| diff --git a/src/IceOperand.h b/src/IceOperand.h |
| index 4ae217c5f3b36676469e1dd635920ecd0d1e0704..015f52c1930ae9fd8073596fcb3d1b0730144a72 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; |
| + } |
| + |
| + void setShouldBePooled(bool R) { shouldBePooled = R; } |
| + |
| + bool getShouldBePooled() { return shouldBePooled; } |
|
Jim Stichnoth
2015/06/20 17:42:16
mark as const
qining
2015/06/20 23:32:37
Done.
|
| + |
| protected: |
| Constant(OperandKind Kind, Type Ty, uint32_t PoolEntryID) |
| - : Operand(Kind, Ty), PoolEntryID(PoolEntryID) { |
| + : Operand(Kind, Ty), PoolEntryID(PoolEntryID), shouldBePooled(false) { |
| Vars = nullptr; |
| NumVars = 0; |
| } |
| @@ -128,6 +140,9 @@ protected: |
| // within its constant pool. It is used for building the constant |
| // pool in the object code and for referencing its entries. |
| const uint32_t PoolEntryID; |
| + // Whether we should pool this constant. Usually Float/Double Relocatables |
|
Jim Stichnoth
2015/06/20 17:42:16
I don't understand the mention of Relocatables? C
qining
2015/06/20 23:32:37
Done.
|
| + // and pooled Integers should be flagged true. |
| + bool shouldBePooled; |
| }; |
| // ConstantPrimitive<> wraps a primitive type. |
| @@ -160,6 +175,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 +202,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) |