From fd66c50d64c38e40bafde83b4872e27bbff7546d Mon Sep 17 00:00:00 2001 From: Vladimir Marko Date: Mon, 18 Apr 2016 15:37:01 +0100 Subject: Fix inlining loops in OSR mode. When compiling a method in OSR mode and the method does not contain a loop (arguably, a very odd case) but we inline another method with a loop and then the final DCE re-runs the loop identification, the inlined loop would previously be marked as irreducible. However, the SSA liveness analysis expects irreducible loop to have extra loop Phis which were already eliminated from the loop before the inner graph was inlined to the outer graph, so we would fail a DCHECK(). We fix this by not marking inlined loops as irreducible when compiling in OSR mode. Bug: 28210356 Change-Id: If10057ed883333c62a878ed2ae3fe01bb5280e33 --- compiler/optimizing/ssa_liveness_analysis.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'compiler/optimizing/ssa_liveness_analysis.cc') diff --git a/compiler/optimizing/ssa_liveness_analysis.cc b/compiler/optimizing/ssa_liveness_analysis.cc index 83e9dacb1a..134c1f65e4 100644 --- a/compiler/optimizing/ssa_liveness_analysis.cc +++ b/compiler/optimizing/ssa_liveness_analysis.cc @@ -318,7 +318,7 @@ void SsaLivenessAnalysis::ComputeLiveRanges() { for (uint32_t idx : live_in->Indexes()) { HInstruction* instruction = GetInstructionFromSsaIndex(idx); DCHECK(instruction->GetBlock()->IsEntryBlock()) << instruction->DebugName(); - DCHECK(!instruction->IsParameterValue()) << instruction->DebugName(); + DCHECK(!instruction->IsParameterValue()); DCHECK(instruction->IsCurrentMethod() || instruction->IsConstant()) << instruction->DebugName(); } -- cgit v1.2.3-59-g8ed1b