| Index: src/hydrogen-instructions.h | 
| =================================================================== | 
| --- src/hydrogen-instructions.h	(revision 10863) | 
| +++ src/hydrogen-instructions.h	(working copy) | 
| @@ -645,6 +645,9 @@ | 
| void ClearFlag(Flag f) { flags_ &= ~(1 << f); } | 
| bool CheckFlag(Flag f) const { return (flags_ & (1 << f)) != 0; } | 
|  | 
| +  // Returns true if the flag specified is set for all uses, false otherwise. | 
| +  bool CheckUsesForFlag(Flag f); | 
| + | 
| GVNFlagSet gvn_flags() const { return gvn_flags_; } | 
| void SetGVNFlag(GVNFlag f) { gvn_flags_.Add(f); } | 
| void ClearGVNFlag(GVNFlag f) { gvn_flags_.Remove(f); } | 
| @@ -824,6 +827,8 @@ | 
| bool has_position() const { return position_ != RelocInfo::kNoPosition; } | 
| void set_position(int position) { position_ = position; } | 
|  | 
| +  bool CanTruncateToInt32() const { return CheckFlag(kTruncatingToInt32); } | 
| + | 
| virtual LInstruction* CompileToLithium(LChunkBuilder* builder) = 0; | 
|  | 
| #ifdef DEBUG | 
| @@ -1121,10 +1126,6 @@ | 
| return reinterpret_cast<HUnaryOperation*>(value); | 
| } | 
|  | 
| -  virtual bool CanTruncateToInt32() const { | 
| -    return CheckFlag(kTruncatingToInt32); | 
| -  } | 
| - | 
| HValue* value() { return OperandAt(0); } | 
| virtual void PrintDataTo(StringStream* stream); | 
| }; | 
| @@ -1248,16 +1249,13 @@ | 
| : HUnaryOperation(value) { | 
| set_representation(Representation::Integer32()); | 
| SetFlag(kUseGVN); | 
| +    SetFlag(kTruncatingToInt32); | 
| } | 
|  | 
| virtual Representation RequiredInputRepresentation(int index) { | 
| return Representation::None(); | 
| } | 
|  | 
| -  virtual bool CanTruncateToInt32() const { | 
| -    return true; | 
| -  } | 
| - | 
| virtual HValue* Canonicalize() { | 
| if (value()->representation().IsInteger32()) { | 
| return value(); | 
| @@ -3154,6 +3152,8 @@ | 
|  | 
| virtual HType CalculateInferredType(); | 
|  | 
| +  virtual HValue* Canonicalize(); | 
| + | 
| DECLARE_CONCRETE_INSTRUCTION(Add) | 
|  | 
| protected: | 
| @@ -3172,6 +3172,8 @@ | 
|  | 
| virtual HValue* EnsureAndPropagateNotMinusZero(BitVector* visited); | 
|  | 
| +  virtual HValue* Canonicalize(); | 
| + | 
| static HInstruction* NewHSub(Zone* zone, | 
| HValue* context, | 
| HValue* left, | 
| @@ -3257,7 +3259,6 @@ | 
|  | 
| virtual HValue* EnsureAndPropagateNotMinusZero(BitVector* visited); | 
|  | 
| - | 
| static HInstruction* NewHDiv(Zone* zone, | 
| HValue* context, | 
| HValue* left, | 
|  |