diff options
author | 2014-11-21 13:33:51 +0000 | |
---|---|---|
committer | 2014-11-21 13:33:51 +0000 | |
commit | 3054a90063d379ab8c9e5a42a7daf0d644b48b07 (patch) | |
tree | 90e2138b5505f00daca6db17783a9129a6845e9b /compiler/optimizing/ssa_liveness_analysis.h | |
parent | 23442bea869747da0361e96ec2704956de54ded7 (diff) |
Fix the computation of linear ordering.
The register allocator makes assumptions on the order, and
we ended up not computing the right one. The algorithm worked
fine when the loop header is the block branching to the exit,
but in the presence of breaks or do/while, it was incorrect.
Change-Id: Iad0a89872cd3f7b7a8b2bdf560f0d03493f93ba5
Diffstat (limited to 'compiler/optimizing/ssa_liveness_analysis.h')
-rw-r--r-- | compiler/optimizing/ssa_liveness_analysis.h | 34 |
1 files changed, 17 insertions, 17 deletions
diff --git a/compiler/optimizing/ssa_liveness_analysis.h b/compiler/optimizing/ssa_liveness_analysis.h index ca08d5b3e6..46cea6de8c 100644 --- a/compiler/optimizing/ssa_liveness_analysis.h +++ b/compiler/optimizing/ssa_liveness_analysis.h @@ -582,7 +582,7 @@ class SsaLivenessAnalysis : public ValueObject { SsaLivenessAnalysis(const HGraph& graph, CodeGenerator* codegen) : graph_(graph), codegen_(codegen), - linear_post_order_(graph.GetArena(), graph.GetBlocks().Size()), + linear_order_(graph.GetArena(), graph.GetBlocks().Size()), block_infos_(graph.GetArena(), graph.GetBlocks().Size()), instructions_from_ssa_index_(graph.GetArena(), 0), instructions_from_lifetime_position_(graph.GetArena(), 0), @@ -604,8 +604,8 @@ class SsaLivenessAnalysis : public ValueObject { return &block_infos_.Get(block.GetBlockId())->kill_; } - const GrowableArray<HBasicBlock*>& GetLinearPostOrder() const { - return linear_post_order_; + const GrowableArray<HBasicBlock*>& GetLinearOrder() const { + return linear_order_; } HInstruction* GetInstructionFromSsaIndex(size_t index) const { @@ -661,7 +661,7 @@ class SsaLivenessAnalysis : public ValueObject { const HGraph& graph_; CodeGenerator* const codegen_; - GrowableArray<HBasicBlock*> linear_post_order_; + GrowableArray<HBasicBlock*> linear_order_; GrowableArray<BlockInfo*> block_infos_; // Temporary array used when computing live_in, live_out, and kill sets. @@ -674,36 +674,36 @@ class SsaLivenessAnalysis : public ValueObject { DISALLOW_COPY_AND_ASSIGN(SsaLivenessAnalysis); }; -class HLinearOrderIterator : public ValueObject { +class HLinearPostOrderIterator : public ValueObject { public: - explicit HLinearOrderIterator(const SsaLivenessAnalysis& liveness) - : post_order_(liveness.GetLinearPostOrder()), index_(liveness.GetLinearPostOrder().Size()) {} + explicit HLinearPostOrderIterator(const SsaLivenessAnalysis& liveness) + : order_(liveness.GetLinearOrder()), index_(liveness.GetLinearOrder().Size()) {} bool Done() const { return index_ == 0; } - HBasicBlock* Current() const { return post_order_.Get(index_ -1); } + HBasicBlock* Current() const { return order_.Get(index_ -1); } void Advance() { --index_; DCHECK_GE(index_, 0U); } private: - const GrowableArray<HBasicBlock*>& post_order_; + const GrowableArray<HBasicBlock*>& order_; size_t index_; - DISALLOW_COPY_AND_ASSIGN(HLinearOrderIterator); + DISALLOW_COPY_AND_ASSIGN(HLinearPostOrderIterator); }; -class HLinearPostOrderIterator : public ValueObject { +class HLinearOrderIterator : public ValueObject { public: - explicit HLinearPostOrderIterator(const SsaLivenessAnalysis& liveness) - : post_order_(liveness.GetLinearPostOrder()), index_(0) {} + explicit HLinearOrderIterator(const SsaLivenessAnalysis& liveness) + : order_(liveness.GetLinearOrder()), index_(0) {} - bool Done() const { return index_ == post_order_.Size(); } - HBasicBlock* Current() const { return post_order_.Get(index_); } + bool Done() const { return index_ == order_.Size(); } + HBasicBlock* Current() const { return order_.Get(index_); } void Advance() { ++index_; } private: - const GrowableArray<HBasicBlock*>& post_order_; + const GrowableArray<HBasicBlock*>& order_; size_t index_; - DISALLOW_COPY_AND_ASSIGN(HLinearPostOrderIterator); + DISALLOW_COPY_AND_ASSIGN(HLinearOrderIterator); }; } // namespace art |