comparison src/share/vm/opto/library_call.cpp @ 7421:ad5dd04754ee

8005031: Some cleanup in c2 to prepare for incremental inlining support Summary: collection of small changes to prepare for incremental inlining. Reviewed-by: twisti, kvn
author roland
date Tue, 18 Dec 2012 14:55:25 +0100
parents dd38cfd12c3a
children 620e502e3f47
comparison
equal deleted inserted replaced
7420:18d56ca3e901 7421:ad5dd04754ee
410 case vmIntrinsics::_numberOfTrailingZeros_l: 410 case vmIntrinsics::_numberOfTrailingZeros_l:
411 if (!Matcher::match_rule_supported(Op_CountTrailingZerosL)) return NULL; 411 if (!Matcher::match_rule_supported(Op_CountTrailingZerosL)) return NULL;
412 break; 412 break;
413 413
414 case vmIntrinsics::_reverseBytes_c: 414 case vmIntrinsics::_reverseBytes_c:
415 if (!Matcher::match_rule_supported(Op_ReverseBytesUS)) return false; 415 if (!Matcher::match_rule_supported(Op_ReverseBytesUS)) return NULL;
416 break; 416 break;
417 case vmIntrinsics::_reverseBytes_s: 417 case vmIntrinsics::_reverseBytes_s:
418 if (!Matcher::match_rule_supported(Op_ReverseBytesS)) return false; 418 if (!Matcher::match_rule_supported(Op_ReverseBytesS)) return NULL;
419 break; 419 break;
420 case vmIntrinsics::_reverseBytes_i: 420 case vmIntrinsics::_reverseBytes_i:
421 if (!Matcher::match_rule_supported(Op_ReverseBytesI)) return false; 421 if (!Matcher::match_rule_supported(Op_ReverseBytesI)) return NULL;
422 break; 422 break;
423 case vmIntrinsics::_reverseBytes_l: 423 case vmIntrinsics::_reverseBytes_l:
424 if (!Matcher::match_rule_supported(Op_ReverseBytesL)) return false; 424 if (!Matcher::match_rule_supported(Op_ReverseBytesL)) return NULL;
425 break; 425 break;
426 426
427 case vmIntrinsics::_Reference_get: 427 case vmIntrinsics::_Reference_get:
428 // Use the intrinsic version of Reference.get() so that the value in 428 // Use the intrinsic version of Reference.get() so that the value in
429 // the referent field can be registered by the G1 pre-barrier code. 429 // the referent field can be registered by the G1 pre-barrier code.
534 const int bci = kit.bci(); 534 const int bci = kit.bci();
535 535
536 // Try to inline the intrinsic. 536 // Try to inline the intrinsic.
537 if (kit.try_to_inline()) { 537 if (kit.try_to_inline()) {
538 if (PrintIntrinsics || PrintInlining NOT_PRODUCT( || PrintOptoInlining) ) { 538 if (PrintIntrinsics || PrintInlining NOT_PRODUCT( || PrintOptoInlining) ) {
539 CompileTask::print_inlining(callee, jvms->depth() - 1, bci, is_virtual() ? "(intrinsic, virtual)" : "(intrinsic)"); 539 C->print_inlining(callee, jvms->depth() - 1, bci, is_virtual() ? "(intrinsic, virtual)" : "(intrinsic)");
540 } 540 }
541 C->gather_intrinsic_statistics(intrinsic_id(), is_virtual(), Compile::_intrinsic_worked); 541 C->gather_intrinsic_statistics(intrinsic_id(), is_virtual(), Compile::_intrinsic_worked);
542 if (C->log()) { 542 if (C->log()) {
543 C->log()->elem("intrinsic id='%s'%s nodes='%d'", 543 C->log()->elem("intrinsic id='%s'%s nodes='%d'",
544 vmIntrinsics::name_at(intrinsic_id()), 544 vmIntrinsics::name_at(intrinsic_id()),
553 // The intrinsic bailed out 553 // The intrinsic bailed out
554 if (PrintIntrinsics || PrintInlining NOT_PRODUCT( || PrintOptoInlining) ) { 554 if (PrintIntrinsics || PrintInlining NOT_PRODUCT( || PrintOptoInlining) ) {
555 if (jvms->has_method()) { 555 if (jvms->has_method()) {
556 // Not a root compile. 556 // Not a root compile.
557 const char* msg = is_virtual() ? "failed to inline (intrinsic, virtual)" : "failed to inline (intrinsic)"; 557 const char* msg = is_virtual() ? "failed to inline (intrinsic, virtual)" : "failed to inline (intrinsic)";
558 CompileTask::print_inlining(callee, jvms->depth() - 1, bci, msg); 558 C->print_inlining(callee, jvms->depth() - 1, bci, msg);
559 } else { 559 } else {
560 // Root compile 560 // Root compile
561 tty->print("Did not generate intrinsic %s%s at bci:%d in", 561 tty->print("Did not generate intrinsic %s%s at bci:%d in",
562 vmIntrinsics::name_at(intrinsic_id()), 562 vmIntrinsics::name_at(intrinsic_id()),
563 (is_virtual() ? " (virtual)" : ""), bci); 563 (is_virtual() ? " (virtual)" : ""), bci);
583 const int bci = kit.bci(); 583 const int bci = kit.bci();
584 584
585 Node* slow_ctl = kit.try_to_predicate(); 585 Node* slow_ctl = kit.try_to_predicate();
586 if (!kit.failing()) { 586 if (!kit.failing()) {
587 if (PrintIntrinsics || PrintInlining NOT_PRODUCT( || PrintOptoInlining) ) { 587 if (PrintIntrinsics || PrintInlining NOT_PRODUCT( || PrintOptoInlining) ) {
588 CompileTask::print_inlining(callee, jvms->depth() - 1, bci, is_virtual() ? "(intrinsic, virtual)" : "(intrinsic)"); 588 C->print_inlining(callee, jvms->depth() - 1, bci, is_virtual() ? "(intrinsic, virtual)" : "(intrinsic)");
589 } 589 }
590 C->gather_intrinsic_statistics(intrinsic_id(), is_virtual(), Compile::_intrinsic_worked); 590 C->gather_intrinsic_statistics(intrinsic_id(), is_virtual(), Compile::_intrinsic_worked);
591 if (C->log()) { 591 if (C->log()) {
592 C->log()->elem("predicate_intrinsic id='%s'%s nodes='%d'", 592 C->log()->elem("predicate_intrinsic id='%s'%s nodes='%d'",
593 vmIntrinsics::name_at(intrinsic_id()), 593 vmIntrinsics::name_at(intrinsic_id()),
600 // The intrinsic bailed out 600 // The intrinsic bailed out
601 if (PrintIntrinsics || PrintInlining NOT_PRODUCT( || PrintOptoInlining) ) { 601 if (PrintIntrinsics || PrintInlining NOT_PRODUCT( || PrintOptoInlining) ) {
602 if (jvms->has_method()) { 602 if (jvms->has_method()) {
603 // Not a root compile. 603 // Not a root compile.
604 const char* msg = "failed to generate predicate for intrinsic"; 604 const char* msg = "failed to generate predicate for intrinsic";
605 CompileTask::print_inlining(kit.callee(), jvms->depth() - 1, bci, msg); 605 C->print_inlining(kit.callee(), jvms->depth() - 1, bci, msg);
606 } else { 606 } else {
607 // Root compile 607 // Root compile
608 tty->print("Did not generate predicate for intrinsic %s%s at bci:%d in", 608 C->print_inlining_stream()->print("Did not generate predicate for intrinsic %s%s at bci:%d in",
609 vmIntrinsics::name_at(intrinsic_id()), 609 vmIntrinsics::name_at(intrinsic_id()),
610 (is_virtual() ? " (virtual)" : ""), bci); 610 (is_virtual() ? " (virtual)" : ""), bci);
611 } 611 }
612 } 612 }
613 C->gather_intrinsic_statistics(intrinsic_id(), is_virtual(), Compile::_intrinsic_failed); 613 C->gather_intrinsic_statistics(intrinsic_id(), is_virtual(), Compile::_intrinsic_failed);
614 return NULL; 614 return NULL;
615 } 615 }
3317 int which_arg; 3317 int which_arg;
3318 for (which_arg = 0; which_arg <= 1; which_arg++) { 3318 for (which_arg = 0; which_arg <= 1; which_arg++) {
3319 Node* arg = args[which_arg]; 3319 Node* arg = args[which_arg];
3320 arg = null_check(arg); 3320 arg = null_check(arg);
3321 if (stopped()) break; 3321 if (stopped()) break;
3322 args[which_arg] = _gvn.transform(arg); 3322 args[which_arg] = arg;
3323 3323
3324 Node* p = basic_plus_adr(arg, class_klass_offset); 3324 Node* p = basic_plus_adr(arg, class_klass_offset);
3325 Node* kls = LoadKlassNode::make(_gvn, immutable_memory(), p, adr_type, kls_type); 3325 Node* kls = LoadKlassNode::make(_gvn, immutable_memory(), p, adr_type, kls_type);
3326 klasses[which_arg] = _gvn.transform(kls); 3326 klasses[which_arg] = _gvn.transform(kls);
3327 } 3327 }