hotspot/src/share/vm/c1/c1_Optimizer.cpp
changeset 9102 4708a4aefb33
parent 8065 7ca689ce3d32
child 9629 1f4dc6af5ad8
equal deleted inserted replaced
9101:ff58f9a8e31c 9102:4708a4aefb33
   642 void NullCheckVisitor::do_NewMultiArray  (NewMultiArray*   x) { nce()->handle_NewArray(x); }
   642 void NullCheckVisitor::do_NewMultiArray  (NewMultiArray*   x) { nce()->handle_NewArray(x); }
   643 void NullCheckVisitor::do_CheckCast      (CheckCast*       x) {}
   643 void NullCheckVisitor::do_CheckCast      (CheckCast*       x) {}
   644 void NullCheckVisitor::do_InstanceOf     (InstanceOf*      x) {}
   644 void NullCheckVisitor::do_InstanceOf     (InstanceOf*      x) {}
   645 void NullCheckVisitor::do_MonitorEnter   (MonitorEnter*    x) { nce()->handle_AccessMonitor(x); }
   645 void NullCheckVisitor::do_MonitorEnter   (MonitorEnter*    x) { nce()->handle_AccessMonitor(x); }
   646 void NullCheckVisitor::do_MonitorExit    (MonitorExit*     x) { nce()->handle_AccessMonitor(x); }
   646 void NullCheckVisitor::do_MonitorExit    (MonitorExit*     x) { nce()->handle_AccessMonitor(x); }
   647 void NullCheckVisitor::do_Intrinsic      (Intrinsic*       x) { nce()->clear_last_explicit_null_check(); }
   647 void NullCheckVisitor::do_Intrinsic      (Intrinsic*       x) { nce()->handle_Intrinsic(x);     }
   648 void NullCheckVisitor::do_BlockBegin     (BlockBegin*      x) {}
   648 void NullCheckVisitor::do_BlockBegin     (BlockBegin*      x) {}
   649 void NullCheckVisitor::do_Goto           (Goto*            x) {}
   649 void NullCheckVisitor::do_Goto           (Goto*            x) {}
   650 void NullCheckVisitor::do_If             (If*              x) {}
   650 void NullCheckVisitor::do_If             (If*              x) {}
   651 void NullCheckVisitor::do_IfInstanceOf   (IfInstanceOf*    x) {}
   651 void NullCheckVisitor::do_IfInstanceOf   (IfInstanceOf*    x) {}
   652 void NullCheckVisitor::do_TableSwitch    (TableSwitch*     x) {}
   652 void NullCheckVisitor::do_TableSwitch    (TableSwitch*     x) {}
  1021 }
  1021 }
  1022 
  1022 
  1023 
  1023 
  1024 void NullCheckEliminator::handle_Intrinsic(Intrinsic* x) {
  1024 void NullCheckEliminator::handle_Intrinsic(Intrinsic* x) {
  1025   if (!x->has_receiver()) {
  1025   if (!x->has_receiver()) {
       
  1026     if (x->id() == vmIntrinsics::_arraycopy) {
       
  1027       for (int i = 0; i < x->number_of_arguments(); i++) {
       
  1028         x->set_arg_needs_null_check(i, !set_contains(x->argument_at(i)));
       
  1029       }
       
  1030     }
       
  1031 
  1026     // Be conservative
  1032     // Be conservative
  1027     clear_last_explicit_null_check();
  1033     clear_last_explicit_null_check();
  1028     return;
  1034     return;
  1029   }
  1035   }
  1030 
  1036