Mercurial > hg > truffle
comparison src/share/vm/code/nmethod.cpp @ 14172:cd22c8dbda4f
Made graph caching compilation local
author | Doug Simon <doug.simon@oracle.com> |
---|---|
date | Thu, 13 Mar 2014 15:36:30 +0100 |
parents | 5a9afbf72714 |
children | 29ccc4cbabca |
comparison
equal
deleted
inserted
replaced
14171:8c0e92c8c45b | 14172:cd22c8dbda4f |
---|---|
621 CodeBuffer* code_buffer, int frame_size, | 621 CodeBuffer* code_buffer, int frame_size, |
622 OopMapSet* oop_maps, | 622 OopMapSet* oop_maps, |
623 ExceptionHandlerTable* handler_table, | 623 ExceptionHandlerTable* handler_table, |
624 ImplicitExceptionTable* nul_chk_table, | 624 ImplicitExceptionTable* nul_chk_table, |
625 AbstractCompiler* compiler, | 625 AbstractCompiler* compiler, |
626 int comp_level, | 626 int comp_level |
627 GrowableArray<jlong>* leaf_graph_ids | |
628 #ifdef GRAAL | 627 #ifdef GRAAL |
629 , Handle installed_code, | 628 , Handle installed_code, |
630 Handle speculationLog | 629 Handle speculationLog |
631 #endif | 630 #endif |
632 ) | 631 ) |
633 { | 632 { |
634 assert(debug_info->oop_recorder() == code_buffer->oop_recorder(), "shared OR"); | 633 assert(debug_info->oop_recorder() == code_buffer->oop_recorder(), "shared OR"); |
635 code_buffer->finalize_oop_references(method); | 634 code_buffer->finalize_oop_references(method); |
636 int leaf_graph_ids_size = leaf_graph_ids == NULL ? 0 : round_to(sizeof(jlong) * leaf_graph_ids->length(), oopSize); | |
637 // create nmethod | 635 // create nmethod |
638 nmethod* nm = NULL; | 636 nmethod* nm = NULL; |
639 { MutexLockerEx mu(CodeCache_lock, Mutex::_no_safepoint_check_flag); | 637 { MutexLockerEx mu(CodeCache_lock, Mutex::_no_safepoint_check_flag); |
640 int nmethod_size = | 638 int nmethod_size = |
641 allocation_size(code_buffer, sizeof(nmethod)) | 639 allocation_size(code_buffer, sizeof(nmethod)) |
642 + adjust_pcs_size(debug_info->pcs_size()) | 640 + adjust_pcs_size(debug_info->pcs_size()) |
643 + round_to(dependencies->size_in_bytes() , oopSize) | 641 + round_to(dependencies->size_in_bytes() , oopSize) |
644 + round_to(handler_table->size_in_bytes(), oopSize) | 642 + round_to(handler_table->size_in_bytes(), oopSize) |
645 + round_to(nul_chk_table->size_in_bytes(), oopSize) | 643 + round_to(nul_chk_table->size_in_bytes(), oopSize) |
646 + round_to(debug_info->data_size() , oopSize) | 644 + round_to(debug_info->data_size() , oopSize); |
647 + leaf_graph_ids_size; | |
648 nm = new (nmethod_size) | 645 nm = new (nmethod_size) |
649 nmethod(method(), nmethod_size, compile_id, entry_bci, offsets, | 646 nmethod(method(), nmethod_size, compile_id, entry_bci, offsets, |
650 orig_pc_offset, debug_info, dependencies, code_buffer, frame_size, | 647 orig_pc_offset, debug_info, dependencies, code_buffer, frame_size, |
651 oop_maps, | 648 oop_maps, |
652 handler_table, | 649 handler_table, |
653 nul_chk_table, | 650 nul_chk_table, |
654 compiler, | 651 compiler, |
655 comp_level, | 652 comp_level |
656 leaf_graph_ids | |
657 #ifdef GRAAL | 653 #ifdef GRAAL |
658 , installed_code, | 654 , installed_code, |
659 speculationLog | 655 speculationLog |
660 #endif | 656 #endif |
661 ); | 657 ); |
731 _scopes_data_offset = _metadata_offset + round_to(code_buffer->total_metadata_size(), wordSize); | 727 _scopes_data_offset = _metadata_offset + round_to(code_buffer->total_metadata_size(), wordSize); |
732 _scopes_pcs_offset = _scopes_data_offset; | 728 _scopes_pcs_offset = _scopes_data_offset; |
733 _dependencies_offset = _scopes_pcs_offset; | 729 _dependencies_offset = _scopes_pcs_offset; |
734 _handler_table_offset = _dependencies_offset; | 730 _handler_table_offset = _dependencies_offset; |
735 _nul_chk_table_offset = _handler_table_offset; | 731 _nul_chk_table_offset = _handler_table_offset; |
736 _leaf_graph_ids_offset = _nul_chk_table_offset; | 732 _nmethod_end_offset = _nul_chk_table_offset; |
737 _nmethod_end_offset = _leaf_graph_ids_offset; | |
738 _compile_id = compile_id; | 733 _compile_id = compile_id; |
739 _comp_level = CompLevel_none; | 734 _comp_level = CompLevel_none; |
740 _entry_point = code_begin() + offsets->value(CodeOffsets::Entry); | 735 _entry_point = code_begin() + offsets->value(CodeOffsets::Entry); |
741 _verified_entry_point = code_begin() + offsets->value(CodeOffsets::Verified_Entry); | 736 _verified_entry_point = code_begin() + offsets->value(CodeOffsets::Verified_Entry); |
742 _osr_entry_point = NULL; | 737 _osr_entry_point = NULL; |
879 int frame_size, | 874 int frame_size, |
880 OopMapSet* oop_maps, | 875 OopMapSet* oop_maps, |
881 ExceptionHandlerTable* handler_table, | 876 ExceptionHandlerTable* handler_table, |
882 ImplicitExceptionTable* nul_chk_table, | 877 ImplicitExceptionTable* nul_chk_table, |
883 AbstractCompiler* compiler, | 878 AbstractCompiler* compiler, |
884 int comp_level, | 879 int comp_level |
885 GrowableArray<jlong>* leaf_graph_ids | |
886 #ifdef GRAAL | 880 #ifdef GRAAL |
887 , Handle installed_code, | 881 , Handle installed_code, |
888 Handle speculation_log | 882 Handle speculation_log |
889 #endif | 883 #endif |
890 ) | 884 ) |
949 _unwind_handler_offset = code_offset() + offsets->value(CodeOffsets::UnwindHandler); | 943 _unwind_handler_offset = code_offset() + offsets->value(CodeOffsets::UnwindHandler); |
950 } else { | 944 } else { |
951 _unwind_handler_offset = -1; | 945 _unwind_handler_offset = -1; |
952 } | 946 } |
953 | 947 |
954 int leaf_graph_ids_size = leaf_graph_ids == NULL ? 0 : round_to(sizeof(jlong) * leaf_graph_ids->length(), oopSize); | |
955 | |
956 _oops_offset = data_offset(); | 948 _oops_offset = data_offset(); |
957 _metadata_offset = _oops_offset + round_to(code_buffer->total_oop_size(), oopSize); | 949 _metadata_offset = _oops_offset + round_to(code_buffer->total_oop_size(), oopSize); |
958 _scopes_data_offset = _metadata_offset + round_to(code_buffer->total_metadata_size(), wordSize); | 950 _scopes_data_offset = _metadata_offset + round_to(code_buffer->total_metadata_size(), wordSize); |
959 | 951 |
960 _scopes_pcs_offset = _scopes_data_offset + round_to(debug_info->data_size (), oopSize); | 952 _scopes_pcs_offset = _scopes_data_offset + round_to(debug_info->data_size (), oopSize); |
961 _dependencies_offset = _scopes_pcs_offset + adjust_pcs_size(debug_info->pcs_size()); | 953 _dependencies_offset = _scopes_pcs_offset + adjust_pcs_size(debug_info->pcs_size()); |
962 _handler_table_offset = _dependencies_offset + round_to(dependencies->size_in_bytes (), oopSize); | 954 _handler_table_offset = _dependencies_offset + round_to(dependencies->size_in_bytes (), oopSize); |
963 _nul_chk_table_offset = _handler_table_offset + round_to(handler_table->size_in_bytes(), oopSize); | 955 _nul_chk_table_offset = _handler_table_offset + round_to(handler_table->size_in_bytes(), oopSize); |
964 _leaf_graph_ids_offset = _nul_chk_table_offset + round_to(nul_chk_table->size_in_bytes(), oopSize); | 956 _nmethod_end_offset = _nul_chk_table_offset + round_to(nul_chk_table->size_in_bytes(), oopSize); |
965 _nmethod_end_offset = _leaf_graph_ids_offset + leaf_graph_ids_size; | |
966 | 957 |
967 _entry_point = code_begin() + offsets->value(CodeOffsets::Entry); | 958 _entry_point = code_begin() + offsets->value(CodeOffsets::Entry); |
968 _verified_entry_point = code_begin() + offsets->value(CodeOffsets::Verified_Entry); | 959 _verified_entry_point = code_begin() + offsets->value(CodeOffsets::Verified_Entry); |
969 _osr_entry_point = code_begin() + offsets->value(CodeOffsets::OSR_Entry); | 960 _osr_entry_point = code_begin() + offsets->value(CodeOffsets::OSR_Entry); |
970 _exception_cache = NULL; | 961 _exception_cache = NULL; |
983 CodeCache::commit(this); | 974 CodeCache::commit(this); |
984 | 975 |
985 // Copy contents of ExceptionHandlerTable to nmethod | 976 // Copy contents of ExceptionHandlerTable to nmethod |
986 handler_table->copy_to(this); | 977 handler_table->copy_to(this); |
987 nul_chk_table->copy_to(this); | 978 nul_chk_table->copy_to(this); |
988 | |
989 if (leaf_graph_ids != NULL && leaf_graph_ids_size > 0) { | |
990 memcpy(leaf_graph_ids_begin(), leaf_graph_ids->adr_at(0), leaf_graph_ids_size); | |
991 } | |
992 | 979 |
993 // we use the information of entry points to find out if a method is | 980 // we use the information of entry points to find out if a method is |
994 // static or non static | 981 // static or non static |
995 assert(compiler->is_c2() || compiler->is_graal() || | 982 assert(compiler->is_c2() || compiler->is_graal() || |
996 _method->is_static() == (entry_point() == _verified_entry_point), | 983 _method->is_static() == (entry_point() == _verified_entry_point), |