| Index: src/compiler/register-allocator.cc
|
| diff --git a/src/compiler/register-allocator.cc b/src/compiler/register-allocator.cc
|
| index 5bf858a86cf6e7551ce7a033603cc7c17990cbe2..3c775efdbc4f2d386745e2d6b0853fa34717b296 100644
|
| --- a/src/compiler/register-allocator.cc
|
| +++ b/src/compiler/register-allocator.cc
|
| @@ -166,6 +166,8 @@ UsePositionHintType UsePosition::HintTypeForOperand(
|
| switch (op.kind()) {
|
| case InstructionOperand::CONSTANT:
|
| case InstructionOperand::IMMEDIATE:
|
| + case InstructionOperand::STACK_POINTER:
|
| + case InstructionOperand::FRAME_POINTER:
|
| return UsePositionHintType::kNone;
|
| case InstructionOperand::UNALLOCATED:
|
| return UsePositionHintType::kUnresolved;
|
| @@ -1245,7 +1247,10 @@ void ConstraintBuilder::MeetConstraintsBefore(int instr_index) {
|
| // Handle fixed input operands of second instruction.
|
| for (size_t i = 0; i < second->InputCount(); i++) {
|
| auto input = second->InputAt(i);
|
| - if (input->IsImmediate()) continue; // Ignore immediates.
|
| + if (input->IsImmediate() || input->IsStackPointer() ||
|
| + input->IsFramePointer()) {
|
| + continue; // Ignore immediates and special registers
|
| + }
|
| auto cur_input = UnallocatedOperand::cast(input);
|
| if (cur_input->HasFixedPolicy()) {
|
| int input_vreg = cur_input->virtual_register();
|
| @@ -1518,7 +1523,10 @@ void LiveRangeBuilder::ProcessInstructions(const InstructionBlock* block,
|
|
|
| for (size_t i = 0; i < instr->InputCount(); i++) {
|
| auto input = instr->InputAt(i);
|
| - if (input->IsImmediate()) continue; // Ignore immediates.
|
| + if (input->IsImmediate() || input->IsStackPointer() ||
|
| + input->IsFramePointer()) {
|
| + continue; // Ignore immediates and special registers
|
| + }
|
| LifetimePosition use_pos;
|
| if (input->IsUnallocated() &&
|
| UnallocatedOperand::cast(input)->IsUsedAtStart()) {
|
|
|