| Index: src/hydrogen-instructions.h
|
| ===================================================================
|
| --- src/hydrogen-instructions.h (revision 11426)
|
| +++ src/hydrogen-instructions.h (working copy)
|
| @@ -140,6 +140,7 @@
|
| V(LoadNamedField) \
|
| V(LoadNamedFieldPolymorphic) \
|
| V(LoadNamedGeneric) \
|
| + V(MathFloorOfDiv) \
|
| V(Mod) \
|
| V(Mul) \
|
| V(ObjectLiteral) \
|
| @@ -1992,15 +1993,7 @@
|
| }
|
| }
|
|
|
| - virtual HValue* Canonicalize() {
|
| - // If the input is integer32 then we replace the floor instruction
|
| - // with its inputs. This happens before the representation changes are
|
| - // introduced.
|
| - if (op() == kMathFloor) {
|
| - if (value()->representation().IsInteger32()) return value();
|
| - }
|
| - return this;
|
| - }
|
| + virtual HValue* Canonicalize();
|
|
|
| BuiltinFunctionId op() const { return op_; }
|
| const char* OpName() const;
|
| @@ -2758,6 +2751,25 @@
|
| };
|
|
|
|
|
| +class HMathFloorOfDiv: public HBinaryOperation {
|
| + public:
|
| + HMathFloorOfDiv(HValue* context, HValue* left, HValue* right)
|
| + : HBinaryOperation(context, left, right) {
|
| + set_representation(Representation::Integer32());
|
| + SetFlag(kUseGVN);
|
| + }
|
| +
|
| + virtual Representation RequiredInputRepresentation(int index) {
|
| + return Representation::Integer32();
|
| + }
|
| +
|
| + DECLARE_CONCRETE_INSTRUCTION(MathFloorOfDiv)
|
| +
|
| + protected:
|
| + virtual bool DataEquals(HValue* other) { return true; }
|
| +};
|
| +
|
| +
|
| class HArithmeticBinaryOperation: public HBinaryOperation {
|
| public:
|
| HArithmeticBinaryOperation(HValue* context, HValue* left, HValue* right)
|
|
|