summaryrefslogtreecommitdiffstats
path: root/compiler/optimizing/ssa_liveness_analysis.cc
diff options
context:
space:
mode:
authorNicolas Geoffray <ngeoffray@google.com>2015-03-11 15:11:19 +0000
committerNicolas Geoffray <ngeoffray@google.com>2015-03-12 17:55:01 +0000
commit915b9d0c13bb5091875d868fbfa551d7b65d7477 (patch)
tree63822d7081b0da33ccda2019dd52025f0ecedb35 /compiler/optimizing/ssa_liveness_analysis.cc
parentbf5565a75876a84c8c2401df597d922a7870a8f2 (diff)
downloadart-915b9d0c13bb5091875d868fbfa551d7b65d7477.zip
art-915b9d0c13bb5091875d868fbfa551d7b65d7477.tar.gz
art-915b9d0c13bb5091875d868fbfa551d7b65d7477.tar.bz2
Tweak liveness when instructions are used in environments.
Instructions remain live when debuggable, but only instructions with object types remain live when non-debuggable. Enable StackVisitor::GetThisObject for optimizing. Change-Id: Id87b2cbf33a02450059acc9993995782e5f28987
Diffstat (limited to 'compiler/optimizing/ssa_liveness_analysis.cc')
-rw-r--r--compiler/optimizing/ssa_liveness_analysis.cc5
1 files changed, 3 insertions, 2 deletions
diff --git a/compiler/optimizing/ssa_liveness_analysis.cc b/compiler/optimizing/ssa_liveness_analysis.cc
index d009390..c0d6f42 100644
--- a/compiler/optimizing/ssa_liveness_analysis.cc
+++ b/compiler/optimizing/ssa_liveness_analysis.cc
@@ -230,11 +230,12 @@ void SsaLivenessAnalysis::ComputeLiveRanges() {
}
if (current->HasEnvironment()) {
- // All instructions in the environment must be live.
+ // Handle environment uses. See statements (b) and (c) of the
+ // SsaLivenessAnalysis.
HEnvironment* environment = current->GetEnvironment();
for (size_t i = 0, e = environment->Size(); i < e; ++i) {
HInstruction* instruction = environment->GetInstructionAt(i);
- if (instruction != nullptr) {
+ if (ShouldBeLiveForEnvironment(instruction)) {
DCHECK(instruction->HasSsaIndex());
live_in->SetBit(instruction->GetSsaIndex());
instruction->GetLiveInterval()->AddUse(current, i, true);