28 #ifndef V8_HYDROGEN_H_
29 #define V8_HYDROGEN_H_
48 class HLoopInformation;
74 return &dominated_blocks_;
77 return &deleted_phis_;
80 deleted_phis_.
Add(merge_index,
zone());
88 first_instruction_index_ = index;
92 last_instruction_index_ = index;
116 parent_loop_header_ = block;
153 return dominates_loop_successors_;
156 dominates_loop_successors_ =
true;
186 int first_instruction_index_;
187 int last_instruction_index_;
190 bool is_inline_return_target_;
191 bool is_deoptimizing_;
192 bool dominates_loop_successors_;
199 : predecessor_list_(block->predecessors()),
current_(0) { }
214 : back_edges_(4, zone),
215 loop_header_(loop_header),
218 blocks_.Add(loop_header, zone);
242 class BoundsCheckTable;
285 undefined_constant_.set(constant);
296 return arguments_object_.get();
300 arguments_object_.set(
object);
306 values_.Add(value,
zone());
307 return values_.length() - 1;
310 if (
id >= 0 &&
id < values_.length())
return values_[
id];
317 void Verify(
bool do_full_verify)
const;
321 return osr_loop_entry_.is_set();
325 return osr_loop_entry_.get();
329 osr_loop_entry_.set(entry);
333 return osr_values_.get();
337 osr_values_.set(values);
341 type_change_checksum_ += delta;
342 return type_change_checksum_;
346 return use_optimistic_licm_;
350 use_optimistic_licm_ = value;
354 is_recursive_ =
true;
358 return is_recursive_;
362 if (uint32_instructions_ ==
NULL) {
365 uint32_instructions_->Add(instr,
zone());
374 void MarkAsDeoptimizingRecursively(
HBasicBlock* block);
377 void RecursivelyMarkPhiDeoptimizeOnUndefined(
HPhi* phi);
378 void InsertRepresentationChangeForUse(
HValue* value,
382 void InsertRepresentationChangesForValue(
HValue* value);
411 bool use_optimistic_licm_;
412 int type_change_checksum_;
414 DISALLOW_COPY_AND_ASSIGN(
HGraph);
446 return &assigned_variables_;
462 int length()
const {
return values_.length(); }
472 Bind(IndexFor(variable), value);
482 return Lookup(IndexFor(variable));
486 HValue* result = values_[index];
499 values_.Add(value,
zone());
504 if (push_count_ > 0) {
509 return values_.RemoveLast();
512 void Drop(
int count);
519 int index =
length() - index_from_top - 1;
520 ASSERT(HasExpressionAt(index));
521 return values_[index];
543 if (drop_extra) outer->
Drop(1);
552 assigned_variables_.Rewind(0);
557 values_[index] = value;
579 int arguments)
const;
582 bool HasExpressionAt(
int index)
const;
590 int IndexFor(
Variable* variable)
const {
594 : parameter_count_ + specials_count_;
595 return variable->
index() + shift;
600 ZoneList<HValue*> values_;
601 ZoneList<int> assigned_variables_;
603 int parameter_count_;
607 HEnterInlined* entry_;
661 int original_length_;
711 condition_(condition),
714 if_false_(if_false) {
734 void BuildBranch(
HValue* value);
758 delete test_context_;
759 test_context_ =
NULL;
821 continue_block_(
NULL),
822 drop_extra_(drop_extra) {
844 : info_(info), owner_(owner), next_(owner->
break_scope()) {
850 BreakAndContinueInfo*
info() {
return info_; }
852 BreakAndContinueScope*
next() {
return next_; }
858 BreakAndContinueInfo* info_;
860 BreakAndContinueScope* next_;
869 BreakAndContinueScope*
break_scope()
const {
return break_scope_; }
888 void Bailout(
const char* reason);
900 void*
operator new(
size_t size,
Zone* zone) {
901 return zone->
New(static_cast<int>(size));
903 void operator delete(
void* pointer,
Zone* zone) { }
904 void operator delete(
void* pointer) { }
913 static const InlineFunctionGenerator kInlineFunctionGenerators[];
915 static const int kMaxCallPolymorphism = 4;
916 static const int kMaxLoadPolymorphism = 4;
917 static const int kMaxStorePolymorphism = 4;
921 static const int kUnlimitedMaxInlinedSourceSize = 100000;
922 static const int kUnlimitedMaxInlinedNodes = 10000;
923 static const int kUnlimitedMaxInlinedNodesCumulative = 10000;
926 void set_function_state(
FunctionState* state) { function_state_ = state; }
928 AstContext* ast_context()
const {
return ast_context_; }
929 void set_ast_context(
AstContext* context) { ast_context_ = context; }
932 CompilationInfo* info()
const {
938 HBasicBlock* function_return()
const {
941 TestContext* inlined_test_context()
const {
944 void ClearInlinedTestContext() {
953 #define INLINE_FUNCTION_GENERATOR_DECLARATION(Name, argc, ressize) \
954 void Generate##Name(CallRuntime* call);
958 #undef INLINE_FUNCTION_GENERATOR_DECLARATION
960 void VisitDelete(UnaryOperation* expr);
961 void VisitVoid(UnaryOperation* expr);
962 void VisitTypeof(UnaryOperation* expr);
963 void VisitAdd(UnaryOperation* expr);
964 void VisitSub(UnaryOperation* expr);
965 void VisitBitNot(UnaryOperation* expr);
966 void VisitNot(UnaryOperation* expr);
968 void VisitComma(BinaryOperation* expr);
969 void VisitLogicalExpression(BinaryOperation* expr);
970 void VisitArithmeticExpression(BinaryOperation* expr);
972 bool PreProcessOsrEntry(IterationStatement* statement);
974 bool HasOsrEntryAt(IterationStatement* statement);
975 void VisitLoopBody(IterationStatement* stmt,
976 HBasicBlock* loop_entry,
977 BreakAndContinueInfo* break_info);
986 HBasicBlock* CreateLoop(IterationStatement* statement,
987 HBasicBlock* loop_entry,
988 HBasicBlock* body_exit,
989 HBasicBlock* loop_successor,
990 HBasicBlock* break_block);
992 HBasicBlock* JoinContinue(IterationStatement* statement,
993 HBasicBlock* exit_block,
994 HBasicBlock* continue_block);
998 void Bind(Variable* var, HValue* value) {
environment()->
Bind(var, value); }
1003 void VisitForValue(Expression* expr,
1005 void VisitForTypeOf(Expression* expr);
1006 void VisitForEffect(Expression* expr);
1007 void VisitForControl(Expression* expr,
1008 HBasicBlock* true_block,
1009 HBasicBlock* false_block);
1012 void VisitArgument(Expression* expr);
1014 void VisitArgumentList(ZoneList<Expression*>* arguments);
1017 void VisitExpressions(ZoneList<Expression*>* exprs);
1019 void AddPhi(HPhi* phi);
1021 void PushAndAdd(HInstruction* instr);
1025 template <
class Instruction> HInstruction* PreProcessCall(Instruction* call);
1030 Representation rep);
1031 static Representation ToRepresentation(TypeInfo info);
1033 void SetUpScope(Scope* scope);
1034 virtual void VisitStatements(ZoneList<Statement*>* statements);
1036 #define DECLARE_VISIT(type) virtual void Visit##type(type* node);
1038 #undef DECLARE_VISIT
1040 HBasicBlock* CreateBasicBlock(HEnvironment* env);
1041 HBasicBlock* CreateLoopHeaderBlock();
1044 enum GlobalPropertyAccess {
1048 GlobalPropertyAccess LookupGlobalProperty(Variable* var,
1049 LookupResult* lookup,
1052 void EnsureArgumentsArePushedForAccess();
1053 bool TryArgumentsAccess(Property* expr);
1056 bool TryCallApply(Call* expr);
1058 int InliningAstSize(Handle<JSFunction> target);
1060 Handle<JSFunction> target,
1061 int arguments_count,
1062 HValue* implicit_return_value,
1064 BailoutId return_id,
1067 bool TryInlineCall(Call* expr,
bool drop_extra =
false);
1068 bool TryInlineConstruct(CallNew* expr, HValue* implicit_return_value);
1069 bool TryInlineGetter(Handle<JSFunction> getter, Property* prop);
1070 bool TryInlineSetter(Handle<JSFunction> setter,
1071 Assignment* assignment,
1072 HValue* implicit_return_value);
1073 bool TryInlineBuiltinMethodCall(Call* expr,
1075 Handle<Map> receiver_map,
1077 bool TryInlineBuiltinFunctionCall(Call* expr,
bool drop_extra);
1082 void TraceInline(Handle<JSFunction> target,
1083 Handle<JSFunction> caller,
1084 const char* failure_reason);
1086 void HandleGlobalVariableAssignment(Variable* var,
1091 void HandlePropertyAssignment(Assignment* expr);
1092 void HandleCompoundAssignment(Assignment* expr);
1093 void HandlePolymorphicLoadNamedField(Property* expr,
1095 SmallMapList* types,
1096 Handle<String> name);
1097 void HandlePolymorphicStoreNamedField(Assignment* expr,
1100 SmallMapList* types,
1101 Handle<String> name);
1102 void HandlePolymorphicCallNamed(Call* expr,
1104 SmallMapList* types,
1105 Handle<String> name);
1106 void HandleLiteralCompareTypeof(CompareOperation* expr,
1107 HTypeof* typeof_expr,
1108 Handle<String>
check);
1109 void HandleLiteralCompareNil(CompareOperation* expr,
1113 HStringCharCodeAt* BuildStringCharCodeAt(HValue* context,
1116 HInstruction* BuildBinaryOperation(BinaryOperation* expr,
1119 HInstruction* BuildIncrement(
bool returns_original_input,
1120 CountOperation* expr);
1121 HInstruction* BuildFastElementAccess(HValue* elements,
1122 HValue* checked_key,
1128 HInstruction* TryBuildConsolidatedElementLoad(HValue*
object,
1131 SmallMapList* maps);
1133 HInstruction* BuildUncheckedMonomorphicElementAccess(HValue*
object,
1136 HCheckMaps* mapcheck,
1140 HInstruction* BuildMonomorphicElementAccess(HValue*
object,
1147 HValue* HandlePolymorphicElementAccess(HValue*
object,
1154 bool* has_side_effects);
1156 HValue* HandleKeyedElementAccess(HValue* obj,
1163 bool* has_side_effects);
1165 HLoadNamedField* BuildLoadNamedField(HValue*
object,
1167 LookupResult* result,
1168 bool smi_and_map_check);
1169 HInstruction* BuildLoadNamedGeneric(HValue*
object,
1170 Handle<String> name,
1172 HInstruction* BuildCallGetter(HValue*
object,
1174 Handle<JSFunction> getter,
1175 Handle<JSObject> holder);
1176 HInstruction* BuildLoadNamedMonomorphic(HValue*
object,
1177 Handle<String> name,
1180 HInstruction* BuildLoadKeyedGeneric(HValue*
object, HValue* key);
1181 HInstruction* BuildExternalArrayElementAccess(
1182 HValue* external_elements,
1183 HValue* checked_key,
1189 HInstruction* BuildStoreNamedField(HValue*
object,
1190 Handle<String> name,
1193 LookupResult* lookup,
1194 bool smi_and_map_check);
1195 HInstruction* BuildStoreNamedGeneric(HValue*
object,
1196 Handle<String> name,
1198 HInstruction* BuildCallSetter(HValue*
object,
1201 Handle<JSFunction> setter,
1202 Handle<JSObject> holder);
1203 HInstruction* BuildStoreNamedMonomorphic(HValue*
object,
1204 Handle<String> name,
1207 HInstruction* BuildStoreKeyedGeneric(HValue*
object,
1211 HValue* BuildContextChainWalk(Variable* var);
1213 HInstruction* BuildThisFunction();
1215 void AddCheckConstantFunction(Handle<JSObject> holder,
1217 Handle<Map> receiver_map,
1218 bool smi_and_map_check);
1220 Zone* zone()
const {
return zone_; }
1233 BreakAndContinueScope* break_scope_;
1236 HBasicBlock* current_block_;
1239 ZoneList<Handle<Object> > globals_;
1243 bool inline_bailout_;
1264 free_list_head_(kNil) {
1265 ResizeLists(kInitialSize, zone);
1266 Resize(kInitialSize, zone);
1273 Insert(value, zone);
1286 struct HValueMapListElement {
1290 static const int kNil = -1;
1293 static const int kInitialSize = 16;
1297 void Resize(
int new_size, Zone* zone);
1298 void ResizeLists(
int new_size, Zone* zone);
1299 void Insert(HValue* value, Zone* zone);
1300 uint32_t Bound(uint32_t value)
const {
return value & (array_size_ - 1); }
1307 HValueMapListElement* array_;
1309 HValueMapListElement* lists_;
1310 int free_list_head_;
1317 explicit HSideEffectMap(HSideEffectMap* other);
1318 HSideEffectMap& operator= (
const HSideEffectMap& other);
1343 void SaveTiming(
const char* name, int64_t ticks,
unsigned size);
1346 if (!instance.
is_set()) {
1349 return instance.
get();
1362 List<int64_t> timing_;
1363 List<const char*> names_;
1364 List<unsigned> sizes_;
1366 unsigned total_size_;
1367 int64_t full_code_gen_;
1368 double source_size_;
1384 HPhase(
const char* name, LAllocator* allocator) {
1385 Begin(name,
NULL,
NULL, allocator);
1393 void Begin(
const char* name,
1396 LAllocator* allocator);
1403 LAllocator* allocator_;
1404 unsigned start_allocation_size_;
1417 if (!instance.
is_set()) {
1420 return instance.
get();
1426 Tag(
HTracer* tracer,
const char* name) {
1429 tracer->PrintIndent();
1430 tracer->trace_.
Add(
"begin_%s\n", name);
1436 tracer_->PrintIndent();
1437 tracer_->trace_.Add(
"end_%s\n", name_);
1438 ASSERT(tracer_->indent_ >= 0);
1439 tracer_->FlushToFile();
1447 explicit HTracer(
const char* filename)
1448 : filename_(filename), trace_(&string_allocator_), indent_(0) {
1452 void TraceLiveRange(LiveRange* range,
const char* type, Zone* zone);
1453 void Trace(
const char* name, HGraph* graph, LChunk* chunk);
1456 void PrintEmptyProperty(
const char* name) {
1458 trace_.
Add(
"%s\n", name);
1461 void PrintStringProperty(
const char* name,
const char* value) {
1463 trace_.
Add(
"%s \"%s\"\n", name, value);
1466 void PrintLongProperty(
const char* name, int64_t value) {
1468 trace_.
Add(
"%s %d000\n", name, static_cast<int>(value / 1000));
1471 void PrintBlockProperty(
const char* name,
int block_id) {
1473 trace_.
Add(
"%s \"B%d\"\n", name, block_id);
1476 void PrintIntProperty(
const char* name,
int value) {
1478 trace_.
Add(
"%s %d\n", name, value);
1481 void PrintIndent() {
1482 for (
int i = 0; i < indent_; i++) {
1487 const char* filename_;
1488 HeapStringAllocator string_allocator_;
1489 StringStream trace_;
1496 #endif // V8_HYDROGEN_H_
HValue * LookupValue(int id) const
void MarkAsDeoptimizing()
void SetInitialEnvironment(HEnvironment *env)
#define INLINE_FUNCTION_LIST(F)
void set_break_scope(BreakAndContinueScope *head)
HPhase(const char *name, HGraph *graph)
bool IsDeoptimizing() const
HBasicBlock * if_true() const
GVNFlagSet gvn_flags() const
virtual void ReturnInstruction(HInstruction *instr, BailoutId ast_id)
void DeadCodeElimination()
const ZoneList< int > * deleted_phis() const
void set_entry(HEnterInlined *entry)
virtual void ReturnControl(HControlInstruction *instr, BailoutId ast_id)
BreakableStatement * target()
HValueMap * Copy(Zone *zone) const
void set_for_typeof(bool for_typeof)
EffectContext(HGraphBuilder *owner)
virtual void ReturnControl(HControlInstruction *instr, BailoutId ast_id)
void set_block_id(int id)
#define DECLARE_VISIT(type)
HEnvironment * CopyForInlining(Handle< JSFunction > target, int arguments, FunctionLiteral *function, HConstant *undefined, CallKind call_kind, InliningKind inlining_kind) const
HValue * LookupContext() const
HPhase(const char *name, LAllocator *allocator)
InliningKind inlining_kind() const
bool Dominates(HBasicBlock *other) const
void Kill(GVNFlagSet flags)
const ZoneList< int > * assigned_variables() const
void set_use_optimistic_licm(bool value)
HConstant * GetConstant1()
FunctionState(HGraphBuilder *owner, CompilationInfo *info, TypeFeedbackOracle *oracle, InliningKind inlining_kind)
Expression * condition() const
void SetArgumentsObject(HArgumentsObject *object)
void set_break_block(HBasicBlock *block)
void set_entry(HEnterInlined *entry)
virtual void ReturnInstruction(HInstruction *instr, BailoutId ast_id)=0
void Finish(HControlInstruction *last)
HInstruction * first() const
HEnvironment * arguments_environment()
virtual void ReturnInstruction(HInstruction *instr, BailoutId ast_id)
HValue * Lookup(Variable *variable) const
void MarkAsLoopSuccessorDominator()
void Bind(Variable *variable, HValue *value)
virtual void ReturnValue(HValue *value)
HGraphBuilder * owner() const
void FinishExitWithDeoptimization(HDeoptimize::UseEnvironment has_uses)
HBasicBlock * dominator() const
void SetExpressionStackAt(int index_from_top, HValue *value)
virtual void ReturnControl(HControlInstruction *instr, BailoutId ast_id)=0
bool IsStackAllocated() const
FrameType frame_type() const
bool CheckArgumentsPhiUses()
int PredecessorIndexOf(HBasicBlock *predecessor) const
#define ASSERT(condition)
bool is_recursive() const
void SaveTiming(const char *name, int64_t ticks, unsigned size)
void InsertRepresentationChanges()
HBasicBlock * current_block() const
HConstant * GetConstantTrue()
const ZoneList< HBasicBlock * > * predecessors() const
BreakAndContinueInfo(BreakableStatement *target, int drop_extra=0)
HEnvironment * Copy() const
HPredecessorIterator(HBasicBlock *block)
HEnterInlined * entry() const
HControlInstruction * end() const
HBasicBlock * continue_block()
void DetachLoopInformation()
static const char *const kFullCodeGen
bool HasPredecessor() const
HEnvironment * CopyAsLoopHeader(HBasicBlock *block) const
virtual void ReturnValue(HValue *value)
FunctionState * function_state() const
bool has_osr_loop_entry()
int GetMaximumValueID() const
int parameter_count() const
ZoneList< HUnknownOSRValue * > * osr_values()
static HStatistics * Instance()
TypeFeedbackOracle * oracle() const
void AssignCommonDominator(HBasicBlock *other)
HEnvironment * environment() const
HEnvironment * last_environment() const
void DehoistSimpleArrayIndexComputations()
const ZoneList< HValue * > * values() const
int last_instruction_index() const
void TraceLithium(const char *name, LChunk *chunk)
AstContext(HGraphBuilder *owner, Expression::Context kind)
void Add(Vector< const char > format, Vector< FmtElm > elms)
HConstant * GetConstantFalse()
void Initialize(CompilationInfo *info)
BreakAndContinueScope(BreakAndContinueInfo *info, HGraphBuilder *owner)
void RemovePhi(HPhi *phi)
void VisitDeclarations(ZoneList< Declaration * > *declarations)
HEnvironment * outer() const
bool ExpressionStackIsEmpty() const
TestContext(HGraphBuilder *owner, Expression *condition, TypeFeedbackOracle *oracle, HBasicBlock *if_true, HBasicBlock *if_false)
void set_osr_loop_entry(HBasicBlock *entry)
void ClearInlinedTestContext()
void set_arguments_elements(HArgumentsElements *arguments_elements)
const ZoneList< HBasicBlock * > * dominated_blocks() const
EnumSet< GVNFlag > GVNFlagSet
int first_expression_index() const
HConstant * GetConstantUndefined() const
void AddIncomingEdge(HBasicBlock *block, HEnvironment *other)
HBasicBlock(HGraph *graph)
HInstruction * operator[](int i) const
HInstruction * GetLastInstruction()
void PostProcessLoopHeader(IterationStatement *stmt)
bool HasEnvironment() const
void MarkAsInlineReturnTarget()
void set_current_block(HBasicBlock *block)
bool use_optimistic_licm()
TypeFeedbackOracle * oracle()
void UpdateEnvironment(HEnvironment *env)
BreakAndContinueScope * break_scope() const
HInstruction * at(int i) const
bool HasParentLoopHeader() const
HArgumentsElements * arguments_elements()
void EliminateUnreachablePhis()
void set_undefined_constant(HConstant *constant)
void RecordUint32Instruction(HInstruction *instr)
static HTracer * Instance()
void InsertTypeConversions()
CompilationInfo * info() const
HValue * ExpressionStackAt(int index_from_top) const
HEnvironment(HEnvironment *outer, Scope *scope, Handle< JSFunction > closure, Zone *zone)
#define DISALLOW_COPY_AND_ASSIGN(TypeName)
static TestContext * cast(AstContext *context)
#define INLINE_FUNCTION_GENERATOR_DECLARATION(Name, argc, ressize)
void PropagateDeoptimizingMark()
HValue * Lookup(int index) const
HBasicBlock * osr_loop_entry()
virtual void ReturnInstruction(HInstruction *instr, BailoutId ast_id)
HConstant * GetConstantMinus1()
HInstruction * last() const
void MarkDeoptimizeOnUndefined()
virtual void ReturnControl(HControlInstruction *instr, BailoutId ast_id)
void ComputeMinusZeroChecks()
void AddSimulate(BailoutId ast_id)
ValueContext(HGraphBuilder *owner, ArgumentsAllowedFlag flag)
void ReplaceCheckedValues()
void RecordDeletedPhi(int merge_index)
BreakAndContinueScope * next()
AstContext * call_context()
void SetJoinId(BailoutId ast_id)
void set_last(HInstruction *instr)
HBasicBlock * CreateBasicBlock()
bool IsInlineReturnTarget() const
bool is_classic_mode() const
void BindContext(HValue *value)
int specials_count() const
void SetValueAt(int index, HValue *value)
int WriteChars(const char *filename, const char *str, int size, bool verbose)
HArgumentsObject * GetArgumentsObject() const
const ZoneList< HBasicBlock * > * blocks() const
static const char *const kTotal
int first_instruction_index() const
void set_last_instruction_index(int index)
int LoopNestingDepth() const
const ZoneList< HPhi * > * phi_list() const
void set_argument_count(int count)
HBasicBlock * parent_loop_header() const
bool IsLoopSuccessorDominator() const
void InitializeInferredTypes()
HEnvironment * DiscardInlined(bool drop_extra)
void AddSimulate(BailoutId ast_id)
void FinishExit(HControlInstruction *instruction)
bool is_special_index(int i) const
void Add(HValue *value, Zone *zone)
HGraph(CompilationInfo *info)
void Goto(HBasicBlock *block, FunctionState *state=NULL)
HGraphBuilder(CompilationInfo *info, TypeFeedbackOracle *oracle)
void EliminateRedundantPhis()
HLoopInformation * loop_information() const
bool IsStartBlock() const
bool IsLoopHeader() const
virtual void ReturnValue(HValue *value)
void PrintTo(StringStream *stream)
void set_continue_block(HBasicBlock *block)
void set_parent_loop_header(HBasicBlock *block)
HBasicBlock * CreateJoin(HBasicBlock *first, HBasicBlock *second, BailoutId join_id)
HConstant * GetConstantHole()
CompilationInfo * compilation_info()
int update_type_change_checksum(int delta)
void ComputeSafeUint32Operations()
void Add(const T &element, AllocationPolicy allocator=AllocationPolicy())
void set_ast_id(BailoutId id)
HBasicBlock * if_false() const
activate correct semantics for inheriting readonliness enable harmony semantics for typeof enable harmony enable harmony proxies enable all harmony harmony_scoping harmony_proxies harmony_scoping tracks arrays with only smi values automatically unbox arrays of doubles use crankshaft use hydrogen range analysis use hydrogen global value numbering use function inlining maximum number of AST nodes considered for a single inlining loop invariant code motion print statistics for hydrogen trace generated IR for specified phases trace register allocator trace range analysis trace representation types environment for every instruction put a break point before deoptimizing polymorphic inlining perform array bounds checks elimination use dead code elimination trace on stack replacement optimize closures cache optimized code for closures functions with arguments object loop weight for representation inference allow uint32 values on optimize frames if they are used only in safe operations track parallel recompilation enable all profiler experiments number of stack frames inspected by the profiler call recompile stub directly when self optimizing trigger profiler ticks based on counting instead of timing weight back edges by jump distance for interrupt triggering percentage of ICs that must have type info to allow optimization watch_ic_patching retry_self_opt interrupt_at_exit extra verbose compilation tracing generate extra emit comments in code disassembly enable use of SSE3 instructions if available enable use of CMOV instruction if available enable use of SAHF instruction if enable use of VFP3 instructions if available this implies enabling ARMv7 and VFP2 enable use of VFP2 instructions if available enable use of SDIV and UDIV instructions if enable loading bit constant by means of movw movt instruction enable unaligned accesses for enable use of MIPS FPU instructions if NULL
int GetNextValueID(HValue *value)
void EliminateRedundantBoundsChecks()
void TraceHydrogen(const char *name, HGraph *graph)
void Bailout(const char *reason)
const ZoneList< HPhi * > * phis() const
void TraceCompilation(FunctionLiteral *function)
void AssignLoopSuccessorDominators()
TestContext * test_context()
BreakAndContinueInfo * info()
Handle< JSFunction > closure() const
int argument_count() const
#define INLINE_RUNTIME_FUNCTION_LIST(F)
HBasicBlock * break_block()
activate correct semantics for inheriting readonliness enable harmony semantics for typeof enable harmony enable harmony proxies enable all harmony harmony_scoping harmony_proxies harmony_scoping tracks arrays with only smi values automatically unbox arrays of doubles use crankshaft use hydrogen range analysis use hydrogen global value numbering use function inlining maximum number of AST nodes considered for a single inlining loop invariant code motion print statistics for hydrogen trace generated IR for specified phases trace register allocator trace range analysis trace representation types environment for every instruction put a break point before deoptimizing polymorphic inlining perform array bounds checks elimination use dead code elimination trace on stack replacement optimize closures cache optimized code for closures functions with arguments object loop weight for representation inference allow uint32 values on optimize frames if they are used only in safe operations track parallel recompilation enable all profiler experiments number of stack frames inspected by the profiler call recompile stub directly when self optimizing trigger profiler ticks based on counting instead of timing weight back edges by jump distance for interrupt triggering percentage of ICs that must have type info to allow optimization watch_ic_patching retry_self_opt interrupt_at_exit extra verbose compilation tracing generate extra emit comments in code disassembly enable use of SSE3 instructions if available enable use of CMOV instruction if available enable use of SAHF instruction if enable use of VFP3 instructions if available this implies enabling ARMv7 and VFP2 enable use of VFP2 instructions if available enable use of SDIV and UDIV instructions if enable loading bit constant by means of movw movt instruction enable unaligned accesses for enable use of MIPS FPU instructions if expose natives in global object expose gc extension number of stack frames to capture disable builtin natives files print a stack trace if an assertion failure occurs use random jit cookie to mask large constants trace lazy optimization use adaptive optimizations prepare for turning on always opt minimum length for automatic enable preparsing maximum number of optimization attempts before giving up cache prototype transitions automatically set the debug break flag when debugger commands are in the queue always cause a debug break before aborting maximum length of function source code printed in a stack trace max size of the new max size of the old max size of executable always perform global GCs print one trace line following each garbage collection do not print trace line after scavenger collection print more details following each garbage collection print amount of external allocated memory after each time it is adjusted flush code that we expect not to use again before full gc do incremental marking steps track object counts and memory usage use caching Perform compaction on every full GC Never perform compaction on full GC testing only Compact code space on full incremental collections Default seed for initializing random allows verbose printing trace parsing and preparsing Check icache flushes in ARM and MIPS simulator Stack alingment in bytes in print stack trace when throwing exceptions randomize hashes to avoid predictable hash Fixed seed to use to hash property activate a timer that switches between V8 threads testing_bool_flag float flag Seed used for threading test randomness A filename with extra code to be included in the Print usage including flags
void set_first_instruction_index(int index)
void AttachLoopInformation()
bool ProcessArgumentsObject()
void check(i::Vector< const char > string)
TypeFeedbackOracle * oracle() const
virtual void ReturnValue(HValue *value)=0
void TraceLiveRanges(const char *name, LAllocator *allocator)
HEnvironment * start_environment() const
void set_osr_values(ZoneList< HUnknownOSRValue * > *values)
HBasicBlock * entry_block() const
HValue * Lookup(HValue *value) const
bool Optimize(SmartArrayPointer< char > *bailout_reason)
void AddInstruction(HInstruction *instr)
HInstruction * AddInstruction(HInstruction *instr)
HBasicBlock * function_return()
HPhase(const char *name, LChunk *chunk)
void AddLeaveInlined(HValue *return_value, FunctionState *state)
friend class FunctionState
HEnvironment * CopyWithoutHistory() const
kPropertyAccessorsOffset kNamedPropertyHandlerOffset kInstanceTemplateOffset kAccessCheckInfoOffset kEvalFrominstructionsOffsetOffset kInstanceClassNameOffset flag