Chromium Code Reviews| Index: src/hydrogen-instructions.h |
| diff --git a/src/hydrogen-instructions.h b/src/hydrogen-instructions.h |
| index 03ff00751eb37929637ed757c18c10dae3fd136c..013f874b983349a208846af9b7aec47fa670a577 100644 |
| --- a/src/hydrogen-instructions.h |
| +++ b/src/hydrogen-instructions.h |
| @@ -87,6 +87,7 @@ class LChunkBuilder; |
| V(CheckNonSmi) \ |
| V(CheckPrototypeMaps) \ |
| V(CheckSmi) \ |
| + V(ClampToUint8) \ |
| V(ClassOfTest) \ |
| V(Compare) \ |
| V(CompareJSObjectEq) \ |
| @@ -551,7 +552,6 @@ class HValue: public ZoneObject { |
| Representation representation() const { return representation_; } |
| void ChangeRepresentation(Representation r) { |
| // Representation was already set and is allowed to be changed. |
| - ASSERT(!representation_.IsNone()); |
| ASSERT(!r.IsNone()); |
| ASSERT(CheckFlag(kFlexibleRepresentation)); |
| RepresentationChanged(r); |
| @@ -1053,6 +1053,45 @@ class HChange: public HUnaryOperation { |
| }; |
| +class HClampToUint8: public HUnaryOperation { |
| + public: |
| + explicit HClampToUint8(HValue* value) |
| + : HUnaryOperation(value), |
| + input_rep_(Representation::None()) { |
| + SetFlag(kFlexibleRepresentation); |
|
Kevin Millikin (Chromium)
2011/05/16 07:06:35
Everywhere else we have kFlexibleRepresentation, w
danno
2011/05/16 14:13:43
Done.
|
| + SetFlag(kUseGVN); |
| + } |
| + |
| + virtual Representation RequiredInputRepresentation(int index) const { |
| + return input_rep_; |
| + } |
| + |
| + virtual Representation InferredRepresentation() { |
| + // TODO(danno): Inference on input types should happen separately from |
| + // return representation. |
| + Representation new_rep = value()->representation(); |
| + if (input_rep_.IsNone()) { |
| + if (!new_rep.IsNone()) { |
| + input_rep_ = new_rep; |
| + return Representation::Integer32(); |
| + } else { |
| + return Representation::None(); |
| + } |
| + } else { |
| + return Representation::Integer32(); |
| + } |
| + } |
| + |
| + DECLARE_CONCRETE_INSTRUCTION(ClampToUint8) |
| + |
| + protected: |
| + virtual bool DataEquals(HValue* other) { return true; } |
| + |
| + private: |
| + Representation input_rep_; |
| +}; |
| + |
| + |
| class HSimulate: public HInstruction { |
| public: |
| HSimulate(int ast_id, int pop_count) |