480 void merge_common(Block* target, int pnum);
481 // Helper functions for merging individual cells.
482 PhiNode *ensure_phi( int idx, bool nocreate = false);
483 PhiNode *ensure_memory_phi(int idx, bool nocreate = false);
484 // Helper to merge the current memory state into the given basic block
485 void merge_memory_edges(MergeMemNode* n, int pnum, bool nophi);
486
487 // Parse this bytecode, and alter the Parsers JVM->Node mapping
488 void do_one_bytecode();
489
490 // helper function to generate array store check
491 void array_store_check();
492 // Helper function to generate array load
493 void array_load(BasicType etype);
494 // Helper function to generate array store
495 void array_store(BasicType etype);
496 // Helper function to compute array addressing
497 Node* array_addressing(BasicType type, int vals, const Type*& elemtype);
498
499 void clinit_deopt();
500
501 // Pass current map to exits
502 void return_current(Node* value);
503
504 // Register finalizers on return from Object.<init>
505 void call_register_finalizer();
506
507 // Insert a compiler safepoint into the graph
508 void add_safepoint();
509
510 // Insert a compiler safepoint into the graph, if there is a back-branch.
511 void maybe_add_safepoint(int target_bci) {
512 if (target_bci <= bci()) {
513 add_safepoint();
514 }
515 }
516
517 // Note: Intrinsic generation routines may be found in library_call.cpp.
518
519 // Helper function to setup Ideal Call nodes
565 void adjust_map_after_if(BoolTest::mask btest, Node* c, float prob, Block* path);
566 void sharpen_type_after_if(BoolTest::mask btest,
567 Node* con, const Type* tcon,
568 Node* val, const Type* tval);
569 void maybe_add_predicate_after_if(Block* path);
570 IfNode* jump_if_fork_int(Node* a, Node* b, BoolTest::mask mask, float prob, float cnt);
571 void jump_if_true_fork(IfNode *ifNode, int dest_bci_if_true, bool unc);
572 void jump_if_false_fork(IfNode *ifNode, int dest_bci_if_false, bool unc);
573 void jump_if_always_fork(int dest_bci_if_true, bool unc);
574
575 friend class SwitchRange;
576 void do_tableswitch();
577 void do_lookupswitch();
578 void jump_switch_ranges(Node* a, SwitchRange* lo, SwitchRange* hi, int depth = 0);
579 bool create_jump_tables(Node* a, SwitchRange* lo, SwitchRange* hi);
580 void linear_search_switch_ranges(Node* key_val, SwitchRange*& lo, SwitchRange*& hi);
581
582 // helper function for call statistics
583 void count_compiled_calls(bool at_method_entry, bool is_inline) PRODUCT_RETURN;
584
585 Node_Notes* make_node_notes(Node_Notes* caller_nn);
586
587 // Helper functions for handling normal and abnormal exits.
588 void build_exits();
589
590 // Fix up all exceptional control flow exiting a single bytecode.
591 void do_exceptions();
592
593 // Fix up all exiting control flow at the end of the parse.
594 void do_exits();
595
596 // Add Catch/CatchProjs
597 // The call is either a Java call or the VM's rethrow stub
598 void catch_call_exceptions(ciExceptionHandlerStream&);
599
600 // Handle all exceptions thrown by the inlined method.
601 // Also handles exceptions for individual bytecodes.
602 void catch_inline_exceptions(SafePointNode* ex_map);
603
604 // Merge the given map into correct exceptional exit state.
|
480 void merge_common(Block* target, int pnum);
481 // Helper functions for merging individual cells.
482 PhiNode *ensure_phi( int idx, bool nocreate = false);
483 PhiNode *ensure_memory_phi(int idx, bool nocreate = false);
484 // Helper to merge the current memory state into the given basic block
485 void merge_memory_edges(MergeMemNode* n, int pnum, bool nophi);
486
487 // Parse this bytecode, and alter the Parsers JVM->Node mapping
488 void do_one_bytecode();
489
490 // helper function to generate array store check
491 void array_store_check();
492 // Helper function to generate array load
493 void array_load(BasicType etype);
494 // Helper function to generate array store
495 void array_store(BasicType etype);
496 // Helper function to compute array addressing
497 Node* array_addressing(BasicType type, int vals, const Type*& elemtype);
498
499 void clinit_deopt();
500 void clinit_barrier_on_inline();
501
502 // Pass current map to exits
503 void return_current(Node* value);
504
505 // Register finalizers on return from Object.<init>
506 void call_register_finalizer();
507
508 // Insert a compiler safepoint into the graph
509 void add_safepoint();
510
511 // Insert a compiler safepoint into the graph, if there is a back-branch.
512 void maybe_add_safepoint(int target_bci) {
513 if (target_bci <= bci()) {
514 add_safepoint();
515 }
516 }
517
518 // Note: Intrinsic generation routines may be found in library_call.cpp.
519
520 // Helper function to setup Ideal Call nodes
566 void adjust_map_after_if(BoolTest::mask btest, Node* c, float prob, Block* path);
567 void sharpen_type_after_if(BoolTest::mask btest,
568 Node* con, const Type* tcon,
569 Node* val, const Type* tval);
570 void maybe_add_predicate_after_if(Block* path);
571 IfNode* jump_if_fork_int(Node* a, Node* b, BoolTest::mask mask, float prob, float cnt);
572 void jump_if_true_fork(IfNode *ifNode, int dest_bci_if_true, bool unc);
573 void jump_if_false_fork(IfNode *ifNode, int dest_bci_if_false, bool unc);
574 void jump_if_always_fork(int dest_bci_if_true, bool unc);
575
576 friend class SwitchRange;
577 void do_tableswitch();
578 void do_lookupswitch();
579 void jump_switch_ranges(Node* a, SwitchRange* lo, SwitchRange* hi, int depth = 0);
580 bool create_jump_tables(Node* a, SwitchRange* lo, SwitchRange* hi);
581 void linear_search_switch_ranges(Node* key_val, SwitchRange*& lo, SwitchRange*& hi);
582
583 // helper function for call statistics
584 void count_compiled_calls(bool at_method_entry, bool is_inline) PRODUCT_RETURN;
585
586 // AOT compiled code invocations count
587 void count_aot_code_calls() NOT_CDS_RETURN;
588
589 Node_Notes* make_node_notes(Node_Notes* caller_nn);
590
591 // Helper functions for handling normal and abnormal exits.
592 void build_exits();
593
594 // Fix up all exceptional control flow exiting a single bytecode.
595 void do_exceptions();
596
597 // Fix up all exiting control flow at the end of the parse.
598 void do_exits();
599
600 // Add Catch/CatchProjs
601 // The call is either a Java call or the VM's rethrow stub
602 void catch_call_exceptions(ciExceptionHandlerStream&);
603
604 // Handle all exceptions thrown by the inlined method.
605 // Also handles exceptions for individual bytecodes.
606 void catch_inline_exceptions(SafePointNode* ex_map);
607
608 // Merge the given map into correct exceptional exit state.
|