Index: src/IceOperand.h |
diff --git a/src/IceOperand.h b/src/IceOperand.h |
index 1f2609fbe7fdcd44777755343e445c055407f570..5630c5cd2e6a1c2e9e935e563e82734198dda3cd 100644 |
--- a/src/IceOperand.h |
+++ b/src/IceOperand.h |
@@ -26,6 +26,7 @@ |
namespace Ice { |
class Operand { |
+ Operand() = delete; |
Operand(const Operand &) = delete; |
Operand &operator=(const Operand &) = delete; |
@@ -97,6 +98,7 @@ inline StreamType &operator<<(StreamType &Str, const Operand &Op) { |
// Constant is the abstract base class for constants. All |
// constants are allocated from a global arena and are pooled. |
class Constant : public Operand { |
+ Constant() = delete; |
Constant(const Constant &) = delete; |
Constant &operator=(const Constant &) = delete; |
@@ -128,6 +130,7 @@ protected: |
// ConstantPrimitive<> wraps a primitive type. |
template <typename T, Operand::OperandKind K> |
class ConstantPrimitive : public Constant { |
+ ConstantPrimitive() = delete; |
ConstantPrimitive(const ConstantPrimitive &) = delete; |
ConstantPrimitive &operator=(const ConstantPrimitive &) = delete; |
@@ -191,6 +194,7 @@ inline void ConstantInteger64::dump(const Cfg *, Ostream &Str) const { |
// ConstantRelocatable can fit into the global constant pool |
// template mechanism. |
class RelocatableTuple { |
+ RelocatableTuple() = delete; |
RelocatableTuple &operator=(const RelocatableTuple &) = delete; |
public: |
@@ -209,6 +213,7 @@ bool operator==(const RelocatableTuple &A, const RelocatableTuple &B); |
// ConstantRelocatable represents a symbolic constant combined with |
// a fixed offset. |
class ConstantRelocatable : public Constant { |
+ ConstantRelocatable() = delete; |
ConstantRelocatable(const ConstantRelocatable &) = delete; |
ConstantRelocatable &operator=(const ConstantRelocatable &) = delete; |
@@ -252,6 +257,7 @@ private: |
// legal to lower ConstantUndef to any value, backends should try to |
// make code generation deterministic by lowering ConstantUndefs to 0. |
class ConstantUndef : public Constant { |
+ ConstantUndef() = delete; |
ConstantUndef(const ConstantUndef &) = delete; |
ConstantUndef &operator=(const ConstantUndef &) = delete; |
@@ -286,10 +292,9 @@ private: |
// special value that represents infinite weight, and an addWeight() |
// method that ensures that W+infinity=infinity. |
class RegWeight { |
- |
public: |
RegWeight() : Weight(0) {} |
- RegWeight(uint32_t Weight) : Weight(Weight) {} |
+ explicit RegWeight(uint32_t Weight) : Weight(Weight) {} |
RegWeight(const RegWeight &) = default; |
RegWeight &operator=(const RegWeight &) = default; |
const static uint32_t Inf = ~0; // Force regalloc to give a register |
@@ -304,6 +309,7 @@ public: |
void setWeight(uint32_t Val) { Weight = Val; } |
uint32_t getWeight() const { return Weight; } |
bool isInf() const { return Weight == Inf; } |
+ bool isZero() const { return Weight == Zero; } |
private: |
uint32_t Weight; |
@@ -324,7 +330,7 @@ public: |
LiveRange() : Weight(0) {} |
// Special constructor for building a kill set. The advantage is |
// that we can reserve the right amount of space in advance. |
- LiveRange(const std::vector<InstNumberT> &Kills) : Weight(0) { |
+ explicit LiveRange(const std::vector<InstNumberT> &Kills) : Weight(0) { |
Range.reserve(Kills.size()); |
for (InstNumberT I : Kills) |
addSegment(I, I); |
@@ -380,6 +386,7 @@ Ostream &operator<<(Ostream &Str, const LiveRange &L); |
// stack-allocated. If it is register-allocated, it will ultimately |
// have a non-negative RegNum field. |
class Variable : public Operand { |
+ Variable() = delete; |
Variable(const Variable &) = delete; |
Variable &operator=(const Variable &) = delete; |
@@ -421,8 +428,8 @@ public: |
void setRegNumTmp(int32_t NewRegNum) { RegNumTmp = NewRegNum; } |
RegWeight getWeight() const { return Weight; } |
- void setWeight(uint32_t NewWeight) { Weight = NewWeight; } |
- void setWeightInfinite() { Weight = RegWeight::Inf; } |
+ void setWeight(uint32_t NewWeight) { Weight = RegWeight(NewWeight); } |
+ void setWeightInfinite() { setWeight(RegWeight::Inf); } |
LiveRange &getLiveRange() { return Live; } |
const LiveRange &getLiveRange() const { return Live; } |
@@ -432,11 +439,13 @@ public: |
assert(WeightDelta != RegWeight::Inf); |
Live.addSegment(Start, End); |
if (Weight.isInf()) |
- Live.setWeight(RegWeight::Inf); |
+ Live.setWeight(RegWeight(RegWeight::Inf)); |
else |
Live.addWeight(WeightDelta * Weight.getWeight()); |
} |
- void setLiveRangeInfiniteWeight() { Live.setWeight(RegWeight::Inf); } |
+ void setLiveRangeInfiniteWeight() { |
+ Live.setWeight(RegWeight(RegWeight::Inf)); |
+ } |
void trimLiveRange(InstNumberT Start) { Live.trim(Start); } |
void untrimLiveRange() { Live.untrim(); } |
bool rangeEndsBefore(const Variable *Other) const { |
@@ -570,11 +579,12 @@ private: |
// VariablesMetadata analyzes and summarizes the metadata for the |
// complete set of Variables. |
class VariablesMetadata { |
+ VariablesMetadata() = delete; |
VariablesMetadata(const VariablesMetadata &) = delete; |
VariablesMetadata &operator=(const VariablesMetadata &) = delete; |
public: |
- VariablesMetadata(const Cfg *Func) : Func(Func) {} |
+ explicit VariablesMetadata(const Cfg *Func) : Func(Func) {} |
// Initialize the state by traversing all instructions/variables in |
// the CFG. |
void init(MetadataKind TrackingKind); |