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) |