Mercurial > hg > truffle
diff src/share/vm/c1/c1_Optimizer.cpp @ 2468:6c97c830fb6f
Merge
author | jrose |
---|---|
date | Sat, 09 Apr 2011 21:16:12 -0700 |
parents | 13bc79b5c9c8 |
children | d4c1fbc3de95 |
line wrap: on
line diff
--- a/src/share/vm/c1/c1_Optimizer.cpp Fri Apr 08 16:18:48 2011 -0700 +++ b/src/share/vm/c1/c1_Optimizer.cpp Sat Apr 09 21:16:12 2011 -0700 @@ -644,7 +644,7 @@ void NullCheckVisitor::do_InstanceOf (InstanceOf* x) {} void NullCheckVisitor::do_MonitorEnter (MonitorEnter* x) { nce()->handle_AccessMonitor(x); } void NullCheckVisitor::do_MonitorExit (MonitorExit* x) { nce()->handle_AccessMonitor(x); } -void NullCheckVisitor::do_Intrinsic (Intrinsic* x) { nce()->clear_last_explicit_null_check(); } +void NullCheckVisitor::do_Intrinsic (Intrinsic* x) { nce()->handle_Intrinsic(x); } void NullCheckVisitor::do_BlockBegin (BlockBegin* x) {} void NullCheckVisitor::do_Goto (Goto* x) {} void NullCheckVisitor::do_If (If* x) {} @@ -1023,6 +1023,12 @@ void NullCheckEliminator::handle_Intrinsic(Intrinsic* x) { if (!x->has_receiver()) { + if (x->id() == vmIntrinsics::_arraycopy) { + for (int i = 0; i < x->number_of_arguments(); i++) { + x->set_arg_needs_null_check(i, !set_contains(x->argument_at(i))); + } + } + // Be conservative clear_last_explicit_null_check(); return;