Commit fd733987 authored by mtrofin's avatar mtrofin Committed by Commit bot

This change precisely identifies the live range of the

exception operand in a handler block. This avoids confusing
unrelated ranges, which may happen if escape analysis elides
the exception operand.

BUG=chromium:576195
LOG=N

Review URL: https://codereview.chromium.org/1579603005

Cr-Commit-Position: refs/heads/master@{#33271}
parent a3f234cd
......@@ -1919,7 +1919,10 @@ void LiveRangeBuilder::ProcessInstructions(const InstructionBlock* block,
int out_vreg = ConstantOperand::cast(output)->virtual_register();
live->Remove(out_vreg);
}
if (block->IsHandler() && index == block_start) {
if (block->IsHandler() && index == block_start && output->IsAllocated() &&
output->IsRegister() &&
AllocatedOperand::cast(output)->GetRegister().is(
v8::internal::kReturnRegister0)) {
// The register defined here is blocked from gap start - it is the
// exception value.
// TODO(mtrofin): should we explore an explicit opcode for
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment