Mercurial > hg > graal-jvmci-8
diff src/share/vm/runtime/deoptimization.hpp @ 20804:7848fc12602b
Merge with jdk8u40-b25
author | Gilles Duboscq <gilles.m.duboscq@oracle.com> |
---|---|
date | Tue, 07 Apr 2015 14:58:49 +0200 |
parents | 03c63fd2f714 d3f3f7677537 |
children | be896a1983c0 |
line wrap: on
line diff
--- a/src/share/vm/runtime/deoptimization.hpp Tue Apr 07 11:20:51 2015 +0200 +++ b/src/share/vm/runtime/deoptimization.hpp Tue Apr 07 14:58:49 2015 +0200 @@ -74,6 +74,7 @@ Reason_loop_limit_check, // compiler generated loop limits check failed Reason_speculate_class_check, // saw unexpected object class from type speculation Reason_rtm_state_change, // rtm state change detected + Reason_unstable_if, // a branch predicted always false was taken #ifdef GRAAL Reason_aliasing, // optimistic assumption about aliasing failed Reason_transfer_to_interpreter, // explicit transferToInterpreter() @@ -82,7 +83,6 @@ Reason_jsr_mismatch, #endif Reason_LIMIT, - // Note: Keep this enum in sync. with _trap_reason_name. Reason_RECORDED_LIMIT = Reason_bimorphic // some are not recorded per bc // Note: Reason_RECORDED_LIMIT should be < 8 to fit into 3 bits of @@ -145,13 +145,14 @@ static bool realloc_objects(JavaThread* thread, frame* fr, GrowableArray<ScopeValue*>* objects, TRAPS); static void reassign_type_array_elements(frame* fr, RegisterMap* reg_map, ObjectValue* sv, typeArrayOop obj, BasicType type); static void reassign_object_array_elements(frame* fr, RegisterMap* reg_map, ObjectValue* sv, objArrayOop obj); - static void reassign_fields(frame* fr, RegisterMap* reg_map, GrowableArray<ScopeValue*>* objects); - static void relock_objects(GrowableArray<MonitorInfo*>* monitors, JavaThread* thread); - NOT_PRODUCT(static void print_objects(GrowableArray<ScopeValue*>* objects);) + static void reassign_fields(frame* fr, RegisterMap* reg_map, GrowableArray<ScopeValue*>* objects, bool realloc_failures); + static void relock_objects(GrowableArray<MonitorInfo*>* monitors, JavaThread* thread, bool realloc_failures); + static void pop_frames_failed_reallocs(JavaThread* thread, vframeArray* array); + NOT_PRODUCT(static void print_objects(GrowableArray<ScopeValue*>* objects, bool realloc_failures);) #endif // COMPILER2 || GRAAL public: - static vframeArray* create_vframeArray(JavaThread* thread, frame fr, RegisterMap *reg_map, GrowableArray<compiledVFrame*>* chunk); + static vframeArray* create_vframeArray(JavaThread* thread, frame fr, RegisterMap *reg_map, GrowableArray<compiledVFrame*>* chunk, bool realloc_failures); // Interface used for unpacking deoptimized frames @@ -264,7 +265,7 @@ // @argument id. id of frame that should be deoptimized. static void deoptimize_frame_internal(JavaThread* thread, intptr_t* id, DeoptReason reason); - // if thread is not the current thread then execute + // If thread is not the current thread then execute // VM_DeoptimizeFrame otherwise deoptimize directly. static void deoptimize_frame(JavaThread* thread, intptr_t* id, DeoptReason reason); static void deoptimize_frame(JavaThread* thread, intptr_t* id); @@ -354,6 +355,8 @@ return Reason_null_check; // recorded per BCI as a null check else if (reason == Reason_speculate_class_check) return Reason_class_check; + else if (reason == Reason_unstable_if) + return Reason_intrinsic; else return Reason_none; }