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