28 #ifndef V8_FULL_CODEGEN_H_
29 #define V8_FULL_CODEGEN_H_
56 InitializeAstVisitor(zone);
66 #define DECLARE_VISIT(type) virtual void Visit##type(type* node);
72 DEFINE_AST_VISITOR_SUBCLASS_MEMBERS();
90 scope_(info->scope()),
95 bailout_entries_(info->HasDeoptimizationSupport()
96 ? info->function()->ast_node_count() : 0,
98 back_edges_(2, info->zone()),
115 case TOS_REG:
return "TOS_REG";
124 #if V8_TARGET_ARCH_IA32
125 static const int kCodeSizeMultiplier = 100;
126 #elif V8_TARGET_ARCH_X64
127 static const int kCodeSizeMultiplier = 162;
128 #elif V8_TARGET_ARCH_ARM
129 static const int kCodeSizeMultiplier = 142;
130 #elif V8_TARGET_ARCH_ARM64
132 static const int kCodeSizeMultiplier = 142;
133 #elif V8_TARGET_ARCH_MIPS
134 static const int kCodeSizeMultiplier = 142;
136 #error Unsupported target architecture.
149 previous_ = codegen->nesting_stack_;
150 codegen->nesting_stack_ =
this;
154 ASSERT_EQ(
this, codegen_->nesting_stack_);
155 codegen_->nesting_stack_ = previous_;
158 virtual Breakable* AsBreakable() {
return NULL; }
159 virtual Iteration* AsIteration() {
return NULL; }
161 virtual bool IsContinueTarget(Statement* target) {
return false; }
162 virtual bool IsBreakTarget(Statement* target) {
return false; }
175 MacroAssembler* masm() {
return codegen_->masm(); }
190 virtual ~Breakable() {}
192 virtual Breakable* AsBreakable() {
return this; }
193 virtual bool IsBreakTarget(Statement* target) {
194 return statement() == target;
197 BreakableStatement* statement() {
return statement_; }
198 Label* break_label() {
return &break_label_; }
201 BreakableStatement* statement_;
206 class Iteration :
public Breakable {
209 : Breakable(codegen, statement) {
211 virtual ~Iteration() {}
213 virtual Iteration* AsIteration() {
return this; }
214 virtual bool IsContinueTarget(Statement* target) {
215 return statement() == target;
218 Label* continue_label() {
return &continue_label_; }
221 Label continue_label_;
225 class NestedBlock :
public Breakable {
228 : Breakable(codegen, block) {
230 virtual ~NestedBlock() {}
233 if (statement()->AsBlock()->scope() !=
NULL) {
245 virtual ~TryCatch() {}
256 virtual ~TryFinally() {}
261 Label* finally_entry_;
267 static const int kElementCount = 5;
270 virtual ~Finally() {}
273 *stack_depth += kElementCount;
279 class ForIn :
public Iteration {
281 static const int kElementCount = 5;
284 : Iteration(codegen, statement) {
289 *stack_depth += kElementCount;
301 virtual ~WithOrCatch() {}
312 static const InlineFunctionGenerator kInlineFunctionGenerators[];
316 void ClearAccumulator();
325 void DoTest(Expression* condition,
328 Label* fall_through);
329 void DoTest(
const TestContext* context);
333 #if V8_TARGET_ARCH_MIPS
339 Label* fall_through);
340 #else // All non-mips arch.
344 Label* fall_through);
345 #endif // V8_TARGET_ARCH_MIPS
350 void GetVar(Register destination, Variable* var);
356 void SetVar(Variable* var,
369 MemOperand VarOperand(Variable* var, Register scratch);
371 void VisitForEffect(Expression* expr) {
372 EffectContext context(
this);
377 void VisitForAccumulatorValue(Expression* expr) {
378 AccumulatorValueContext context(
this);
380 PrepareForBailout(expr,
TOS_REG);
383 void VisitForStackValue(Expression* expr) {
384 StackValueContext context(
this);
389 void VisitForControl(Expression* expr,
392 Label* fall_through) {
393 TestContext context(
this, expr, if_true, if_false, fall_through);
400 void VisitInDuplicateContext(Expression* expr);
402 void VisitDeclarations(ZoneList<Declaration*>* declarations);
403 void DeclareModules(Handle<FixedArray> descriptions);
404 void DeclareGlobals(Handle<FixedArray>
pairs);
405 int DeclareGlobalsFlags();
410 void AllocateModules(ZoneList<Declaration*>* declarations);
415 void EmitCreateIteratorResult(
bool done);
420 bool TryLiteralCompare(CompareOperation* compare);
424 void EmitLiteralCompareTypeof(Expression* expr,
425 Expression* sub_expr,
426 Handle<String>
check);
429 void EmitLiteralCompareNil(CompareOperation* expr,
430 Expression* sub_expr,
434 void PrepareForBailout(Expression* node,
State state);
435 void PrepareForBailoutForId(BailoutId
id,
State state);
439 Handle<FixedArray> FeedbackVector() {
440 return feedback_vector_;
442 void StoreFeedbackVectorSlot(
int slot, Handle<Object>
object) {
443 feedback_vector_->set(slot, *
object);
445 void InitializeFeedbackVector();
449 void RecordJSReturnSite(Call* call);
456 void PrepareForBailoutBeforeSplit(Expression* expr,
457 bool should_normalize,
463 void EmitDebugCheckDeclarationContext(Variable* variable);
468 void EmitBackEdgeBookkeeping(IterationStatement* stmt,
469 Label* back_edge_target);
471 void RecordBackEdge(BailoutId osr_ast_id);
474 unsigned EmitBackEdgeTable();
476 void EmitProfilingCounterDecrement(
int delta);
477 void EmitProfilingCounterReset();
482 void EmitUnwindBeforeReturn();
485 void EmitReturnSequence();
488 void EmitCallWithStub(Call* expr);
489 void EmitCallWithIC(Call* expr);
490 void EmitKeyedCallWithIC(Call* expr, Expression* key);
495 void EmitInlineRuntimeCall(CallRuntime* expr);
497 #define EMIT_INLINE_RUNTIME_CALL(name, x, y) \
498 void Emit##name(CallRuntime* expr);
500 #undef EMIT_INLINE_RUNTIME_CALL
503 void EmitGeneratorResume(Expression *generator,
508 void EmitLoadGlobalCheckExtensions(Variable* var,
511 MemOperand ContextSlotOperandCheckExtensions(Variable* var, Label* slow);
512 void EmitDynamicLookupFastCase(Variable* var,
516 void EmitVariableLoad(VariableProxy* proxy);
518 void EmitAccessor(Expression* expression);
521 void EmitResolvePossiblyDirectEval(
int arg_count);
525 void EmitNewClosure(Handle<SharedFunctionInfo>
info,
bool pretenure);
531 void EmitNamedPropertyLoad(Property* expr);
535 void EmitKeyedPropertyLoad(Property* expr);
539 void EmitBinaryOp(BinaryOperation* expr,
545 void EmitInlineSmiBinaryOp(BinaryOperation* expr,
553 void EmitAssignment(Expression* expr);
557 void EmitVariableAssignment(Variable* var,
561 void EmitStoreToStackLocalOrContextSlot(Variable* var,
563 void EmitCallStoreContextSlot(Handle<String>
name,
StrictMode strict_mode);
567 void EmitNamedPropertyAssignment(Assignment* expr);
572 void EmitKeyedPropertyAssignment(Assignment* expr);
574 void CallIC(Handle<Code>
code,
581 void SetFunctionPosition(FunctionLiteral* fun);
582 void SetReturnPosition(FunctionLiteral* fun);
583 void SetStatementPosition(Statement* stmt);
584 void SetExpressionPosition(Expression* expr);
585 void SetStatementPosition(
int pos);
586 void SetSourcePosition(
int pos);
589 void EnterFinallyBlock();
590 void ExitFinallyBlock();
593 int loop_depth() {
return loop_depth_; }
594 void increment_loop_depth() { loop_depth_++; }
595 void decrement_loop_depth() {
600 MacroAssembler* masm() {
return masm_; }
602 class ExpressionContext;
603 const ExpressionContext* context() {
return context_; }
604 void set_new_context(
const ExpressionContext* context) { context_ = context; }
606 Handle<Script> script() {
return info_->
script(); }
607 bool is_eval() {
return info_->
is_eval(); }
608 bool is_native() {
return info_->
is_native(); }
609 StrictMode strict_mode() {
return function()->strict_mode(); }
610 FunctionLiteral*
function() {
return info_->
function(); }
611 Scope* scope() {
return scope_; }
613 static Register result_register();
614 static Register context_register();
618 void StoreToFrameField(
int frame_offset, Register value);
622 void LoadContextField(Register dst,
int context_index);
626 void PushFunctionArgumentForContextAllocation();
629 #define DECLARE_VISIT(type) virtual void Visit##type(type* node);
633 void VisitComma(BinaryOperation* expr);
634 void VisitLogicalExpression(BinaryOperation* expr);
635 void VisitArithmeticExpression(BinaryOperation* expr);
637 void VisitForTypeofValue(Expression* expr);
640 void PopulateDeoptimizationData(Handle<Code> code);
641 void PopulateTypeFeedbackInfo(Handle<Code> code);
643 Handle<FixedArray> handler_table() {
return handler_table_; }
645 struct BailoutEntry {
647 unsigned pc_and_state;
650 struct BackEdgeEntry {
659 : masm_(codegen->masm()), old_(codegen->context()), codegen_(codegen) {
660 codegen->set_new_context(
this);
663 virtual ~ExpressionContext() {
664 codegen_->set_new_context(old_);
667 Isolate* isolate()
const {
return codegen_->isolate(); }
671 virtual void Plug(
bool flag)
const = 0;
676 virtual void Plug(Register reg)
const = 0;
677 virtual void Plug(Variable* var)
const = 0;
678 virtual void Plug(Handle<Object> lit)
const = 0;
680 virtual void PlugTOS()
const = 0;
686 virtual void Plug(Label* materialize_true,
687 Label* materialize_false)
const = 0;
692 virtual void DropAndPlug(
int count, Register reg)
const = 0;
696 virtual void PrepareTest(Label* materialize_true,
697 Label* materialize_false,
700 Label** fall_through)
const = 0;
704 virtual bool IsEffect()
const {
return false; }
707 virtual bool IsAccumulatorValue()
const {
return false; }
708 virtual bool IsStackValue()
const {
return false; }
712 virtual bool IsTest()
const {
return false; }
716 MacroAssembler* masm()
const {
return masm_; }
717 MacroAssembler* masm_;
720 const ExpressionContext* old_;
724 class AccumulatorValueContext :
public ExpressionContext {
727 : ExpressionContext(codegen) { }
729 virtual void Plug(
bool flag)
const;
730 virtual void Plug(Register reg)
const;
731 virtual void Plug(Label* materialize_true, Label* materialize_false)
const;
732 virtual void Plug(Variable* var)
const;
733 virtual void Plug(Handle<Object> lit)
const;
735 virtual void PlugTOS()
const;
736 virtual void DropAndPlug(
int count, Register reg)
const;
737 virtual void PrepareTest(Label* materialize_true,
738 Label* materialize_false,
741 Label** fall_through)
const;
742 virtual bool IsAccumulatorValue()
const {
return true; }
745 class StackValueContext :
public ExpressionContext {
748 : ExpressionContext(codegen) { }
750 virtual void Plug(
bool flag)
const;
751 virtual void Plug(Register reg)
const;
752 virtual void Plug(Label* materialize_true, Label* materialize_false)
const;
753 virtual void Plug(Variable* var)
const;
754 virtual void Plug(Handle<Object> lit)
const;
756 virtual void PlugTOS()
const;
757 virtual void DropAndPlug(
int count, Register reg)
const;
758 virtual void PrepareTest(Label* materialize_true,
759 Label* materialize_false,
762 Label** fall_through)
const;
763 virtual bool IsStackValue()
const {
return true; }
766 class TestContext :
public ExpressionContext {
769 Expression* condition,
773 : ExpressionContext(codegen),
774 condition_(condition),
775 true_label_(true_label),
776 false_label_(false_label),
777 fall_through_(fall_through) { }
779 static const TestContext* cast(
const ExpressionContext* context) {
780 ASSERT(context->IsTest());
781 return reinterpret_cast<const TestContext*
>(context);
784 Expression* condition()
const {
return condition_; }
785 Label* true_label()
const {
return true_label_; }
786 Label* false_label()
const {
return false_label_; }
787 Label* fall_through()
const {
return fall_through_; }
789 virtual void Plug(
bool flag)
const;
790 virtual void Plug(Register reg)
const;
791 virtual void Plug(Label* materialize_true, Label* materialize_false)
const;
792 virtual void Plug(Variable* var)
const;
793 virtual void Plug(Handle<Object> lit)
const;
795 virtual void PlugTOS()
const;
796 virtual void DropAndPlug(
int count, Register reg)
const;
797 virtual void PrepareTest(Label* materialize_true,
798 Label* materialize_false,
801 Label** fall_through)
const;
802 virtual bool IsTest()
const {
return true; }
805 Expression* condition_;
808 Label* fall_through_;
811 class EffectContext :
public ExpressionContext {
814 : ExpressionContext(codegen) { }
816 virtual void Plug(
bool flag)
const;
817 virtual void Plug(Register reg)
const;
818 virtual void Plug(Label* materialize_true, Label* materialize_false)
const;
819 virtual void Plug(Variable* var)
const;
820 virtual void Plug(Handle<Object> lit)
const;
822 virtual void PlugTOS()
const;
823 virtual void DropAndPlug(
int count, Register reg)
const;
824 virtual void PrepareTest(Label* materialize_true,
825 Label* materialize_false,
828 Label** fall_through)
const;
829 virtual bool IsEffect()
const {
return true; }
832 MacroAssembler* masm_;
833 CompilationInfo* info_;
838 ZoneList<Handle<Object> >* globals_;
839 Handle<FixedArray> modules_;
841 const ExpressionContext* context_;
842 ZoneList<BailoutEntry> bailout_entries_;
843 GrowableBitVector prepared_bailout_ids_;
844 ZoneList<BackEdgeEntry> back_edges_;
846 Handle<FixedArray> handler_table_;
847 Handle<FixedArray> feedback_vector_;
848 Handle<Cell> profiling_counter_;
849 bool generate_debug_code_;
860 ObjectLiteral::Accessors,
861 ZoneAllocationPolicy> {
871 if (it->second ==
NULL) it->second =
new(zone_) ObjectLiteral::Accessors();
887 start_ = table_address + kTableLengthSize;
906 return instruction_start_ +
pc_offset(index);
918 Code* unoptimized_code);
924 Code* replacement_code);
928 Code* unoptimized_code);
939 Code* unoptimized_code,
944 static bool Verify(
Isolate* isolate,
945 Code* unoptimized_code,
946 int loop_nesting_level);
950 Address entry_at(uint32_t index) {
952 return start_ + index * kEntrySize;
955 static const int kTableLengthSize =
kIntSize;
956 static const int kAstIdOffset = 0 *
kIntSize;
957 static const int kPcOffsetOffset = 1 *
kIntSize;
958 static const int kLoopDepthOffset = 2 *
kIntSize;
959 static const int kEntrySize = 3 *
kIntSize;
969 #endif // V8_FULL_CODEGEN_H_
enable upcoming ES6 features enable harmony block scoping enable harmony enable harmony proxies enable harmony generators enable harmony numeric enable harmony string enable harmony math functions harmony_scoping harmony_symbols harmony_collections harmony_iteration harmony_strings harmony_scoping harmony_maths tracks arrays with only smi values Optimize object Array DOM strings and string pretenure call new trace pretenuring decisions of HAllocate instructions track fields with only smi values track fields with heap values track_fields track_fields Enables optimizations which favor memory size over execution speed use string slices optimization filter maximum number of GVN fix point iterations use function inlining use allocation folding eliminate write barriers targeting allocations in optimized code maximum source size in bytes considered for a single inlining maximum cumulative number of AST nodes considered for inlining crankshaft harvests type feedback from stub cache trace check elimination phase hydrogen tracing filter NULL
#define INLINE_FUNCTION_LIST(F)
static void RemoveStackCheck(Handle< Code > code, uint32_t pc_offset)
static void Patch(Isolate *isolate, Code *unoptimized_code)
#define DECLARE_VISIT(type)
BailoutId ast_id(uint32_t index)
static bool MakeCode(CompilationInfo *info)
static TypeFeedbackId None()
Handle< Script > script() const
BackEdgeTable(Code *code, DisallowHeapAllocation *required)
Iterator find(Literal *key, bool insert=false, ZoneAllocationPolicyallocator=ZoneAllocationPolicy())
#define ASSERT(condition)
static const int kMaxBackEdgeWeight
static void AddStackCheck(Handle< Code > code, uint32_t pc_offset)
static BackEdgeState GetBackEdgeState(Isolate *isolate, Code *unoptimized_code, Address pc_after)
kInstanceClassNameOffset flag
enable upcoming ES6 features enable harmony block scoping enable harmony enable harmony proxies enable harmony generators enable harmony numeric enable harmony string enable harmony math functions harmony_scoping harmony_symbols harmony_collections harmony_iteration harmony_strings harmony_scoping harmony_maths tracks arrays with only smi values Optimize object Array DOM strings and string pretenure call new trace pretenuring decisions of HAllocate instructions track fields with only smi values track fields with heap values track_fields track_fields Enables optimizations which favor memory size over execution speed use string slices optimization filter maximum number of GVN fix point iterations use function inlining use allocation folding eliminate write barriers targeting allocations in optimized code maximum source size in bytes considered for a single inlining maximum cumulative number of AST nodes considered for inlining crankshaft harvests type feedback from stub cache trace check elimination phase hydrogen tracing filter trace hydrogen to given file name trace inlining decisions trace store elimination trace all use positions trace global value numbering trace hydrogen escape analysis trace the tracking of allocation sites trace map generalization environment for every instruction deoptimize every n garbage collections put a break point before deoptimizing deoptimize uncommon cases use on stack replacement trace array bounds check elimination perform array index dehoisting use load elimination use store elimination use constant folding eliminate unreachable code number of stress runs when picking a function to watch for shared function not JSFunction itself flushes the cache of optimized code for closures on every GC functions with arguments object maximum number of escape analysis fix point iterations allow uint32 values on optimize frames if they are used only in safe operations track concurrent recompilation artificial compilation delay in ms concurrent on stack replacement do not emit check maps for constant values that have a leaf deoptimize the optimized code if the layout of the maps changes number of stack frames inspected by the profiler percentage of ICs that must have type info to allow optimization 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 VFP3 instructions if available enable use of NEON instructions if enable use of SDIV and UDIV instructions if enable loading bit constant by means of movw movt instruction pairs(ARM only)") DEFINE_bool(enable_unaligned_accesses
enable upcoming ES6 features enable harmony block scoping enable harmony enable harmony proxies enable harmony generators enable harmony numeric enable harmony string enable harmony math functions harmony_scoping harmony_symbols harmony_collections harmony_iteration harmony_strings harmony_scoping harmony_maths tracks arrays with only smi values Optimize object Array DOM strings and string pretenure call new trace pretenuring decisions of HAllocate instructions track fields with only smi values track fields with heap values track_fields track_fields Enables optimizations which favor memory size over execution speed use string slices optimization filter maximum number of GVN fix point iterations use function inlining use allocation folding eliminate write barriers targeting allocations in optimized code maximum source size in bytes considered for a single inlining maximum cumulative number of AST nodes considered for inlining crankshaft harvests type feedback from stub cache trace check elimination phase hydrogen tracing filter trace hydrogen to given file name trace inlining decisions trace store elimination trace all use positions trace global value numbering trace hydrogen escape analysis trace the tracking of allocation sites trace map generalization environment for every instruction deoptimize every n garbage collections put a break point before deoptimizing deoptimize uncommon cases use on stack replacement trace array bounds check elimination perform array index dehoisting use load elimination use store elimination use constant folding eliminate unreachable code number of stress runs when picking a function to watch for shared function not JSFunction itself flushes the cache of optimized code for closures on every GC functions with arguments object maximum number of escape analysis fix point iterations allow uint32 values on optimize frames if they are used only in safe operations track concurrent recompilation artificial compilation delay in ms concurrent on stack replacement do not emit check maps for constant values that have a leaf deoptimize the optimized code if the layout of the maps changes number of stack frames inspected by the profiler percentage of ICs that must have type info to allow optimization 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 VFP3 instructions if available enable use of NEON instructions if 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 d16 d31 registers on ARM this requires VFP3 force all emitted branches to be in long mode(MIPS only)") DEFINE_string(expose_natives_as
FullCodeGenerator(MacroAssembler *masm, CompilationInfo *info)
uint32_t loop_depth(uint32_t index)
static void PatchAt(Code *unoptimized_code, Address pc, BackEdgeState target_state, Code *replacement_code)
byte * instruction_start()
void check(i::Vector< const uint8_t > string)
FunctionLiteral * function() const
enable upcoming ES6 features enable harmony block scoping enable harmony enable harmony proxies enable harmony generators enable harmony numeric enable harmony string enable harmony math functions harmony_scoping harmony_symbols harmony_collections harmony_iteration harmony_strings harmony_scoping harmony_maths tracks arrays with only smi values Optimize object Array DOM strings and string pretenure call new trace pretenuring decisions of HAllocate instructions track fields with only smi values track fields with heap values track_fields track_fields Enables optimizations which favor memory size over execution speed use string slices optimization filter maximum number of GVN fix point iterations use function inlining use allocation folding eliminate write barriers targeting allocations in optimized code maximum source size in bytes considered for a single inlining maximum cumulative number of AST nodes considered for inlining crankshaft harvests type feedback from stub cache trace check elimination phase hydrogen tracing filter trace hydrogen to given file name trace inlining decisions trace store elimination trace all use positions trace global value numbering trace hydrogen escape analysis trace the tracking of allocation sites trace map generalization environment for every instruction deoptimize every n garbage collections put a break point before deoptimizing deoptimize uncommon cases use on stack replacement trace array bounds check elimination perform array index dehoisting use load elimination use store elimination use constant folding eliminate unreachable code number of stress runs when picking a function to watch for shared function not JSFunction itself flushes the cache of optimized code for closures on every GC functions with arguments object maximum number of escape analysis fix point iterations allow uint32 values on optimize frames if they are used only in safe operations track concurrent recompilation artificial compilation delay in ms concurrent on stack replacement do not emit check maps for constant values that have a leaf deoptimize the optimized code if the layout of the maps changes number of stack frames inspected by the profiler percentage of ICs that must have type info to allow optimization extra verbose compilation tracing generate extra code(assertions) for debugging") DEFINE_bool(code_comments
#define DISALLOW_COPY_AND_ASSIGN(TypeName)
AccessorTable(Zone *zone)
#define DEFINE_AST_VISITOR_SUBCLASS_MEMBERS()
static const char * State2String(State state)
BreakableStatementChecker(Zone *zone)
unsigned back_edge_table_offset()
uint32_t pc_offset(uint32_t index)
friend class NestedStatement
Address pc(uint32_t index)
#define EMIT_INLINE_RUNTIME_CALL(name, x, y)
enable upcoming ES6 features enable harmony block scoping enable harmony enable harmony proxies enable harmony generators enable harmony numeric enable harmony string enable harmony math functions harmony_scoping harmony_symbols harmony_collections harmony_iteration harmony_strings harmony_scoping harmony_maths tracks arrays with only smi values Optimize object Array DOM strings and string pretenure call new trace pretenuring decisions of HAllocate instructions track fields with only smi values track fields with heap values track_fields track_fields Enables optimizations which favor memory size over execution speed use string slices optimization filter maximum number of GVN fix point iterations use function inlining use allocation folding eliminate write barriers targeting allocations in optimized code maximum source size in bytes considered for a single inlining maximum cumulative number of AST nodes considered for inlining crankshaft harvests type feedback from stub cache trace check elimination phase hydrogen tracing filter trace hydrogen to given file name trace inlining decisions trace store elimination trace all use positions trace global value numbering trace hydrogen escape analysis trace the tracking of allocation sites trace map generalization environment for every instruction deoptimize every n garbage collections put a break point before deoptimizing deoptimize uncommon cases use on stack replacement trace array bounds check elimination perform array index dehoisting use load elimination use store elimination use constant folding eliminate unreachable code number of stress runs when picking a function to watch for shared function info
static void Revert(Isolate *isolate, Code *unoptimized_code)
#define ASSERT_EQ(v1, v2)
Iterator lookup(Literal *literal)
void Check(Statement *stmt)
static uint32_t & uint32_at(Address addr)
enable upcoming ES6 features enable harmony block scoping enable harmony enable harmony proxies enable harmony generators enable harmony numeric enable harmony string enable harmony math functions harmony_scoping harmony_symbols harmony_collections harmony_iteration harmony_strings harmony_scoping harmony_maths tracks arrays with only smi values Optimize object Array DOM strings and string pretenure call new trace pretenuring decisions of HAllocate instructions track fields with only smi values track fields with heap values track_fields track_fields Enables optimizations which favor memory size over execution speed use string slices optimization filter maximum number of GVN fix point iterations use function inlining use allocation folding eliminate write barriers targeting allocations in optimized code maximum source size in bytes considered for a single inlining maximum cumulative number of AST nodes considered for inlining crankshaft harvests type feedback from stub cache trace check elimination phase hydrogen tracing filter trace hydrogen to given file name trace inlining decisions trace store elimination trace all use positions trace global value numbering trace hydrogen escape analysis trace the tracking of allocation sites trace map generalization environment for every instruction deoptimize every n garbage collections put a break point before deoptimizing deoptimize uncommon cases use on stack replacement trace array bounds check elimination perform array index dehoisting use load elimination use store elimination use constant folding eliminate unreachable code number of stress runs when picking a function to watch for shared function not JSFunction itself flushes the cache of optimized code for closures on every GC functions with arguments object maximum number of escape analysis fix point iterations allow uint32 values on optimize frames if they are used only in safe operations track concurrent recompilation artificial compilation delay in ms concurrent on stack replacement do not emit check maps for constant values that have a leaf deoptimize the optimized code if the layout of the maps changes number of stack frames inspected by the profiler percentage of ICs that must have type info to allow optimization 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 VFP3 instructions if available enable use of NEON instructions if 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 d16 d31 registers on ARM this requires VFP3 force all emitted branches to be in long expose natives in global object expose freeBuffer extension expose gc extension under the specified name expose externalize string extension number of stack frames to capture disable builtin natives files print name of functions for which code is generated use random jit cookie to mask large constants trace lazy optimization use adaptive optimizations always try to OSR functions trace optimize function deoptimization minimum length for automatic enable preparsing maximum number of optimization attempts before giving up cache prototype transitions trace debugging JSON request response trace out of bounds accesses to external arrays trace_js_array_abuse automatically set the debug break flag when debugger commands are in the queue abort by crashing 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 statistics of the maximum memory committed for the heap in name