diff options
Diffstat (limited to 'compiler/optimizing/nodes.h')
-rw-r--r-- | compiler/optimizing/nodes.h | 72 |
1 files changed, 51 insertions, 21 deletions
diff --git a/compiler/optimizing/nodes.h b/compiler/optimizing/nodes.h index 33bfe19081..7549ebfbe4 100644 --- a/compiler/optimizing/nodes.h +++ b/compiler/optimizing/nodes.h @@ -79,12 +79,14 @@ class HInstructionList { }; // Control-flow graph of a method. Contains a list of basic blocks. -class HGraph : public ArenaObject { +class HGraph : public ArenaObject<kArenaAllocMisc> { public: explicit HGraph(ArenaAllocator* arena) : arena_(arena), blocks_(arena, kDefaultNumberOfBlocks), reverse_post_order_(arena, kDefaultNumberOfBlocks), + entry_block_(nullptr), + exit_block_(nullptr), maximum_number_of_out_vregs_(0), number_of_vregs_(0), number_of_in_vregs_(0), @@ -199,7 +201,7 @@ class HGraph : public ArenaObject { DISALLOW_COPY_AND_ASSIGN(HGraph); }; -class HLoopInformation : public ArenaObject { +class HLoopInformation : public ArenaObject<kArenaAllocMisc> { public: HLoopInformation(HBasicBlock* header, HGraph* graph) : header_(header), @@ -278,7 +280,7 @@ static constexpr uint32_t kNoDexPc = -1; // as a double linked list. Each block knows its predecessors and // successors. -class HBasicBlock : public ArenaObject { +class HBasicBlock : public ArenaObject<kArenaAllocMisc> { public: explicit HBasicBlock(HGraph* graph, uint32_t dex_pc = kNoDexPc) : graph_(graph), @@ -537,7 +539,7 @@ FOR_EACH_INSTRUCTION(FORWARD_DECLARATION) virtual void Accept(HGraphVisitor* visitor) template <typename T> -class HUseListNode : public ArenaObject { +class HUseListNode : public ArenaObject<kArenaAllocMisc> { public: HUseListNode(T* user, size_t index, HUseListNode* tail) : user_(user), index_(index), tail_(tail) {} @@ -619,7 +621,7 @@ class SideEffects : public ValueObject { size_t flags_; }; -class HInstruction : public ArenaObject { +class HInstruction : public ArenaObject<kArenaAllocMisc> { public: explicit HInstruction(SideEffects side_effects) : previous_(nullptr), @@ -738,12 +740,18 @@ class HInstruction : public ArenaObject { virtual bool CanBeMoved() const { return false; } // Returns whether the two instructions are of the same kind. - virtual bool InstructionTypeEquals(HInstruction* other) const { return false; } + virtual bool InstructionTypeEquals(HInstruction* other) const { + UNUSED(other); + return false; + } // Returns whether any data encoded in the two instructions is equal. // This method does not look at the inputs. Both instructions must be // of the same type, otherwise the method has undefined behavior. - virtual bool InstructionDataEquals(HInstruction* other) const { return false; } + virtual bool InstructionDataEquals(HInstruction* other) const { + UNUSED(other); + return false; + } // Returns whether two instructions are equal, that is: // 1) They have the same type and contain the same data, @@ -808,6 +816,7 @@ class HInstruction : public ArenaObject { DISALLOW_COPY_AND_ASSIGN(HInstruction); }; +std::ostream& operator<<(std::ostream& os, const HInstruction::InstructionKind& rhs); template<typename T> class HUseIterator : public ValueObject { @@ -833,7 +842,7 @@ class HUseIterator : public ValueObject { }; // A HEnvironment object contains the values of virtual registers at a given location. -class HEnvironment : public ArenaObject { +class HEnvironment : public ArenaObject<kArenaAllocMisc> { public: HEnvironment(ArenaAllocator* arena, size_t number_of_vregs) : vregs_(arena, number_of_vregs) { vregs_.SetSize(number_of_vregs); @@ -965,14 +974,14 @@ class EmbeddedArray<T, 0> { public: intptr_t length() const { return 0; } const T& operator[](intptr_t i) const { + UNUSED(i); LOG(FATAL) << "Unreachable"; - static T sentinel = 0; - return sentinel; + UNREACHABLE(); } T& operator[](intptr_t i) { + UNUSED(i); LOG(FATAL) << "Unreachable"; - static T sentinel = 0; - return sentinel; + UNREACHABLE(); } }; @@ -1110,7 +1119,10 @@ class HUnaryOperation : public HExpression<1> { Primitive::Type GetResultType() const { return GetType(); } virtual bool CanBeMoved() const { return true; } - virtual bool InstructionDataEquals(HInstruction* other) const { return true; } + virtual bool InstructionDataEquals(HInstruction* other) const { + UNUSED(other); + return true; + } // Try to statically evaluate `operation` and return a HConstant // containing the result of this evaluation. If `operation` cannot @@ -1143,7 +1155,10 @@ class HBinaryOperation : public HExpression<2> { virtual bool IsCommutative() { return false; } virtual bool CanBeMoved() const { return true; } - virtual bool InstructionDataEquals(HInstruction* other) const { return true; } + virtual bool InstructionDataEquals(HInstruction* other) const { + UNUSED(other); + return true; + } // Try to statically evaluate `operation` and return a HConstant // containing the result of this evaluation. If `operation` cannot @@ -1732,7 +1747,10 @@ class HNot : public HUnaryOperation { : HUnaryOperation(result_type, input) {} virtual bool CanBeMoved() const { return true; } - virtual bool InstructionDataEquals(HInstruction* other) const { return true; } + virtual bool InstructionDataEquals(HInstruction* other) const { + UNUSED(other); + return true; + } virtual int32_t Evaluate(int32_t x) const OVERRIDE { return ~x; } virtual int64_t Evaluate(int64_t x) const OVERRIDE { return ~x; } @@ -1792,7 +1810,10 @@ class HNullCheck : public HExpression<1> { } virtual bool CanBeMoved() const { return true; } - virtual bool InstructionDataEquals(HInstruction* other) const { return true; } + virtual bool InstructionDataEquals(HInstruction* other) const { + UNUSED(other); + return true; + } virtual bool NeedsEnvironment() const { return true; } @@ -1884,7 +1905,10 @@ class HArrayGet : public HExpression<2> { } virtual bool CanBeMoved() const { return true; } - virtual bool InstructionDataEquals(HInstruction* other) const { return true; } + virtual bool InstructionDataEquals(HInstruction* other) const { + UNUSED(other); + return true; + } void SetType(Primitive::Type type) { type_ = type; } DECLARE_INSTRUCTION(ArrayGet); @@ -1948,7 +1972,10 @@ class HArrayLength : public HExpression<1> { } virtual bool CanBeMoved() const { return true; } - virtual bool InstructionDataEquals(HInstruction* other) const { return true; } + virtual bool InstructionDataEquals(HInstruction* other) const { + UNUSED(other); + return true; + } DECLARE_INSTRUCTION(ArrayLength); @@ -1966,7 +1993,10 @@ class HBoundsCheck : public HExpression<2> { } virtual bool CanBeMoved() const { return true; } - virtual bool InstructionDataEquals(HInstruction* other) const { return true; } + virtual bool InstructionDataEquals(HInstruction* other) const { + UNUSED(other); + return true; + } virtual bool NeedsEnvironment() const { return true; } @@ -2177,7 +2207,7 @@ class HStaticFieldSet : public HTemplateInstruction<2> { DISALLOW_COPY_AND_ASSIGN(HStaticFieldSet); }; -class MoveOperands : public ArenaObject { +class MoveOperands : public ArenaObject<kArenaAllocMisc> { public: MoveOperands(Location source, Location destination, HInstruction* instruction) : source_(source), destination_(destination), instruction_(instruction) {} @@ -2278,7 +2308,7 @@ class HGraphVisitor : public ValueObject { explicit HGraphVisitor(HGraph* graph) : graph_(graph) {} virtual ~HGraphVisitor() {} - virtual void VisitInstruction(HInstruction* instruction) {} + virtual void VisitInstruction(HInstruction* instruction) { UNUSED(instruction); } virtual void VisitBasicBlock(HBasicBlock* block); // Visit the graph following basic block insertion order. |