| Index: src/hydrogen.h
|
| diff --git a/src/hydrogen.h b/src/hydrogen.h
|
| index 2593325cc0675c87a096d20d81994f2ae414ccaa..e9b8a2fa836c01e2316a3c884614c497657b7709 100644
|
| --- a/src/hydrogen.h
|
| +++ b/src/hydrogen.h
|
| @@ -263,6 +263,7 @@ class HGraph: public ZoneObject {
|
| void MarkDeoptimizeOnUndefined();
|
| void ComputeMinusZeroChecks();
|
| void ComputeSafeUint32Operations();
|
| + void GlobalValueNumbering();
|
| bool ProcessArgumentsObject();
|
| void EliminateRedundantPhis();
|
| void EliminateUnreachablePhis();
|
| @@ -291,6 +292,7 @@ class HGraph: public ZoneObject {
|
| undefined_constant_.set(constant);
|
| }
|
| HConstant* GetConstantUndefined() const { return undefined_constant_.get(); }
|
| + HConstant* GetConstant0();
|
| HConstant* GetConstant1();
|
| HConstant* GetConstantMinus1();
|
| HConstant* GetConstantTrue();
|
| @@ -411,6 +413,7 @@ class HGraph: public ZoneObject {
|
| ZoneList<HPhi*>* phi_list_;
|
| ZoneList<HInstruction*>* uint32_instructions_;
|
| SetOncePointer<HConstant> undefined_constant_;
|
| + SetOncePointer<HConstant> constant_0_;
|
| SetOncePointer<HConstant> constant_1_;
|
| SetOncePointer<HConstant> constant_minus1_;
|
| SetOncePointer<HConstant> constant_true_;
|
| @@ -876,6 +879,9 @@ class HGraphBuilder {
|
| protected:
|
| virtual bool BuildGraph() = 0;
|
|
|
| + HBasicBlock* CreateBasicBlock(HEnvironment* env);
|
| + HBasicBlock* CreateLoopHeaderBlock();
|
| +
|
| // Building common constructs
|
| HInstruction* BuildExternalArrayElementAccess(
|
| HValue* external_elements,
|
| @@ -903,6 +909,78 @@ class HGraphBuilder {
|
| bool is_store,
|
| Representation checked_index_representation = Representation::None());
|
|
|
| + HInstruction* BuildStoreMap(HValue* object, HValue* map, BailoutId id);
|
| + HInstruction* BuildStoreMap(HValue* object, Handle<Map> map, BailoutId id);
|
| +
|
| + class IfBuilder {
|
| + public:
|
| + IfBuilder(HGraphBuilder* builder,
|
| + BailoutId id = BailoutId::StubEntry());
|
| + ~IfBuilder() {
|
| + if (!finished_) End();
|
| + }
|
| +
|
| + void BeginTrue(HValue* left, HValue* right, Token::Value token);
|
| + void BeginFalse();
|
| + void End();
|
| +
|
| + private:
|
| + HGraphBuilder* builder_;
|
| + bool finished_;
|
| + HBasicBlock* true_block_;
|
| + HBasicBlock* false_block_;
|
| + HBasicBlock* merge_block_;
|
| + BailoutId id_;
|
| +
|
| + Zone* zone() { return builder_->zone(); }
|
| + };
|
| +
|
| + class LoopBuilder {
|
| + public:
|
| + enum Direction {
|
| + kPreIncrement,
|
| + kPostIncrement,
|
| + kPreDecrement,
|
| + kPostDecrement
|
| + };
|
| +
|
| + LoopBuilder(HGraphBuilder* builder,
|
| + HValue* context,
|
| + Direction direction,
|
| + BailoutId id = BailoutId::StubEntry());
|
| + ~LoopBuilder() {
|
| + ASSERT(finished_);
|
| + }
|
| +
|
| + HValue* BeginBody(HValue* initial, HValue* terminating, Token::Value token);
|
| + void EndBody();
|
| +
|
| + private:
|
| + HGraphBuilder* builder_;
|
| + HValue* context_;
|
| + HInstruction* increment_;
|
| + HPhi* phi_;
|
| + HBasicBlock* header_block_;
|
| + HBasicBlock* body_block_;
|
| + HBasicBlock* exit_block_;
|
| + Direction direction_;
|
| + BailoutId id_;
|
| + bool finished_;
|
| +
|
| + Zone* zone() { return builder_->zone(); }
|
| + };
|
| +
|
| + HValue* BuildAllocateElements(HContext* context,
|
| + ElementsKind kind,
|
| + HValue* capacity);
|
| +
|
| + void BuildCopyElements(HContext* context,
|
| + HValue* from_elements,
|
| + ElementsKind from_elements_kind,
|
| + HValue* to_elements,
|
| + ElementsKind to_elements_kind,
|
| + HValue* length);
|
| +
|
| private:
|
| HGraphBuilder();
|
| CompilationInfo* info_;
|
| @@ -1135,9 +1213,6 @@ class HOptimizedGraphBuilder: public HGraphBuilder, public AstVisitor {
|
| AST_NODE_LIST(DECLARE_VISIT)
|
| #undef DECLARE_VISIT
|
|
|
| - HBasicBlock* CreateBasicBlock(HEnvironment* env);
|
| - HBasicBlock* CreateLoopHeaderBlock();
|
| -
|
| // Helpers for flow graph construction.
|
| enum GlobalPropertyAccess {
|
| kUseCell,
|
|
|