Index: src/hydrogen-instructions.h |
diff --git a/src/hydrogen-instructions.h b/src/hydrogen-instructions.h |
index 08fd89301a0a53f4a10049ea5fb6ad849c519e1c..25776e5dfa9e4615d8c38910cc96da2896804882 100644 |
--- a/src/hydrogen-instructions.h |
+++ b/src/hydrogen-instructions.h |
@@ -1351,14 +1351,12 @@ class HUnaryControlInstruction : public HTemplateControlInstruction<2, 1> { |
class HBranch V8_FINAL : public HUnaryControlInstruction { |
public: |
- HBranch(HValue* value, |
- ToBooleanStub::Types expected_input_types = ToBooleanStub::Types(), |
- HBasicBlock* true_target = NULL, |
- HBasicBlock* false_target = NULL) |
- : HUnaryControlInstruction(value, true_target, false_target), |
- expected_input_types_(expected_input_types) { |
- SetFlag(kAllowUndefinedAsNaN); |
- } |
+ DECLARE_INSTRUCTION_FACTORY_P1(HBranch, HValue*); |
+ DECLARE_INSTRUCTION_FACTORY_P2(HBranch, HValue*, |
+ ToBooleanStub::Types); |
+ DECLARE_INSTRUCTION_FACTORY_P4(HBranch, HValue*, |
+ ToBooleanStub::Types, |
+ HBasicBlock*, HBasicBlock*); |
virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE { |
return Representation::None(); |
@@ -1372,20 +1370,24 @@ class HBranch V8_FINAL : public HUnaryControlInstruction { |
DECLARE_CONCRETE_INSTRUCTION(Branch) |
private: |
+ HBranch(HValue* value, |
+ ToBooleanStub::Types expected_input_types = ToBooleanStub::Types(), |
+ HBasicBlock* true_target = NULL, |
+ HBasicBlock* false_target = NULL) |
+ : HUnaryControlInstruction(value, true_target, false_target), |
+ expected_input_types_(expected_input_types) { |
+ SetFlag(kAllowUndefinedAsNaN); |
+ } |
+ |
ToBooleanStub::Types expected_input_types_; |
}; |
class HCompareMap V8_FINAL : public HUnaryControlInstruction { |
public: |
- HCompareMap(HValue* value, |
- Handle<Map> map, |
- HBasicBlock* true_target = NULL, |
- HBasicBlock* false_target = NULL) |
- : HUnaryControlInstruction(value, true_target, false_target), |
- map_(map) { |
- ASSERT(!map.is_null()); |
- } |
+ DECLARE_INSTRUCTION_FACTORY_P2(HCompareMap, HValue*, Handle<Map>); |
+ DECLARE_INSTRUCTION_FACTORY_P4(HCompareMap, HValue*, Handle<Map>, |
+ HBasicBlock*, HBasicBlock*); |
virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; |
@@ -1401,6 +1403,14 @@ class HCompareMap V8_FINAL : public HUnaryControlInstruction { |
virtual int RedefinedOperandIndex() { return 0; } |
private: |
+ HCompareMap(HValue* value, |
+ Handle<Map> map, |
+ HBasicBlock* true_target = NULL, |
+ HBasicBlock* false_target = NULL) |
+ : HUnaryControlInstruction(value, true_target, false_target), map_(map) { |
+ ASSERT(!map.is_null()); |
+ } |
+ |
Handle<Map> map_; |
}; |
@@ -4033,13 +4043,11 @@ class HCompareGeneric V8_FINAL : public HBinaryOperation { |
class HCompareNumericAndBranch : public HTemplateControlInstruction<2, 2> { |
public: |
- HCompareNumericAndBranch(HValue* left, HValue* right, Token::Value token) |
- : token_(token) { |
- SetFlag(kFlexibleRepresentation); |
- ASSERT(Token::IsCompareOp(token)); |
- SetOperandAt(0, left); |
- SetOperandAt(1, right); |
- } |
+ DECLARE_INSTRUCTION_FACTORY_P3(HCompareNumericAndBranch, |
+ HValue*, HValue*, Token::Value); |
+ DECLARE_INSTRUCTION_FACTORY_P5(HCompareNumericAndBranch, |
+ HValue*, HValue*, Token::Value, |
+ HBasicBlock*, HBasicBlock*); |
HValue* left() { return OperandAt(0); } |
HValue* right() { return OperandAt(1); } |
@@ -4065,6 +4073,20 @@ class HCompareNumericAndBranch : public HTemplateControlInstruction<2, 2> { |
DECLARE_CONCRETE_INSTRUCTION(CompareNumericAndBranch) |
private: |
+ HCompareNumericAndBranch(HValue* left, |
+ HValue* right, |
+ Token::Value token, |
+ HBasicBlock* true_target = NULL, |
+ HBasicBlock* false_target = NULL) |
+ : token_(token) { |
+ SetFlag(kFlexibleRepresentation); |
+ ASSERT(Token::IsCompareOp(token)); |
+ SetOperandAt(0, left); |
+ SetOperandAt(1, right); |
+ SetSuccessorAt(0, true_target); |
+ SetSuccessorAt(1, false_target); |
+ } |
+ |
Representation observed_input_representation_[2]; |
Token::Value token_; |
}; |
@@ -4072,16 +4094,6 @@ class HCompareNumericAndBranch : public HTemplateControlInstruction<2, 2> { |
class HCompareHoleAndBranch V8_FINAL : public HUnaryControlInstruction { |
public: |
- // TODO(danno): make this private when the IfBuilder properly constructs |
- // control flow instructions. |
- HCompareHoleAndBranch(HValue* value, |
- HBasicBlock* true_target = NULL, |
- HBasicBlock* false_target = NULL) |
- : HUnaryControlInstruction(value, true_target, false_target) { |
- SetFlag(kFlexibleRepresentation); |
- SetFlag(kAllowUndefinedAsNaN); |
- } |
- |
DECLARE_INSTRUCTION_FACTORY_P1(HCompareHoleAndBranch, HValue*); |
DECLARE_INSTRUCTION_FACTORY_P3(HCompareHoleAndBranch, HValue*, |
HBasicBlock*, HBasicBlock*); |
@@ -4094,20 +4106,23 @@ class HCompareHoleAndBranch V8_FINAL : public HUnaryControlInstruction { |
} |
DECLARE_CONCRETE_INSTRUCTION(CompareHoleAndBranch) |
+ |
+ private: |
+ HCompareHoleAndBranch(HValue* value, |
+ HBasicBlock* true_target = NULL, |
+ HBasicBlock* false_target = NULL) |
+ : HUnaryControlInstruction(value, true_target, false_target) { |
+ SetFlag(kFlexibleRepresentation); |
+ SetFlag(kAllowUndefinedAsNaN); |
+ } |
}; |
class HCompareObjectEqAndBranch : public HTemplateControlInstruction<2, 2> { |
public: |
- // TODO(danno): make this private when the IfBuilder properly constructs |
- // control flow instructions. |
- HCompareObjectEqAndBranch(HValue* left, |
- HValue* right) { |
- SetOperandAt(0, left); |
- SetOperandAt(1, right); |
- } |
- |
DECLARE_INSTRUCTION_FACTORY_P2(HCompareObjectEqAndBranch, HValue*, HValue*); |
+ DECLARE_INSTRUCTION_FACTORY_P4(HCompareObjectEqAndBranch, HValue*, HValue*, |
+ HBasicBlock*, HBasicBlock*); |
HValue* left() { return OperandAt(0); } |
HValue* right() { return OperandAt(1); } |
@@ -4123,38 +4138,65 @@ class HCompareObjectEqAndBranch : public HTemplateControlInstruction<2, 2> { |
} |
DECLARE_CONCRETE_INSTRUCTION(CompareObjectEqAndBranch) |
+ |
+ private: |
+ HCompareObjectEqAndBranch(HValue* left, |
+ HValue* right, |
+ HBasicBlock* true_target = NULL, |
+ HBasicBlock* false_target = NULL) { |
+ SetOperandAt(0, left); |
+ SetOperandAt(1, right); |
+ SetSuccessorAt(0, true_target); |
+ SetSuccessorAt(1, false_target); |
+ } |
}; |
class HIsObjectAndBranch V8_FINAL : public HUnaryControlInstruction { |
public: |
- explicit HIsObjectAndBranch(HValue* value) |
- : HUnaryControlInstruction(value, NULL, NULL) { } |
+ DECLARE_INSTRUCTION_FACTORY_P1(HIsObjectAndBranch, HValue*); |
+ DECLARE_INSTRUCTION_FACTORY_P3(HIsObjectAndBranch, HValue*, |
+ HBasicBlock*, HBasicBlock*); |
virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE { |
return Representation::Tagged(); |
} |
DECLARE_CONCRETE_INSTRUCTION(IsObjectAndBranch) |
+ |
+ private: |
+ HIsObjectAndBranch(HValue* value, |
+ HBasicBlock* true_target = NULL, |
+ HBasicBlock* false_target = NULL) |
+ : HUnaryControlInstruction(value, true_target, false_target) {} |
}; |
+ |
class HIsStringAndBranch V8_FINAL : public HUnaryControlInstruction { |
public: |
- explicit HIsStringAndBranch(HValue* value) |
- : HUnaryControlInstruction(value, NULL, NULL) { } |
+ DECLARE_INSTRUCTION_FACTORY_P1(HIsStringAndBranch, HValue*); |
+ DECLARE_INSTRUCTION_FACTORY_P3(HIsStringAndBranch, HValue*, |
+ HBasicBlock*, HBasicBlock*); |
virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE { |
return Representation::Tagged(); |
} |
DECLARE_CONCRETE_INSTRUCTION(IsStringAndBranch) |
+ |
+ private: |
+ HIsStringAndBranch(HValue* value, |
+ HBasicBlock* true_target = NULL, |
+ HBasicBlock* false_target = NULL) |
+ : HUnaryControlInstruction(value, true_target, false_target) {} |
}; |
class HIsSmiAndBranch V8_FINAL : public HUnaryControlInstruction { |
public: |
- explicit HIsSmiAndBranch(HValue* value) |
- : HUnaryControlInstruction(value, NULL, NULL) { } |
+ DECLARE_INSTRUCTION_FACTORY_P1(HIsSmiAndBranch, HValue*); |
+ DECLARE_INSTRUCTION_FACTORY_P3(HIsSmiAndBranch, HValue*, |
+ HBasicBlock*, HBasicBlock*); |
DECLARE_CONCRETE_INSTRUCTION(IsSmiAndBranch) |
@@ -4164,19 +4206,32 @@ class HIsSmiAndBranch V8_FINAL : public HUnaryControlInstruction { |
protected: |
virtual bool DataEquals(HValue* other) V8_OVERRIDE { return true; } |
+ |
+ private: |
+ HIsSmiAndBranch(HValue* value, |
+ HBasicBlock* true_target = NULL, |
+ HBasicBlock* false_target = NULL) |
+ : HUnaryControlInstruction(value, true_target, false_target) {} |
}; |
class HIsUndetectableAndBranch V8_FINAL : public HUnaryControlInstruction { |
public: |
- explicit HIsUndetectableAndBranch(HValue* value) |
- : HUnaryControlInstruction(value, NULL, NULL) { } |
+ DECLARE_INSTRUCTION_FACTORY_P1(HIsUndetectableAndBranch, HValue*); |
+ DECLARE_INSTRUCTION_FACTORY_P3(HIsUndetectableAndBranch, HValue*, |
+ HBasicBlock*, HBasicBlock*); |
virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE { |
return Representation::Tagged(); |
} |
DECLARE_CONCRETE_INSTRUCTION(IsUndetectableAndBranch) |
+ |
+ private: |
+ HIsUndetectableAndBranch(HValue* value, |
+ HBasicBlock* true_target = NULL, |
+ HBasicBlock* false_target = NULL) |
+ : HUnaryControlInstruction(value, true_target, false_target) {} |
}; |