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