| Index: src/hydrogen-instructions.h
|
| diff --git a/src/hydrogen-instructions.h b/src/hydrogen-instructions.h
|
| index d8d3f6fdf1a7a4dd1370543672eb7154a6da0318..ab5005b9fcfae0564b1ef427dca2f00337db1078 100644
|
| --- a/src/hydrogen-instructions.h
|
| +++ b/src/hydrogen-instructions.h
|
| @@ -1,4 +1,4 @@
|
| -// Copyright 2010 the V8 project authors. All rights reserved.
|
| +// Copyright 2011 the V8 project authors. All rights reserved.
|
| // Redistribution and use in source and binary forms, with or without
|
| // modification, are permitted provided that the following conditions are
|
| // met:
|
| @@ -99,9 +99,9 @@ class LChunkBuilder;
|
| // HDeoptimize
|
| // HGoto
|
| // HUnaryControlInstruction
|
| -// HBranch
|
| -// HCompareMapAndBranch
|
| +// HCompareMap
|
| // HReturn
|
| +// HTest
|
| // HThrow
|
| // HEnterInlined
|
| // HFunctionLiteral
|
| @@ -183,7 +183,6 @@ class LChunkBuilder;
|
| V(BitXor) \
|
| V(BlockEntry) \
|
| V(BoundsCheck) \
|
| - V(Branch) \
|
| V(CallConstantFunction) \
|
| V(CallFunction) \
|
| V(CallGlobal) \
|
| @@ -202,7 +201,7 @@ class LChunkBuilder;
|
| V(CheckSmi) \
|
| V(Compare) \
|
| V(CompareJSObjectEq) \
|
| - V(CompareMapAndBranch) \
|
| + V(CompareMap) \
|
| V(Constant) \
|
| V(DeleteProperty) \
|
| V(Deoptimize) \
|
| @@ -253,6 +252,7 @@ class LChunkBuilder;
|
| V(StringCharCodeAt) \
|
| V(StringLength) \
|
| V(Sub) \
|
| + V(Test) \
|
| V(Throw) \
|
| V(Typeof) \
|
| V(TypeofIs) \
|
| @@ -815,44 +815,55 @@ class HBlockEntry: public HInstruction {
|
|
|
| class HControlInstruction: public HInstruction {
|
| public:
|
| - virtual HBasicBlock* FirstSuccessor() const { return NULL; }
|
| - virtual HBasicBlock* SecondSuccessor() const { return NULL; }
|
| + HControlInstruction(HBasicBlock* first, HBasicBlock* second)
|
| + : first_successor_(first), second_successor_(second) {
|
| + }
|
| +
|
| + HBasicBlock* FirstSuccessor() const { return first_successor_; }
|
| + HBasicBlock* SecondSuccessor() const { return second_successor_; }
|
| +
|
| + virtual void PrintDataTo(StringStream* stream) const;
|
|
|
| DECLARE_INSTRUCTION(ControlInstruction)
|
| +
|
| + private:
|
| + HBasicBlock* first_successor_;
|
| + HBasicBlock* second_successor_;
|
| };
|
|
|
|
|
| class HDeoptimize: public HControlInstruction {
|
| public:
|
| + HDeoptimize() : HControlInstruction(NULL, NULL) { }
|
| +
|
| DECLARE_CONCRETE_INSTRUCTION(Deoptimize, "deoptimize")
|
| };
|
|
|
|
|
| class HGoto: public HControlInstruction {
|
| public:
|
| - explicit HGoto(HBasicBlock* destination)
|
| - : destination_(destination),
|
| - include_stack_check_(false) {}
|
| + explicit HGoto(HBasicBlock* target)
|
| + : HControlInstruction(target, NULL), include_stack_check_(false) {
|
| + }
|
|
|
| - virtual HBasicBlock* FirstSuccessor() const { return destination_; }
|
| void set_include_stack_check(bool include_stack_check) {
|
| include_stack_check_ = include_stack_check;
|
| }
|
| bool include_stack_check() const { return include_stack_check_; }
|
|
|
| - virtual void PrintDataTo(StringStream* stream) const;
|
| -
|
| DECLARE_CONCRETE_INSTRUCTION(Goto, "goto")
|
|
|
| private:
|
| - HBasicBlock* destination_;
|
| bool include_stack_check_;
|
| };
|
|
|
|
|
| class HUnaryControlInstruction: public HControlInstruction {
|
| public:
|
| - explicit HUnaryControlInstruction(HValue* value) {
|
| + explicit HUnaryControlInstruction(HValue* value,
|
| + HBasicBlock* true_target,
|
| + HBasicBlock* false_target)
|
| + : HControlInstruction(true_target, false_target) {
|
| SetOperandAt(0, value);
|
| }
|
|
|
| @@ -860,6 +871,8 @@ class HUnaryControlInstruction: public HControlInstruction {
|
| return Representation::Tagged();
|
| }
|
|
|
| + virtual void PrintDataTo(StringStream* stream) const;
|
| +
|
| HValue* value() const { return OperandAt(0); }
|
| virtual int OperandCount() const { return 1; }
|
| virtual HValue* OperandAt(int index) const { return operands_[index]; }
|
| @@ -876,73 +889,50 @@ class HUnaryControlInstruction: public HControlInstruction {
|
| };
|
|
|
|
|
| -class HBranch: public HUnaryControlInstruction {
|
| +class HTest: public HUnaryControlInstruction {
|
| public:
|
| - HBranch(HBasicBlock* true_destination,
|
| - HBasicBlock* false_destination,
|
| - HValue* boolean_value)
|
| - : HUnaryControlInstruction(boolean_value),
|
| - true_destination_(true_destination),
|
| - false_destination_(false_destination) {
|
| - ASSERT(true_destination != NULL && false_destination != NULL);
|
| + HTest(HValue* value, HBasicBlock* true_target, HBasicBlock* false_target)
|
| + : HUnaryControlInstruction(value, true_target, false_target) {
|
| + ASSERT(true_target != NULL && false_target != NULL);
|
| }
|
|
|
| virtual Representation RequiredInputRepresentation(int index) const {
|
| return Representation::None();
|
| }
|
|
|
| - virtual HBasicBlock* FirstSuccessor() const { return true_destination_; }
|
| - virtual HBasicBlock* SecondSuccessor() const { return false_destination_; }
|
| -
|
| - virtual void PrintDataTo(StringStream* stream) const;
|
| -
|
| - DECLARE_CONCRETE_INSTRUCTION(Branch, "branch")
|
| -
|
| - private:
|
| - HBasicBlock* true_destination_;
|
| - HBasicBlock* false_destination_;
|
| + DECLARE_CONCRETE_INSTRUCTION(Test, "test")
|
| };
|
|
|
|
|
| -class HCompareMapAndBranch: public HUnaryControlInstruction {
|
| +class HCompareMap: public HUnaryControlInstruction {
|
| public:
|
| - HCompareMapAndBranch(HValue* result,
|
| - Handle<Map> map,
|
| - HBasicBlock* true_destination,
|
| - HBasicBlock* false_destination)
|
| - : HUnaryControlInstruction(result),
|
| - map_(map),
|
| - true_destination_(true_destination),
|
| - false_destination_(false_destination) {
|
| - ASSERT(true_destination != NULL);
|
| - ASSERT(false_destination != NULL);
|
| + HCompareMap(HValue* value,
|
| + Handle<Map> map,
|
| + HBasicBlock* true_target,
|
| + HBasicBlock* false_target)
|
| + : HUnaryControlInstruction(value, true_target, false_target),
|
| + map_(map) {
|
| + ASSERT(true_target != NULL);
|
| + ASSERT(false_target != NULL);
|
| ASSERT(!map.is_null());
|
| }
|
|
|
| - virtual HBasicBlock* FirstSuccessor() const { return true_destination_; }
|
| - virtual HBasicBlock* SecondSuccessor() const { return false_destination_; }
|
| -
|
| - HBasicBlock* true_destination() const { return true_destination_; }
|
| - HBasicBlock* false_destination() const { return false_destination_; }
|
| -
|
| virtual void PrintDataTo(StringStream* stream) const;
|
|
|
| Handle<Map> map() const { return map_; }
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(CompareMapAndBranch, "compare_map_and_branch")
|
| + DECLARE_CONCRETE_INSTRUCTION(CompareMap, "compare_map")
|
|
|
| private:
|
| Handle<Map> map_;
|
| - HBasicBlock* true_destination_;
|
| - HBasicBlock* false_destination_;
|
| };
|
|
|
|
|
| class HReturn: public HUnaryControlInstruction {
|
| public:
|
| - explicit HReturn(HValue* result) : HUnaryControlInstruction(result) { }
|
| -
|
| - virtual void PrintDataTo(StringStream* stream) const;
|
| + explicit HReturn(HValue* value)
|
| + : HUnaryControlInstruction(value, NULL, NULL) {
|
| + }
|
|
|
| DECLARE_CONCRETE_INSTRUCTION(Return, "return")
|
| };
|
| @@ -950,9 +940,8 @@ class HReturn: public HUnaryControlInstruction {
|
|
|
| class HThrow: public HUnaryControlInstruction {
|
| public:
|
| - explicit HThrow(HValue* value) : HUnaryControlInstruction(value) { }
|
| -
|
| - virtual void PrintDataTo(StringStream* stream) const;
|
| + explicit HThrow(HValue* value)
|
| + : HUnaryControlInstruction(value, NULL, NULL) { }
|
|
|
| DECLARE_CONCRETE_INSTRUCTION(Throw, "throw")
|
| };
|
|
|