535 Node* expand_multianewarray(ciArrayKlass* array_klass, Node* *lengths, int ndimensions, int nargs); 536 537 // implementation of jsr/ret 538 void do_jsr(); 539 void do_ret(); 540 541 float dynamic_branch_prediction(float &cnt, BoolTest::mask btest, Node* test); 542 float branch_prediction(float &cnt, BoolTest::mask btest, int target_bci, Node* test); 543 bool seems_never_taken(float prob) const; 544 bool path_is_suitable_for_uncommon_trap(float prob) const; 545 bool seems_stable_comparison() const; 546 547 void do_ifnull(BoolTest::mask btest, Node* c); 548 void do_if(BoolTest::mask btest, Node* c); 549 int repush_if_args(); 550 void adjust_map_after_if(BoolTest::mask btest, Node* c, float prob, 551 Block* path, Block* other_path); 552 void sharpen_type_after_if(BoolTest::mask btest, 553 Node* con, const Type* tcon, 554 Node* val, const Type* tval); 555 IfNode* jump_if_fork_int(Node* a, Node* b, BoolTest::mask mask); 556 Node* jump_if_join(Node* iffalse, Node* iftrue); 557 void jump_if_true_fork(IfNode *ifNode, int dest_bci_if_true, int prof_table_index); 558 void jump_if_false_fork(IfNode *ifNode, int dest_bci_if_false, int prof_table_index); 559 void jump_if_always_fork(int dest_bci_if_true, int prof_table_index); 560 561 friend class SwitchRange; 562 void do_tableswitch(); 563 void do_lookupswitch(); 564 void jump_switch_ranges(Node* a, SwitchRange* lo, SwitchRange* hi, int depth = 0); 565 bool create_jump_tables(Node* a, SwitchRange* lo, SwitchRange* hi); 566 567 void decrement_age(); 568 // helper functions for methodData style profiling 569 void test_counter_against_threshold(Node* cnt, int limit); 570 void increment_and_test_invocation_counter(int limit); 571 void test_for_osr_md_counter_at(ciMethodData* md, ciProfileData* data, ByteSize offset, int limit); 572 Node* method_data_addressing(ciMethodData* md, ciProfileData* data, ByteSize offset, Node* idx = NULL, uint stride = 0); 573 void increment_md_counter_at(ciMethodData* md, ciProfileData* data, ByteSize offset, Node* idx = NULL, uint stride = 0); 574 void set_md_flag_at(ciMethodData* md, ciProfileData* data, int flag_constant); 575 576 void profile_method_entry(); 577 void profile_taken_branch(int target_bci, bool force_update = false); 578 void profile_not_taken_branch(bool force_update = false); 579 void profile_call(Node* receiver); 580 void profile_generic_call(); 581 void profile_receiver_type(Node* receiver); 582 void profile_ret(int target_bci); 583 void profile_null_checkcast(); 584 void profile_switch_case(int table_index); 585 | 535 Node* expand_multianewarray(ciArrayKlass* array_klass, Node* *lengths, int ndimensions, int nargs); 536 537 // implementation of jsr/ret 538 void do_jsr(); 539 void do_ret(); 540 541 float dynamic_branch_prediction(float &cnt, BoolTest::mask btest, Node* test); 542 float branch_prediction(float &cnt, BoolTest::mask btest, int target_bci, Node* test); 543 bool seems_never_taken(float prob) const; 544 bool path_is_suitable_for_uncommon_trap(float prob) const; 545 bool seems_stable_comparison() const; 546 547 void do_ifnull(BoolTest::mask btest, Node* c); 548 void do_if(BoolTest::mask btest, Node* c); 549 int repush_if_args(); 550 void adjust_map_after_if(BoolTest::mask btest, Node* c, float prob, 551 Block* path, Block* other_path); 552 void sharpen_type_after_if(BoolTest::mask btest, 553 Node* con, const Type* tcon, 554 Node* val, const Type* tval); 555 IfNode* jump_if_fork_int(Node* a, Node* b, BoolTest::mask mask, float prob, float cnt); 556 Node* jump_if_join(Node* iffalse, Node* iftrue); 557 void jump_if_true_fork(IfNode *ifNode, int dest_bci_if_true, int prof_table_index, bool unc); 558 void jump_if_false_fork(IfNode *ifNode, int dest_bci_if_false, int prof_table_index, bool unc); 559 void jump_if_always_fork(int dest_bci_if_true, int prof_table_index, bool unc); 560 561 friend class SwitchRange; 562 void do_tableswitch(); 563 void do_lookupswitch(); 564 void jump_switch_ranges(Node* a, SwitchRange* lo, SwitchRange* hi, int depth = 0); 565 bool create_jump_tables(Node* a, SwitchRange* lo, SwitchRange* hi); 566 void linear_search_switch_ranges(Node* key_val, SwitchRange*& lo, SwitchRange*& hi); 567 568 void decrement_age(); 569 // helper functions for methodData style profiling 570 void test_counter_against_threshold(Node* cnt, int limit); 571 void increment_and_test_invocation_counter(int limit); 572 void test_for_osr_md_counter_at(ciMethodData* md, ciProfileData* data, ByteSize offset, int limit); 573 Node* method_data_addressing(ciMethodData* md, ciProfileData* data, ByteSize offset, Node* idx = NULL, uint stride = 0); 574 void increment_md_counter_at(ciMethodData* md, ciProfileData* data, ByteSize offset, Node* idx = NULL, uint stride = 0); 575 void set_md_flag_at(ciMethodData* md, ciProfileData* data, int flag_constant); 576 577 void profile_method_entry(); 578 void profile_taken_branch(int target_bci, bool force_update = false); 579 void profile_not_taken_branch(bool force_update = false); 580 void profile_call(Node* receiver); 581 void profile_generic_call(); 582 void profile_receiver_type(Node* receiver); 583 void profile_ret(int target_bci); 584 void profile_null_checkcast(); 585 void profile_switch_case(int table_index); 586 |