339 const bool _eliminate_boxing; // Do boxing elimination.
340 ciMethod* _method; // The method being compiled.
341 int _entry_bci; // entry bci for osr methods.
342 const TypeFunc* _tf; // My kind of signature
343 InlineTree* _ilt; // Ditto (temporary).
344 address _stub_function; // VM entry for stub being compiled, or NULL
345 const char* _stub_name; // Name of stub or adapter being compiled, or NULL
346 address _stub_entry_point; // Compile code entry for generated stub, or NULL
347
348 // Control of this compilation.
349 int _num_loop_opts; // Number of iterations for doing loop optimiztions
350 int _max_inline_size; // Max inline size for this compilation
351 int _freq_inline_size; // Max hot method inline size for this compilation
352 int _fixed_slots; // count of frame slots not allocated by the register
353 // allocator i.e. locks, original deopt pc, etc.
354 uintx _max_node_limit; // Max unique node count during a single compilation.
355 // For deopt
356 int _orig_pc_slot;
357 int _orig_pc_slot_offset_in_bytes;
358
359 int _major_progress; // Count of something big happening
360 bool _inlining_progress; // progress doing incremental inlining?
361 bool _inlining_incrementally;// Are we doing incremental inlining (post parse)
362 bool _has_loops; // True if the method _may_ have some loops
363 bool _has_split_ifs; // True if the method _may_ have some split-if
364 bool _has_unsafe_access; // True if the method _may_ produce faults in unsafe loads or stores.
365 bool _has_stringbuilder; // True StringBuffers or StringBuilders are allocated
366 bool _has_boxed_value; // True if a boxed object is allocated
367 bool _has_reserved_stack_access; // True if the method or an inlined method is annotated with ReservedStackAccess
368 int _max_vector_size; // Maximum size of generated vectors
369 uint _trap_hist[trapHistLength]; // Cumulative traps
370 bool _trap_can_recompile; // Have we emitted a recompiling trap?
371 uint _decompile_count; // Cumulative decompilation counts.
372 bool _do_inlining; // True if we intend to do inlining
373 bool _do_scheduling; // True if we intend to do scheduling
374 bool _do_freq_based_layout; // True if we intend to do frequency based block layout
375 bool _do_count_invocations; // True if we generate code to count invocations
376 bool _do_method_data_update; // True if we generate code to update MethodData*s
377 bool _do_vector_loop; // True if allowed to execute loop in parallel iterations
378 bool _use_cmove; // True if CMove should be used without profitability analysis
379 bool _age_code; // True if we need to profile code age (decrement the aging counter)
599 /** Do aggressive boxing elimination. */
600 bool aggressive_unboxing() const { return _eliminate_boxing && AggressiveUnboxing; }
601 bool save_argument_registers() const { return _save_argument_registers; }
602
603
604 // Other fixed compilation parameters.
605 ciMethod* method() const { return _method; }
606 int entry_bci() const { return _entry_bci; }
607 bool is_osr_compilation() const { return _entry_bci != InvocationEntryBci; }
608 bool is_method_compilation() const { return (_method != NULL && !_method->flags().is_native()); }
609 const TypeFunc* tf() const { assert(_tf!=NULL, ""); return _tf; }
610 void init_tf(const TypeFunc* tf) { assert(_tf==NULL, ""); _tf = tf; }
611 InlineTree* ilt() const { return _ilt; }
612 address stub_function() const { return _stub_function; }
613 const char* stub_name() const { return _stub_name; }
614 address stub_entry_point() const { return _stub_entry_point; }
615
616 // Control of this compilation.
617 int fixed_slots() const { assert(_fixed_slots >= 0, ""); return _fixed_slots; }
618 void set_fixed_slots(int n) { _fixed_slots = n; }
619 int major_progress() const { return _major_progress; }
620 void set_inlining_progress(bool z) { _inlining_progress = z; }
621 int inlining_progress() const { return _inlining_progress; }
622 void set_inlining_incrementally(bool z) { _inlining_incrementally = z; }
623 int inlining_incrementally() const { return _inlining_incrementally; }
624 void set_major_progress() { _major_progress++; }
625 void clear_major_progress() { _major_progress = 0; }
626 int num_loop_opts() const { return _num_loop_opts; }
627 void set_num_loop_opts(int n) { _num_loop_opts = n; }
628 int max_inline_size() const { return _max_inline_size; }
629 void set_freq_inline_size(int n) { _freq_inline_size = n; }
630 int freq_inline_size() const { return _freq_inline_size; }
631 void set_max_inline_size(int n) { _max_inline_size = n; }
632 bool has_loops() const { return _has_loops; }
633 void set_has_loops(bool z) { _has_loops = z; }
634 bool has_split_ifs() const { return _has_split_ifs; }
635 void set_has_split_ifs(bool z) { _has_split_ifs = z; }
636 bool has_unsafe_access() const { return _has_unsafe_access; }
637 void set_has_unsafe_access(bool z) { _has_unsafe_access = z; }
638 bool has_stringbuilder() const { return _has_stringbuilder; }
639 void set_has_stringbuilder(bool z) { _has_stringbuilder = z; }
640 bool has_boxed_value() const { return _has_boxed_value; }
641 void set_has_boxed_value(bool z) { _has_boxed_value = z; }
642 bool has_reserved_stack_access() const { return _has_reserved_stack_access; }
643 void set_has_reserved_stack_access(bool z) { _has_reserved_stack_access = z; }
644 int max_vector_size() const { return _max_vector_size; }
645 void set_max_vector_size(int s) { _max_vector_size = s; }
|
339 const bool _eliminate_boxing; // Do boxing elimination.
340 ciMethod* _method; // The method being compiled.
341 int _entry_bci; // entry bci for osr methods.
342 const TypeFunc* _tf; // My kind of signature
343 InlineTree* _ilt; // Ditto (temporary).
344 address _stub_function; // VM entry for stub being compiled, or NULL
345 const char* _stub_name; // Name of stub or adapter being compiled, or NULL
346 address _stub_entry_point; // Compile code entry for generated stub, or NULL
347
348 // Control of this compilation.
349 int _num_loop_opts; // Number of iterations for doing loop optimiztions
350 int _max_inline_size; // Max inline size for this compilation
351 int _freq_inline_size; // Max hot method inline size for this compilation
352 int _fixed_slots; // count of frame slots not allocated by the register
353 // allocator i.e. locks, original deopt pc, etc.
354 uintx _max_node_limit; // Max unique node count during a single compilation.
355 // For deopt
356 int _orig_pc_slot;
357 int _orig_pc_slot_offset_in_bytes;
358
359 bool _major_progress; // Flag to indicate that the compiler expects loop optimizations to happen.
360 // The following convention guides the usage of _major_progress:
361 // - The flag can be SET when the compiler is initialized because loop
362 // optimizations are expected to happen afterwards;
363 // - The flag can be SET/RESET in the scope of loop optimizations so that
364 // it is possible to check if loop optimizations made progress;
365 // - The flag cannot be SET/RESET by neither incremental inlining nor (I)GVN,
366 // even if the (I)GVN is performed in the scope of loop optimizations.
367 bool _inlining_progress; // progress doing incremental inlining?
368 bool _inlining_incrementally;// Are we doing incremental inlining (post parse)
369 bool _has_loops; // True if the method _may_ have some loops
370 bool _has_split_ifs; // True if the method _may_ have some split-if
371 bool _has_unsafe_access; // True if the method _may_ produce faults in unsafe loads or stores.
372 bool _has_stringbuilder; // True StringBuffers or StringBuilders are allocated
373 bool _has_boxed_value; // True if a boxed object is allocated
374 bool _has_reserved_stack_access; // True if the method or an inlined method is annotated with ReservedStackAccess
375 int _max_vector_size; // Maximum size of generated vectors
376 uint _trap_hist[trapHistLength]; // Cumulative traps
377 bool _trap_can_recompile; // Have we emitted a recompiling trap?
378 uint _decompile_count; // Cumulative decompilation counts.
379 bool _do_inlining; // True if we intend to do inlining
380 bool _do_scheduling; // True if we intend to do scheduling
381 bool _do_freq_based_layout; // True if we intend to do frequency based block layout
382 bool _do_count_invocations; // True if we generate code to count invocations
383 bool _do_method_data_update; // True if we generate code to update MethodData*s
384 bool _do_vector_loop; // True if allowed to execute loop in parallel iterations
385 bool _use_cmove; // True if CMove should be used without profitability analysis
386 bool _age_code; // True if we need to profile code age (decrement the aging counter)
606 /** Do aggressive boxing elimination. */
607 bool aggressive_unboxing() const { return _eliminate_boxing && AggressiveUnboxing; }
608 bool save_argument_registers() const { return _save_argument_registers; }
609
610
611 // Other fixed compilation parameters.
612 ciMethod* method() const { return _method; }
613 int entry_bci() const { return _entry_bci; }
614 bool is_osr_compilation() const { return _entry_bci != InvocationEntryBci; }
615 bool is_method_compilation() const { return (_method != NULL && !_method->flags().is_native()); }
616 const TypeFunc* tf() const { assert(_tf!=NULL, ""); return _tf; }
617 void init_tf(const TypeFunc* tf) { assert(_tf==NULL, ""); _tf = tf; }
618 InlineTree* ilt() const { return _ilt; }
619 address stub_function() const { return _stub_function; }
620 const char* stub_name() const { return _stub_name; }
621 address stub_entry_point() const { return _stub_entry_point; }
622
623 // Control of this compilation.
624 int fixed_slots() const { assert(_fixed_slots >= 0, ""); return _fixed_slots; }
625 void set_fixed_slots(int n) { _fixed_slots = n; }
626 bool major_progress() const { return _major_progress; }
627 void set_inlining_progress(bool z) { _inlining_progress = z; }
628 int inlining_progress() const { return _inlining_progress; }
629 void set_inlining_incrementally(bool z) { _inlining_incrementally = z; }
630 int inlining_incrementally() const { return _inlining_incrementally; }
631 void set_major_progress() { _major_progress = true; }
632 void clear_major_progress() { _major_progress = false; }
633 int num_loop_opts() const { return _num_loop_opts; }
634 void set_num_loop_opts(int n) { _num_loop_opts = n; }
635 int max_inline_size() const { return _max_inline_size; }
636 void set_freq_inline_size(int n) { _freq_inline_size = n; }
637 int freq_inline_size() const { return _freq_inline_size; }
638 void set_max_inline_size(int n) { _max_inline_size = n; }
639 bool has_loops() const { return _has_loops; }
640 void set_has_loops(bool z) { _has_loops = z; }
641 bool has_split_ifs() const { return _has_split_ifs; }
642 void set_has_split_ifs(bool z) { _has_split_ifs = z; }
643 bool has_unsafe_access() const { return _has_unsafe_access; }
644 void set_has_unsafe_access(bool z) { _has_unsafe_access = z; }
645 bool has_stringbuilder() const { return _has_stringbuilder; }
646 void set_has_stringbuilder(bool z) { _has_stringbuilder = z; }
647 bool has_boxed_value() const { return _has_boxed_value; }
648 void set_has_boxed_value(bool z) { _has_boxed_value = z; }
649 bool has_reserved_stack_access() const { return _has_reserved_stack_access; }
650 void set_has_reserved_stack_access(bool z) { _has_reserved_stack_access = z; }
651 int max_vector_size() const { return _max_vector_size; }
652 void set_max_vector_size(int s) { _max_vector_size = s; }
|