| Index: src/hydrogen-instructions.h
|
| diff --git a/src/hydrogen-instructions.h b/src/hydrogen-instructions.h
|
| index fe701aeca6a11471ccdc35c48a4e89ba0ccd73f5..45ee69582713d05558dcca989434b68a2d54f493 100644
|
| --- a/src/hydrogen-instructions.h
|
| +++ b/src/hydrogen-instructions.h
|
| @@ -46,6 +46,7 @@ namespace internal {
|
|
|
| // Forward declarations.
|
| class HBasicBlock;
|
| +class HDiv;
|
| class HEnvironment;
|
| class HInferRepresentationPhase;
|
| class HInstruction;
|
| @@ -1207,9 +1208,21 @@ class HInstruction : public HValue {
|
|
|
| bool IsLinked() const { return block() != NULL; }
|
| void Unlink();
|
| +
|
| void InsertBefore(HInstruction* next);
|
| +
|
| + template<class T> T* Prepend(T* instr) {
|
| + instr->InsertBefore(this);
|
| + return instr;
|
| + }
|
| +
|
| void InsertAfter(HInstruction* previous);
|
|
|
| + template<class T> T* Append(T* instr) {
|
| + instr->InsertAfter(this);
|
| + return instr;
|
| + }
|
| +
|
| // The position is a write-once variable.
|
| virtual int position() const V8_OVERRIDE {
|
| return position_.position();
|
| @@ -2706,6 +2719,9 @@ class HUnaryMathOperation V8_FINAL : public HTemplateInstruction<2> {
|
|
|
| virtual bool IsDeletable() const V8_OVERRIDE { return true; }
|
|
|
| + HValue* SimplifiedDividendForMathFloorOfDiv(HDiv* hdiv);
|
| + HValue* SimplifiedDivisorForMathFloorOfDiv(HDiv* hdiv);
|
| +
|
| BuiltinFunctionId op_;
|
| };
|
|
|
| @@ -3476,10 +3492,8 @@ class HConstant V8_FINAL : public HTemplateInstruction<0> {
|
| int32_t value,
|
| Representation representation,
|
| HInstruction* instruction) {
|
| - HConstant* new_constant =
|
| - HConstant::New(zone, context, value, representation);
|
| - new_constant->InsertAfter(instruction);
|
| - return new_constant;
|
| + return instruction->Append(HConstant::New(
|
| + zone, context, value, representation));
|
| }
|
|
|
| static HConstant* CreateAndInsertBefore(Zone* zone,
|
| @@ -3487,21 +3501,17 @@ class HConstant V8_FINAL : public HTemplateInstruction<0> {
|
| int32_t value,
|
| Representation representation,
|
| HInstruction* instruction) {
|
| - HConstant* new_constant =
|
| - HConstant::New(zone, context, value, representation);
|
| - new_constant->InsertBefore(instruction);
|
| - return new_constant;
|
| + return instruction->Prepend(HConstant::New(
|
| + zone, context, value, representation));
|
| }
|
|
|
| static HConstant* CreateAndInsertBefore(Zone* zone,
|
| Unique<Object> unique,
|
| bool is_not_in_new_space,
|
| HInstruction* instruction) {
|
| - HConstant* new_constant = new(zone) HConstant(unique,
|
| - Representation::Tagged(), HType::Tagged(), false, is_not_in_new_space,
|
| - false, false);
|
| - new_constant->InsertBefore(instruction);
|
| - return new_constant;
|
| + return instruction->Prepend(new(zone) HConstant(
|
| + unique, Representation::Tagged(), HType::Tagged(), false,
|
| + is_not_in_new_space, false, false));
|
| }
|
|
|
| Handle<Object> handle(Isolate* isolate) {
|
| @@ -4188,7 +4198,14 @@ class HArithmeticBinaryOperation : public HBinaryOperation {
|
| }
|
| }
|
|
|
| + bool RightIsPowerOf2() {
|
| + if (!right()->IsInteger32Constant()) return false;
|
| + int32_t value = right()->GetInteger32Constant();
|
| + return value != 0 && (IsPowerOf2(value) || IsPowerOf2(-value));
|
| + }
|
| +
|
| DECLARE_ABSTRACT_INSTRUCTION(ArithmeticBinaryOperation)
|
| +
|
| private:
|
| virtual bool IsDeletable() const V8_OVERRIDE { return true; }
|
| };
|
| @@ -4887,16 +4904,6 @@ class HMod V8_FINAL : public HArithmeticBinaryOperation {
|
| HValue* left,
|
| HValue* right);
|
|
|
| - bool HasPowerOf2Divisor() {
|
| - if (right()->IsConstant() &&
|
| - HConstant::cast(right())->HasInteger32Value()) {
|
| - int32_t value = HConstant::cast(right())->Integer32Value();
|
| - return value != 0 && (IsPowerOf2(value) || IsPowerOf2(-value));
|
| - }
|
| -
|
| - return false;
|
| - }
|
| -
|
| virtual HValue* EnsureAndPropagateNotMinusZero(
|
| BitVector* visited) V8_OVERRIDE;
|
|
|
| @@ -4933,15 +4940,6 @@ class HDiv V8_FINAL : public HArithmeticBinaryOperation {
|
| HValue* left,
|
| HValue* right);
|
|
|
| - bool HasPowerOf2Divisor() {
|
| - if (right()->IsInteger32Constant()) {
|
| - int32_t value = right()->GetInteger32Constant();
|
| - return value != 0 && (IsPowerOf2(value) || IsPowerOf2(-value));
|
| - }
|
| -
|
| - return false;
|
| - }
|
| -
|
| virtual HValue* EnsureAndPropagateNotMinusZero(
|
| BitVector* visited) V8_OVERRIDE;
|
|
|
|
|