99 // There is a race possible once at startup and then we're fine
100
101 // Note that this is being called from a compiler thread not the
102 // main startup thread.
103 if (should_perform_init()) {
104 bool successful = C2Compiler::init_c2_runtime();
105 int new_state = (successful) ? initialized : failed;
106 set_state(new_state);
107 }
108 }
109
110 void C2Compiler::compile_method(ciEnv* env, ciMethod* target, int entry_bci, bool install_code, DirectiveSet* directive) {
111 assert(is_initialized(), "Compiler thread must be initialized");
112
113 CompilationMemoryStatisticMark cmsm(directive);
114
115 bool subsume_loads = SubsumeLoads;
116 bool do_escape_analysis = DoEscapeAnalysis;
117 bool do_iterative_escape_analysis = DoEscapeAnalysis;
118 bool do_reduce_allocation_merges = ReduceAllocationMerges && EliminateAllocations;
119 bool eliminate_boxing = EliminateAutoBox;
120 bool do_locks_coarsening = EliminateLocks;
121 bool do_superword = UseSuperWord;
122
123 while (!env->failing()) {
124 ResourceMark rm;
125 // Attempt to compile while subsuming loads into machine instructions.
126 Options options(subsume_loads,
127 do_escape_analysis,
128 do_iterative_escape_analysis,
129 do_reduce_allocation_merges,
130 eliminate_boxing,
131 do_locks_coarsening,
132 do_superword,
133 install_code);
134 Compile C(env, target, entry_bci, options, directive);
135
136 // Check result and retry if appropriate.
137 if (C.failure_reason() != nullptr) {
138 if (C.failure_reason_is(retry_no_subsuming_loads())) {
139 assert(subsume_loads, "must make progress");
615 case vmIntrinsics::_roundF:
616 case vmIntrinsics::_min:
617 case vmIntrinsics::_max:
618 case vmIntrinsics::_min_strict:
619 case vmIntrinsics::_max_strict:
620 case vmIntrinsics::_arraycopy:
621 case vmIntrinsics::_arraySort:
622 case vmIntrinsics::_arrayPartition:
623 case vmIntrinsics::_indexOfL:
624 case vmIntrinsics::_indexOfU:
625 case vmIntrinsics::_indexOfUL:
626 case vmIntrinsics::_indexOfIL:
627 case vmIntrinsics::_indexOfIU:
628 case vmIntrinsics::_indexOfIUL:
629 case vmIntrinsics::_indexOfU_char:
630 case vmIntrinsics::_indexOfL_char:
631 case vmIntrinsics::_toBytesStringU:
632 case vmIntrinsics::_getCharsStringU:
633 case vmIntrinsics::_getCharStringU:
634 case vmIntrinsics::_putCharStringU:
635 case vmIntrinsics::_getReference:
636 case vmIntrinsics::_getBoolean:
637 case vmIntrinsics::_getByte:
638 case vmIntrinsics::_getShort:
639 case vmIntrinsics::_getChar:
640 case vmIntrinsics::_getInt:
641 case vmIntrinsics::_getLong:
642 case vmIntrinsics::_getFloat:
643 case vmIntrinsics::_getDouble:
644 case vmIntrinsics::_putReference:
645 case vmIntrinsics::_putBoolean:
646 case vmIntrinsics::_putByte:
647 case vmIntrinsics::_putShort:
648 case vmIntrinsics::_putChar:
649 case vmIntrinsics::_putInt:
650 case vmIntrinsics::_putLong:
651 case vmIntrinsics::_putFloat:
652 case vmIntrinsics::_putDouble:
653 case vmIntrinsics::_getReferenceVolatile:
654 case vmIntrinsics::_getBooleanVolatile:
655 case vmIntrinsics::_getByteVolatile:
656 case vmIntrinsics::_getShortVolatile:
657 case vmIntrinsics::_getCharVolatile:
658 case vmIntrinsics::_getIntVolatile:
659 case vmIntrinsics::_getLongVolatile:
660 case vmIntrinsics::_getFloatVolatile:
661 case vmIntrinsics::_getDoubleVolatile:
662 case vmIntrinsics::_putReferenceVolatile:
663 case vmIntrinsics::_putBooleanVolatile:
664 case vmIntrinsics::_putByteVolatile:
665 case vmIntrinsics::_putShortVolatile:
666 case vmIntrinsics::_putCharVolatile:
667 case vmIntrinsics::_putIntVolatile:
668 case vmIntrinsics::_putLongVolatile:
669 case vmIntrinsics::_putFloatVolatile:
670 case vmIntrinsics::_putDoubleVolatile:
671 case vmIntrinsics::_getReferenceAcquire:
672 case vmIntrinsics::_getBooleanAcquire:
713 case vmIntrinsics::_putIntUnaligned:
714 case vmIntrinsics::_putLongUnaligned:
715 case vmIntrinsics::_loadFence:
716 case vmIntrinsics::_storeFence:
717 case vmIntrinsics::_storeStoreFence:
718 case vmIntrinsics::_fullFence:
719 case vmIntrinsics::_currentCarrierThread:
720 case vmIntrinsics::_currentThread:
721 case vmIntrinsics::_setCurrentThread:
722 case vmIntrinsics::_scopedValueCache:
723 case vmIntrinsics::_setScopedValueCache:
724 #ifdef JFR_HAVE_INTRINSICS
725 case vmIntrinsics::_counterTime:
726 case vmIntrinsics::_getEventWriter:
727 case vmIntrinsics::_jvm_commit:
728 #endif
729 case vmIntrinsics::_currentTimeMillis:
730 case vmIntrinsics::_nanoTime:
731 case vmIntrinsics::_allocateInstance:
732 case vmIntrinsics::_allocateUninitializedArray:
733 case vmIntrinsics::_newArray:
734 case vmIntrinsics::_getLength:
735 case vmIntrinsics::_copyOf:
736 case vmIntrinsics::_copyOfRange:
737 case vmIntrinsics::_clone:
738 case vmIntrinsics::_isAssignableFrom:
739 case vmIntrinsics::_isInstance:
740 case vmIntrinsics::_getModifiers:
741 case vmIntrinsics::_isInterface:
742 case vmIntrinsics::_isArray:
743 case vmIntrinsics::_isPrimitive:
744 case vmIntrinsics::_isHidden:
745 case vmIntrinsics::_getSuperclass:
746 case vmIntrinsics::_getClassAccessFlags:
747 case vmIntrinsics::_floatToRawIntBits:
748 case vmIntrinsics::_floatToIntBits:
749 case vmIntrinsics::_intBitsToFloat:
750 case vmIntrinsics::_doubleToRawLongBits:
751 case vmIntrinsics::_doubleToLongBits:
752 case vmIntrinsics::_longBitsToDouble:
753 case vmIntrinsics::_Reference_get:
|
99 // There is a race possible once at startup and then we're fine
100
101 // Note that this is being called from a compiler thread not the
102 // main startup thread.
103 if (should_perform_init()) {
104 bool successful = C2Compiler::init_c2_runtime();
105 int new_state = (successful) ? initialized : failed;
106 set_state(new_state);
107 }
108 }
109
110 void C2Compiler::compile_method(ciEnv* env, ciMethod* target, int entry_bci, bool install_code, DirectiveSet* directive) {
111 assert(is_initialized(), "Compiler thread must be initialized");
112
113 CompilationMemoryStatisticMark cmsm(directive);
114
115 bool subsume_loads = SubsumeLoads;
116 bool do_escape_analysis = DoEscapeAnalysis;
117 bool do_iterative_escape_analysis = DoEscapeAnalysis;
118 bool do_reduce_allocation_merges = ReduceAllocationMerges && EliminateAllocations;
119 // TODO 8328675 Re-enable
120 bool eliminate_boxing = false; // EliminateAutoBox;
121 bool do_locks_coarsening = EliminateLocks;
122 bool do_superword = UseSuperWord;
123
124 while (!env->failing()) {
125 ResourceMark rm;
126 // Attempt to compile while subsuming loads into machine instructions.
127 Options options(subsume_loads,
128 do_escape_analysis,
129 do_iterative_escape_analysis,
130 do_reduce_allocation_merges,
131 eliminate_boxing,
132 do_locks_coarsening,
133 do_superword,
134 install_code);
135 Compile C(env, target, entry_bci, options, directive);
136
137 // Check result and retry if appropriate.
138 if (C.failure_reason() != nullptr) {
139 if (C.failure_reason_is(retry_no_subsuming_loads())) {
140 assert(subsume_loads, "must make progress");
616 case vmIntrinsics::_roundF:
617 case vmIntrinsics::_min:
618 case vmIntrinsics::_max:
619 case vmIntrinsics::_min_strict:
620 case vmIntrinsics::_max_strict:
621 case vmIntrinsics::_arraycopy:
622 case vmIntrinsics::_arraySort:
623 case vmIntrinsics::_arrayPartition:
624 case vmIntrinsics::_indexOfL:
625 case vmIntrinsics::_indexOfU:
626 case vmIntrinsics::_indexOfUL:
627 case vmIntrinsics::_indexOfIL:
628 case vmIntrinsics::_indexOfIU:
629 case vmIntrinsics::_indexOfIUL:
630 case vmIntrinsics::_indexOfU_char:
631 case vmIntrinsics::_indexOfL_char:
632 case vmIntrinsics::_toBytesStringU:
633 case vmIntrinsics::_getCharsStringU:
634 case vmIntrinsics::_getCharStringU:
635 case vmIntrinsics::_putCharStringU:
636 case vmIntrinsics::_makePrivateBuffer:
637 case vmIntrinsics::_finishPrivateBuffer:
638 case vmIntrinsics::_getReference:
639 case vmIntrinsics::_getBoolean:
640 case vmIntrinsics::_getByte:
641 case vmIntrinsics::_getShort:
642 case vmIntrinsics::_getChar:
643 case vmIntrinsics::_getInt:
644 case vmIntrinsics::_getLong:
645 case vmIntrinsics::_getFloat:
646 case vmIntrinsics::_getDouble:
647 case vmIntrinsics::_getValue:
648 case vmIntrinsics::_putReference:
649 case vmIntrinsics::_putBoolean:
650 case vmIntrinsics::_putByte:
651 case vmIntrinsics::_putShort:
652 case vmIntrinsics::_putChar:
653 case vmIntrinsics::_putInt:
654 case vmIntrinsics::_putLong:
655 case vmIntrinsics::_putFloat:
656 case vmIntrinsics::_putDouble:
657 case vmIntrinsics::_putValue:
658 case vmIntrinsics::_getReferenceVolatile:
659 case vmIntrinsics::_getBooleanVolatile:
660 case vmIntrinsics::_getByteVolatile:
661 case vmIntrinsics::_getShortVolatile:
662 case vmIntrinsics::_getCharVolatile:
663 case vmIntrinsics::_getIntVolatile:
664 case vmIntrinsics::_getLongVolatile:
665 case vmIntrinsics::_getFloatVolatile:
666 case vmIntrinsics::_getDoubleVolatile:
667 case vmIntrinsics::_putReferenceVolatile:
668 case vmIntrinsics::_putBooleanVolatile:
669 case vmIntrinsics::_putByteVolatile:
670 case vmIntrinsics::_putShortVolatile:
671 case vmIntrinsics::_putCharVolatile:
672 case vmIntrinsics::_putIntVolatile:
673 case vmIntrinsics::_putLongVolatile:
674 case vmIntrinsics::_putFloatVolatile:
675 case vmIntrinsics::_putDoubleVolatile:
676 case vmIntrinsics::_getReferenceAcquire:
677 case vmIntrinsics::_getBooleanAcquire:
718 case vmIntrinsics::_putIntUnaligned:
719 case vmIntrinsics::_putLongUnaligned:
720 case vmIntrinsics::_loadFence:
721 case vmIntrinsics::_storeFence:
722 case vmIntrinsics::_storeStoreFence:
723 case vmIntrinsics::_fullFence:
724 case vmIntrinsics::_currentCarrierThread:
725 case vmIntrinsics::_currentThread:
726 case vmIntrinsics::_setCurrentThread:
727 case vmIntrinsics::_scopedValueCache:
728 case vmIntrinsics::_setScopedValueCache:
729 #ifdef JFR_HAVE_INTRINSICS
730 case vmIntrinsics::_counterTime:
731 case vmIntrinsics::_getEventWriter:
732 case vmIntrinsics::_jvm_commit:
733 #endif
734 case vmIntrinsics::_currentTimeMillis:
735 case vmIntrinsics::_nanoTime:
736 case vmIntrinsics::_allocateInstance:
737 case vmIntrinsics::_allocateUninitializedArray:
738 case vmIntrinsics::_isFlatArray:
739 case vmIntrinsics::_newArray:
740 case vmIntrinsics::_newNullRestrictedArray:
741 case vmIntrinsics::_getLength:
742 case vmIntrinsics::_copyOf:
743 case vmIntrinsics::_copyOfRange:
744 case vmIntrinsics::_clone:
745 case vmIntrinsics::_isAssignableFrom:
746 case vmIntrinsics::_isInstance:
747 case vmIntrinsics::_getModifiers:
748 case vmIntrinsics::_isInterface:
749 case vmIntrinsics::_isArray:
750 case vmIntrinsics::_isPrimitive:
751 case vmIntrinsics::_isHidden:
752 case vmIntrinsics::_getSuperclass:
753 case vmIntrinsics::_getClassAccessFlags:
754 case vmIntrinsics::_floatToRawIntBits:
755 case vmIntrinsics::_floatToIntBits:
756 case vmIntrinsics::_intBitsToFloat:
757 case vmIntrinsics::_doubleToRawLongBits:
758 case vmIntrinsics::_doubleToLongBits:
759 case vmIntrinsics::_longBitsToDouble:
760 case vmIntrinsics::_Reference_get:
|