--- old/src/cpu/x86/vm/c1_LIRGenerator_x86.cpp 2011-12-15 13:30:28.872000612 +0100 +++ new/src/cpu/x86/vm/c1_LIRGenerator_x86.cpp 2011-12-15 13:30:28.665669083 +0100 @@ -1147,14 +1147,20 @@ } obj.load_item(); - // info for exceptions - CodeEmitInfo* info_for_exception = state_for(x); - CodeStub* stub; + if (x->is_incompatible_class_change_check()) { assert(patching_info == NULL, "can't patch this"); + // info for exceptions + CodeEmitInfo* info_for_exception = state_for(x); stub = new SimpleExceptionStub(Runtime1::throw_incompatible_class_change_error_id, LIR_OprFact::illegalOpr, info_for_exception); + } else if (x->is_profile_inlining()) { + assert(patching_info == NULL, "can't patch this"); + CodeEmitInfo* info = state_for(x, x->state_before()); + stub = new InvalidateProfileInliningStub(obj.result(), x->klass(), info); } else { + // info for exceptions + CodeEmitInfo* info_for_exception = state_for(x); stub = new SimpleExceptionStub(Runtime1::throw_class_cast_exception_id, obj.result(), info_for_exception); } LIR_Opr reg = rlock_result(x); @@ -1164,7 +1170,7 @@ } __ checkcast(reg, obj.result(), x->klass(), new_register(objectType), new_register(objectType), tmp3, - x->direct_compare(), info_for_exception, patching_info, stub, + x->direct_compare(), patching_info, stub, x->profiled_method(), x->profiled_bci()); }