| Index: src/compiler/s390/instruction-selector-s390.cc
|
| diff --git a/src/compiler/s390/instruction-selector-s390.cc b/src/compiler/s390/instruction-selector-s390.cc
|
| index 1b1bd2f624d0295072ab7fae6b0df26e83bd13d2..1b2541d0cda0c231d2b1029ebe5b0787d5595c7a 100644
|
| --- a/src/compiler/s390/instruction-selector-s390.cc
|
| +++ b/src/compiler/s390/instruction-selector-s390.cc
|
| @@ -128,7 +128,14 @@ void VisitBinop(InstructionSelector* selector, Node* node,
|
| inputs[input_count++] = g.Label(cont->false_block());
|
| }
|
|
|
| - outputs[output_count++] = g.DefineAsRegister(node);
|
| + if (cont->IsDeoptimize()) {
|
| + // If we can deoptimize as a result of the binop, we need to make sure that
|
| + // the deopt inputs are not overwritten by the binop result. One way
|
| + // to achieve that is to declare the output register as same-as-first.
|
| + outputs[output_count++] = g.DefineSameAsFirst(node);
|
| + } else {
|
| + outputs[output_count++] = g.DefineAsRegister(node);
|
| + }
|
| if (cont->IsSet()) {
|
| outputs[output_count++] = g.DefineAsRegister(cont->result());
|
| }
|
|
|