106 // There is a race possible once at startup and then we're fine
107
108 // Note that this is being called from a compiler thread not the
109 // main startup thread.
110 if (should_perform_init()) {
111 bool successful = C2Compiler::init_c2_runtime();
112 int new_state = (successful) ? initialized : failed;
113 set_state(new_state);
114 }
115 }
116
117 void C2Compiler::compile_method(ciEnv* env, ciMethod* target, int entry_bci, bool install_code, DirectiveSet* directive) {
118 assert(is_initialized(), "Compiler thread must be initialized");
119
120 CompilationMemoryStatisticMark cmsm(directive);
121
122 bool subsume_loads = SubsumeLoads;
123 bool do_escape_analysis = DoEscapeAnalysis;
124 bool do_iterative_escape_analysis = DoEscapeAnalysis;
125 bool do_reduce_allocation_merges = ReduceAllocationMerges && EliminateAllocations;
126 bool eliminate_boxing = EliminateAutoBox;
127 bool do_locks_coarsening = EliminateLocks;
128 bool do_superword = UseSuperWord;
129
130 while (!env->failing()) {
131 ResourceMark rm;
132 // Attempt to compile while subsuming loads into machine instructions.
133 Options options(subsume_loads,
134 do_escape_analysis,
135 do_iterative_escape_analysis,
136 do_reduce_allocation_merges,
137 eliminate_boxing,
138 do_locks_coarsening,
139 do_superword,
140 install_code);
141 Compile C(env, target, entry_bci, options, directive);
142
143 // Check result and retry if appropriate.
144 if (C.failure_reason() != nullptr) {
145 if (C.failure_reason_is(retry_no_subsuming_loads())) {
146 assert(subsume_loads, "must make progress");
633 case vmIntrinsics::_max:
634 case vmIntrinsics::_min_strict:
635 case vmIntrinsics::_max_strict:
636 case vmIntrinsics::_maxL:
637 case vmIntrinsics::_minL:
638 case vmIntrinsics::_arraycopy:
639 case vmIntrinsics::_arraySort:
640 case vmIntrinsics::_arrayPartition:
641 case vmIntrinsics::_indexOfL:
642 case vmIntrinsics::_indexOfU:
643 case vmIntrinsics::_indexOfUL:
644 case vmIntrinsics::_indexOfIL:
645 case vmIntrinsics::_indexOfIU:
646 case vmIntrinsics::_indexOfIUL:
647 case vmIntrinsics::_indexOfU_char:
648 case vmIntrinsics::_indexOfL_char:
649 case vmIntrinsics::_toBytesStringU:
650 case vmIntrinsics::_getCharsStringU:
651 case vmIntrinsics::_getCharStringU:
652 case vmIntrinsics::_putCharStringU:
653 case vmIntrinsics::_getReference:
654 case vmIntrinsics::_getBoolean:
655 case vmIntrinsics::_getByte:
656 case vmIntrinsics::_getShort:
657 case vmIntrinsics::_getChar:
658 case vmIntrinsics::_getInt:
659 case vmIntrinsics::_getLong:
660 case vmIntrinsics::_getFloat:
661 case vmIntrinsics::_getDouble:
662 case vmIntrinsics::_putReference:
663 case vmIntrinsics::_putBoolean:
664 case vmIntrinsics::_putByte:
665 case vmIntrinsics::_putShort:
666 case vmIntrinsics::_putChar:
667 case vmIntrinsics::_putInt:
668 case vmIntrinsics::_putLong:
669 case vmIntrinsics::_putFloat:
670 case vmIntrinsics::_putDouble:
671 case vmIntrinsics::_getReferenceVolatile:
672 case vmIntrinsics::_getBooleanVolatile:
673 case vmIntrinsics::_getByteVolatile:
674 case vmIntrinsics::_getShortVolatile:
675 case vmIntrinsics::_getCharVolatile:
676 case vmIntrinsics::_getIntVolatile:
677 case vmIntrinsics::_getLongVolatile:
678 case vmIntrinsics::_getFloatVolatile:
679 case vmIntrinsics::_getDoubleVolatile:
680 case vmIntrinsics::_putReferenceVolatile:
681 case vmIntrinsics::_putBooleanVolatile:
682 case vmIntrinsics::_putByteVolatile:
683 case vmIntrinsics::_putShortVolatile:
684 case vmIntrinsics::_putCharVolatile:
685 case vmIntrinsics::_putIntVolatile:
686 case vmIntrinsics::_putLongVolatile:
687 case vmIntrinsics::_putFloatVolatile:
688 case vmIntrinsics::_putDoubleVolatile:
689 case vmIntrinsics::_getReferenceAcquire:
690 case vmIntrinsics::_getBooleanAcquire:
733 case vmIntrinsics::_loadFence:
734 case vmIntrinsics::_storeFence:
735 case vmIntrinsics::_storeStoreFence:
736 case vmIntrinsics::_fullFence:
737 case vmIntrinsics::_currentCarrierThread:
738 case vmIntrinsics::_currentThread:
739 case vmIntrinsics::_setCurrentThread:
740 case vmIntrinsics::_scopedValueCache:
741 case vmIntrinsics::_setScopedValueCache:
742 case vmIntrinsics::_Continuation_pin:
743 case vmIntrinsics::_Continuation_unpin:
744 #ifdef JFR_HAVE_INTRINSICS
745 case vmIntrinsics::_counterTime:
746 case vmIntrinsics::_getEventWriter:
747 case vmIntrinsics::_jvm_commit:
748 #endif
749 case vmIntrinsics::_currentTimeMillis:
750 case vmIntrinsics::_nanoTime:
751 case vmIntrinsics::_allocateInstance:
752 case vmIntrinsics::_allocateUninitializedArray:
753 case vmIntrinsics::_newArray:
754 case vmIntrinsics::_getLength:
755 case vmIntrinsics::_copyOf:
756 case vmIntrinsics::_copyOfRange:
757 case vmIntrinsics::_clone:
758 case vmIntrinsics::_isAssignableFrom:
759 case vmIntrinsics::_isInstance:
760 case vmIntrinsics::_isHidden:
761 case vmIntrinsics::_getSuperclass:
762 case vmIntrinsics::_getClassAccessFlags:
763 case vmIntrinsics::_floatToRawIntBits:
764 case vmIntrinsics::_floatToIntBits:
765 case vmIntrinsics::_intBitsToFloat:
766 case vmIntrinsics::_doubleToRawLongBits:
767 case vmIntrinsics::_doubleToLongBits:
768 case vmIntrinsics::_longBitsToDouble:
769 case vmIntrinsics::_Reference_get:
770 case vmIntrinsics::_Reference_refersTo0:
771 case vmIntrinsics::_PhantomReference_refersTo0:
772 case vmIntrinsics::_Reference_clear0:
773 case vmIntrinsics::_PhantomReference_clear0:
|
106 // There is a race possible once at startup and then we're fine
107
108 // Note that this is being called from a compiler thread not the
109 // main startup thread.
110 if (should_perform_init()) {
111 bool successful = C2Compiler::init_c2_runtime();
112 int new_state = (successful) ? initialized : failed;
113 set_state(new_state);
114 }
115 }
116
117 void C2Compiler::compile_method(ciEnv* env, ciMethod* target, int entry_bci, bool install_code, DirectiveSet* directive) {
118 assert(is_initialized(), "Compiler thread must be initialized");
119
120 CompilationMemoryStatisticMark cmsm(directive);
121
122 bool subsume_loads = SubsumeLoads;
123 bool do_escape_analysis = DoEscapeAnalysis;
124 bool do_iterative_escape_analysis = DoEscapeAnalysis;
125 bool do_reduce_allocation_merges = ReduceAllocationMerges && EliminateAllocations;
126 // TODO 8328675 Re-enable
127 bool eliminate_boxing = false; // EliminateAutoBox;
128 bool do_locks_coarsening = EliminateLocks;
129 bool do_superword = UseSuperWord;
130
131 while (!env->failing()) {
132 ResourceMark rm;
133 // Attempt to compile while subsuming loads into machine instructions.
134 Options options(subsume_loads,
135 do_escape_analysis,
136 do_iterative_escape_analysis,
137 do_reduce_allocation_merges,
138 eliminate_boxing,
139 do_locks_coarsening,
140 do_superword,
141 install_code);
142 Compile C(env, target, entry_bci, options, directive);
143
144 // Check result and retry if appropriate.
145 if (C.failure_reason() != nullptr) {
146 if (C.failure_reason_is(retry_no_subsuming_loads())) {
147 assert(subsume_loads, "must make progress");
634 case vmIntrinsics::_max:
635 case vmIntrinsics::_min_strict:
636 case vmIntrinsics::_max_strict:
637 case vmIntrinsics::_maxL:
638 case vmIntrinsics::_minL:
639 case vmIntrinsics::_arraycopy:
640 case vmIntrinsics::_arraySort:
641 case vmIntrinsics::_arrayPartition:
642 case vmIntrinsics::_indexOfL:
643 case vmIntrinsics::_indexOfU:
644 case vmIntrinsics::_indexOfUL:
645 case vmIntrinsics::_indexOfIL:
646 case vmIntrinsics::_indexOfIU:
647 case vmIntrinsics::_indexOfIUL:
648 case vmIntrinsics::_indexOfU_char:
649 case vmIntrinsics::_indexOfL_char:
650 case vmIntrinsics::_toBytesStringU:
651 case vmIntrinsics::_getCharsStringU:
652 case vmIntrinsics::_getCharStringU:
653 case vmIntrinsics::_putCharStringU:
654 case vmIntrinsics::_makePrivateBuffer:
655 case vmIntrinsics::_finishPrivateBuffer:
656 case vmIntrinsics::_getReference:
657 case vmIntrinsics::_getBoolean:
658 case vmIntrinsics::_getByte:
659 case vmIntrinsics::_getShort:
660 case vmIntrinsics::_getChar:
661 case vmIntrinsics::_getInt:
662 case vmIntrinsics::_getLong:
663 case vmIntrinsics::_getFloat:
664 case vmIntrinsics::_getDouble:
665 case vmIntrinsics::_getValue:
666 case vmIntrinsics::_putReference:
667 case vmIntrinsics::_putBoolean:
668 case vmIntrinsics::_putByte:
669 case vmIntrinsics::_putShort:
670 case vmIntrinsics::_putChar:
671 case vmIntrinsics::_putInt:
672 case vmIntrinsics::_putLong:
673 case vmIntrinsics::_putFloat:
674 case vmIntrinsics::_putDouble:
675 case vmIntrinsics::_putValue:
676 case vmIntrinsics::_getReferenceVolatile:
677 case vmIntrinsics::_getBooleanVolatile:
678 case vmIntrinsics::_getByteVolatile:
679 case vmIntrinsics::_getShortVolatile:
680 case vmIntrinsics::_getCharVolatile:
681 case vmIntrinsics::_getIntVolatile:
682 case vmIntrinsics::_getLongVolatile:
683 case vmIntrinsics::_getFloatVolatile:
684 case vmIntrinsics::_getDoubleVolatile:
685 case vmIntrinsics::_putReferenceVolatile:
686 case vmIntrinsics::_putBooleanVolatile:
687 case vmIntrinsics::_putByteVolatile:
688 case vmIntrinsics::_putShortVolatile:
689 case vmIntrinsics::_putCharVolatile:
690 case vmIntrinsics::_putIntVolatile:
691 case vmIntrinsics::_putLongVolatile:
692 case vmIntrinsics::_putFloatVolatile:
693 case vmIntrinsics::_putDoubleVolatile:
694 case vmIntrinsics::_getReferenceAcquire:
695 case vmIntrinsics::_getBooleanAcquire:
738 case vmIntrinsics::_loadFence:
739 case vmIntrinsics::_storeFence:
740 case vmIntrinsics::_storeStoreFence:
741 case vmIntrinsics::_fullFence:
742 case vmIntrinsics::_currentCarrierThread:
743 case vmIntrinsics::_currentThread:
744 case vmIntrinsics::_setCurrentThread:
745 case vmIntrinsics::_scopedValueCache:
746 case vmIntrinsics::_setScopedValueCache:
747 case vmIntrinsics::_Continuation_pin:
748 case vmIntrinsics::_Continuation_unpin:
749 #ifdef JFR_HAVE_INTRINSICS
750 case vmIntrinsics::_counterTime:
751 case vmIntrinsics::_getEventWriter:
752 case vmIntrinsics::_jvm_commit:
753 #endif
754 case vmIntrinsics::_currentTimeMillis:
755 case vmIntrinsics::_nanoTime:
756 case vmIntrinsics::_allocateInstance:
757 case vmIntrinsics::_allocateUninitializedArray:
758 case vmIntrinsics::_isFlatArray:
759 case vmIntrinsics::_newArray:
760 case vmIntrinsics::_newNullRestrictedNonAtomicArray:
761 case vmIntrinsics::_newNullRestrictedAtomicArray:
762 case vmIntrinsics::_newNullableAtomicArray:
763 case vmIntrinsics::_getLength:
764 case vmIntrinsics::_copyOf:
765 case vmIntrinsics::_copyOfRange:
766 case vmIntrinsics::_clone:
767 case vmIntrinsics::_isAssignableFrom:
768 case vmIntrinsics::_isInstance:
769 case vmIntrinsics::_isHidden:
770 case vmIntrinsics::_getSuperclass:
771 case vmIntrinsics::_getClassAccessFlags:
772 case vmIntrinsics::_floatToRawIntBits:
773 case vmIntrinsics::_floatToIntBits:
774 case vmIntrinsics::_intBitsToFloat:
775 case vmIntrinsics::_doubleToRawLongBits:
776 case vmIntrinsics::_doubleToLongBits:
777 case vmIntrinsics::_longBitsToDouble:
778 case vmIntrinsics::_Reference_get:
779 case vmIntrinsics::_Reference_refersTo0:
780 case vmIntrinsics::_PhantomReference_refersTo0:
781 case vmIntrinsics::_Reference_clear0:
782 case vmIntrinsics::_PhantomReference_clear0:
|