302 bool _has_unsafe_access; // True if the method _may_ produce faults in unsafe loads or stores.
303 bool _has_stringbuilder; // True StringBuffers or StringBuilders are allocated
304 bool _has_boxed_value; // True if a boxed object is allocated
305 int _max_vector_size; // Maximum size of generated vectors
306 uint _trap_hist[trapHistLength]; // Cumulative traps
307 bool _trap_can_recompile; // Have we emitted a recompiling trap?
308 uint _decompile_count; // Cumulative decompilation counts.
309 bool _do_inlining; // True if we intend to do inlining
310 bool _do_scheduling; // True if we intend to do scheduling
311 bool _do_freq_based_layout; // True if we intend to do frequency based block layout
312 bool _do_count_invocations; // True if we generate code to count invocations
313 bool _do_method_data_update; // True if we generate code to update MethodData*s
314 int _AliasLevel; // Locally-adjusted version of AliasLevel flag.
315 bool _print_assembly; // True if we should dump assembly code for this compilation
316 bool _print_inlining; // True if we should print inlining for this compilation
317 bool _print_intrinsics; // True if we should print intrinsics for this compilation
318 #ifndef PRODUCT
319 bool _trace_opto_output;
320 bool _parsed_irreducible_loop; // True if ciTypeFlow detected irreducible loops during parsing
321 #endif
322
323 // JSR 292
324 bool _has_method_handle_invokes; // True if this method has MethodHandle invokes.
325
326 // Compilation environment.
327 Arena _comp_arena; // Arena with lifetime equivalent to Compile
328 ciEnv* _env; // CI interface
329 CompileLog* _log; // from CompilerThread
330 const char* _failure_reason; // for record_failure/failing pattern
331 GrowableArray<CallGenerator*>* _intrinsics; // List of intrinsics.
332 GrowableArray<Node*>* _macro_nodes; // List of nodes which need to be expanded before matching.
333 GrowableArray<Node*>* _predicate_opaqs; // List of Opaque1 nodes for the loop predicates.
334 GrowableArray<Node*>* _expensive_nodes; // List of nodes that are expensive to compute and that we'd better not let the GVN freely common
335 ConnectionGraph* _congraph;
336 #ifndef PRODUCT
337 IdealGraphPrinter* _printer;
338 #endif
339
340
341 // Node management
342 uint _unique; // Counter for unique Node indices
343 VectorSet _dead_node_list; // Set of dead nodes
344 uint _dead_node_count; // Number of dead nodes; VectorSet::Size() is O(N).
574 uint decompile_count() const { return _decompile_count; }
575 void set_decompile_count(uint c) { _decompile_count = c; }
576 bool allow_range_check_smearing() const;
577 bool do_inlining() const { return _do_inlining; }
578 void set_do_inlining(bool z) { _do_inlining = z; }
579 bool do_scheduling() const { return _do_scheduling; }
580 void set_do_scheduling(bool z) { _do_scheduling = z; }
581 bool do_freq_based_layout() const{ return _do_freq_based_layout; }
582 void set_do_freq_based_layout(bool z){ _do_freq_based_layout = z; }
583 bool do_count_invocations() const{ return _do_count_invocations; }
584 void set_do_count_invocations(bool z){ _do_count_invocations = z; }
585 bool do_method_data_update() const { return _do_method_data_update; }
586 void set_do_method_data_update(bool z) { _do_method_data_update = z; }
587 int AliasLevel() const { return _AliasLevel; }
588 bool print_assembly() const { return _print_assembly; }
589 void set_print_assembly(bool z) { _print_assembly = z; }
590 bool print_inlining() const { return _print_inlining; }
591 void set_print_inlining(bool z) { _print_inlining = z; }
592 bool print_intrinsics() const { return _print_intrinsics; }
593 void set_print_intrinsics(bool z) { _print_intrinsics = z; }
594 // check the CompilerOracle for special behaviours for this compile
595 bool method_has_option(const char * option) {
596 return method() != NULL && method()->has_option(option);
597 }
598 #ifndef PRODUCT
599 bool trace_opto_output() const { return _trace_opto_output; }
600 bool parsed_irreducible_loop() const { return _parsed_irreducible_loop; }
601 void set_parsed_irreducible_loop(bool z) { _parsed_irreducible_loop = z; }
602 #endif
603
604 // JSR 292
605 bool has_method_handle_invokes() const { return _has_method_handle_invokes; }
606 void set_has_method_handle_invokes(bool z) { _has_method_handle_invokes = z; }
607
608 Ticks _latest_stage_start_counter;
609
610 void begin_method() {
611 #ifndef PRODUCT
612 if (_printer) _printer->begin_method(this);
613 #endif
|
302 bool _has_unsafe_access; // True if the method _may_ produce faults in unsafe loads or stores.
303 bool _has_stringbuilder; // True StringBuffers or StringBuilders are allocated
304 bool _has_boxed_value; // True if a boxed object is allocated
305 int _max_vector_size; // Maximum size of generated vectors
306 uint _trap_hist[trapHistLength]; // Cumulative traps
307 bool _trap_can_recompile; // Have we emitted a recompiling trap?
308 uint _decompile_count; // Cumulative decompilation counts.
309 bool _do_inlining; // True if we intend to do inlining
310 bool _do_scheduling; // True if we intend to do scheduling
311 bool _do_freq_based_layout; // True if we intend to do frequency based block layout
312 bool _do_count_invocations; // True if we generate code to count invocations
313 bool _do_method_data_update; // True if we generate code to update MethodData*s
314 int _AliasLevel; // Locally-adjusted version of AliasLevel flag.
315 bool _print_assembly; // True if we should dump assembly code for this compilation
316 bool _print_inlining; // True if we should print inlining for this compilation
317 bool _print_intrinsics; // True if we should print intrinsics for this compilation
318 #ifndef PRODUCT
319 bool _trace_opto_output;
320 bool _parsed_irreducible_loop; // True if ciTypeFlow detected irreducible loops during parsing
321 #endif
322 // JSR 292
323 bool _has_method_handle_invokes; // True if this method has MethodHandle invokes.
324 RTMState _rtm_state; // State of Restricted Transactional Memory usage
325
326 // Compilation environment.
327 Arena _comp_arena; // Arena with lifetime equivalent to Compile
328 ciEnv* _env; // CI interface
329 CompileLog* _log; // from CompilerThread
330 const char* _failure_reason; // for record_failure/failing pattern
331 GrowableArray<CallGenerator*>* _intrinsics; // List of intrinsics.
332 GrowableArray<Node*>* _macro_nodes; // List of nodes which need to be expanded before matching.
333 GrowableArray<Node*>* _predicate_opaqs; // List of Opaque1 nodes for the loop predicates.
334 GrowableArray<Node*>* _expensive_nodes; // List of nodes that are expensive to compute and that we'd better not let the GVN freely common
335 ConnectionGraph* _congraph;
336 #ifndef PRODUCT
337 IdealGraphPrinter* _printer;
338 #endif
339
340
341 // Node management
342 uint _unique; // Counter for unique Node indices
343 VectorSet _dead_node_list; // Set of dead nodes
344 uint _dead_node_count; // Number of dead nodes; VectorSet::Size() is O(N).
574 uint decompile_count() const { return _decompile_count; }
575 void set_decompile_count(uint c) { _decompile_count = c; }
576 bool allow_range_check_smearing() const;
577 bool do_inlining() const { return _do_inlining; }
578 void set_do_inlining(bool z) { _do_inlining = z; }
579 bool do_scheduling() const { return _do_scheduling; }
580 void set_do_scheduling(bool z) { _do_scheduling = z; }
581 bool do_freq_based_layout() const{ return _do_freq_based_layout; }
582 void set_do_freq_based_layout(bool z){ _do_freq_based_layout = z; }
583 bool do_count_invocations() const{ return _do_count_invocations; }
584 void set_do_count_invocations(bool z){ _do_count_invocations = z; }
585 bool do_method_data_update() const { return _do_method_data_update; }
586 void set_do_method_data_update(bool z) { _do_method_data_update = z; }
587 int AliasLevel() const { return _AliasLevel; }
588 bool print_assembly() const { return _print_assembly; }
589 void set_print_assembly(bool z) { _print_assembly = z; }
590 bool print_inlining() const { return _print_inlining; }
591 void set_print_inlining(bool z) { _print_inlining = z; }
592 bool print_intrinsics() const { return _print_intrinsics; }
593 void set_print_intrinsics(bool z) { _print_intrinsics = z; }
594 RTMState rtm_state() const { return _rtm_state; }
595 void set_rtm_state(RTMState s) { _rtm_state = s; }
596 bool use_rtm() const { return (_rtm_state & NoRTM) == 0; }
597 bool profile_rtm() const { return _rtm_state == ProfileRTM; }
598 // check the CompilerOracle for special behaviours for this compile
599 bool method_has_option(const char * option) {
600 return method() != NULL && method()->has_option(option);
601 }
602 #ifndef PRODUCT
603 bool trace_opto_output() const { return _trace_opto_output; }
604 bool parsed_irreducible_loop() const { return _parsed_irreducible_loop; }
605 void set_parsed_irreducible_loop(bool z) { _parsed_irreducible_loop = z; }
606 #endif
607
608 // JSR 292
609 bool has_method_handle_invokes() const { return _has_method_handle_invokes; }
610 void set_has_method_handle_invokes(bool z) { _has_method_handle_invokes = z; }
611
612 Ticks _latest_stage_start_counter;
613
614 void begin_method() {
615 #ifndef PRODUCT
616 if (_printer) _printer->begin_method(this);
617 #endif
|