Chromium Code Reviews| 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 |
|
Jim Stichnoth
2015/06/19 16:51:03
Doubled ==> Double
qining
2015/06/19 20:22:25
Done.
|
| + // and pooled Integers should be flaged true. |
|
Jim Stichnoth
2015/06/19 16:51:03
flagged
qining
2015/06/19 20:22:25
Done.
|
| + 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) |