341 // Jump-table
342 Constant add_jump_table(MachConstantNode* n);
343 void fill_jump_table(CodeBuffer& cb, MachConstantNode* n, GrowableArray<Label*> labels) const;
344 };
345
346 private:
347 // Fixed parameters to this compilation.
348 const int _compile_id;
349 const bool _save_argument_registers; // save/restore arg regs for trampolines
350 const bool _subsume_loads; // Load can be matched as part of a larger op.
351 const bool _do_escape_analysis; // Do escape analysis.
352 const bool _eliminate_boxing; // Do boxing elimination.
353 ciMethod* _method; // The method being compiled.
354 int _entry_bci; // entry bci for osr methods.
355 const TypeFunc* _tf; // My kind of signature
356 InlineTree* _ilt; // Ditto (temporary).
357 address _stub_function; // VM entry for stub being compiled, or NULL
358 const char* _stub_name; // Name of stub or adapter being compiled, or NULL
359 address _stub_entry_point; // Compile code entry for generated stub, or NULL
360
361 // Control of this compilation.
362 int _num_loop_opts; // Number of iterations for doing loop optimiztions
363 int _max_inline_size; // Max inline size for this compilation
364 int _freq_inline_size; // Max hot method inline size for this compilation
365 int _fixed_slots; // count of frame slots not allocated by the register
366 // allocator i.e. locks, original deopt pc, etc.
367 uintx _max_node_limit; // Max unique node count during a single compilation.
368 // For deopt
369 int _orig_pc_slot;
370 int _orig_pc_slot_offset_in_bytes;
371
372 int _major_progress; // Count of something big happening
373 bool _inlining_progress; // progress doing incremental inlining?
374 bool _inlining_incrementally;// Are we doing incremental inlining (post parse)
375 bool _has_loops; // True if the method _may_ have some loops
376 bool _has_split_ifs; // True if the method _may_ have some split-if
377 bool _has_unsafe_access; // True if the method _may_ produce faults in unsafe loads or stores.
378 bool _has_stringbuilder; // True StringBuffers or StringBuilders are allocated
379 bool _has_boxed_value; // True if a boxed object is allocated
|
341 // Jump-table
342 Constant add_jump_table(MachConstantNode* n);
343 void fill_jump_table(CodeBuffer& cb, MachConstantNode* n, GrowableArray<Label*> labels) const;
344 };
345
346 private:
347 // Fixed parameters to this compilation.
348 const int _compile_id;
349 const bool _save_argument_registers; // save/restore arg regs for trampolines
350 const bool _subsume_loads; // Load can be matched as part of a larger op.
351 const bool _do_escape_analysis; // Do escape analysis.
352 const bool _eliminate_boxing; // Do boxing elimination.
353 ciMethod* _method; // The method being compiled.
354 int _entry_bci; // entry bci for osr methods.
355 const TypeFunc* _tf; // My kind of signature
356 InlineTree* _ilt; // Ditto (temporary).
357 address _stub_function; // VM entry for stub being compiled, or NULL
358 const char* _stub_name; // Name of stub or adapter being compiled, or NULL
359 address _stub_entry_point; // Compile code entry for generated stub, or NULL
360
361 // For GC
362 void* _barrier_set_state;
363
364 // Control of this compilation.
365 int _num_loop_opts; // Number of iterations for doing loop optimiztions
366 int _max_inline_size; // Max inline size for this compilation
367 int _freq_inline_size; // Max hot method inline size for this compilation
368 int _fixed_slots; // count of frame slots not allocated by the register
369 // allocator i.e. locks, original deopt pc, etc.
370 uintx _max_node_limit; // Max unique node count during a single compilation.
371 // For deopt
372 int _orig_pc_slot;
373 int _orig_pc_slot_offset_in_bytes;
374
375 int _major_progress; // Count of something big happening
376 bool _inlining_progress; // progress doing incremental inlining?
377 bool _inlining_incrementally;// Are we doing incremental inlining (post parse)
378 bool _has_loops; // True if the method _may_ have some loops
379 bool _has_split_ifs; // True if the method _may_ have some split-if
380 bool _has_unsafe_access; // True if the method _may_ produce faults in unsafe loads or stores.
381 bool _has_stringbuilder; // True StringBuffers or StringBuilders are allocated
382 bool _has_boxed_value; // True if a boxed object is allocated
|
512 void cleanup_expensive_nodes(PhaseIterGVN &igvn);
513 // Use for sorting expensive nodes to bring similar nodes together
514 static int cmp_expensive_nodes(Node** n1, Node** n2);
515 // Expensive nodes list already sorted?
516 bool expensive_nodes_sorted() const;
517 // Remove the speculative part of types and clean up the graph
518 void remove_speculative_types(PhaseIterGVN &igvn);
519
520 void* _replay_inline_data; // Pointer to data loaded from file
521
522 void print_inlining_init();
523 void print_inlining_reinit();
524 void print_inlining_commit();
525 void print_inlining_push();
526 PrintInliningBuffer& print_inlining_current();
527
528 void log_late_inline_failure(CallGenerator* cg, const char* msg);
529
530 public:
531
532 outputStream* print_inlining_stream() const {
533 assert(print_inlining() || print_intrinsics(), "PrintInlining off?");
534 return _print_inlining_stream;
535 }
536
537 void print_inlining_update(CallGenerator* cg);
538 void print_inlining_update_delayed(CallGenerator* cg);
539 void print_inlining_move_to(CallGenerator* cg);
540 void print_inlining_assert_ready();
541 void print_inlining_reset();
542
543 void print_inlining(ciMethod* method, int inline_level, int bci, const char* msg = NULL) {
544 stringStream ss;
545 CompileTask::print_inlining_inner(&ss, method, inline_level, bci, msg);
546 print_inlining_stream()->print("%s", ss.as_string());
547 }
548
549 #ifndef PRODUCT
550 IdealGraphPrinter* printer() { return _printer; }
|
515 void cleanup_expensive_nodes(PhaseIterGVN &igvn);
516 // Use for sorting expensive nodes to bring similar nodes together
517 static int cmp_expensive_nodes(Node** n1, Node** n2);
518 // Expensive nodes list already sorted?
519 bool expensive_nodes_sorted() const;
520 // Remove the speculative part of types and clean up the graph
521 void remove_speculative_types(PhaseIterGVN &igvn);
522
523 void* _replay_inline_data; // Pointer to data loaded from file
524
525 void print_inlining_init();
526 void print_inlining_reinit();
527 void print_inlining_commit();
528 void print_inlining_push();
529 PrintInliningBuffer& print_inlining_current();
530
531 void log_late_inline_failure(CallGenerator* cg, const char* msg);
532
533 public:
534
535 void* barrier_set_state() const { return _barrier_set_state; }
536
537 outputStream* print_inlining_stream() const {
538 assert(print_inlining() || print_intrinsics(), "PrintInlining off?");
539 return _print_inlining_stream;
540 }
541
542 void print_inlining_update(CallGenerator* cg);
543 void print_inlining_update_delayed(CallGenerator* cg);
544 void print_inlining_move_to(CallGenerator* cg);
545 void print_inlining_assert_ready();
546 void print_inlining_reset();
547
548 void print_inlining(ciMethod* method, int inline_level, int bci, const char* msg = NULL) {
549 stringStream ss;
550 CompileTask::print_inlining_inner(&ss, method, inline_level, bci, msg);
551 print_inlining_stream()->print("%s", ss.as_string());
552 }
553
554 #ifndef PRODUCT
555 IdealGraphPrinter* printer() { return _printer; }
|
1331 // Definitions of pd methods
1332 static void pd_compiler2_init();
1333
1334 // Static parse-time type checking logic for gen_subtype_check:
1335 enum { SSC_always_false, SSC_always_true, SSC_easy_test, SSC_full_test };
1336 int static_subtype_check(ciKlass* superk, ciKlass* subk);
1337
1338 static Node* conv_I2X_index(PhaseGVN* phase, Node* offset, const TypeInt* sizetype,
1339 // Optional control dependency (for example, on range check)
1340 Node* ctrl = NULL);
1341
1342 // Convert integer value to a narrowed long type dependent on ctrl (for example, a range check)
1343 static Node* constrained_convI2L(PhaseGVN* phase, Node* value, const TypeInt* itype, Node* ctrl);
1344
1345 // Auxiliary method for randomized fuzzing/stressing
1346 static bool randomized_select(int count);
1347
1348 // supporting clone_map
1349 CloneMap& clone_map();
1350 void set_clone_map(Dict* d);
1351
1352 };
1353
1354 #endif // SHARE_VM_OPTO_COMPILE_HPP
|
1336 // Definitions of pd methods
1337 static void pd_compiler2_init();
1338
1339 // Static parse-time type checking logic for gen_subtype_check:
1340 enum { SSC_always_false, SSC_always_true, SSC_easy_test, SSC_full_test };
1341 int static_subtype_check(ciKlass* superk, ciKlass* subk);
1342
1343 static Node* conv_I2X_index(PhaseGVN* phase, Node* offset, const TypeInt* sizetype,
1344 // Optional control dependency (for example, on range check)
1345 Node* ctrl = NULL);
1346
1347 // Convert integer value to a narrowed long type dependent on ctrl (for example, a range check)
1348 static Node* constrained_convI2L(PhaseGVN* phase, Node* value, const TypeInt* itype, Node* ctrl);
1349
1350 // Auxiliary method for randomized fuzzing/stressing
1351 static bool randomized_select(int count);
1352
1353 // supporting clone_map
1354 CloneMap& clone_map();
1355 void set_clone_map(Dict* d);
1356 };
1357
1358 #endif // SHARE_VM_OPTO_COMPILE_HPP
|