src/share/vm/c1/c1_Optimizer.cpp

changeset 2728
13bc79b5c9c8
parent 2486
403dc4c1d7f5
child 2894
d4c1fbc3de95
     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;

mercurial