src/share/vm/c1/c1_Optimizer.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File
*** old/src/share/vm/c1/c1_Optimizer.cpp	Tue Oct  8 14:00:23 2013
--- new/src/share/vm/c1/c1_Optimizer.cpp	Tue Oct  8 14:00:22 2013

*** 655,664 **** --- 655,665 ---- void handle_NewArray (NewArray* x); void handle_AccessMonitor (AccessMonitor* x); void handle_Intrinsic (Intrinsic* x); void handle_ExceptionObject (ExceptionObject* x); void handle_Phi (Phi* x); + void handle_ProfileCall (ProfileCall* x); }; // NEEDS_CLEANUP // There may be other instructions which need to clear the last
*** 713,723 **** --- 714,725 ---- void NullCheckVisitor::do_UnsafeGetObject(UnsafeGetObject* x) {} void NullCheckVisitor::do_UnsafePutObject(UnsafePutObject* x) {} void NullCheckVisitor::do_UnsafeGetAndSetObject(UnsafeGetAndSetObject* x) {} void NullCheckVisitor::do_UnsafePrefetchRead (UnsafePrefetchRead* x) {} void NullCheckVisitor::do_UnsafePrefetchWrite(UnsafePrefetchWrite* x) {} - void NullCheckVisitor::do_ProfileCall (ProfileCall* x) { nce()->clear_last_explicit_null_check(); } + nce()->handle_ProfileCall(x); } void NullCheckVisitor::do_ProfileInvoke (ProfileInvoke* x) {} void NullCheckVisitor::do_RuntimeCall (RuntimeCall* x) {} void NullCheckVisitor::do_MemBar (MemBar* x) {} void NullCheckVisitor::do_RangeCheckPredicate(RangeCheckPredicate* x) {} #ifdef ASSERT
*** 1132,1141 **** --- 1134,1148 ---- } else if (set_contains(x)) { set_remove(x); } } + void NullCheckEliminator::handle_ProfileCall(ProfileCall* x) { + for (int i = 0; i < x->nb_profiled_args(); i++) { + x->set_arg_needs_null_check(i, !set_contains(x->profiled_arg_at(i))); + } + } void Optimizer::eliminate_null_checks() { ResourceMark rm; NullCheckEliminator nce(this);

src/share/vm/c1/c1_Optimizer.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File