Index: src/hydrogen.h |
diff --git a/src/hydrogen.h b/src/hydrogen.h |
index 3748970585155bb876219b0a70a777aa9b49e32f..78ab571b5c52376549a07423a1dfcc2b9decd74f 100644 |
--- a/src/hydrogen.h |
+++ b/src/hydrogen.h |
@@ -125,7 +125,10 @@ 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, |
+ RemovableSimulate removable = FIXED_SIMULATE) { |
+ AddInstruction(CreateSimulate(ast_id, removable)); |
+ } |
void AssignCommonDominator(HBasicBlock* other); |
void AssignLoopSuccessorDominators(); |
@@ -166,7 +169,7 @@ class HBasicBlock: public ZoneObject { |
void RegisterPredecessor(HBasicBlock* pred); |
void AddDominatedBlock(HBasicBlock* block); |
- HSimulate* CreateSimulate(BailoutId ast_id); |
+ HSimulate* CreateSimulate(BailoutId ast_id, RemovableSimulate removable); |
HDeoptimize* CreateDeoptimize(HDeoptimize::UseEnvironment has_uses); |
int block_id_; |
@@ -255,6 +258,7 @@ class HGraph: public ZoneObject { |
void InitializeInferredTypes(); |
void InsertTypeConversions(); |
+ void MergeRemovableSimulates(); |
void InsertRepresentationChanges(); |
void MarkDeoptimizeOnUndefined(); |
void ComputeMinusZeroChecks(); |
@@ -613,6 +617,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 { |
@@ -880,7 +903,8 @@ class HGraphBuilder: public AstVisitor { |
// Adding instructions. |
HInstruction* AddInstruction(HInstruction* instr); |
- void AddSimulate(BailoutId ast_id); |
+ void AddSimulate(BailoutId ast_id, |
+ RemovableSimulate removable = FIXED_SIMULATE); |
// Bailout environment manipulation. |
void Push(HValue* value) { environment()->Push(value); } |
@@ -1025,10 +1049,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); |