diff --git a/src/hydrogen-instructions.h b/src/hydrogen-instructions.h index e7dc81a803..a4e9ed72b1 100644 --- a/src/hydrogen-instructions.h +++ b/src/hydrogen-instructions.h @@ -53,6 +53,7 @@ class LChunkBuilder; #define HYDROGEN_ABSTRACT_INSTRUCTION_LIST(V) \ + V(BinaryOperation) \ V(BitwiseBinaryOperation) \ V(ControlInstruction) \ V(Instruction) \ @@ -2677,6 +2678,8 @@ class HBinaryOperation: public HTemplateInstruction<3> { virtual bool IsCommutative() const { return false; } virtual void PrintDataTo(StringStream* stream); + + DECLARE_ABSTRACT_INSTRUCTION(BinaryOperation) }; diff --git a/src/hydrogen.cc b/src/hydrogen.cc index 8e9fe00034..1afa6603aa 100644 --- a/src/hydrogen.cc +++ b/src/hydrogen.cc @@ -3567,7 +3567,10 @@ class BoundsCheckBbData: public ZoneObject { HConstant(new_offset, Representation::Integer32()); if (*add == NULL) { new_constant->InsertBefore(check); - *add = new(BasicBlock()->zone()) HAdd(NULL, + // Because of the bounds checks elimination algorithm, the index is always + // an HAdd or an HSub here, so we can safely cast to an HBinaryOperation. + HValue* context = HBinaryOperation::cast(check->index())->context(); + *add = new(BasicBlock()->zone()) HAdd(context, original_value, new_constant); (*add)->AssumeRepresentation(representation);