| Index: src/hydrogen-bce.cc
|
| diff --git a/src/hydrogen-bce.cc b/src/hydrogen-bce.cc
|
| index 729317eec67776d1c0ec689634c262a453fed3ca..48c1f770d80797fee5d195906f52e7eb11ea67ef 100644
|
| --- a/src/hydrogen-bce.cc
|
| +++ b/src/hydrogen-bce.cc
|
| @@ -231,12 +231,15 @@ class BoundsCheckBbData: public ZoneObject {
|
| HArithmeticBinaryOperation::cast(index_raw);
|
| HValue* left_input = index->left();
|
| HValue* right_input = index->right();
|
| + HValue* context = index->context();
|
| bool must_move_index = false;
|
| bool must_move_left_input = false;
|
| bool must_move_right_input = false;
|
| + bool must_move_context = false;
|
| for (HInstruction* cursor = end_of_scan_range; cursor != insert_before;) {
|
| if (cursor == left_input) must_move_left_input = true;
|
| if (cursor == right_input) must_move_right_input = true;
|
| + if (cursor == context) must_move_context = true;
|
| if (cursor == index) must_move_index = true;
|
| if (cursor->previous() == NULL) {
|
| cursor = cursor->block()->dominator()->end();
|
| @@ -258,6 +261,11 @@ class BoundsCheckBbData: public ZoneObject {
|
| HConstant::cast(right_input)->Unlink();
|
| HConstant::cast(right_input)->InsertBefore(index);
|
| }
|
| + if (must_move_context) {
|
| + // Contexts are always constants.
|
| + HConstant::cast(context)->Unlink();
|
| + HConstant::cast(context)->InsertBefore(index);
|
| + }
|
| } else if (index_raw->IsConstant()) {
|
| HConstant* index = HConstant::cast(index_raw);
|
| bool must_move = false;
|
|
|