Index: src/hydrogen.h |
diff --git a/src/hydrogen.h b/src/hydrogen.h |
index b05e927730a1ec3cd20343b75d520bdd42f18554..96a4e6aca7618d445ea9151e560d8d134fc14937 100644 |
--- a/src/hydrogen.h |
+++ b/src/hydrogen.h |
@@ -125,7 +125,9 @@ class HBasicBlock: public ZoneObject { |
void Goto(HBasicBlock* block, FunctionState* state = NULL); |
int PredecessorIndexOf(HBasicBlock* predecessor) const; |
- void AddSimulate(BailoutId ast_id) { AddInstruction(CreateSimulate(ast_id)); } |
+ void AddSimulate(BailoutId ast_id, bool optional = false) { |
+ AddInstruction(CreateSimulate(ast_id, optional)); |
+ } |
void AssignCommonDominator(HBasicBlock* other); |
void AssignLoopSuccessorDominators(); |
@@ -166,7 +168,7 @@ class HBasicBlock: public ZoneObject { |
void RegisterPredecessor(HBasicBlock* pred); |
void AddDominatedBlock(HBasicBlock* block); |
- HSimulate* CreateSimulate(BailoutId ast_id); |
+ HSimulate* CreateSimulate(BailoutId ast_id, bool optional); |
HDeoptimize* CreateDeoptimize(HDeoptimize::UseEnvironment has_uses); |
int block_id_; |
@@ -612,6 +614,25 @@ class HEnvironment: public ZoneObject { |
}; |
+class HInferRepresentation BASE_EMBEDDED { |
+ public: |
+ explicit HInferRepresentation(HGraph* graph) |
+ : graph_(graph), |
+ worklist_(8, graph->zone()), |
+ in_worklist_(graph->GetMaximumValueID(), graph->zone()) { } |
+ |
+ void Analyze(); |
+ void AddToWorklist(HValue* current); |
+ |
+ private: |
+ Zone* zone() const { return graph_->zone(); } |
+ |
+ HGraph* graph_; |
+ ZoneList<HValue*> worklist_; |
+ BitVector in_worklist_; |
+}; |
+ |
+ |
class HGraphBuilder; |
enum ArgumentsAllowedFlag { |
@@ -879,7 +900,7 @@ class HGraphBuilder: public AstVisitor { |
// Adding instructions. |
HInstruction* AddInstruction(HInstruction* instr); |
- void AddSimulate(BailoutId ast_id); |
+ void AddSimulate(BailoutId ast_id, bool optional = false); |
// Bailout environment manipulation. |
void Push(HValue* value) { environment()->Push(value); } |
@@ -1024,10 +1045,6 @@ class HGraphBuilder: public AstVisitor { |
// to push them as outgoing parameters. |
template <class Instruction> HInstruction* PreProcessCall(Instruction* call); |
- void TraceRepresentation(Token::Value op, |
- TypeInfo info, |
- HValue* value, |
- Representation rep); |
static Representation ToRepresentation(TypeInfo info); |
void SetUpScope(Scope* scope); |