comparison src/share/vm/c1/c1_Optimizer.cpp @ 12875:d13d7aba8c12

8023657: New type profiling points: arguments to call Summary: x86 interpreter and c1 type profiling for arguments at calls Reviewed-by: kvn, twisti
author roland
date Wed, 09 Oct 2013 16:32:21 +0200
parents acadb114c818
children ce0cc25bc5e2
comparison
equal deleted inserted replaced
12874:46ef27bcacb3 12875:d13d7aba8c12
655 void handle_NewArray (NewArray* x); 655 void handle_NewArray (NewArray* x);
656 void handle_AccessMonitor (AccessMonitor* x); 656 void handle_AccessMonitor (AccessMonitor* x);
657 void handle_Intrinsic (Intrinsic* x); 657 void handle_Intrinsic (Intrinsic* x);
658 void handle_ExceptionObject (ExceptionObject* x); 658 void handle_ExceptionObject (ExceptionObject* x);
659 void handle_Phi (Phi* x); 659 void handle_Phi (Phi* x);
660 void handle_ProfileCall (ProfileCall* x);
660 }; 661 };
661 662
662 663
663 // NEEDS_CLEANUP 664 // NEEDS_CLEANUP
664 // There may be other instructions which need to clear the last 665 // There may be other instructions which need to clear the last
713 void NullCheckVisitor::do_UnsafeGetObject(UnsafeGetObject* x) {} 714 void NullCheckVisitor::do_UnsafeGetObject(UnsafeGetObject* x) {}
714 void NullCheckVisitor::do_UnsafePutObject(UnsafePutObject* x) {} 715 void NullCheckVisitor::do_UnsafePutObject(UnsafePutObject* x) {}
715 void NullCheckVisitor::do_UnsafeGetAndSetObject(UnsafeGetAndSetObject* x) {} 716 void NullCheckVisitor::do_UnsafeGetAndSetObject(UnsafeGetAndSetObject* x) {}
716 void NullCheckVisitor::do_UnsafePrefetchRead (UnsafePrefetchRead* x) {} 717 void NullCheckVisitor::do_UnsafePrefetchRead (UnsafePrefetchRead* x) {}
717 void NullCheckVisitor::do_UnsafePrefetchWrite(UnsafePrefetchWrite* x) {} 718 void NullCheckVisitor::do_UnsafePrefetchWrite(UnsafePrefetchWrite* x) {}
718 void NullCheckVisitor::do_ProfileCall (ProfileCall* x) { nce()->clear_last_explicit_null_check(); } 719 void NullCheckVisitor::do_ProfileCall (ProfileCall* x) { nce()->clear_last_explicit_null_check();
720 nce()->handle_ProfileCall(x); }
719 void NullCheckVisitor::do_ProfileInvoke (ProfileInvoke* x) {} 721 void NullCheckVisitor::do_ProfileInvoke (ProfileInvoke* x) {}
720 void NullCheckVisitor::do_RuntimeCall (RuntimeCall* x) {} 722 void NullCheckVisitor::do_RuntimeCall (RuntimeCall* x) {}
721 void NullCheckVisitor::do_MemBar (MemBar* x) {} 723 void NullCheckVisitor::do_MemBar (MemBar* x) {}
722 void NullCheckVisitor::do_RangeCheckPredicate(RangeCheckPredicate* x) {} 724 void NullCheckVisitor::do_RangeCheckPredicate(RangeCheckPredicate* x) {}
723 #ifdef ASSERT 725 #ifdef ASSERT
1132 } else if (set_contains(x)) { 1134 } else if (set_contains(x)) {
1133 set_remove(x); 1135 set_remove(x);
1134 } 1136 }
1135 } 1137 }
1136 1138
1139 void NullCheckEliminator::handle_ProfileCall(ProfileCall* x) {
1140 for (int i = 0; i < x->nb_profiled_args(); i++) {
1141 x->set_arg_needs_null_check(i, !set_contains(x->profiled_arg_at(i)));
1142 }
1143 }
1137 1144
1138 void Optimizer::eliminate_null_checks() { 1145 void Optimizer::eliminate_null_checks() {
1139 ResourceMark rm; 1146 ResourceMark rm;
1140 1147
1141 NullCheckEliminator nce(this); 1148 NullCheckEliminator nce(this);