415 int index;
416 Value value;
417 for_each_stack_value(s, index, value) {
418 assert(value->subst() == value, "missed substitution");
419 if (!value->is_pinned() && value->as_Constant() == NULL && value->as_Local() == NULL) {
420 walk(value);
421 assert(value->operand()->is_valid(), "must be evaluated now");
422 }
423 }
424
425 int bci = s->bci();
426 IRScope* scope = s->scope();
427 ciMethod* method = scope->method();
428
429 MethodLivenessResult liveness = method->liveness_at_bci(bci);
430 if (bci == SynchronizationEntryBCI) {
431 if (x->as_ExceptionObject() || x->as_Throw()) {
432 // all locals are dead on exit from the synthetic unlocker
433 liveness.clear();
434 } else {
435 assert(x->as_MonitorEnter() || x->as_ProfileInvoke(), "only other cases are MonitorEnter and ProfileInvoke");
436 }
437 }
438 if (!liveness.is_valid()) {
439 // Degenerate or breakpointed method.
440 bailout("Degenerate or breakpointed method");
441 } else {
442 assert((int)liveness.size() == s->locals_size(), "error in use of liveness");
443 for_each_local_value(s, index, value) {
444 assert(value->subst() == value, "missed substition");
445 if (liveness.at(index) && !value->type()->is_illegal()) {
446 if (!value->is_pinned() && value->as_Constant() == NULL && value->as_Local() == NULL) {
447 walk(value);
448 assert(value->operand()->is_valid(), "must be evaluated now");
449 }
450 } else {
451 // NULL out this local so that linear scan can assume that all non-NULL values are live.
452 s->invalidate_local(index);
453 }
454 }
455 }
634 case Bytecodes::_lor: __ logical_or(left_op, right_op, result_op); break;
635
636 case Bytecodes::_ixor:
637 case Bytecodes::_lxor: __ logical_xor(left_op, right_op, result_op); break;
638
639 default: ShouldNotReachHere();
640 }
641 }
642
643
644 void LIRGenerator::monitor_enter(LIR_Opr object, LIR_Opr lock, LIR_Opr hdr, LIR_Opr scratch, int monitor_no, CodeEmitInfo* info_for_exception, CodeEmitInfo* info) {
645 if (!GenerateSynchronizationCode) return;
646 // for slow path, use debug info for state after successful locking
647 CodeStub* slow_path = new MonitorEnterStub(object, lock, info);
648 __ load_stack_address_monitor(monitor_no, lock);
649 // for handling NullPointerException, use debug info representing just the lock stack before this monitorenter
650 __ lock_object(hdr, object, lock, scratch, slow_path, info_for_exception);
651 }
652
653
654 void LIRGenerator::monitor_exit(LIR_Opr object, LIR_Opr lock, LIR_Opr new_hdr, LIR_Opr scratch, int monitor_no) {
655 if (!GenerateSynchronizationCode) return;
656 // setup registers
657 LIR_Opr hdr = lock;
658 lock = new_hdr;
659 CodeStub* slow_path = new MonitorExitStub(lock, UseFastLocking, monitor_no);
660 __ load_stack_address_monitor(monitor_no, lock);
661 __ unlock_object(hdr, object, lock, scratch, slow_path);
662 }
663
664 #ifndef PRODUCT
665 void LIRGenerator::print_if_not_loaded(const NewInstance* new_instance) {
666 if (PrintNotLoaded && !new_instance->klass()->is_loaded()) {
667 tty->print_cr(" ###class not loaded at new bci %d", new_instance->printable_bci());
668 } else if (PrintNotLoaded && (TieredCompilation && new_instance->is_unresolved())) {
669 tty->print_cr(" ###class not resolved at new bci %d", new_instance->printable_bci());
670 }
671 }
672 #endif
673
674 void LIRGenerator::new_instance(LIR_Opr dst, ciInstanceKlass* klass, bool is_unresolved, LIR_Opr scratch1, LIR_Opr scratch2, LIR_Opr scratch3, LIR_Opr scratch4, LIR_Opr klass_reg, CodeEmitInfo* info) {
675 klass2reg_with_patching(klass_reg, klass, info, is_unresolved);
676 // If klass is not loaded we do not know if the klass has finalizers:
677 if (UseFastNewInstance && klass->is_loaded()
678 && !Klass::layout_helper_needs_slow_path(klass->layout_helper())) {
679
|
415 int index;
416 Value value;
417 for_each_stack_value(s, index, value) {
418 assert(value->subst() == value, "missed substitution");
419 if (!value->is_pinned() && value->as_Constant() == NULL && value->as_Local() == NULL) {
420 walk(value);
421 assert(value->operand()->is_valid(), "must be evaluated now");
422 }
423 }
424
425 int bci = s->bci();
426 IRScope* scope = s->scope();
427 ciMethod* method = scope->method();
428
429 MethodLivenessResult liveness = method->liveness_at_bci(bci);
430 if (bci == SynchronizationEntryBCI) {
431 if (x->as_ExceptionObject() || x->as_Throw()) {
432 // all locals are dead on exit from the synthetic unlocker
433 liveness.clear();
434 } else {
435 assert(x->as_MonitorEnter() || x->as_MonitorExit() || x->as_ProfileInvoke(), "only other cases are MonitorEnter, MonitorExit and ProfileInvoke");
436 }
437 }
438 if (!liveness.is_valid()) {
439 // Degenerate or breakpointed method.
440 bailout("Degenerate or breakpointed method");
441 } else {
442 assert((int)liveness.size() == s->locals_size(), "error in use of liveness");
443 for_each_local_value(s, index, value) {
444 assert(value->subst() == value, "missed substition");
445 if (liveness.at(index) && !value->type()->is_illegal()) {
446 if (!value->is_pinned() && value->as_Constant() == NULL && value->as_Local() == NULL) {
447 walk(value);
448 assert(value->operand()->is_valid(), "must be evaluated now");
449 }
450 } else {
451 // NULL out this local so that linear scan can assume that all non-NULL values are live.
452 s->invalidate_local(index);
453 }
454 }
455 }
634 case Bytecodes::_lor: __ logical_or(left_op, right_op, result_op); break;
635
636 case Bytecodes::_ixor:
637 case Bytecodes::_lxor: __ logical_xor(left_op, right_op, result_op); break;
638
639 default: ShouldNotReachHere();
640 }
641 }
642
643
644 void LIRGenerator::monitor_enter(LIR_Opr object, LIR_Opr lock, LIR_Opr hdr, LIR_Opr scratch, int monitor_no, CodeEmitInfo* info_for_exception, CodeEmitInfo* info) {
645 if (!GenerateSynchronizationCode) return;
646 // for slow path, use debug info for state after successful locking
647 CodeStub* slow_path = new MonitorEnterStub(object, lock, info);
648 __ load_stack_address_monitor(monitor_no, lock);
649 // for handling NullPointerException, use debug info representing just the lock stack before this monitorenter
650 __ lock_object(hdr, object, lock, scratch, slow_path, info_for_exception);
651 }
652
653
654 void LIRGenerator::monitor_exit(LIR_Opr object, LIR_Opr lock, LIR_Opr new_hdr, LIR_Opr scratch, int monitor_no, CodeEmitInfo* info) {
655 if (!GenerateSynchronizationCode) return;
656 // setup registers
657 LIR_Opr hdr = lock;
658 lock = new_hdr;
659 CodeStub* slow_path = new MonitorExitStub(lock, UseFastLocking, monitor_no, info);
660 __ load_stack_address_monitor(monitor_no, lock);
661 __ unlock_object(hdr, object, lock, scratch, slow_path);
662 }
663
664 #ifndef PRODUCT
665 void LIRGenerator::print_if_not_loaded(const NewInstance* new_instance) {
666 if (PrintNotLoaded && !new_instance->klass()->is_loaded()) {
667 tty->print_cr(" ###class not loaded at new bci %d", new_instance->printable_bci());
668 } else if (PrintNotLoaded && (TieredCompilation && new_instance->is_unresolved())) {
669 tty->print_cr(" ###class not resolved at new bci %d", new_instance->printable_bci());
670 }
671 }
672 #endif
673
674 void LIRGenerator::new_instance(LIR_Opr dst, ciInstanceKlass* klass, bool is_unresolved, LIR_Opr scratch1, LIR_Opr scratch2, LIR_Opr scratch3, LIR_Opr scratch4, LIR_Opr klass_reg, CodeEmitInfo* info) {
675 klass2reg_with_patching(klass_reg, klass, info, is_unresolved);
676 // If klass is not loaded we do not know if the klass has finalizers:
677 if (UseFastNewInstance && klass->is_loaded()
678 && !Klass::layout_helper_needs_slow_path(klass->layout_helper())) {
679
|