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 } |