597 tty->print_cr("Intrinsic %s", str);
598 }
599 #endif
600 ciMethod* callee = kit.callee();
601 const int bci = kit.bci();
602
603 // Try to inline the intrinsic.
604 if (kit.try_to_inline()) {
605 if (C->print_intrinsics() || C->print_inlining()) {
606 C->print_inlining(callee, jvms->depth() - 1, bci, is_virtual() ? "(intrinsic, virtual)" : "(intrinsic)");
607 }
608 C->gather_intrinsic_statistics(intrinsic_id(), is_virtual(), Compile::_intrinsic_worked);
609 if (C->log()) {
610 C->log()->elem("intrinsic id='%s'%s nodes='%d'",
611 vmIntrinsics::name_at(intrinsic_id()),
612 (is_virtual() ? " virtual='1'" : ""),
613 C->unique() - nodes);
614 }
615 // Push the result from the inlined method onto the stack.
616 kit.push_result();
617 return kit.transfer_exceptions_into_jvms();
618 }
619
620 // The intrinsic bailed out
621 if (C->print_intrinsics() || C->print_inlining()) {
622 if (jvms->has_method()) {
623 // Not a root compile.
624 const char* msg = is_virtual() ? "failed to inline (intrinsic, virtual)" : "failed to inline (intrinsic)";
625 C->print_inlining(callee, jvms->depth() - 1, bci, msg);
626 } else {
627 // Root compile
628 tty->print("Did not generate intrinsic %s%s at bci:%d in",
629 vmIntrinsics::name_at(intrinsic_id()),
630 (is_virtual() ? " (virtual)" : ""), bci);
631 }
632 }
633 C->gather_intrinsic_statistics(intrinsic_id(), is_virtual(), Compile::_intrinsic_failed);
634 return NULL;
635 }
636
637 Node* LibraryIntrinsic::generate_predicate(JVMState* jvms) {
638 LibraryCallKit kit(jvms, this);
639 Compile* C = kit.C;
640 int nodes = C->unique();
641 #ifndef PRODUCT
642 assert(is_predicted(), "sanity");
643 if ((C->print_intrinsics() || C->print_inlining()) && Verbose) {
644 char buf[1000];
645 const char* str = vmIntrinsics::short_name_as_C_string(intrinsic_id(), buf, sizeof(buf));
646 tty->print_cr("Predicate for intrinsic %s", str);
647 }
648 #endif
649 ciMethod* callee = kit.callee();
650 const int bci = kit.bci();
651
652 Node* slow_ctl = kit.try_to_predicate();
653 if (!kit.failing()) {
|
597 tty->print_cr("Intrinsic %s", str);
598 }
599 #endif
600 ciMethod* callee = kit.callee();
601 const int bci = kit.bci();
602
603 // Try to inline the intrinsic.
604 if (kit.try_to_inline()) {
605 if (C->print_intrinsics() || C->print_inlining()) {
606 C->print_inlining(callee, jvms->depth() - 1, bci, is_virtual() ? "(intrinsic, virtual)" : "(intrinsic)");
607 }
608 C->gather_intrinsic_statistics(intrinsic_id(), is_virtual(), Compile::_intrinsic_worked);
609 if (C->log()) {
610 C->log()->elem("intrinsic id='%s'%s nodes='%d'",
611 vmIntrinsics::name_at(intrinsic_id()),
612 (is_virtual() ? " virtual='1'" : ""),
613 C->unique() - nodes);
614 }
615 // Push the result from the inlined method onto the stack.
616 kit.push_result();
617 C->print_inlining_update(this);
618 return kit.transfer_exceptions_into_jvms();
619 }
620
621 // The intrinsic bailed out
622 if (C->print_intrinsics() || C->print_inlining()) {
623 if (jvms->has_method()) {
624 // Not a root compile.
625 const char* msg = is_virtual() ? "failed to inline (intrinsic, virtual)" : "failed to inline (intrinsic)";
626 C->print_inlining(callee, jvms->depth() - 1, bci, msg);
627 } else {
628 // Root compile
629 tty->print("Did not generate intrinsic %s%s at bci:%d in",
630 vmIntrinsics::name_at(intrinsic_id()),
631 (is_virtual() ? " (virtual)" : ""), bci);
632 }
633 }
634 C->gather_intrinsic_statistics(intrinsic_id(), is_virtual(), Compile::_intrinsic_failed);
635 C->print_inlining_update(this);
636 return NULL;
637 }
638
639 Node* LibraryIntrinsic::generate_predicate(JVMState* jvms) {
640 LibraryCallKit kit(jvms, this);
641 Compile* C = kit.C;
642 int nodes = C->unique();
643 #ifndef PRODUCT
644 assert(is_predicted(), "sanity");
645 if ((C->print_intrinsics() || C->print_inlining()) && Verbose) {
646 char buf[1000];
647 const char* str = vmIntrinsics::short_name_as_C_string(intrinsic_id(), buf, sizeof(buf));
648 tty->print_cr("Predicate for intrinsic %s", str);
649 }
650 #endif
651 ciMethod* callee = kit.callee();
652 const int bci = kit.bci();
653
654 Node* slow_ctl = kit.try_to_predicate();
655 if (!kit.failing()) {
|