| Index: src/hydrogen-instructions.h
|
| diff --git a/src/hydrogen-instructions.h b/src/hydrogen-instructions.h
|
| index cca4150e10bdaa16b875965151a0f63bbe65169e..e8cfdf3215b8d26780c3220bf503ed820b51b7d3 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);
|
| @@ -1048,6 +1048,45 @@ class HChange: public HUnaryOperation {
|
| };
|
|
|
|
|
| +class HClampToUint8: public HUnaryOperation {
|
| + public:
|
| + explicit HClampToUint8(HValue* value)
|
| + : HUnaryOperation(value),
|
| + input_rep_(Representation::None()) {
|
| + SetFlag(kFlexibleRepresentation);
|
| + 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)
|
|
|