20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 *
23 */
24
25 #include "precompiled.hpp"
26 #include "classfile/systemDictionary.hpp"
27 #include "code/codeCache.hpp"
28 #include "code/debugInfoRec.hpp"
29 #include "code/nmethod.hpp"
30 #include "code/pcDesc.hpp"
31 #include "code/scopeDesc.hpp"
32 #include "interpreter/bytecode.hpp"
33 #include "interpreter/interpreter.hpp"
34 #include "interpreter/oopMapCache.hpp"
35 #include "memory/allocation.inline.hpp"
36 #include "memory/oopFactory.hpp"
37 #include "memory/resourceArea.hpp"
38 #include "oops/method.hpp"
39 #include "oops/oop.inline.hpp"
40 #include "oops/verifyOopClosure.hpp"
41 #include "prims/jvmtiThreadState.hpp"
42 #include "runtime/biasedLocking.hpp"
43 #include "runtime/compilationPolicy.hpp"
44 #include "runtime/deoptimization.hpp"
45 #include "runtime/interfaceSupport.hpp"
46 #include "runtime/sharedRuntime.hpp"
47 #include "runtime/signature.hpp"
48 #include "runtime/stubRoutines.hpp"
49 #include "runtime/thread.hpp"
50 #include "runtime/vframe.hpp"
51 #include "runtime/vframeArray.hpp"
52 #include "runtime/vframe_hp.hpp"
53 #include "utilities/events.hpp"
54 #include "utilities/xmlstream.hpp"
55
56 PRAGMA_FORMAT_MUTE_WARNINGS_FOR_GCC
57
58 bool DeoptimizationMarker::_is_active = false;
59
60 Deoptimization::UnrollBlock::UnrollBlock(int size_of_deoptimized_frame,
61 int caller_adjustment,
62 int caller_actual_parameters,
63 int number_of_frames,
64 intptr_t* frame_sizes,
65 address* frame_pcs,
66 BasicType return_type) {
67 _size_of_deoptimized_frame = size_of_deoptimized_frame;
68 _caller_adjustment = caller_adjustment;
69 _caller_actual_parameters = caller_actual_parameters;
70 _number_of_frames = number_of_frames;
71 _frame_sizes = frame_sizes;
72 _frame_pcs = frame_pcs;
73 _register_block = NEW_C_HEAP_ARRAY(intptr_t, RegisterMap::reg_count * 2, mtCompiler);
74 _return_type = return_type;
75 _initial_info = 0;
76 // PD (x86 only)
77 _counter_temp = 0;
115 tty->print("%d ", frame_sizes()[index]);
116 }
117 tty->cr();
118 }
119
120
121 // In order to make fetch_unroll_info work properly with escape
122 // analysis, The method was changed from JRT_LEAF to JRT_BLOCK_ENTRY and
123 // ResetNoHandleMark and HandleMark were removed from it. The actual reallocation
124 // of previously eliminated objects occurs in realloc_objects, which is
125 // called from the method fetch_unroll_info_helper below.
126 JRT_BLOCK_ENTRY(Deoptimization::UnrollBlock*, Deoptimization::fetch_unroll_info(JavaThread* thread))
127 // It is actually ok to allocate handles in a leaf method. It causes no safepoints,
128 // but makes the entry a little slower. There is however a little dance we have to
129 // do in debug mode to get around the NoHandleMark code in the JRT_LEAF macro
130
131 // fetch_unroll_info() is called at the beginning of the deoptimization
132 // handler. Note this fact before we start generating temporary frames
133 // that can confuse an asynchronous stack walker. This counter is
134 // decremented at the end of unpack_frames().
135 thread->inc_in_deopt_handler();
136
137 return fetch_unroll_info_helper(thread);
138 JRT_END
139
140
141 // This is factored, since it is both called from a JRT_LEAF (deoptimization) and a JRT_ENTRY (uncommon_trap)
142 Deoptimization::UnrollBlock* Deoptimization::fetch_unroll_info_helper(JavaThread* thread) {
143
144 // Note: there is a safepoint safety issue here. No matter whether we enter
145 // via vanilla deopt or uncommon trap we MUST NOT stop at a safepoint once
146 // the vframeArray is created.
147 //
148
149 // Allocate our special deoptimization ResourceMark
150 DeoptResourceMark* dmark = new DeoptResourceMark(thread);
151 assert(thread->deopt_mark() == NULL, "Pending deopt!");
152 thread->set_deopt_mark(dmark);
153
154 frame stub_frame = thread->last_frame(); // Makes stack walkable as side effect
155 RegisterMap map(thread, true);
156 RegisterMap dummy_map(thread, false);
157 // Now get the deoptee with a valid map
158 frame deoptee = stub_frame.sender(&map);
159 // Set the deoptee nmethod
160 assert(thread->deopt_nmethod() == NULL, "Pending deopt!");
161 thread->set_deopt_nmethod(deoptee.cb()->as_nmethod_or_null());
162
163 if (VerifyStack) {
164 thread->validate_frame_layout();
165 }
166
167 // Create a growable array of VFrames where each VFrame represents an inlined
168 // Java frame. This storage is allocated with the usual system arena.
169 assert(deoptee.is_compiled_frame(), "Wrong frame type");
170 GrowableArray<compiledVFrame*>* chunk = new GrowableArray<compiledVFrame*>(10);
171 vframe* vf = vframe::new_vframe(&deoptee, &map, thread);
172 while (!vf->is_top()) {
173 assert(vf->is_compiled_frame(), "Wrong frame type");
174 chunk->push(compiledVFrame::cast(vf));
175 vf = vf->sender();
176 }
177 assert(vf->is_compiled_frame(), "Wrong frame type");
178 chunk->push(compiledVFrame::cast(vf));
179
180 bool realloc_failures = false;
181
182 #ifdef COMPILER2
183 // Reallocate the non-escaping objects and restore their fields. Then
184 // relock objects if synchronization on them was eliminated.
185 if (DoEscapeAnalysis || EliminateNestedLocks) {
186 if (EliminateAllocations) {
187 assert (chunk->at(0)->scope() != NULL,"expect only compiled java frames");
188 GrowableArray<ScopeValue*>* objects = chunk->at(0)->scope()->objects();
189
190 // The flag return_oop() indicates call sites which return oop
191 // in compiled code. Such sites include java method calls,
192 // runtime calls (for example, used to allocate new objects/arrays
193 // on slow code path) and any other calls generated in compiled code.
194 // It is not guaranteed that we can get such information here only
195 // by analyzing bytecode in deoptimized frames. This is why this flag
196 // is set during method compilation (see Compile::Process_OopMap_Node()).
197 // If the previous frame was popped, we don't have a result.
198 bool save_oop_result = chunk->at(0)->scope()->return_oop() && !thread->popframe_forcing_deopt_reexecution();
199 Handle return_value;
200 if (save_oop_result) {
201 // Reallocation may trigger GC. If deoptimization happened on return from
202 // call which returns oop we need to save it since it is not in oopmap.
203 oop result = deoptee.saved_oop_result(&map);
204 assert(result == NULL || result->is_oop(), "must be oop");
205 return_value = Handle(thread, result);
206 assert(Universe::heap()->is_in_or_null(result), "must be heap pointer");
207 if (TraceDeoptimization) {
208 ttyLocker ttyl;
209 tty->print_cr("SAVED OOP RESULT " INTPTR_FORMAT " in thread " INTPTR_FORMAT, (void *)result, thread);
210 }
211 }
212 if (objects != NULL) {
213 JRT_BLOCK
214 realloc_failures = realloc_objects(thread, &deoptee, objects, THREAD);
215 JRT_END
216 reassign_fields(&deoptee, &map, objects, realloc_failures);
217 #ifndef PRODUCT
218 if (TraceDeoptimization) {
219 ttyLocker ttyl;
220 tty->print_cr("REALLOC OBJECTS in thread " INTPTR_FORMAT, thread);
221 print_objects(objects, realloc_failures);
222 }
223 #endif
224 }
225 if (save_oop_result) {
226 // Restore result.
227 deoptee.set_saved_oop_result(&map, return_value());
228 }
229 }
230 if (EliminateLocks) {
231 #ifndef PRODUCT
232 bool first = true;
233 #endif
234 for (int i = 0; i < chunk->length(); i++) {
235 compiledVFrame* cvf = chunk->at(i);
236 assert (cvf->scope() != NULL,"expect only compiled java frames");
237 GrowableArray<MonitorInfo*>* monitors = cvf->monitors();
238 if (monitors->is_nonempty()) {
239 relock_objects(monitors, thread, realloc_failures);
240 #ifndef PRODUCT
241 if (TraceDeoptimization) {
242 ttyLocker ttyl;
243 for (int j = 0; j < monitors->length(); j++) {
244 MonitorInfo* mi = monitors->at(j);
245 if (mi->eliminated()) {
246 if (first) {
247 first = false;
248 tty->print_cr("RELOCK OBJECTS in thread " INTPTR_FORMAT, thread);
249 }
250 if (mi->owner_is_scalar_replaced()) {
251 Klass* k = java_lang_Class::as_Klass(mi->owner_klass());
252 tty->print_cr(" failed reallocation for klass %s", k->external_name());
253 } else {
254 tty->print_cr(" object <" INTPTR_FORMAT "> locked", (void *)mi->owner());
255 }
256 }
257 }
258 }
259 #endif
260 }
261 }
262 }
263 }
264 #endif // COMPILER2
265 // Ensure that no safepoint is taken after pointers have been stored
266 // in fields of rematerialized objects. If a safepoint occurs from here on
267 // out the java state residing in the vframeArray will be missed.
268 No_Safepoint_Verifier no_safepoint;
269
270 vframeArray* array = create_vframeArray(thread, deoptee, &map, chunk, realloc_failures);
271 #ifdef COMPILER2
272 if (realloc_failures) {
273 pop_frames_failed_reallocs(thread, array);
274 }
275 #endif
276
277 assert(thread->vframe_array_head() == NULL, "Pending deopt!");
278 thread->set_vframe_array_head(array);
279
280 // Now that the vframeArray has been created if we have any deferred local writes
281 // added by jvmti then we can free up that structure as the data is now in the
282 // vframeArray
283
284 if (thread->deferred_locals() != NULL) {
285 GrowableArray<jvmtiDeferredLocalVariableSet*>* list = thread->deferred_locals();
286 int i = 0;
287 do {
288 // Because of inlining we could have multiple vframes for a single frame
289 // and several of the vframes could have deferred writes. Find them all.
290 if (list->at(i)->id() == array->original().id()) {
291 jvmtiDeferredLocalVariableSet* dlv = list->at(i);
301 // free the list and elements back to C heap.
302 delete list;
303 }
304
305 }
306
307 #ifndef SHARK
308 // Compute the caller frame based on the sender sp of stub_frame and stored frame sizes info.
309 CodeBlob* cb = stub_frame.cb();
310 // Verify we have the right vframeArray
311 assert(cb->frame_size() >= 0, "Unexpected frame size");
312 intptr_t* unpack_sp = stub_frame.sp() + cb->frame_size();
313
314 // If the deopt call site is a MethodHandle invoke call site we have
315 // to adjust the unpack_sp.
316 nmethod* deoptee_nm = deoptee.cb()->as_nmethod_or_null();
317 if (deoptee_nm != NULL && deoptee_nm->is_method_handle_return(deoptee.pc()))
318 unpack_sp = deoptee.unextended_sp();
319
320 #ifdef ASSERT
321 assert(cb->is_deoptimization_stub() || cb->is_uncommon_trap_stub(), "just checking");
322 #endif
323 #else
324 intptr_t* unpack_sp = stub_frame.sender(&dummy_map).unextended_sp();
325 #endif // !SHARK
326
327 // This is a guarantee instead of an assert because if vframe doesn't match
328 // we will unpack the wrong deoptimized frame and wind up in strange places
329 // where it will be very difficult to figure out what went wrong. Better
330 // to die an early death here than some very obscure death later when the
331 // trail is cold.
332 // Note: on ia64 this guarantee can be fooled by frames with no memory stack
333 // in that it will fail to detect a problem when there is one. This needs
334 // more work in tiger timeframe.
335 guarantee(array->unextended_sp() == unpack_sp, "vframe_array_head must contain the vframeArray to unpack");
336
337 int number_of_frames = array->frames();
338
339 // Compute the vframes' sizes. Note that frame_sizes[] entries are ordered from outermost to innermost
340 // virtual activation, which is the reverse of the elements in the vframes array.
341 intptr_t* frame_sizes = NEW_C_HEAP_ARRAY(intptr_t, number_of_frames, mtCompiler);
704 callee_size_of_parameters = mh->size_of_parameters();
705 callee_max_locals = mh->max_locals();
706 is_top_frame = false;
707 }
708 }
709 #endif /* !PRODUCT */
710
711
712 return bt;
713 JRT_END
714
715
716 int Deoptimization::deoptimize_dependents() {
717 Threads::deoptimized_wrt_marked_nmethods();
718 return 0;
719 }
720
721 Deoptimization::DeoptAction Deoptimization::_unloaded_action
722 = Deoptimization::Action_reinterpret;
723
724 #ifdef COMPILER2
725 bool Deoptimization::realloc_objects(JavaThread* thread, frame* fr, GrowableArray<ScopeValue*>* objects, TRAPS) {
726 Handle pending_exception(thread->pending_exception());
727 const char* exception_file = thread->exception_file();
728 int exception_line = thread->exception_line();
729 thread->clear_pending_exception();
730
731 bool failures = false;
732
733 for (int i = 0; i < objects->length(); i++) {
734 assert(objects->at(i)->is_object(), "invalid debug information");
735 ObjectValue* sv = (ObjectValue*) objects->at(i);
736
737 KlassHandle k(java_lang_Class::as_Klass(sv->klass()->as_ConstantOopReadValue()->value()()));
738 oop obj = NULL;
739
740 if (k->oop_is_instance()) {
741 InstanceKlass* ik = InstanceKlass::cast(k());
742 obj = ik->allocate_instance(THREAD);
743 } else if (k->oop_is_typeArray()) {
744 TypeArrayKlass* ak = TypeArrayKlass::cast(k());
752
753 if (obj == NULL) {
754 failures = true;
755 }
756
757 assert(sv->value().is_null(), "redundant reallocation");
758 assert(obj != NULL || HAS_PENDING_EXCEPTION, "allocation should succeed or we should get an exception");
759 CLEAR_PENDING_EXCEPTION;
760 sv->set_value(obj);
761 }
762
763 if (failures) {
764 THROW_OOP_(Universe::out_of_memory_error_realloc_objects(), failures);
765 } else if (pending_exception.not_null()) {
766 thread->set_pending_exception(pending_exception(), exception_file, exception_line);
767 }
768
769 return failures;
770 }
771
772 // This assumes that the fields are stored in ObjectValue in the same order
773 // they are yielded by do_nonstatic_fields.
774 class FieldReassigner: public FieldClosure {
775 frame* _fr;
776 RegisterMap* _reg_map;
777 ObjectValue* _sv;
778 InstanceKlass* _ik;
779 oop _obj;
780
781 int _i;
782 public:
783 FieldReassigner(frame* fr, RegisterMap* reg_map, ObjectValue* sv, oop obj) :
784 _fr(fr), _reg_map(reg_map), _sv(sv), _obj(obj), _i(0) {}
785
786 int i() const { return _i; }
787
788
789 void do_field(fieldDescriptor* fd) {
790 intptr_t val;
791 StackValue* value =
792 StackValue::create_stack_value(_fr, _reg_map, _sv->field_at(i()));
793 int offset = fd->offset();
794 switch (fd->field_type()) {
795 case T_OBJECT: case T_ARRAY:
796 assert(value->type() == T_OBJECT, "Agreement.");
797 _obj->obj_field_put(offset, value->get_obj()());
798 break;
799
800 case T_LONG: case T_DOUBLE: {
801 assert(value->type() == T_INT, "Agreement.");
802 StackValue* low =
803 StackValue::create_stack_value(_fr, _reg_map, _sv->field_at(++_i));
804 #ifdef _LP64
805 jlong res = (jlong)low->get_int();
806 #else
807 #ifdef SPARC
808 // For SPARC we have to swap high and low words.
809 jlong res = jlong_from((jint)low->get_int(), (jint)value->get_int());
810 #else
811 jlong res = jlong_from((jint)value->get_int(), (jint)low->get_int());
812 #endif //SPARC
813 #endif
814 _obj->long_field_put(offset, res);
815 break;
816 }
817 // Have to cast to INT (32 bits) pointer to avoid little/big-endian problem.
818 case T_INT: case T_FLOAT: // 4 bytes.
819 assert(value->type() == T_INT, "Agreement.");
820 val = value->get_int();
821 _obj->int_field_put(offset, (jint)*((jint*)&val));
822 break;
823
824 case T_SHORT: case T_CHAR: // 2 bytes
825 assert(value->type() == T_INT, "Agreement.");
826 val = value->get_int();
827 _obj->short_field_put(offset, (jshort)*((jint*)&val));
828 break;
829
830 case T_BOOLEAN: case T_BYTE: // 1 byte
831 assert(value->type() == T_INT, "Agreement.");
832 val = value->get_int();
833 _obj->bool_field_put(offset, (jboolean)*((jint*)&val));
834 break;
835
836 default:
837 ShouldNotReachHere();
838 }
839 _i++;
840 }
841 };
842
843 // restore elements of an eliminated type array
844 void Deoptimization::reassign_type_array_elements(frame* fr, RegisterMap* reg_map, ObjectValue* sv, typeArrayOop obj, BasicType type) {
845 int index = 0;
846 intptr_t val;
847
848 for (int i = 0; i < sv->field_size(); i++) {
849 StackValue* value = StackValue::create_stack_value(fr, reg_map, sv->field_at(i));
850 switch(type) {
851 case T_LONG: case T_DOUBLE: {
852 assert(value->type() == T_INT, "Agreement.");
853 StackValue* low =
854 StackValue::create_stack_value(fr, reg_map, sv->field_at(++i));
855 #ifdef _LP64
856 jlong res = (jlong)low->get_int();
857 #else
858 #ifdef SPARC
859 // For SPARC we have to swap high and low words.
860 jlong res = jlong_from((jint)low->get_int(), (jint)value->get_int());
861 #else
862 jlong res = jlong_from((jint)value->get_int(), (jint)low->get_int());
863 #endif //SPARC
864 #endif
865 obj->long_at_put(index, res);
866 break;
867 }
868
869 // Have to cast to INT (32 bits) pointer to avoid little/big-endian problem.
870 case T_INT: case T_FLOAT: // 4 bytes.
871 assert(value->type() == T_INT, "Agreement.");
872 val = value->get_int();
873 obj->int_at_put(index, (jint)*((jint*)&val));
874 break;
875
876 case T_SHORT: case T_CHAR: // 2 bytes
877 assert(value->type() == T_INT, "Agreement.");
878 val = value->get_int();
879 obj->short_at_put(index, (jshort)*((jint*)&val));
880 break;
881
882 case T_BOOLEAN: case T_BYTE: // 1 byte
883 assert(value->type() == T_INT, "Agreement.");
884 val = value->get_int();
885 obj->bool_at_put(index, (jboolean)*((jint*)&val));
886 break;
887
888 default:
889 ShouldNotReachHere();
890 }
891 index++;
892 }
893 }
894
895
896 // restore fields of an eliminated object array
897 void Deoptimization::reassign_object_array_elements(frame* fr, RegisterMap* reg_map, ObjectValue* sv, objArrayOop obj) {
898 for (int i = 0; i < sv->field_size(); i++) {
899 StackValue* value = StackValue::create_stack_value(fr, reg_map, sv->field_at(i));
900 assert(value->type() == T_OBJECT, "object element expected");
901 obj->obj_at_put(i, value->get_obj()());
902 }
903 }
904
905
906 // restore fields of all eliminated objects and arrays
907 void Deoptimization::reassign_fields(frame* fr, RegisterMap* reg_map, GrowableArray<ScopeValue*>* objects, bool realloc_failures) {
908 for (int i = 0; i < objects->length(); i++) {
909 ObjectValue* sv = (ObjectValue*) objects->at(i);
910 KlassHandle k(java_lang_Class::as_Klass(sv->klass()->as_ConstantOopReadValue()->value()()));
911 Handle obj = sv->value();
912 assert(obj.not_null() || realloc_failures, "reallocation was missed");
913 if (obj.is_null()) {
914 continue;
915 }
916
917 if (k->oop_is_instance()) {
918 InstanceKlass* ik = InstanceKlass::cast(k());
919 FieldReassigner reassign(fr, reg_map, sv, obj());
920 ik->do_nonstatic_fields(&reassign);
921 } else if (k->oop_is_typeArray()) {
922 TypeArrayKlass* ak = TypeArrayKlass::cast(k());
923 reassign_type_array_elements(fr, reg_map, sv, (typeArrayOop) obj(), ak->element_type());
924 } else if (k->oop_is_objArray()) {
925 reassign_object_array_elements(fr, reg_map, sv, (objArrayOop) obj());
926 }
927 }
928 }
929
930
931 // relock objects for which synchronization was eliminated
932 void Deoptimization::relock_objects(GrowableArray<MonitorInfo*>* monitors, JavaThread* thread, bool realloc_failures) {
933 for (int i = 0; i < monitors->length(); i++) {
934 MonitorInfo* mon_info = monitors->at(i);
935 if (mon_info->eliminated()) {
936 assert(!mon_info->owner_is_scalar_replaced() || realloc_failures, "reallocation was missed");
937 if (!mon_info->owner_is_scalar_replaced()) {
938 Handle obj = Handle(mon_info->owner());
939 markOop mark = obj->mark();
940 if (UseBiasedLocking && mark->has_bias_pattern()) {
965 ObjectValue* sv = (ObjectValue*) objects->at(i);
966 KlassHandle k(java_lang_Class::as_Klass(sv->klass()->as_ConstantOopReadValue()->value()()));
967 Handle obj = sv->value();
968
969 tty->print(" object <" INTPTR_FORMAT "> of type ", (void *)sv->value()());
970 k->print_value();
971 assert(obj.not_null() || realloc_failures, "reallocation was missed");
972 if (obj.is_null()) {
973 tty->print(" allocation failed");
974 } else {
975 tty->print(" allocated (%d bytes)", obj->size() * HeapWordSize);
976 }
977 tty->cr();
978
979 if (Verbose && !obj.is_null()) {
980 k->oop_print_on(obj(), tty);
981 }
982 }
983 }
984 #endif
985 #endif // COMPILER2
986
987 vframeArray* Deoptimization::create_vframeArray(JavaThread* thread, frame fr, RegisterMap *reg_map, GrowableArray<compiledVFrame*>* chunk, bool realloc_failures) {
988 Events::log(thread, "DEOPT PACKING pc=" INTPTR_FORMAT " sp=" INTPTR_FORMAT, fr.pc(), fr.sp());
989
990 #ifndef PRODUCT
991 if (TraceDeoptimization) {
992 ttyLocker ttyl;
993 tty->print("DEOPT PACKING thread " INTPTR_FORMAT " ", thread);
994 fr.print_on(tty);
995 tty->print_cr(" Virtual frames (innermost first):");
996 for (int index = 0; index < chunk->length(); index++) {
997 compiledVFrame* vf = chunk->at(index);
998 tty->print(" %2d - ", index);
999 vf->print_value();
1000 int bci = chunk->at(index)->raw_bci();
1001 const char* code_name;
1002 if (bci == SynchronizationEntryBCI) {
1003 code_name = "sync entry";
1004 } else {
1005 Bytecodes::Code code = vf->method()->code_at(bci);
1006 code_name = Bytecodes::name(code);
1007 }
1008 tty->print(" - %s", code_name);
1009 tty->print_cr(" @ bci %d ", bci);
1010 if (Verbose) {
1011 vf->print();
1016 #endif
1017
1018 // Register map for next frame (used for stack crawl). We capture
1019 // the state of the deopt'ing frame's caller. Thus if we need to
1020 // stuff a C2I adapter we can properly fill in the callee-save
1021 // register locations.
1022 frame caller = fr.sender(reg_map);
1023 int frame_size = caller.sp() - fr.sp();
1024
1025 frame sender = caller;
1026
1027 // Since the Java thread being deoptimized will eventually adjust it's own stack,
1028 // the vframeArray containing the unpacking information is allocated in the C heap.
1029 // For Compiler1, the caller of the deoptimized frame is saved for use by unpack_frames().
1030 vframeArray* array = vframeArray::allocate(thread, frame_size, chunk, reg_map, sender, caller, fr, realloc_failures);
1031
1032 // Compare the vframeArray to the collected vframes
1033 assert(array->structural_compare(thread, chunk), "just checking");
1034
1035 #ifndef PRODUCT
1036 if (TraceDeoptimization) {
1037 ttyLocker ttyl;
1038 tty->print_cr(" Created vframeArray " INTPTR_FORMAT, array);
1039 }
1040 #endif // PRODUCT
1041
1042 return array;
1043 }
1044
1045 #ifdef COMPILER2
1046 void Deoptimization::pop_frames_failed_reallocs(JavaThread* thread, vframeArray* array) {
1047 // Reallocation of some scalar replaced objects failed. Record
1048 // that we need to pop all the interpreter frames for the
1049 // deoptimized compiled frame.
1050 assert(thread->frames_to_pop_failed_realloc() == 0, "missed frames to pop?");
1051 thread->set_frames_to_pop_failed_realloc(array->frames());
1052 // Unlock all monitors here otherwise the interpreter will see a
1053 // mix of locked and unlocked monitors (because of failed
1054 // reallocations of synchronized objects) and be confused.
1055 for (int i = 0; i < array->frames(); i++) {
1056 MonitorChunk* monitors = array->element(i)->monitors();
1057 if (monitors != NULL) {
1058 for (int j = 0; j < monitors->number_of_monitors(); j++) {
1059 BasicObjectLock* src = monitors->at(j);
1060 if (src->obj() != NULL) {
1061 ObjectSynchronizer::fast_exit(src->obj(), src->lock(), thread);
1062 }
1063 }
1064 array->element(i)->free_monitors(thread);
1065 #ifdef ASSERT
1133 while (!sfs.is_done()) {
1134 frame* cur = sfs.current();
1135 if (cb->contains(cur->pc())) {
1136 vframe* vf = vframe::new_vframe(cur, sfs.register_map(), jt);
1137 compiledVFrame* cvf = compiledVFrame::cast(vf);
1138 // Revoke monitors' biases in all scopes
1139 while (!cvf->is_top()) {
1140 collect_monitors(cvf, objects_to_revoke);
1141 cvf = compiledVFrame::cast(cvf->sender());
1142 }
1143 collect_monitors(cvf, objects_to_revoke);
1144 }
1145 sfs.next();
1146 }
1147 }
1148 }
1149 BiasedLocking::revoke_at_safepoint(objects_to_revoke);
1150 }
1151
1152
1153 void Deoptimization::deoptimize_single_frame(JavaThread* thread, frame fr) {
1154 assert(fr.can_be_deoptimized(), "checking frame type");
1155
1156 gather_statistics(Reason_constraint, Action_none, Bytecodes::_illegal);
1157
1158 // Patch the nmethod so that when execution returns to it we will
1159 // deopt the execution state and return to the interpreter.
1160 fr.deoptimize(thread);
1161 }
1162
1163 void Deoptimization::deoptimize(JavaThread* thread, frame fr, RegisterMap *map) {
1164 // Deoptimize only if the frame comes from compile code.
1165 // Do not deoptimize the frame which is already patched
1166 // during the execution of the loops below.
1167 if (!fr.is_compiled_frame() || fr.is_deoptimized_frame()) {
1168 return;
1169 }
1170 ResourceMark rm;
1171 DeoptimizationMarker dm;
1172 if (UseBiasedLocking) {
1173 revoke_biases_of_monitors(thread, fr, map);
1174 }
1175 deoptimize_single_frame(thread, fr);
1176
1177 }
1178
1179
1180 void Deoptimization::deoptimize_frame_internal(JavaThread* thread, intptr_t* id) {
1181 assert(thread == Thread::current() || SafepointSynchronize::is_at_safepoint(),
1182 "can only deoptimize other thread at a safepoint");
1183 // Compute frame and register map based on thread and sp.
1184 RegisterMap reg_map(thread, UseBiasedLocking);
1185 frame fr = thread->last_frame();
1186 while (fr.id() != id) {
1187 fr = fr.sender(®_map);
1188 }
1189 deoptimize(thread, fr, ®_map);
1190 }
1191
1192
1193 void Deoptimization::deoptimize_frame(JavaThread* thread, intptr_t* id) {
1194 if (thread == Thread::current()) {
1195 Deoptimization::deoptimize_frame_internal(thread, id);
1196 } else {
1197 VM_DeoptimizeFrame deopt(thread, id);
1198 VMThread::execute(&deopt);
1199 }
1200 }
1201
1202
1203 // JVMTI PopFrame support
1204 JRT_LEAF(void, Deoptimization::popframe_preserve_args(JavaThread* thread, int bytes_to_save, void* start_address))
1205 {
1206 thread->popframe_preserve_args(in_ByteSize(bytes_to_save), start_address);
1207 }
1208 JRT_END
1209
1210 MethodData*
1211 Deoptimization::get_method_data(JavaThread* thread, methodHandle m,
1212 bool create_if_missing) {
1213 Thread* THREAD = thread;
1214 MethodData* mdo = m()->method_data();
1215 if (mdo == NULL && create_if_missing && !HAS_PENDING_EXCEPTION) {
1216 // Build an MDO. Ignore errors like OutOfMemory;
1217 // that simply means we won't have an MDO to update.
1218 Method::build_interpreter_method_data(m, THREAD);
1219 if (HAS_PENDING_EXCEPTION) {
1220 assert((PENDING_EXCEPTION->is_a(SystemDictionary::OutOfMemoryError_klass())), "we expect only an OOM error here");
1221 CLEAR_PENDING_EXCEPTION;
1222 }
1223 mdo = m()->method_data();
1224 }
1225 return mdo;
1226 }
1227
1228 #if defined(COMPILER2) || defined(SHARK)
1229 void Deoptimization::load_class_by_index(constantPoolHandle constant_pool, int index, TRAPS) {
1230 // in case of an unresolved klass entry, load the class.
1231 if (constant_pool->tag_at(index).is_unresolved_klass()) {
1232 Klass* tk = constant_pool->klass_at_ignore_error(index, CHECK);
1233 return;
1234 }
1235
1236 if (!constant_pool->tag_at(index).is_symbol()) return;
1237
1238 Handle class_loader (THREAD, constant_pool->pool_holder()->class_loader());
1239 Symbol* symbol = constant_pool->symbol_at(index);
1240
1241 // class name?
1242 if (symbol->byte_at(0) != '(') {
1243 Handle protection_domain (THREAD, constant_pool->pool_holder()->protection_domain());
1244 SystemDictionary::resolve_or_null(symbol, class_loader, protection_domain, CHECK);
1245 return;
1246 }
1247
1248 // then it must be a signature!
1271 // stack otherwise if we return to the uncommon trap blob and the
1272 // stack bang causes a stack overflow we crash.
1273 assert(THREAD->is_Java_thread(), "only a java thread can be here");
1274 JavaThread* thread = (JavaThread*)THREAD;
1275 bool guard_pages_enabled = thread->stack_yellow_zone_enabled();
1276 if (!guard_pages_enabled) guard_pages_enabled = thread->reguard_stack();
1277 assert(guard_pages_enabled, "stack banging in uncommon trap blob may cause crash");
1278 }
1279 }
1280
1281 JRT_ENTRY(void, Deoptimization::uncommon_trap_inner(JavaThread* thread, jint trap_request)) {
1282 HandleMark hm;
1283
1284 // uncommon_trap() is called at the beginning of the uncommon trap
1285 // handler. Note this fact before we start generating temporary frames
1286 // that can confuse an asynchronous stack walker. This counter is
1287 // decremented at the end of unpack_frames().
1288 thread->inc_in_deopt_handler();
1289
1290 // We need to update the map if we have biased locking.
1291 RegisterMap reg_map(thread, UseBiasedLocking);
1292 frame stub_frame = thread->last_frame();
1293 frame fr = stub_frame.sender(®_map);
1294 // Make sure the calling nmethod is not getting deoptimized and removed
1295 // before we are done with it.
1296 nmethodLocker nl(fr.pc());
1297
1298 // Log a message
1299 Events::log(thread, "Uncommon trap: trap_request=" PTR32_FORMAT " fr.pc=" INTPTR_FORMAT,
1300 trap_request, fr.pc());
1301
1302 {
1303 ResourceMark rm;
1304
1305 // Revoke biases of any monitors in the frame to ensure we can migrate them
1306 revoke_biases_of_monitors(thread, fr, ®_map);
1307
1308 DeoptReason reason = trap_request_reason(trap_request);
1309 DeoptAction action = trap_request_action(trap_request);
1310 jint unloaded_class_index = trap_request_index(trap_request); // CP idx or -1
1311
1312 vframe* vf = vframe::new_vframe(&fr, ®_map, thread);
1313 compiledVFrame* cvf = compiledVFrame::cast(vf);
1314
1315 nmethod* nm = cvf->code();
1316
1317 ScopeDesc* trap_scope = cvf->scope();
1318 methodHandle trap_method = trap_scope->method();
1319 int trap_bci = trap_scope->bci();
1320 Bytecodes::Code trap_bc = trap_method->java_code_at(trap_bci);
1321
1322 // Record this event in the histogram.
1323 gather_statistics(reason, action, trap_bc);
1324
1325 // Ensure that we can record deopt. history:
1326 // Need MDO to record RTM code generation state.
1327 bool create_if_missing = ProfileTraps || UseCodeAging RTM_OPT_ONLY( || UseRTMLocking );
1328
1329 MethodData* trap_mdo =
1330 get_method_data(thread, trap_method, create_if_missing);
1331
1332 // Log a message
1333 Events::log_deopt_message(thread, "Uncommon trap: reason=%s action=%s pc=" INTPTR_FORMAT " method=%s @ %d",
1334 trap_reason_name(reason), trap_action_name(action), fr.pc(),
1335 trap_method->name_and_sig_as_C_string(), trap_bci);
1336
1337 // Print a bunch of diagnostics, if requested.
1338 if (TraceDeoptimization || LogCompilation) {
1339 ResourceMark rm;
1340 ttyLocker ttyl;
1341 char buf[100];
1342 if (xtty != NULL) {
1343 xtty->begin_head("uncommon_trap thread='" UINTX_FORMAT "' %s",
1344 os::current_thread_id(),
1345 format_trap_request(buf, sizeof(buf), trap_request));
1346 nm->log_identity(xtty);
1347 }
1348 Symbol* class_name = NULL;
1349 bool unresolved = false;
1350 if (unloaded_class_index >= 0) {
1368 if (dcnt != 0)
1369 xtty->print(" count='%d'", dcnt);
1370 ProfileData* pdata = trap_mdo->bci_to_data(trap_bci);
1371 int dos = (pdata == NULL)? 0: pdata->trap_state();
1372 if (dos != 0) {
1373 xtty->print(" state='%s'", format_trap_state(buf, sizeof(buf), dos));
1374 if (trap_state_is_recompiled(dos)) {
1375 int recnt2 = trap_mdo->overflow_recompile_count();
1376 if (recnt2 != 0)
1377 xtty->print(" recompiles2='%d'", recnt2);
1378 }
1379 }
1380 }
1381 if (xtty != NULL) {
1382 xtty->stamp();
1383 xtty->end_head();
1384 }
1385 if (TraceDeoptimization) { // make noise on the tty
1386 tty->print("Uncommon trap occurred in");
1387 nm->method()->print_short_name(tty);
1388 tty->print(" (@" INTPTR_FORMAT ") thread=" UINTX_FORMAT " reason=%s action=%s unloaded_class_index=%d",
1389 fr.pc(),
1390 os::current_thread_id(),
1391 trap_reason_name(reason),
1392 trap_action_name(action),
1393 unloaded_class_index);
1394 if (class_name != NULL) {
1395 tty->print(unresolved ? " unresolved class: " : " symbol: ");
1396 class_name->print_symbol_on(tty);
1397 }
1398 tty->cr();
1399 }
1400 if (xtty != NULL) {
1401 // Log the precise location of the trap.
1402 for (ScopeDesc* sd = trap_scope; ; sd = sd->sender()) {
1403 xtty->begin_elem("jvms bci='%d'", sd->bci());
1404 xtty->method(sd->method());
1405 xtty->end_elem();
1406 if (sd->is_top()) break;
1407 }
1408 xtty->tail("uncommon_trap");
1409 }
1410 }
1411 // (End diagnostic printout.)
1412
1413 // Load class if necessary
1507 case Action_make_not_compilable:
1508 // Give up on compiling this method at all.
1509 make_not_entrant = true;
1510 make_not_compilable = true;
1511 break;
1512 default:
1513 ShouldNotReachHere();
1514 }
1515
1516 // Setting +ProfileTraps fixes the following, on all platforms:
1517 // 4852688: ProfileInterpreter is off by default for ia64. The result is
1518 // infinite heroic-opt-uncommon-trap/deopt/recompile cycles, since the
1519 // recompile relies on a MethodData* to record heroic opt failures.
1520
1521 // Whether the interpreter is producing MDO data or not, we also need
1522 // to use the MDO to detect hot deoptimization points and control
1523 // aggressive optimization.
1524 bool inc_recompile_count = false;
1525 ProfileData* pdata = NULL;
1526 if (ProfileTraps && update_trap_state && trap_mdo != NULL) {
1527 assert(trap_mdo == get_method_data(thread, trap_method, false), "sanity");
1528 uint this_trap_count = 0;
1529 bool maybe_prior_trap = false;
1530 bool maybe_prior_recompile = false;
1531 pdata = query_update_method_data(trap_mdo, trap_bci, reason,
1532 nm->method(),
1533 //outputs:
1534 this_trap_count,
1535 maybe_prior_trap,
1536 maybe_prior_recompile);
1537 // Because the interpreter also counts null, div0, range, and class
1538 // checks, these traps from compiled code are double-counted.
1539 // This is harmless; it just means that the PerXTrapLimit values
1540 // are in effect a little smaller than they look.
1541
1542 DeoptReason per_bc_reason = reason_recorded_per_bytecode_if_any(reason);
1543 if (per_bc_reason != Reason_none) {
1544 // Now take action based on the partially known per-BCI history.
1545 if (maybe_prior_trap
1546 && this_trap_count >= (uint)PerBytecodeTrapLimit) {
1547 // If there are too many traps at this BCI, force a recompile.
1548 // This will allow the compiler to see the limit overflow, and
1549 // take corrective action, if possible. The compiler generally
1550 // does not use the exact PerBytecodeTrapLimit value, but instead
1551 // changes its tactics if it sees any traps at all. This provides
1643 // Reprofile
1644 if (reprofile) {
1645 CompilationPolicy::policy()->reprofile(trap_scope, nm->is_osr_method());
1646 }
1647
1648 // Give up compiling
1649 if (make_not_compilable && !nm->method()->is_not_compilable(CompLevel_full_optimization)) {
1650 assert(make_not_entrant, "consistent");
1651 nm->method()->set_not_compilable(CompLevel_full_optimization);
1652 }
1653
1654 } // Free marked resources
1655
1656 }
1657 JRT_END
1658
1659 ProfileData*
1660 Deoptimization::query_update_method_data(MethodData* trap_mdo,
1661 int trap_bci,
1662 Deoptimization::DeoptReason reason,
1663 Method* compiled_method,
1664 //outputs:
1665 uint& ret_this_trap_count,
1666 bool& ret_maybe_prior_trap,
1667 bool& ret_maybe_prior_recompile) {
1668 uint prior_trap_count = trap_mdo->trap_count(reason);
1669 uint this_trap_count = trap_mdo->inc_trap_count(reason);
1670
1671 // If the runtime cannot find a place to store trap history,
1672 // it is estimated based on the general condition of the method.
1673 // If the method has ever been recompiled, or has ever incurred
1674 // a trap with the present reason , then this BCI is assumed
1675 // (pessimistically) to be the culprit.
1676 bool maybe_prior_trap = (prior_trap_count != 0);
1677 bool maybe_prior_recompile = (trap_mdo->decompile_count() != 0);
1678 ProfileData* pdata = NULL;
1679
1680
1681 // For reasons which are recorded per bytecode, we check per-BCI data.
1682 DeoptReason per_bc_reason = reason_recorded_per_bytecode_if_any(reason);
1683 if (per_bc_reason != Reason_none) {
1684 // Find the profile data for this BCI. If there isn't one,
1685 // try to allocate one from the MDO's set of spares.
1686 // This will let us detect a repeated trap at this point.
1687 pdata = trap_mdo->allocate_bci_to_data(trap_bci, reason_is_speculate(reason) ? compiled_method : NULL);
1688
1689 if (pdata != NULL) {
1690 if (reason_is_speculate(reason) && !pdata->is_SpeculativeTrapData()) {
1691 if (LogCompilation && xtty != NULL) {
1692 ttyLocker ttyl;
1693 // no more room for speculative traps in this MDO
1694 xtty->elem("speculative_traps_oom");
1695 }
1696 }
1697 // Query the trap state of this profile datum.
1698 int tstate0 = pdata->trap_state();
1699 if (!trap_state_has_reason(tstate0, per_bc_reason))
1700 maybe_prior_trap = false;
1701 if (!trap_state_is_recompiled(tstate0))
1702 maybe_prior_recompile = false;
1715 xtty->elem("missing_mdp bci='%d'", trap_bci);
1716 }
1717 }
1718 }
1719
1720 // Return results:
1721 ret_this_trap_count = this_trap_count;
1722 ret_maybe_prior_trap = maybe_prior_trap;
1723 ret_maybe_prior_recompile = maybe_prior_recompile;
1724 return pdata;
1725 }
1726
1727 void
1728 Deoptimization::update_method_data_from_interpreter(MethodData* trap_mdo, int trap_bci, int reason) {
1729 ResourceMark rm;
1730 // Ignored outputs:
1731 uint ignore_this_trap_count;
1732 bool ignore_maybe_prior_trap;
1733 bool ignore_maybe_prior_recompile;
1734 assert(!reason_is_speculate(reason), "reason speculate only used by compiler");
1735 query_update_method_data(trap_mdo, trap_bci,
1736 (DeoptReason)reason,
1737 NULL,
1738 ignore_this_trap_count,
1739 ignore_maybe_prior_trap,
1740 ignore_maybe_prior_recompile);
1741 }
1742
1743 Deoptimization::UnrollBlock* Deoptimization::uncommon_trap(JavaThread* thread, jint trap_request) {
1744
1745 // Still in Java no safepoints
1746 {
1747 // This enters VM and may safepoint
1748 uncommon_trap_inner(thread, trap_request);
1749 }
1750 return fetch_unroll_info_helper(thread);
1751 }
1752
1753 // Local derived constants.
1754 // Further breakdown of DataLayout::trap_state, as promised by DataLayout.
1755 const int DS_REASON_MASK = DataLayout::trap_mask >> 1;
1756 const int DS_RECOMPILE_BIT = DataLayout::trap_mask - DS_REASON_MASK;
1757
1758 //---------------------------trap_state_reason---------------------------------
1759 Deoptimization::DeoptReason
1760 Deoptimization::trap_state_reason(int trap_state) {
1761 // This assert provides the link between the width of DataLayout::trap_bits
1762 // and the encoding of "recorded" reasons. It ensures there are enough
1763 // bits to store all needed reasons in the per-BCI MDO profile.
1764 assert(DS_REASON_MASK >= Reason_RECORDED_LIMIT, "enough bits");
1829 size_t len;
1830 if (decoded_state != trap_state) {
1831 // Random buggy state that doesn't decode??
1832 len = jio_snprintf(buf, buflen, "#%d", trap_state);
1833 } else {
1834 len = jio_snprintf(buf, buflen, "%s%s",
1835 trap_reason_name(reason),
1836 recomp_flag ? " recompiled" : "");
1837 }
1838 if (len >= buflen)
1839 buf[buflen-1] = '\0';
1840 return buf;
1841 }
1842
1843
1844 //--------------------------------statics--------------------------------------
1845 const char* Deoptimization::_trap_reason_name[] = {
1846 // Note: Keep this in sync. with enum DeoptReason.
1847 "none",
1848 "null_check",
1849 "null_assert",
1850 "range_check",
1851 "class_check",
1852 "array_check",
1853 "intrinsic",
1854 "bimorphic",
1855 "unloaded",
1856 "uninitialized",
1857 "unreached",
1858 "unhandled",
1859 "constraint",
1860 "div0_check",
1861 "age",
1862 "predicate",
1863 "loop_limit_check",
1864 "speculate_class_check",
1865 "speculate_null_check",
1866 "rtm_state_change",
1867 "unstable_if",
1868 "unstable_fused_if",
1869 "tenured"
1870 };
1871 const char* Deoptimization::_trap_action_name[] = {
1872 // Note: Keep this in sync. with enum DeoptAction.
1873 "none",
1874 "maybe_recompile",
1875 "reinterpret",
1876 "make_not_entrant",
1877 "make_not_compilable"
1878 };
1879
1880 const char* Deoptimization::trap_reason_name(int reason) {
1881 // Check that every reason has a name
1882 STATIC_ASSERT(sizeof(_trap_reason_name)/sizeof(const char*) == Reason_LIMIT);
1883
1884 if (reason == Reason_many) return "many";
1885 if ((uint)reason < Reason_LIMIT)
1886 return _trap_reason_name[reason];
1887 static char buf[20];
1888 sprintf(buf, "reason%d", reason);
1889 return buf;
1890 }
1891 const char* Deoptimization::trap_action_name(int action) {
1892 // Check that every action has a name
1893 STATIC_ASSERT(sizeof(_trap_action_name)/sizeof(const char*) == Action_LIMIT);
1894
1895 if ((uint)action < Action_LIMIT)
1896 return _trap_action_name[action];
1897 static char buf[20];
1898 sprintf(buf, "action%d", action);
1899 return buf;
1900 }
1901
1902 // This is used for debugging and diagnostics, including LogFile output.
1903 const char* Deoptimization::format_trap_request(char* buf, size_t buflen,
1904 int trap_request) {
1905 jint unloaded_class_index = trap_request_index(trap_request);
1906 const char* reason = trap_reason_name(trap_request_reason(trap_request));
1907 const char* action = trap_action_name(trap_request_action(trap_request));
1908 size_t len;
1909 if (unloaded_class_index < 0) {
1910 len = jio_snprintf(buf, buflen, "reason='%s' action='%s'",
1911 reason, action);
1912 } else {
1913 len = jio_snprintf(buf, buflen, "reason='%s' action='%s' index='%d'",
1914 reason, action, unloaded_class_index);
1915 }
1916 if (len >= buflen)
1917 buf[buflen-1] = '\0';
1918 return buf;
1919 }
1920
1921 juint Deoptimization::_deoptimization_hist
1922 [Deoptimization::Reason_LIMIT]
1923 [1 + Deoptimization::Action_LIMIT]
1924 [Deoptimization::BC_CASE_LIMIT]
1925 = {0};
1926
1927 enum {
1928 LSB_BITS = 8,
1929 LSB_MASK = right_n_bits(LSB_BITS)
1930 };
1931
1932 void Deoptimization::gather_statistics(DeoptReason reason, DeoptAction action,
1933 Bytecodes::Code bc) {
1934 assert(reason >= 0 && reason < Reason_LIMIT, "oob");
1991 if (bc_case == BC_CASE_LIMIT && (int)bc == 0)
1992 bc = Bytecodes::_illegal;
1993 sprintf(name, "%s/%s/%s",
1994 trap_reason_name(reason),
1995 trap_action_name(action),
1996 Bytecodes::is_defined(bc)? Bytecodes::name(bc): "other");
1997 juint r = counter >> LSB_BITS;
1998 tty->print_cr(" %40s: " UINT32_FORMAT " (%.1f%%)", name, r, (r * 100.0) / total);
1999 account -= r;
2000 }
2001 }
2002 }
2003 }
2004 if (account != 0) {
2005 PRINT_STAT_LINE("unaccounted", account);
2006 }
2007 #undef PRINT_STAT_LINE
2008 if (xtty != NULL) xtty->tail("statistics");
2009 }
2010 }
2011 #else // COMPILER2 || SHARK
2012
2013
2014 // Stubs for C1 only system.
2015 bool Deoptimization::trap_state_is_recompiled(int trap_state) {
2016 return false;
2017 }
2018
2019 const char* Deoptimization::trap_reason_name(int reason) {
2020 return "unknown";
2021 }
2022
2023 void Deoptimization::print_statistics() {
2024 // no output
2025 }
2026
2027 void
2028 Deoptimization::update_method_data_from_interpreter(MethodData* trap_mdo, int trap_bci, int reason) {
2029 // no udpate
2030 }
2031
2032 int Deoptimization::trap_state_has_reason(int trap_state, int reason) {
2033 return 0;
2034 }
2035
2036 void Deoptimization::gather_statistics(DeoptReason reason, DeoptAction action,
2037 Bytecodes::Code bc) {
2038 // no update
2039 }
2040
2041 const char* Deoptimization::format_trap_state(char* buf, size_t buflen,
2042 int trap_state) {
2043 jio_snprintf(buf, buflen, "#%d", trap_state);
2044 return buf;
2045 }
2046
2047 #endif // COMPILER2 || SHARK
|
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 *
23 */
24
25 #include "precompiled.hpp"
26 #include "classfile/systemDictionary.hpp"
27 #include "code/codeCache.hpp"
28 #include "code/debugInfoRec.hpp"
29 #include "code/nmethod.hpp"
30 #include "code/pcDesc.hpp"
31 #include "code/scopeDesc.hpp"
32 #include "interpreter/bytecode.hpp"
33 #include "interpreter/interpreter.hpp"
34 #include "interpreter/oopMapCache.hpp"
35 #include "memory/allocation.inline.hpp"
36 #include "memory/oopFactory.hpp"
37 #include "memory/resourceArea.hpp"
38 #include "oops/method.hpp"
39 #include "oops/oop.inline.hpp"
40 #include "oops/fieldStreams.hpp"
41 #include "oops/verifyOopClosure.hpp"
42 #include "prims/jvmtiThreadState.hpp"
43 #include "runtime/biasedLocking.hpp"
44 #include "runtime/compilationPolicy.hpp"
45 #include "runtime/deoptimization.hpp"
46 #include "runtime/interfaceSupport.hpp"
47 #include "runtime/sharedRuntime.hpp"
48 #include "runtime/signature.hpp"
49 #include "runtime/stubRoutines.hpp"
50 #include "runtime/thread.hpp"
51 #include "runtime/vframe.hpp"
52 #include "runtime/vframeArray.hpp"
53 #include "runtime/vframe_hp.hpp"
54 #include "utilities/events.hpp"
55 #include "utilities/xmlstream.hpp"
56
57 PRAGMA_FORMAT_MUTE_WARNINGS_FOR_GCC
58
59 #if INCLUDE_JVMCI
60 #include "jvmci/jvmciRuntime.hpp"
61 #include "jvmci/jvmciJavaClasses.hpp"
62 #endif
63
64
65 bool DeoptimizationMarker::_is_active = false;
66
67 Deoptimization::UnrollBlock::UnrollBlock(int size_of_deoptimized_frame,
68 int caller_adjustment,
69 int caller_actual_parameters,
70 int number_of_frames,
71 intptr_t* frame_sizes,
72 address* frame_pcs,
73 BasicType return_type) {
74 _size_of_deoptimized_frame = size_of_deoptimized_frame;
75 _caller_adjustment = caller_adjustment;
76 _caller_actual_parameters = caller_actual_parameters;
77 _number_of_frames = number_of_frames;
78 _frame_sizes = frame_sizes;
79 _frame_pcs = frame_pcs;
80 _register_block = NEW_C_HEAP_ARRAY(intptr_t, RegisterMap::reg_count * 2, mtCompiler);
81 _return_type = return_type;
82 _initial_info = 0;
83 // PD (x86 only)
84 _counter_temp = 0;
122 tty->print("%d ", frame_sizes()[index]);
123 }
124 tty->cr();
125 }
126
127
128 // In order to make fetch_unroll_info work properly with escape
129 // analysis, The method was changed from JRT_LEAF to JRT_BLOCK_ENTRY and
130 // ResetNoHandleMark and HandleMark were removed from it. The actual reallocation
131 // of previously eliminated objects occurs in realloc_objects, which is
132 // called from the method fetch_unroll_info_helper below.
133 JRT_BLOCK_ENTRY(Deoptimization::UnrollBlock*, Deoptimization::fetch_unroll_info(JavaThread* thread))
134 // It is actually ok to allocate handles in a leaf method. It causes no safepoints,
135 // but makes the entry a little slower. There is however a little dance we have to
136 // do in debug mode to get around the NoHandleMark code in the JRT_LEAF macro
137
138 // fetch_unroll_info() is called at the beginning of the deoptimization
139 // handler. Note this fact before we start generating temporary frames
140 // that can confuse an asynchronous stack walker. This counter is
141 // decremented at the end of unpack_frames().
142 if (TraceDeoptimization) {
143 tty->print_cr("Deoptimizing thread " INTPTR_FORMAT, thread);
144 }
145 thread->inc_in_deopt_handler();
146
147 return fetch_unroll_info_helper(thread);
148 JRT_END
149
150
151 // This is factored, since it is both called from a JRT_LEAF (deoptimization) and a JRT_ENTRY (uncommon_trap)
152 Deoptimization::UnrollBlock* Deoptimization::fetch_unroll_info_helper(JavaThread* thread) {
153
154 // Note: there is a safepoint safety issue here. No matter whether we enter
155 // via vanilla deopt or uncommon trap we MUST NOT stop at a safepoint once
156 // the vframeArray is created.
157 //
158
159 // Allocate our special deoptimization ResourceMark
160 DeoptResourceMark* dmark = new DeoptResourceMark(thread);
161 assert(thread->deopt_mark() == NULL, "Pending deopt!");
162 thread->set_deopt_mark(dmark);
163
164 frame stub_frame = thread->last_frame(); // Makes stack walkable as side effect
165 RegisterMap map(thread, true);
166 RegisterMap dummy_map(thread, false);
167 // Now get the deoptee with a valid map
168 frame deoptee = stub_frame.sender(&map);
169 // Set the deoptee nmethod
170 assert(thread->deopt_nmethod() == NULL, "Pending deopt!");
171 thread->set_deopt_nmethod(deoptee.cb()->as_nmethod_or_null());
172 bool skip_internal = thread->deopt_nmethod() != NULL && !thread->deopt_nmethod()->compiler()->is_jvmci();
173
174 if (VerifyStack) {
175 thread->validate_frame_layout();
176 }
177
178 // Create a growable array of VFrames where each VFrame represents an inlined
179 // Java frame. This storage is allocated with the usual system arena.
180 assert(deoptee.is_compiled_frame(), "Wrong frame type");
181 GrowableArray<compiledVFrame*>* chunk = new GrowableArray<compiledVFrame*>(10);
182 vframe* vf = vframe::new_vframe(&deoptee, &map, thread);
183 while (!vf->is_top()) {
184 assert(vf->is_compiled_frame(), "Wrong frame type");
185 chunk->push(compiledVFrame::cast(vf));
186 vf = vf->sender();
187 }
188 assert(vf->is_compiled_frame(), "Wrong frame type");
189 chunk->push(compiledVFrame::cast(vf));
190
191 bool realloc_failures = false;
192
193 #if defined(COMPILER2) || INCLUDE_JVMCI
194 // Reallocate the non-escaping objects and restore their fields. Then
195 // relock objects if synchronization on them was eliminated.
196 #ifndef INCLUDE_JVMCI
197 if (DoEscapeAnalysis || EliminateNestedLocks) {
198 if (EliminateAllocations) {
199 #endif // INCLUDE_JVMCI
200 assert (chunk->at(0)->scope() != NULL,"expect only compiled java frames");
201 GrowableArray<ScopeValue*>* objects = chunk->at(0)->scope()->objects();
202
203 // The flag return_oop() indicates call sites which return oop
204 // in compiled code. Such sites include java method calls,
205 // runtime calls (for example, used to allocate new objects/arrays
206 // on slow code path) and any other calls generated in compiled code.
207 // It is not guaranteed that we can get such information here only
208 // by analyzing bytecode in deoptimized frames. This is why this flag
209 // is set during method compilation (see Compile::Process_OopMap_Node()).
210 // If the previous frame was popped, we don't have a result.
211 bool save_oop_result = chunk->at(0)->scope()->return_oop() && !thread->popframe_forcing_deopt_reexecution();
212 Handle return_value;
213 if (save_oop_result) {
214 // Reallocation may trigger GC. If deoptimization happened on return from
215 // call which returns oop we need to save it since it is not in oopmap.
216 oop result = deoptee.saved_oop_result(&map);
217 assert(result == NULL || result->is_oop(), "must be oop");
218 return_value = Handle(thread, result);
219 assert(Universe::heap()->is_in_or_null(result), "must be heap pointer");
220 if (TraceDeoptimization) {
221 ttyLocker ttyl;
222 tty->print_cr("SAVED OOP RESULT " INTPTR_FORMAT " in thread " INTPTR_FORMAT, (void *)result, thread);
223 }
224 }
225 if (objects != NULL) {
226 JRT_BLOCK
227 realloc_failures = realloc_objects(thread, &deoptee, objects, THREAD);
228 JRT_END
229 reassign_fields(&deoptee, &map, objects, realloc_failures, skip_internal);
230 #ifndef PRODUCT
231 if (TraceDeoptimization) {
232 ttyLocker ttyl;
233 tty->print_cr("REALLOC OBJECTS in thread " INTPTR_FORMAT, thread);
234 print_objects(objects, realloc_failures);
235 }
236 #endif
237 }
238 if (save_oop_result) {
239 // Restore result.
240 deoptee.set_saved_oop_result(&map, return_value());
241 }
242 #ifndef INCLUDE_JVMCI
243 }
244 if (EliminateLocks) {
245 #endif // INCLUDE_JVMCI
246 #ifndef PRODUCT
247 bool first = true;
248 #endif
249 for (int i = 0; i < chunk->length(); i++) {
250 compiledVFrame* cvf = chunk->at(i);
251 assert (cvf->scope() != NULL,"expect only compiled java frames");
252 GrowableArray<MonitorInfo*>* monitors = cvf->monitors();
253 if (monitors->is_nonempty()) {
254 relock_objects(monitors, thread, realloc_failures);
255 #ifndef PRODUCT
256 if (PrintDeoptimizationDetails) {
257 ttyLocker ttyl;
258 for (int j = 0; j < monitors->length(); j++) {
259 MonitorInfo* mi = monitors->at(j);
260 if (mi->eliminated()) {
261 if (first) {
262 first = false;
263 tty->print_cr("RELOCK OBJECTS in thread " INTPTR_FORMAT, thread);
264 }
265 if (mi->owner_is_scalar_replaced()) {
266 Klass* k = java_lang_Class::as_Klass(mi->owner_klass());
267 tty->print_cr(" failed reallocation for klass %s", k->external_name());
268 } else {
269 tty->print_cr(" object <" INTPTR_FORMAT "> locked", (void *)mi->owner());
270 }
271 }
272 }
273 }
274 #endif // !PRODUCT
275 }
276 }
277 #ifndef INCLUDE_JVMCI
278 }
279 }
280 #endif // INCLUDE_JVMCI
281 #endif // COMPILER2 || INCLUDE_JVMCI
282
283 // Ensure that no safepoint is taken after pointers have been stored
284 // in fields of rematerialized objects. If a safepoint occurs from here on
285 // out the java state residing in the vframeArray will be missed.
286 No_Safepoint_Verifier no_safepoint;
287
288 vframeArray* array = create_vframeArray(thread, deoptee, &map, chunk, realloc_failures);
289 #if defined(COMPILER2) || INCLUDE_JVMCI
290 if (realloc_failures) {
291 pop_frames_failed_reallocs(thread, array);
292 }
293 #endif
294
295 assert(thread->vframe_array_head() == NULL, "Pending deopt!");
296 thread->set_vframe_array_head(array);
297
298 // Now that the vframeArray has been created if we have any deferred local writes
299 // added by jvmti then we can free up that structure as the data is now in the
300 // vframeArray
301
302 if (thread->deferred_locals() != NULL) {
303 GrowableArray<jvmtiDeferredLocalVariableSet*>* list = thread->deferred_locals();
304 int i = 0;
305 do {
306 // Because of inlining we could have multiple vframes for a single frame
307 // and several of the vframes could have deferred writes. Find them all.
308 if (list->at(i)->id() == array->original().id()) {
309 jvmtiDeferredLocalVariableSet* dlv = list->at(i);
319 // free the list and elements back to C heap.
320 delete list;
321 }
322
323 }
324
325 #ifndef SHARK
326 // Compute the caller frame based on the sender sp of stub_frame and stored frame sizes info.
327 CodeBlob* cb = stub_frame.cb();
328 // Verify we have the right vframeArray
329 assert(cb->frame_size() >= 0, "Unexpected frame size");
330 intptr_t* unpack_sp = stub_frame.sp() + cb->frame_size();
331
332 // If the deopt call site is a MethodHandle invoke call site we have
333 // to adjust the unpack_sp.
334 nmethod* deoptee_nm = deoptee.cb()->as_nmethod_or_null();
335 if (deoptee_nm != NULL && deoptee_nm->is_method_handle_return(deoptee.pc()))
336 unpack_sp = deoptee.unextended_sp();
337
338 #ifdef ASSERT
339 assert(cb->is_deoptimization_stub() ||
340 cb->is_uncommon_trap_stub() ||
341 strcmp("Stub<DeoptimizationStub.deoptimizationHandler>", cb->name()) == 0 ||
342 strcmp("Stub<UncommonTrapStub.uncommonTrapHandler>", cb->name()) == 0,
343 err_msg("unexpected code blob: %s", cb->name()));
344 #endif
345 #else
346 intptr_t* unpack_sp = stub_frame.sender(&dummy_map).unextended_sp();
347 #endif // !SHARK
348
349 // This is a guarantee instead of an assert because if vframe doesn't match
350 // we will unpack the wrong deoptimized frame and wind up in strange places
351 // where it will be very difficult to figure out what went wrong. Better
352 // to die an early death here than some very obscure death later when the
353 // trail is cold.
354 // Note: on ia64 this guarantee can be fooled by frames with no memory stack
355 // in that it will fail to detect a problem when there is one. This needs
356 // more work in tiger timeframe.
357 guarantee(array->unextended_sp() == unpack_sp, "vframe_array_head must contain the vframeArray to unpack");
358
359 int number_of_frames = array->frames();
360
361 // Compute the vframes' sizes. Note that frame_sizes[] entries are ordered from outermost to innermost
362 // virtual activation, which is the reverse of the elements in the vframes array.
363 intptr_t* frame_sizes = NEW_C_HEAP_ARRAY(intptr_t, number_of_frames, mtCompiler);
726 callee_size_of_parameters = mh->size_of_parameters();
727 callee_max_locals = mh->max_locals();
728 is_top_frame = false;
729 }
730 }
731 #endif /* !PRODUCT */
732
733
734 return bt;
735 JRT_END
736
737
738 int Deoptimization::deoptimize_dependents() {
739 Threads::deoptimized_wrt_marked_nmethods();
740 return 0;
741 }
742
743 Deoptimization::DeoptAction Deoptimization::_unloaded_action
744 = Deoptimization::Action_reinterpret;
745
746 #if defined(COMPILER2) || INCLUDE_JVMCI
747 bool Deoptimization::realloc_objects(JavaThread* thread, frame* fr, GrowableArray<ScopeValue*>* objects, TRAPS) {
748 Handle pending_exception(thread->pending_exception());
749 const char* exception_file = thread->exception_file();
750 int exception_line = thread->exception_line();
751 thread->clear_pending_exception();
752
753 bool failures = false;
754
755 for (int i = 0; i < objects->length(); i++) {
756 assert(objects->at(i)->is_object(), "invalid debug information");
757 ObjectValue* sv = (ObjectValue*) objects->at(i);
758
759 KlassHandle k(java_lang_Class::as_Klass(sv->klass()->as_ConstantOopReadValue()->value()()));
760 oop obj = NULL;
761
762 if (k->oop_is_instance()) {
763 InstanceKlass* ik = InstanceKlass::cast(k());
764 obj = ik->allocate_instance(THREAD);
765 } else if (k->oop_is_typeArray()) {
766 TypeArrayKlass* ak = TypeArrayKlass::cast(k());
774
775 if (obj == NULL) {
776 failures = true;
777 }
778
779 assert(sv->value().is_null(), "redundant reallocation");
780 assert(obj != NULL || HAS_PENDING_EXCEPTION, "allocation should succeed or we should get an exception");
781 CLEAR_PENDING_EXCEPTION;
782 sv->set_value(obj);
783 }
784
785 if (failures) {
786 THROW_OOP_(Universe::out_of_memory_error_realloc_objects(), failures);
787 } else if (pending_exception.not_null()) {
788 thread->set_pending_exception(pending_exception(), exception_file, exception_line);
789 }
790
791 return failures;
792 }
793
794 // restore elements of an eliminated type array
795 void Deoptimization::reassign_type_array_elements(frame* fr, RegisterMap* reg_map, ObjectValue* sv, typeArrayOop obj, BasicType type) {
796 int index = 0;
797 intptr_t val;
798
799 for (int i = 0; i < sv->field_size(); i++) {
800 StackValue* value = StackValue::create_stack_value(fr, reg_map, sv->field_at(i));
801 switch(type) {
802 case T_LONG: case T_DOUBLE: {
803 assert(value->type() == T_INT, "Agreement.");
804 StackValue* low =
805 StackValue::create_stack_value(fr, reg_map, sv->field_at(++i));
806 #ifdef _LP64
807 jlong res = (jlong)low->get_int();
808 #else
809 #ifdef SPARC
810 // For SPARC we have to swap high and low words.
811 jlong res = jlong_from((jint)low->get_int(), (jint)value->get_int());
812 #else
813 jlong res = jlong_from((jint)value->get_int(), (jint)low->get_int());
814 #endif //SPARC
815 #endif
816 obj->long_at_put(index, res);
817 break;
818 }
819
820 // Have to cast to INT (32 bits) pointer to avoid little/big-endian problem.
821 case T_INT: case T_FLOAT: { // 4 bytes.
822 assert(value->type() == T_INT, "Agreement.");
823 bool big_value = false;
824 if (i + 1 < sv->field_size() && type == T_INT) {
825 if (sv->field_at(i)->is_location()) {
826 Location::Type type = ((LocationValue*) sv->field_at(i))->location().type();
827 if (type == Location::dbl || type == Location::lng) {
828 big_value = true;
829 }
830 } else if (sv->field_at(i)->is_constant_int()) {
831 ScopeValue* next_scope_field = sv->field_at(i + 1);
832 if (next_scope_field->is_constant_long() || next_scope_field->is_constant_double()) {
833 big_value = true;
834 }
835 }
836 }
837
838 if (big_value) {
839 StackValue* low = StackValue::create_stack_value(fr, reg_map, sv->field_at(++i));
840 #ifdef _LP64
841 jlong res = (jlong)low->get_int();
842 #else
843 #ifdef SPARC
844 // For SPARC we have to swap high and low words.
845 jlong res = jlong_from((jint)low->get_int(), (jint)value->get_int());
846 #else
847 jlong res = jlong_from((jint)value->get_int(), (jint)low->get_int());
848 #endif //SPARC
849 #endif
850 obj->int_at_put(index, (jint)*((jint*)&res));
851 obj->int_at_put(++index, (jint)*(((jint*)&res) + 1));
852 } else {
853 val = value->get_int();
854 obj->int_at_put(index, (jint)*((jint*)&val));
855 }
856 break;
857 }
858
859 case T_SHORT: case T_CHAR: // 2 bytes
860 assert(value->type() == T_INT, "Agreement.");
861 val = value->get_int();
862 obj->short_at_put(index, (jshort)*((jint*)&val));
863 break;
864
865 case T_BOOLEAN: case T_BYTE: // 1 byte
866 assert(value->type() == T_INT, "Agreement.");
867 val = value->get_int();
868 obj->bool_at_put(index, (jboolean)*((jint*)&val));
869 break;
870
871 default:
872 ShouldNotReachHere();
873 }
874 index++;
875 }
876 }
877
878
879 // restore fields of an eliminated object array
880 void Deoptimization::reassign_object_array_elements(frame* fr, RegisterMap* reg_map, ObjectValue* sv, objArrayOop obj) {
881 for (int i = 0; i < sv->field_size(); i++) {
882 StackValue* value = StackValue::create_stack_value(fr, reg_map, sv->field_at(i));
883 assert(value->type() == T_OBJECT, "object element expected");
884 obj->obj_at_put(i, value->get_obj()());
885 }
886 }
887
888 class ReassignedField {
889 public:
890 int _offset;
891 BasicType _type;
892 public:
893 ReassignedField() {
894 _offset = 0;
895 _type = T_ILLEGAL;
896 }
897 };
898
899 int compare(ReassignedField* left, ReassignedField* right) {
900 return left->_offset - right->_offset;
901 }
902
903 // Restore fields of an eliminated instance object using the same field order
904 // returned by HotSpotResolvedObjectTypeImpl.getInstanceFields(true)
905 static int reassign_fields_by_klass(InstanceKlass* klass, frame* fr, RegisterMap* reg_map, ObjectValue* sv, int svIndex, oop obj, bool skip_internal) {
906 if (klass->superklass() != NULL) {
907 svIndex = reassign_fields_by_klass(klass->superklass(), fr, reg_map, sv, svIndex, obj, skip_internal);
908 }
909
910 GrowableArray<ReassignedField>* fields = new GrowableArray<ReassignedField>();
911 for (AllFieldStream fs(klass); !fs.done(); fs.next()) {
912 if (!fs.access_flags().is_static() && (!skip_internal || !fs.access_flags().is_internal())) {
913 ReassignedField field;
914 field._offset = fs.offset();
915 field._type = FieldType::basic_type(fs.signature());
916 fields->append(field);
917 }
918 }
919 fields->sort(compare);
920 for (int i = 0; i < fields->length(); i++) {
921 intptr_t val;
922 ScopeValue* scope_field = sv->field_at(svIndex);
923 StackValue* value = StackValue::create_stack_value(fr, reg_map, scope_field);
924 int offset = fields->at(i)._offset;
925 BasicType type = fields->at(i)._type;
926 switch (type) {
927 case T_OBJECT: case T_ARRAY:
928 assert(value->type() == T_OBJECT, "Agreement.");
929 obj->obj_field_put(offset, value->get_obj()());
930 break;
931
932 // Have to cast to INT (32 bits) pointer to avoid little/big-endian problem.
933 case T_INT: case T_FLOAT: { // 4 bytes.
934 assert(value->type() == T_INT, "Agreement.");
935 bool big_value = false;
936 if (i+1 < fields->length() && fields->at(i+1)._type == T_INT) {
937 if (scope_field->is_location()) {
938 Location::Type type = ((LocationValue*) scope_field)->location().type();
939 if (type == Location::dbl || type == Location::lng) {
940 big_value = true;
941 }
942 }
943 if (scope_field->is_constant_int()) {
944 ScopeValue* next_scope_field = sv->field_at(svIndex + 1);
945 if (next_scope_field->is_constant_long() || next_scope_field->is_constant_double()) {
946 big_value = true;
947 }
948 }
949 }
950
951 if (big_value) {
952 i++;
953 assert(i < fields->length(), "second T_INT field needed");
954 assert(fields->at(i)._type == T_INT, "T_INT field needed");
955 } else {
956 val = value->get_int();
957 obj->int_field_put(offset, (jint)*((jint*)&val));
958 break;
959 }
960 }
961 /* no break */
962
963 case T_LONG: case T_DOUBLE: {
964 assert(value->type() == T_INT, "Agreement.");
965 StackValue* low = StackValue::create_stack_value(fr, reg_map, sv->field_at(++svIndex));
966 #ifdef _LP64
967 jlong res = (jlong)low->get_int();
968 #else
969 #ifdef SPARC
970 // For SPARC we have to swap high and low words.
971 jlong res = jlong_from((jint)low->get_int(), (jint)value->get_int());
972 #else
973 jlong res = jlong_from((jint)value->get_int(), (jint)low->get_int());
974 #endif //SPARC
975 #endif
976 obj->long_field_put(offset, res);
977 break;
978 }
979
980 case T_SHORT: case T_CHAR: // 2 bytes
981 assert(value->type() == T_INT, "Agreement.");
982 val = value->get_int();
983 obj->short_field_put(offset, (jshort)*((jint*)&val));
984 break;
985
986 case T_BOOLEAN: case T_BYTE: // 1 byte
987 assert(value->type() == T_INT, "Agreement.");
988 val = value->get_int();
989 obj->bool_field_put(offset, (jboolean)*((jint*)&val));
990 break;
991
992 default:
993 ShouldNotReachHere();
994 }
995 svIndex++;
996 }
997 return svIndex;
998 }
999
1000 // restore fields of all eliminated objects and arrays
1001 void Deoptimization::reassign_fields(frame* fr, RegisterMap* reg_map, GrowableArray<ScopeValue*>* objects, bool realloc_failures, bool skip_internal) {
1002 for (int i = 0; i < objects->length(); i++) {
1003 ObjectValue* sv = (ObjectValue*) objects->at(i);
1004 KlassHandle k(java_lang_Class::as_Klass(sv->klass()->as_ConstantOopReadValue()->value()()));
1005 Handle obj = sv->value();
1006 assert(obj.not_null() || realloc_failures, "reallocation was missed");
1007 if (PrintDeoptimizationDetails) {
1008 tty->print_cr("reassign fields for object of type %s!", k->name()->as_C_string());
1009 }
1010 if (obj.is_null()) {
1011 continue;
1012 }
1013
1014 if (k->oop_is_instance()) {
1015 InstanceKlass* ik = InstanceKlass::cast(k());
1016 reassign_fields_by_klass(ik, fr, reg_map, sv, 0, obj(), skip_internal);
1017 } else if (k->oop_is_typeArray()) {
1018 TypeArrayKlass* ak = TypeArrayKlass::cast(k());
1019 reassign_type_array_elements(fr, reg_map, sv, (typeArrayOop) obj(), ak->element_type());
1020 } else if (k->oop_is_objArray()) {
1021 reassign_object_array_elements(fr, reg_map, sv, (objArrayOop) obj());
1022 }
1023 }
1024 }
1025
1026
1027 // relock objects for which synchronization was eliminated
1028 void Deoptimization::relock_objects(GrowableArray<MonitorInfo*>* monitors, JavaThread* thread, bool realloc_failures) {
1029 for (int i = 0; i < monitors->length(); i++) {
1030 MonitorInfo* mon_info = monitors->at(i);
1031 if (mon_info->eliminated()) {
1032 assert(!mon_info->owner_is_scalar_replaced() || realloc_failures, "reallocation was missed");
1033 if (!mon_info->owner_is_scalar_replaced()) {
1034 Handle obj = Handle(mon_info->owner());
1035 markOop mark = obj->mark();
1036 if (UseBiasedLocking && mark->has_bias_pattern()) {
1061 ObjectValue* sv = (ObjectValue*) objects->at(i);
1062 KlassHandle k(java_lang_Class::as_Klass(sv->klass()->as_ConstantOopReadValue()->value()()));
1063 Handle obj = sv->value();
1064
1065 tty->print(" object <" INTPTR_FORMAT "> of type ", (void *)sv->value()());
1066 k->print_value();
1067 assert(obj.not_null() || realloc_failures, "reallocation was missed");
1068 if (obj.is_null()) {
1069 tty->print(" allocation failed");
1070 } else {
1071 tty->print(" allocated (%d bytes)", obj->size() * HeapWordSize);
1072 }
1073 tty->cr();
1074
1075 if (Verbose && !obj.is_null()) {
1076 k->oop_print_on(obj(), tty);
1077 }
1078 }
1079 }
1080 #endif
1081 #endif // COMPILER2 || INCLUDE_JVMCI
1082
1083 vframeArray* Deoptimization::create_vframeArray(JavaThread* thread, frame fr, RegisterMap *reg_map, GrowableArray<compiledVFrame*>* chunk, bool realloc_failures) {
1084 Events::log(thread, "DEOPT PACKING pc=" INTPTR_FORMAT " sp=" INTPTR_FORMAT, fr.pc(), fr.sp());
1085
1086 #ifndef PRODUCT
1087 if (PrintDeoptimizationDetails) {
1088 ttyLocker ttyl;
1089 tty->print("DEOPT PACKING thread " INTPTR_FORMAT " ", thread);
1090 fr.print_on(tty);
1091 tty->print_cr(" Virtual frames (innermost first):");
1092 for (int index = 0; index < chunk->length(); index++) {
1093 compiledVFrame* vf = chunk->at(index);
1094 tty->print(" %2d - ", index);
1095 vf->print_value();
1096 int bci = chunk->at(index)->raw_bci();
1097 const char* code_name;
1098 if (bci == SynchronizationEntryBCI) {
1099 code_name = "sync entry";
1100 } else {
1101 Bytecodes::Code code = vf->method()->code_at(bci);
1102 code_name = Bytecodes::name(code);
1103 }
1104 tty->print(" - %s", code_name);
1105 tty->print_cr(" @ bci %d ", bci);
1106 if (Verbose) {
1107 vf->print();
1112 #endif
1113
1114 // Register map for next frame (used for stack crawl). We capture
1115 // the state of the deopt'ing frame's caller. Thus if we need to
1116 // stuff a C2I adapter we can properly fill in the callee-save
1117 // register locations.
1118 frame caller = fr.sender(reg_map);
1119 int frame_size = caller.sp() - fr.sp();
1120
1121 frame sender = caller;
1122
1123 // Since the Java thread being deoptimized will eventually adjust it's own stack,
1124 // the vframeArray containing the unpacking information is allocated in the C heap.
1125 // For Compiler1, the caller of the deoptimized frame is saved for use by unpack_frames().
1126 vframeArray* array = vframeArray::allocate(thread, frame_size, chunk, reg_map, sender, caller, fr, realloc_failures);
1127
1128 // Compare the vframeArray to the collected vframes
1129 assert(array->structural_compare(thread, chunk), "just checking");
1130
1131 #ifndef PRODUCT
1132 if (PrintDeoptimizationDetails) {
1133 ttyLocker ttyl;
1134 tty->print_cr(" Created vframeArray " INTPTR_FORMAT, array);
1135 }
1136 #endif // PRODUCT
1137
1138 return array;
1139 }
1140
1141 #if defined(COMPILER2) || INCLUDE_JVMCI
1142 void Deoptimization::pop_frames_failed_reallocs(JavaThread* thread, vframeArray* array) {
1143 // Reallocation of some scalar replaced objects failed. Record
1144 // that we need to pop all the interpreter frames for the
1145 // deoptimized compiled frame.
1146 assert(thread->frames_to_pop_failed_realloc() == 0, "missed frames to pop?");
1147 thread->set_frames_to_pop_failed_realloc(array->frames());
1148 // Unlock all monitors here otherwise the interpreter will see a
1149 // mix of locked and unlocked monitors (because of failed
1150 // reallocations of synchronized objects) and be confused.
1151 for (int i = 0; i < array->frames(); i++) {
1152 MonitorChunk* monitors = array->element(i)->monitors();
1153 if (monitors != NULL) {
1154 for (int j = 0; j < monitors->number_of_monitors(); j++) {
1155 BasicObjectLock* src = monitors->at(j);
1156 if (src->obj() != NULL) {
1157 ObjectSynchronizer::fast_exit(src->obj(), src->lock(), thread);
1158 }
1159 }
1160 array->element(i)->free_monitors(thread);
1161 #ifdef ASSERT
1229 while (!sfs.is_done()) {
1230 frame* cur = sfs.current();
1231 if (cb->contains(cur->pc())) {
1232 vframe* vf = vframe::new_vframe(cur, sfs.register_map(), jt);
1233 compiledVFrame* cvf = compiledVFrame::cast(vf);
1234 // Revoke monitors' biases in all scopes
1235 while (!cvf->is_top()) {
1236 collect_monitors(cvf, objects_to_revoke);
1237 cvf = compiledVFrame::cast(cvf->sender());
1238 }
1239 collect_monitors(cvf, objects_to_revoke);
1240 }
1241 sfs.next();
1242 }
1243 }
1244 }
1245 BiasedLocking::revoke_at_safepoint(objects_to_revoke);
1246 }
1247
1248
1249 void Deoptimization::deoptimize_single_frame(JavaThread* thread, frame fr, Deoptimization::DeoptReason reason) {
1250 assert(fr.can_be_deoptimized(), "checking frame type");
1251
1252 gather_statistics(reason, Action_none, Bytecodes::_illegal);
1253
1254 if (LogCompilation && xtty != NULL) {
1255 nmethod* nm = fr.cb()->as_nmethod_or_null();
1256 assert(nm != NULL, "only compiled methods can deopt");
1257
1258 ttyLocker ttyl;
1259 xtty->begin_head("deoptimized thread='" UINTX_FORMAT "'", thread->osthread()->thread_id());
1260 nm->log_identity(xtty);
1261 xtty->end_head();
1262 for (ScopeDesc* sd = nm->scope_desc_at(fr.pc()); ; sd = sd->sender()) {
1263 xtty->begin_elem("jvms bci='%d'", sd->bci());
1264 xtty->method(sd->method());
1265 xtty->end_elem();
1266 if (sd->is_top()) break;
1267 }
1268 xtty->tail("deoptimized");
1269 }
1270
1271 // Patch the compiled method so that when execution returns to it we will
1272 // deopt the execution state and return to the interpreter.
1273 fr.deoptimize(thread);
1274 }
1275
1276 void Deoptimization::deoptimize(JavaThread* thread, frame fr, RegisterMap *map) {
1277 deoptimize(thread, fr, map, Reason_constraint);
1278 }
1279
1280 void Deoptimization::deoptimize(JavaThread* thread, frame fr, RegisterMap *map, DeoptReason reason) {
1281 // Deoptimize only if the frame comes from compile code.
1282 // Do not deoptimize the frame which is already patched
1283 // during the execution of the loops below.
1284 if (!fr.is_compiled_frame() || fr.is_deoptimized_frame()) {
1285 return;
1286 }
1287 ResourceMark rm;
1288 DeoptimizationMarker dm;
1289 if (UseBiasedLocking) {
1290 revoke_biases_of_monitors(thread, fr, map);
1291 }
1292 deoptimize_single_frame(thread, fr, reason);
1293
1294 }
1295
1296
1297 void Deoptimization::deoptimize_frame_internal(JavaThread* thread, intptr_t* id, DeoptReason reason) {
1298 assert(thread == Thread::current() || SafepointSynchronize::is_at_safepoint(),
1299 "can only deoptimize other thread at a safepoint");
1300 // Compute frame and register map based on thread and sp.
1301 RegisterMap reg_map(thread, UseBiasedLocking);
1302 frame fr = thread->last_frame();
1303 while (fr.id() != id) {
1304 fr = fr.sender(®_map);
1305 }
1306 deoptimize(thread, fr, ®_map, reason);
1307 }
1308
1309
1310 void Deoptimization::deoptimize_frame(JavaThread* thread, intptr_t* id, DeoptReason reason) {
1311 if (thread == Thread::current()) {
1312 Deoptimization::deoptimize_frame_internal(thread, id, reason);
1313 } else {
1314 VM_DeoptimizeFrame deopt(thread, id, reason);
1315 VMThread::execute(&deopt);
1316 }
1317 }
1318
1319 void Deoptimization::deoptimize_frame(JavaThread* thread, intptr_t* id) {
1320 deoptimize_frame(thread, id, Reason_constraint);
1321 }
1322
1323 // JVMTI PopFrame support
1324 JRT_LEAF(void, Deoptimization::popframe_preserve_args(JavaThread* thread, int bytes_to_save, void* start_address))
1325 {
1326 thread->popframe_preserve_args(in_ByteSize(bytes_to_save), start_address);
1327 }
1328 JRT_END
1329
1330 MethodData*
1331 Deoptimization::get_method_data(JavaThread* thread, methodHandle m,
1332 bool create_if_missing) {
1333 Thread* THREAD = thread;
1334 MethodData* mdo = m()->method_data();
1335 if (mdo == NULL && create_if_missing && !HAS_PENDING_EXCEPTION) {
1336 // Build an MDO. Ignore errors like OutOfMemory;
1337 // that simply means we won't have an MDO to update.
1338 Method::build_interpreter_method_data(m, THREAD);
1339 if (HAS_PENDING_EXCEPTION) {
1340 assert((PENDING_EXCEPTION->is_a(SystemDictionary::OutOfMemoryError_klass())), "we expect only an OOM error here");
1341 CLEAR_PENDING_EXCEPTION;
1342 }
1343 mdo = m()->method_data();
1344 }
1345 return mdo;
1346 }
1347
1348 #if defined(COMPILER2) || defined(SHARK) || INCLUDE_JVMCI
1349 void Deoptimization::load_class_by_index(constantPoolHandle constant_pool, int index, TRAPS) {
1350 // in case of an unresolved klass entry, load the class.
1351 if (constant_pool->tag_at(index).is_unresolved_klass()) {
1352 Klass* tk = constant_pool->klass_at_ignore_error(index, CHECK);
1353 return;
1354 }
1355
1356 if (!constant_pool->tag_at(index).is_symbol()) return;
1357
1358 Handle class_loader (THREAD, constant_pool->pool_holder()->class_loader());
1359 Symbol* symbol = constant_pool->symbol_at(index);
1360
1361 // class name?
1362 if (symbol->byte_at(0) != '(') {
1363 Handle protection_domain (THREAD, constant_pool->pool_holder()->protection_domain());
1364 SystemDictionary::resolve_or_null(symbol, class_loader, protection_domain, CHECK);
1365 return;
1366 }
1367
1368 // then it must be a signature!
1391 // stack otherwise if we return to the uncommon trap blob and the
1392 // stack bang causes a stack overflow we crash.
1393 assert(THREAD->is_Java_thread(), "only a java thread can be here");
1394 JavaThread* thread = (JavaThread*)THREAD;
1395 bool guard_pages_enabled = thread->stack_yellow_zone_enabled();
1396 if (!guard_pages_enabled) guard_pages_enabled = thread->reguard_stack();
1397 assert(guard_pages_enabled, "stack banging in uncommon trap blob may cause crash");
1398 }
1399 }
1400
1401 JRT_ENTRY(void, Deoptimization::uncommon_trap_inner(JavaThread* thread, jint trap_request)) {
1402 HandleMark hm;
1403
1404 // uncommon_trap() is called at the beginning of the uncommon trap
1405 // handler. Note this fact before we start generating temporary frames
1406 // that can confuse an asynchronous stack walker. This counter is
1407 // decremented at the end of unpack_frames().
1408 thread->inc_in_deopt_handler();
1409
1410 // We need to update the map if we have biased locking.
1411 #if INCLUDE_JVMCI
1412 // JVMCI might need to get an exception from the stack, which in turn requires the register map to be valid
1413 RegisterMap reg_map(thread, true);
1414 #else
1415 RegisterMap reg_map(thread, UseBiasedLocking);
1416 #endif
1417 frame stub_frame = thread->last_frame();
1418 frame fr = stub_frame.sender(®_map);
1419 // Make sure the calling nmethod is not getting deoptimized and removed
1420 // before we are done with it.
1421 nmethodLocker nl(fr.pc());
1422
1423 // Log a message
1424 Events::log(thread, "Uncommon trap: trap_request=" PTR32_FORMAT " fr.pc=" INTPTR_FORMAT " relative=" INTPTR_FORMAT,
1425 trap_request, fr.pc(), fr.pc() - fr.cb()->code_begin());
1426
1427 {
1428 ResourceMark rm;
1429
1430 // Revoke biases of any monitors in the frame to ensure we can migrate them
1431 revoke_biases_of_monitors(thread, fr, ®_map);
1432
1433 DeoptReason reason = trap_request_reason(trap_request);
1434 DeoptAction action = trap_request_action(trap_request);
1435 #if INCLUDE_JVMCI
1436 int debug_id = trap_request_debug_id(trap_request);
1437 #endif
1438 jint unloaded_class_index = trap_request_index(trap_request); // CP idx or -1
1439
1440 vframe* vf = vframe::new_vframe(&fr, ®_map, thread);
1441 compiledVFrame* cvf = compiledVFrame::cast(vf);
1442
1443 nmethod* nm = cvf->code();
1444
1445 ScopeDesc* trap_scope = cvf->scope();
1446
1447 if (TraceDeoptimization) {
1448 ttyLocker ttyl;
1449 tty->print_cr(" bci=%d pc=" INTPTR_FORMAT ", relative_pc=%d, method=%s" JVMCI_ONLY(", debug_id=%d"), trap_scope->bci(), fr.pc(), fr.pc() - nm->code_begin(), trap_scope->method()->name_and_sig_as_C_string()
1450 #if INCLUDE_JVMCI
1451 , debug_id
1452 #endif
1453 );
1454 }
1455
1456 methodHandle trap_method = trap_scope->method();
1457 int trap_bci = trap_scope->bci();
1458 #if INCLUDE_JVMCI
1459 oop speculation = thread->pending_failed_speculation();
1460 if (nm->is_compiled_by_jvmci()) {
1461 if (speculation != NULL) {
1462 oop speculation_log = nm->speculation_log();
1463 if (speculation_log != NULL) {
1464 if (TraceDeoptimization || TraceUncollectedSpeculations) {
1465 if (SpeculationLog::lastFailed(speculation_log) != NULL) {
1466 tty->print_cr("A speculation that was not collected by the compiler is being overwritten");
1467 }
1468 }
1469 if (TraceDeoptimization) {
1470 tty->print_cr("Saving speculation to speculation log");
1471 }
1472 SpeculationLog::set_lastFailed(speculation_log, speculation);
1473 } else {
1474 if (TraceDeoptimization) {
1475 tty->print_cr("Speculation present but no speculation log");
1476 }
1477 }
1478 thread->set_pending_failed_speculation(NULL);
1479 } else {
1480 if (TraceDeoptimization) {
1481 tty->print_cr("No speculation");
1482 }
1483 }
1484 } else {
1485 assert(speculation == NULL, "There should not be a speculation for method compiled by non-JVMCI compilers");
1486 }
1487
1488 if (trap_bci == SynchronizationEntryBCI) {
1489 trap_bci = 0;
1490 thread->set_pending_monitorenter(true);
1491 }
1492
1493 if (reason == Deoptimization::Reason_transfer_to_interpreter) {
1494 thread->set_pending_transfer_to_interpreter(true);
1495 }
1496 #endif
1497
1498 Bytecodes::Code trap_bc = trap_method->java_code_at(trap_bci);
1499
1500 if (trap_scope->rethrow_exception()) {
1501 if (PrintDeoptimizationDetails) {
1502 tty->print_cr("Exception to be rethrown in the interpreter for method %s::%s at bci %d", trap_method->method_holder()->name()->as_C_string(), trap_method->name()->as_C_string(), trap_bci);
1503 }
1504 GrowableArray<ScopeValue*>* expressions = trap_scope->expressions();
1505 guarantee(expressions != NULL, "must have exception to throw");
1506 ScopeValue* topOfStack = expressions->top();
1507 Handle topOfStackObj = StackValue::create_stack_value(&fr, ®_map, topOfStack)->get_obj();
1508 THREAD->set_pending_exception(topOfStackObj(), NULL, 0);
1509 }
1510
1511 // Record this event in the histogram.
1512 gather_statistics(reason, action, trap_bc);
1513
1514 // Ensure that we can record deopt. history:
1515 // Need MDO to record RTM code generation state.
1516 bool create_if_missing = ProfileTraps || UseCodeAging RTM_OPT_ONLY( || UseRTMLocking );
1517
1518 methodHandle profiled_method;
1519 #if INCLUDE_JVMCI
1520 if (nm->is_compiled_by_jvmci()) {
1521 profiled_method = nm->method();
1522 } else {
1523 profiled_method = trap_method;
1524 }
1525 #else
1526 profiled_method = trap_method;
1527 #endif
1528
1529 MethodData* trap_mdo =
1530 get_method_data(thread, profiled_method, create_if_missing);
1531
1532 // Log a message
1533 Events::log_deopt_message(thread, "Uncommon trap: reason=%s action=%s pc=" INTPTR_FORMAT " method=%s @ %d",
1534 trap_reason_name(reason), trap_action_name(action), fr.pc(),
1535 trap_method->name_and_sig_as_C_string(), trap_bci);
1536
1537 // Print a bunch of diagnostics, if requested.
1538 if (TraceDeoptimization || LogCompilation) {
1539 ResourceMark rm;
1540 ttyLocker ttyl;
1541 char buf[100];
1542 if (xtty != NULL) {
1543 xtty->begin_head("uncommon_trap thread='" UINTX_FORMAT "' %s",
1544 os::current_thread_id(),
1545 format_trap_request(buf, sizeof(buf), trap_request));
1546 nm->log_identity(xtty);
1547 }
1548 Symbol* class_name = NULL;
1549 bool unresolved = false;
1550 if (unloaded_class_index >= 0) {
1568 if (dcnt != 0)
1569 xtty->print(" count='%d'", dcnt);
1570 ProfileData* pdata = trap_mdo->bci_to_data(trap_bci);
1571 int dos = (pdata == NULL)? 0: pdata->trap_state();
1572 if (dos != 0) {
1573 xtty->print(" state='%s'", format_trap_state(buf, sizeof(buf), dos));
1574 if (trap_state_is_recompiled(dos)) {
1575 int recnt2 = trap_mdo->overflow_recompile_count();
1576 if (recnt2 != 0)
1577 xtty->print(" recompiles2='%d'", recnt2);
1578 }
1579 }
1580 }
1581 if (xtty != NULL) {
1582 xtty->stamp();
1583 xtty->end_head();
1584 }
1585 if (TraceDeoptimization) { // make noise on the tty
1586 tty->print("Uncommon trap occurred in");
1587 nm->method()->print_short_name(tty);
1588 tty->print(" compiler=%s compile_id=%d", nm->compiler() == NULL ? "" : nm->compiler()->name(), nm->compile_id());
1589 #if INCLUDE_JVMCI
1590 oop installedCode = nm->jvmci_installed_code();
1591 if (installedCode != NULL) {
1592 oop installedCodeName = NULL;
1593 if (installedCode->is_a(InstalledCode::klass())) {
1594 installedCodeName = InstalledCode::name(installedCode);
1595 }
1596 if (installedCodeName != NULL) {
1597 tty->print(" (JVMCI: installedCodeName=%s) ", java_lang_String::as_utf8_string(installedCodeName));
1598 } else {
1599 tty->print(" (JVMCI: installed code has no name) ");
1600 }
1601 } else if (nm->is_compiled_by_jvmci()) {
1602 tty->print(" (JVMCI: no installed code) ");
1603 }
1604 #endif
1605 tty->print(" (@" INTPTR_FORMAT ") thread=" UINTX_FORMAT " reason=%s action=%s unloaded_class_index=%d" JVMCI_ONLY(" debug_id=%d"),
1606 fr.pc(),
1607 os::current_thread_id(),
1608 trap_reason_name(reason),
1609 trap_action_name(action),
1610 unloaded_class_index
1611 #if INCLUDE_JVMCI
1612 , debug_id
1613 #endif
1614 );
1615 if (class_name != NULL) {
1616 tty->print(unresolved ? " unresolved class: " : " symbol: ");
1617 class_name->print_symbol_on(tty);
1618 }
1619 tty->cr();
1620 }
1621 if (xtty != NULL) {
1622 // Log the precise location of the trap.
1623 for (ScopeDesc* sd = trap_scope; ; sd = sd->sender()) {
1624 xtty->begin_elem("jvms bci='%d'", sd->bci());
1625 xtty->method(sd->method());
1626 xtty->end_elem();
1627 if (sd->is_top()) break;
1628 }
1629 xtty->tail("uncommon_trap");
1630 }
1631 }
1632 // (End diagnostic printout.)
1633
1634 // Load class if necessary
1728 case Action_make_not_compilable:
1729 // Give up on compiling this method at all.
1730 make_not_entrant = true;
1731 make_not_compilable = true;
1732 break;
1733 default:
1734 ShouldNotReachHere();
1735 }
1736
1737 // Setting +ProfileTraps fixes the following, on all platforms:
1738 // 4852688: ProfileInterpreter is off by default for ia64. The result is
1739 // infinite heroic-opt-uncommon-trap/deopt/recompile cycles, since the
1740 // recompile relies on a MethodData* to record heroic opt failures.
1741
1742 // Whether the interpreter is producing MDO data or not, we also need
1743 // to use the MDO to detect hot deoptimization points and control
1744 // aggressive optimization.
1745 bool inc_recompile_count = false;
1746 ProfileData* pdata = NULL;
1747 if (ProfileTraps && update_trap_state && trap_mdo != NULL) {
1748 assert(trap_mdo == get_method_data(thread, profiled_method, false), "sanity");
1749 uint this_trap_count = 0;
1750 bool maybe_prior_trap = false;
1751 bool maybe_prior_recompile = false;
1752 pdata = query_update_method_data(trap_mdo, trap_bci, reason, true,
1753 #if INCLUDE_JVMCI
1754 nm->is_compiled_by_jvmci() && nm->is_osr_method(),
1755 #endif
1756 nm->method(),
1757 //outputs:
1758 this_trap_count,
1759 maybe_prior_trap,
1760 maybe_prior_recompile);
1761 // Because the interpreter also counts null, div0, range, and class
1762 // checks, these traps from compiled code are double-counted.
1763 // This is harmless; it just means that the PerXTrapLimit values
1764 // are in effect a little smaller than they look.
1765
1766 DeoptReason per_bc_reason = reason_recorded_per_bytecode_if_any(reason);
1767 if (per_bc_reason != Reason_none) {
1768 // Now take action based on the partially known per-BCI history.
1769 if (maybe_prior_trap
1770 && this_trap_count >= (uint)PerBytecodeTrapLimit) {
1771 // If there are too many traps at this BCI, force a recompile.
1772 // This will allow the compiler to see the limit overflow, and
1773 // take corrective action, if possible. The compiler generally
1774 // does not use the exact PerBytecodeTrapLimit value, but instead
1775 // changes its tactics if it sees any traps at all. This provides
1867 // Reprofile
1868 if (reprofile) {
1869 CompilationPolicy::policy()->reprofile(trap_scope, nm->is_osr_method());
1870 }
1871
1872 // Give up compiling
1873 if (make_not_compilable && !nm->method()->is_not_compilable(CompLevel_full_optimization)) {
1874 assert(make_not_entrant, "consistent");
1875 nm->method()->set_not_compilable(CompLevel_full_optimization);
1876 }
1877
1878 } // Free marked resources
1879
1880 }
1881 JRT_END
1882
1883 ProfileData*
1884 Deoptimization::query_update_method_data(MethodData* trap_mdo,
1885 int trap_bci,
1886 Deoptimization::DeoptReason reason,
1887 bool update_total_trap_count,
1888 #if INCLUDE_JVMCI
1889 bool is_osr,
1890 #endif
1891 Method* compiled_method,
1892 //outputs:
1893 uint& ret_this_trap_count,
1894 bool& ret_maybe_prior_trap,
1895 bool& ret_maybe_prior_recompile) {
1896 bool maybe_prior_trap = false;
1897 bool maybe_prior_recompile = false;
1898 uint this_trap_count = 0;
1899 if (update_total_trap_count) {
1900 uint idx = reason;
1901 #if INCLUDE_JVMCI
1902 if (is_osr) {
1903 idx += Reason_LIMIT;
1904 }
1905 #endif
1906 uint prior_trap_count = trap_mdo->trap_count(idx);
1907 this_trap_count = trap_mdo->inc_trap_count(idx);
1908
1909 // If the runtime cannot find a place to store trap history,
1910 // it is estimated based on the general condition of the method.
1911 // If the method has ever been recompiled, or has ever incurred
1912 // a trap with the present reason , then this BCI is assumed
1913 // (pessimistically) to be the culprit.
1914 maybe_prior_trap = (prior_trap_count != 0);
1915 maybe_prior_recompile = (trap_mdo->decompile_count() != 0);
1916 }
1917 ProfileData* pdata = NULL;
1918
1919
1920 // For reasons which are recorded per bytecode, we check per-BCI data.
1921 DeoptReason per_bc_reason = reason_recorded_per_bytecode_if_any(reason);
1922 assert(per_bc_reason != Reason_none || update_total_trap_count, "must be");
1923 if (per_bc_reason != Reason_none) {
1924 // Find the profile data for this BCI. If there isn't one,
1925 // try to allocate one from the MDO's set of spares.
1926 // This will let us detect a repeated trap at this point.
1927 pdata = trap_mdo->allocate_bci_to_data(trap_bci, reason_is_speculate(reason) ? compiled_method : NULL);
1928
1929 if (pdata != NULL) {
1930 if (reason_is_speculate(reason) && !pdata->is_SpeculativeTrapData()) {
1931 if (LogCompilation && xtty != NULL) {
1932 ttyLocker ttyl;
1933 // no more room for speculative traps in this MDO
1934 xtty->elem("speculative_traps_oom");
1935 }
1936 }
1937 // Query the trap state of this profile datum.
1938 int tstate0 = pdata->trap_state();
1939 if (!trap_state_has_reason(tstate0, per_bc_reason))
1940 maybe_prior_trap = false;
1941 if (!trap_state_is_recompiled(tstate0))
1942 maybe_prior_recompile = false;
1955 xtty->elem("missing_mdp bci='%d'", trap_bci);
1956 }
1957 }
1958 }
1959
1960 // Return results:
1961 ret_this_trap_count = this_trap_count;
1962 ret_maybe_prior_trap = maybe_prior_trap;
1963 ret_maybe_prior_recompile = maybe_prior_recompile;
1964 return pdata;
1965 }
1966
1967 void
1968 Deoptimization::update_method_data_from_interpreter(MethodData* trap_mdo, int trap_bci, int reason) {
1969 ResourceMark rm;
1970 // Ignored outputs:
1971 uint ignore_this_trap_count;
1972 bool ignore_maybe_prior_trap;
1973 bool ignore_maybe_prior_recompile;
1974 assert(!reason_is_speculate(reason), "reason speculate only used by compiler");
1975 // JVMCI uses the total counts to determine if deoptimizations are happening too frequently -> do not adjust total counts
1976 bool update_total_counts = JVMCI_ONLY(false) NOT_JVMCI(true);
1977 query_update_method_data(trap_mdo, trap_bci,
1978 (DeoptReason)reason,
1979 update_total_counts,
1980 #if INCLUDE_JVMCI
1981 false,
1982 #endif
1983 NULL,
1984 ignore_this_trap_count,
1985 ignore_maybe_prior_trap,
1986 ignore_maybe_prior_recompile);
1987 }
1988
1989 Deoptimization::UnrollBlock* Deoptimization::uncommon_trap(JavaThread* thread, jint trap_request) {
1990 if (TraceDeoptimization) {
1991 tty->print("Uncommon trap ");
1992 }
1993 // Still in Java no safepoints
1994 {
1995 // This enters VM and may safepoint
1996 uncommon_trap_inner(thread, trap_request);
1997 }
1998 return fetch_unroll_info_helper(thread);
1999 }
2000
2001 // Local derived constants.
2002 // Further breakdown of DataLayout::trap_state, as promised by DataLayout.
2003 const int DS_REASON_MASK = DataLayout::trap_mask >> 1;
2004 const int DS_RECOMPILE_BIT = DataLayout::trap_mask - DS_REASON_MASK;
2005
2006 //---------------------------trap_state_reason---------------------------------
2007 Deoptimization::DeoptReason
2008 Deoptimization::trap_state_reason(int trap_state) {
2009 // This assert provides the link between the width of DataLayout::trap_bits
2010 // and the encoding of "recorded" reasons. It ensures there are enough
2011 // bits to store all needed reasons in the per-BCI MDO profile.
2012 assert(DS_REASON_MASK >= Reason_RECORDED_LIMIT, "enough bits");
2077 size_t len;
2078 if (decoded_state != trap_state) {
2079 // Random buggy state that doesn't decode??
2080 len = jio_snprintf(buf, buflen, "#%d", trap_state);
2081 } else {
2082 len = jio_snprintf(buf, buflen, "%s%s",
2083 trap_reason_name(reason),
2084 recomp_flag ? " recompiled" : "");
2085 }
2086 if (len >= buflen)
2087 buf[buflen-1] = '\0';
2088 return buf;
2089 }
2090
2091
2092 //--------------------------------statics--------------------------------------
2093 const char* Deoptimization::_trap_reason_name[] = {
2094 // Note: Keep this in sync. with enum DeoptReason.
2095 "none",
2096 "null_check",
2097 "null_assert" JVMCI_ONLY("_or_unreached0"),
2098 "range_check",
2099 "class_check",
2100 "array_check",
2101 "intrinsic" JVMCI_ONLY("_or_type_checked_inlining"),
2102 "bimorphic" JVMCI_ONLY("_or_optimized_type_check"),
2103 "unloaded",
2104 "uninitialized",
2105 "unreached",
2106 "unhandled",
2107 "constraint",
2108 "div0_check",
2109 "age",
2110 "predicate",
2111 "loop_limit_check",
2112 "speculate_class_check",
2113 "speculate_null_check",
2114 "rtm_state_change",
2115 "unstable_if",
2116 "unstable_fused_if",
2117 #if INCLUDE_JVMCI
2118 "aliasing",
2119 "transfer_to_interpreter",
2120 "not_compiled_exception_handler",
2121 "unresolved",
2122 "jsr_mismatch",
2123 #endif
2124 "tenured"
2125 };
2126 const char* Deoptimization::_trap_action_name[] = {
2127 // Note: Keep this in sync. with enum DeoptAction.
2128 "none",
2129 "maybe_recompile",
2130 "reinterpret",
2131 "make_not_entrant",
2132 "make_not_compilable"
2133 };
2134
2135 const char* Deoptimization::trap_reason_name(int reason) {
2136 // Check that every reason has a name
2137 STATIC_ASSERT(sizeof(_trap_reason_name)/sizeof(const char*) == Reason_LIMIT);
2138
2139 if (reason == Reason_many) return "many";
2140 if ((uint)reason < Reason_LIMIT)
2141 return _trap_reason_name[reason];
2142 static char buf[20];
2143 sprintf(buf, "reason%d", reason);
2144 return buf;
2145 }
2146 const char* Deoptimization::trap_action_name(int action) {
2147 // Check that every action has a name
2148 STATIC_ASSERT(sizeof(_trap_action_name)/sizeof(const char*) == Action_LIMIT);
2149
2150 if ((uint)action < Action_LIMIT)
2151 return _trap_action_name[action];
2152 static char buf[20];
2153 sprintf(buf, "action%d", action);
2154 return buf;
2155 }
2156
2157 // This is used for debugging and diagnostics, including LogFile output.
2158 const char* Deoptimization::format_trap_request(char* buf, size_t buflen,
2159 int trap_request) {
2160 jint unloaded_class_index = trap_request_index(trap_request);
2161 const char* reason = trap_reason_name(trap_request_reason(trap_request));
2162 const char* action = trap_action_name(trap_request_action(trap_request));
2163 #if INCLUDE_JVMCI
2164 int debug_id = trap_request_debug_id(trap_request);
2165 #endif
2166 size_t len;
2167 if (unloaded_class_index < 0) {
2168 len = jio_snprintf(buf, buflen, "reason='%s' action='%s'" JVMCI_ONLY(" debug_id='%d'"),
2169 reason, action
2170 #if INCLUDE_JVMCI
2171 ,debug_id
2172 #endif
2173 );
2174 } else {
2175 len = jio_snprintf(buf, buflen, "reason='%s' action='%s' index='%d'" JVMCI_ONLY(" debug_id='%d'"),
2176 reason, action, unloaded_class_index
2177 #if INCLUDE_JVMCI
2178 ,debug_id
2179 #endif
2180 );
2181 }
2182 if (len >= buflen)
2183 buf[buflen-1] = '\0';
2184 return buf;
2185 }
2186
2187 juint Deoptimization::_deoptimization_hist
2188 [Deoptimization::Reason_LIMIT]
2189 [1 + Deoptimization::Action_LIMIT]
2190 [Deoptimization::BC_CASE_LIMIT]
2191 = {0};
2192
2193 enum {
2194 LSB_BITS = 8,
2195 LSB_MASK = right_n_bits(LSB_BITS)
2196 };
2197
2198 void Deoptimization::gather_statistics(DeoptReason reason, DeoptAction action,
2199 Bytecodes::Code bc) {
2200 assert(reason >= 0 && reason < Reason_LIMIT, "oob");
2257 if (bc_case == BC_CASE_LIMIT && (int)bc == 0)
2258 bc = Bytecodes::_illegal;
2259 sprintf(name, "%s/%s/%s",
2260 trap_reason_name(reason),
2261 trap_action_name(action),
2262 Bytecodes::is_defined(bc)? Bytecodes::name(bc): "other");
2263 juint r = counter >> LSB_BITS;
2264 tty->print_cr(" %40s: " UINT32_FORMAT " (%.1f%%)", name, r, (r * 100.0) / total);
2265 account -= r;
2266 }
2267 }
2268 }
2269 }
2270 if (account != 0) {
2271 PRINT_STAT_LINE("unaccounted", account);
2272 }
2273 #undef PRINT_STAT_LINE
2274 if (xtty != NULL) xtty->tail("statistics");
2275 }
2276 }
2277 #else // COMPILER2 || SHARK || INCLUDE_JVMCI
2278
2279
2280 // Stubs for C1 only system.
2281 bool Deoptimization::trap_state_is_recompiled(int trap_state) {
2282 return false;
2283 }
2284
2285 const char* Deoptimization::trap_reason_name(int reason) {
2286 return "unknown";
2287 }
2288
2289 void Deoptimization::print_statistics() {
2290 // no output
2291 }
2292
2293 void
2294 Deoptimization::update_method_data_from_interpreter(MethodData* trap_mdo, int trap_bci, int reason) {
2295 // no udpate
2296 }
2297
2298 int Deoptimization::trap_state_has_reason(int trap_state, int reason) {
2299 return 0;
2300 }
2301
2302 void Deoptimization::gather_statistics(DeoptReason reason, DeoptAction action,
2303 Bytecodes::Code bc) {
2304 // no update
2305 }
2306
2307 const char* Deoptimization::format_trap_state(char* buf, size_t buflen,
2308 int trap_state) {
2309 jio_snprintf(buf, buflen, "#%d", trap_state);
2310 return buf;
2311 }
2312
2313 #endif // COMPILER2 || SHARK || INCLUDE_JVMCI
|