1.1 --- a/src/share/vm/c1/c1_Optimizer.cpp Sat Apr 02 10:54:15 2011 -0700 1.2 +++ b/src/share/vm/c1/c1_Optimizer.cpp Sun Apr 03 12:00:54 2011 +0200 1.3 @@ -644,7 +644,7 @@ 1.4 void NullCheckVisitor::do_InstanceOf (InstanceOf* x) {} 1.5 void NullCheckVisitor::do_MonitorEnter (MonitorEnter* x) { nce()->handle_AccessMonitor(x); } 1.6 void NullCheckVisitor::do_MonitorExit (MonitorExit* x) { nce()->handle_AccessMonitor(x); } 1.7 -void NullCheckVisitor::do_Intrinsic (Intrinsic* x) { nce()->clear_last_explicit_null_check(); } 1.8 +void NullCheckVisitor::do_Intrinsic (Intrinsic* x) { nce()->handle_Intrinsic(x); } 1.9 void NullCheckVisitor::do_BlockBegin (BlockBegin* x) {} 1.10 void NullCheckVisitor::do_Goto (Goto* x) {} 1.11 void NullCheckVisitor::do_If (If* x) {} 1.12 @@ -1023,6 +1023,12 @@ 1.13 1.14 void NullCheckEliminator::handle_Intrinsic(Intrinsic* x) { 1.15 if (!x->has_receiver()) { 1.16 + if (x->id() == vmIntrinsics::_arraycopy) { 1.17 + for (int i = 0; i < x->number_of_arguments(); i++) { 1.18 + x->set_arg_needs_null_check(i, !set_contains(x->argument_at(i))); 1.19 + } 1.20 + } 1.21 + 1.22 // Be conservative 1.23 clear_last_explicit_null_check(); 1.24 return;