Path: blob/master/src/hotspot/share/opto/c2compiler.cpp
64440 views
/*1* Copyright (c) 1999, 2021, Oracle and/or its affiliates. All rights reserved.2* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.3*4* This code is free software; you can redistribute it and/or modify it5* under the terms of the GNU General Public License version 2 only, as6* published by the Free Software Foundation.7*8* This code is distributed in the hope that it will be useful, but WITHOUT9* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or10* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License11* version 2 for more details (a copy is included in the LICENSE file that12* accompanied this code).13*14* You should have received a copy of the GNU General Public License version15* 2 along with this work; if not, write to the Free Software Foundation,16* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.17*18* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA19* or visit www.oracle.com if you need additional information or have any20* questions.21*22*/2324#include "precompiled.hpp"25#include "classfile/vmClasses.hpp"26#include "runtime/handles.inline.hpp"27#include "jfr/support/jfrIntrinsics.hpp"28#include "opto/c2compiler.hpp"29#include "opto/compile.hpp"30#include "opto/optoreg.hpp"31#include "opto/output.hpp"32#include "opto/runtime.hpp"33#include "runtime/stubRoutines.hpp"34#include "utilities/macros.hpp"353637// register information defined by ADLC38extern const char register_save_policy[];39extern const int register_save_type[];4041const char* C2Compiler::retry_no_subsuming_loads() {42return "retry without subsuming loads";43}44const char* C2Compiler::retry_no_escape_analysis() {45return "retry without escape analysis";46}47const char* C2Compiler::retry_no_locks_coarsening() {48return "retry without locks coarsening";49}50const char* C2Compiler::retry_class_loading_during_parsing() {51return "retry class loading during parsing";52}53bool C2Compiler::init_c2_runtime() {5455// Check assumptions used while running ADLC56Compile::adlc_verification();57assert(REG_COUNT <= ConcreteRegisterImpl::number_of_registers, "incompatible register counts");5859for (int i = 0; i < ConcreteRegisterImpl::number_of_registers ; i++ ) {60OptoReg::vm2opto[i] = OptoReg::Bad;61}6263for( OptoReg::Name i=OptoReg::Name(0); i<OptoReg::Name(REG_COUNT); i = OptoReg::add(i,1) ) {64VMReg r = OptoReg::as_VMReg(i);65if (r->is_valid()) {66OptoReg::vm2opto[r->value()] = i;67}68}6970DEBUG_ONLY( Node::init_NodeProperty(); )7172Compile::pd_compiler2_init();7374CompilerThread* thread = CompilerThread::current();7576HandleMark handle_mark(thread);77return OptoRuntime::generate(thread->env());78}7980void C2Compiler::initialize() {81assert(!CompilerConfig::is_c1_or_interpreter_only_no_jvmci(), "C2 compiler is launched, it's not c1/interpreter only mode");82// The first compiler thread that gets here will initialize the83// small amount of global state (and runtime stubs) that C2 needs.8485// There is a race possible once at startup and then we're fine8687// Note that this is being called from a compiler thread not the88// main startup thread.89if (should_perform_init()) {90bool successful = C2Compiler::init_c2_runtime();91int new_state = (successful) ? initialized : failed;92set_state(new_state);93}94}9596void C2Compiler::compile_method(ciEnv* env, ciMethod* target, int entry_bci, bool install_code, DirectiveSet* directive) {97assert(is_initialized(), "Compiler thread must be initialized");9899bool subsume_loads = SubsumeLoads;100bool do_escape_analysis = DoEscapeAnalysis;101bool eliminate_boxing = EliminateAutoBox;102bool do_locks_coarsening = EliminateLocks;103104while (!env->failing()) {105// Attempt to compile while subsuming loads into machine instructions.106Compile C(env, target, entry_bci, subsume_loads, do_escape_analysis, eliminate_boxing, do_locks_coarsening, install_code, directive);107108// Check result and retry if appropriate.109if (C.failure_reason() != NULL) {110if (C.failure_reason_is(retry_class_loading_during_parsing())) {111env->report_failure(C.failure_reason());112continue; // retry113}114if (C.failure_reason_is(retry_no_subsuming_loads())) {115assert(subsume_loads, "must make progress");116subsume_loads = false;117env->report_failure(C.failure_reason());118continue; // retry119}120if (C.failure_reason_is(retry_no_escape_analysis())) {121assert(do_escape_analysis, "must make progress");122do_escape_analysis = false;123env->report_failure(C.failure_reason());124continue; // retry125}126if (C.failure_reason_is(retry_no_locks_coarsening())) {127assert(do_locks_coarsening, "must make progress");128do_locks_coarsening = false;129env->report_failure(C.failure_reason());130continue; // retry131}132if (C.has_boxed_value()) {133// Recompile without boxing elimination regardless failure reason.134assert(eliminate_boxing, "must make progress");135eliminate_boxing = false;136env->report_failure(C.failure_reason());137continue; // retry138}139// Pass any other failure reason up to the ciEnv.140// Note that serious, irreversible failures are already logged141// on the ciEnv via env->record_method_not_compilable().142env->record_failure(C.failure_reason());143}144if (StressRecompilation) {145if (subsume_loads) {146subsume_loads = false;147continue; // retry148}149if (do_escape_analysis) {150do_escape_analysis = false;151continue; // retry152}153if (do_locks_coarsening) {154do_locks_coarsening = false;155continue; // retry156}157}158// print inlining for last compilation only159C.dump_print_inlining();160161// No retry; just break the loop.162break;163}164}165166void C2Compiler::print_timers() {167Compile::print_timers();168}169170bool C2Compiler::is_intrinsic_supported(const methodHandle& method, bool is_virtual) {171vmIntrinsics::ID id = method->intrinsic_id();172assert(id != vmIntrinsics::_none, "must be a VM intrinsic");173174if (id < vmIntrinsics::FIRST_ID || id > vmIntrinsics::LAST_COMPILER_INLINE) {175return false;176}177178// Only Object.hashCode and Object.clone intrinsics implement also a virtual179// dispatch because calling both methods is expensive but both methods are180// frequently overridden. All other intrinsics implement only a non-virtual181// dispatch.182if (is_virtual) {183switch (id) {184case vmIntrinsics::_hashCode:185case vmIntrinsics::_clone:186break;187default:188return false;189}190}191192switch (id) {193case vmIntrinsics::_compressStringC:194case vmIntrinsics::_compressStringB:195if (!Matcher::match_rule_supported(Op_StrCompressedCopy)) return false;196break;197case vmIntrinsics::_inflateStringC:198case vmIntrinsics::_inflateStringB:199if (!Matcher::match_rule_supported(Op_StrInflatedCopy)) return false;200break;201case vmIntrinsics::_compareToL:202case vmIntrinsics::_compareToU:203case vmIntrinsics::_compareToLU:204case vmIntrinsics::_compareToUL:205if (!Matcher::match_rule_supported(Op_StrComp)) return false;206break;207case vmIntrinsics::_equalsL:208case vmIntrinsics::_equalsU:209if (!Matcher::match_rule_supported(Op_StrEquals)) return false;210break;211case vmIntrinsics::_equalsB:212case vmIntrinsics::_equalsC:213if (!Matcher::match_rule_supported(Op_AryEq)) return false;214break;215case vmIntrinsics::_copyMemory:216if (StubRoutines::unsafe_arraycopy() == NULL) return false;217break;218case vmIntrinsics::_encodeAsciiArray:219if (!Matcher::match_rule_supported(Op_EncodeISOArray) || !Matcher::supports_encode_ascii_array) return false;220break;221case vmIntrinsics::_encodeISOArray:222case vmIntrinsics::_encodeByteISOArray:223if (!Matcher::match_rule_supported(Op_EncodeISOArray)) return false;224break;225case vmIntrinsics::_hasNegatives:226if (!Matcher::match_rule_supported(Op_HasNegatives)) return false;227break;228case vmIntrinsics::_bitCount_i:229if (!Matcher::match_rule_supported(Op_PopCountI)) return false;230break;231case vmIntrinsics::_bitCount_l:232if (!Matcher::match_rule_supported(Op_PopCountL)) return false;233break;234case vmIntrinsics::_numberOfLeadingZeros_i:235if (!Matcher::match_rule_supported(Op_CountLeadingZerosI)) return false;236break;237case vmIntrinsics::_numberOfLeadingZeros_l:238if (!Matcher::match_rule_supported(Op_CountLeadingZerosL)) return false;239break;240case vmIntrinsics::_numberOfTrailingZeros_i:241if (!Matcher::match_rule_supported(Op_CountTrailingZerosI)) return false;242break;243case vmIntrinsics::_numberOfTrailingZeros_l:244if (!Matcher::match_rule_supported(Op_CountTrailingZerosL)) return false;245break;246case vmIntrinsics::_reverseBytes_c:247if (!Matcher::match_rule_supported(Op_ReverseBytesUS)) return false;248break;249case vmIntrinsics::_reverseBytes_s:250if (!Matcher::match_rule_supported(Op_ReverseBytesS)) return false;251break;252case vmIntrinsics::_reverseBytes_i:253if (!Matcher::match_rule_supported(Op_ReverseBytesI)) return false;254break;255case vmIntrinsics::_reverseBytes_l:256if (!Matcher::match_rule_supported(Op_ReverseBytesL)) return false;257break;258259/* CompareAndSet, Object: */260case vmIntrinsics::_compareAndSetReference:261#ifdef _LP64262if ( UseCompressedOops && !Matcher::match_rule_supported(Op_CompareAndSwapN)) return false;263if (!UseCompressedOops && !Matcher::match_rule_supported(Op_CompareAndSwapP)) return false;264#else265if (!Matcher::match_rule_supported(Op_CompareAndSwapP)) return false;266#endif267break;268case vmIntrinsics::_weakCompareAndSetReferencePlain:269case vmIntrinsics::_weakCompareAndSetReferenceAcquire:270case vmIntrinsics::_weakCompareAndSetReferenceRelease:271case vmIntrinsics::_weakCompareAndSetReference:272#ifdef _LP64273if ( UseCompressedOops && !Matcher::match_rule_supported(Op_WeakCompareAndSwapN)) return false;274if (!UseCompressedOops && !Matcher::match_rule_supported(Op_WeakCompareAndSwapP)) return false;275#else276if (!Matcher::match_rule_supported(Op_WeakCompareAndSwapP)) return false;277#endif278break;279/* CompareAndSet, Long: */280case vmIntrinsics::_compareAndSetLong:281if (!Matcher::match_rule_supported(Op_CompareAndSwapL)) return false;282break;283case vmIntrinsics::_weakCompareAndSetLongPlain:284case vmIntrinsics::_weakCompareAndSetLongAcquire:285case vmIntrinsics::_weakCompareAndSetLongRelease:286case vmIntrinsics::_weakCompareAndSetLong:287if (!Matcher::match_rule_supported(Op_WeakCompareAndSwapL)) return false;288break;289290/* CompareAndSet, Int: */291case vmIntrinsics::_compareAndSetInt:292if (!Matcher::match_rule_supported(Op_CompareAndSwapI)) return false;293break;294case vmIntrinsics::_weakCompareAndSetIntPlain:295case vmIntrinsics::_weakCompareAndSetIntAcquire:296case vmIntrinsics::_weakCompareAndSetIntRelease:297case vmIntrinsics::_weakCompareAndSetInt:298if (!Matcher::match_rule_supported(Op_WeakCompareAndSwapI)) return false;299break;300301/* CompareAndSet, Byte: */302case vmIntrinsics::_compareAndSetByte:303if (!Matcher::match_rule_supported(Op_CompareAndSwapB)) return false;304break;305case vmIntrinsics::_weakCompareAndSetBytePlain:306case vmIntrinsics::_weakCompareAndSetByteAcquire:307case vmIntrinsics::_weakCompareAndSetByteRelease:308case vmIntrinsics::_weakCompareAndSetByte:309if (!Matcher::match_rule_supported(Op_WeakCompareAndSwapB)) return false;310break;311312/* CompareAndSet, Short: */313case vmIntrinsics::_compareAndSetShort:314if (!Matcher::match_rule_supported(Op_CompareAndSwapS)) return false;315break;316case vmIntrinsics::_weakCompareAndSetShortPlain:317case vmIntrinsics::_weakCompareAndSetShortAcquire:318case vmIntrinsics::_weakCompareAndSetShortRelease:319case vmIntrinsics::_weakCompareAndSetShort:320if (!Matcher::match_rule_supported(Op_WeakCompareAndSwapS)) return false;321break;322323/* CompareAndExchange, Object: */324case vmIntrinsics::_compareAndExchangeReference:325case vmIntrinsics::_compareAndExchangeReferenceAcquire:326case vmIntrinsics::_compareAndExchangeReferenceRelease:327#ifdef _LP64328if ( UseCompressedOops && !Matcher::match_rule_supported(Op_CompareAndExchangeN)) return false;329if (!UseCompressedOops && !Matcher::match_rule_supported(Op_CompareAndExchangeP)) return false;330#else331if (!Matcher::match_rule_supported(Op_CompareAndExchangeP)) return false;332#endif333break;334335/* CompareAndExchange, Long: */336case vmIntrinsics::_compareAndExchangeLong:337case vmIntrinsics::_compareAndExchangeLongAcquire:338case vmIntrinsics::_compareAndExchangeLongRelease:339if (!Matcher::match_rule_supported(Op_CompareAndExchangeL)) return false;340break;341342/* CompareAndExchange, Int: */343case vmIntrinsics::_compareAndExchangeInt:344case vmIntrinsics::_compareAndExchangeIntAcquire:345case vmIntrinsics::_compareAndExchangeIntRelease:346if (!Matcher::match_rule_supported(Op_CompareAndExchangeI)) return false;347break;348349/* CompareAndExchange, Byte: */350case vmIntrinsics::_compareAndExchangeByte:351case vmIntrinsics::_compareAndExchangeByteAcquire:352case vmIntrinsics::_compareAndExchangeByteRelease:353if (!Matcher::match_rule_supported(Op_CompareAndExchangeB)) return false;354break;355356/* CompareAndExchange, Short: */357case vmIntrinsics::_compareAndExchangeShort:358case vmIntrinsics::_compareAndExchangeShortAcquire:359case vmIntrinsics::_compareAndExchangeShortRelease:360if (!Matcher::match_rule_supported(Op_CompareAndExchangeS)) return false;361break;362363case vmIntrinsics::_getAndAddByte:364if (!Matcher::match_rule_supported(Op_GetAndAddB)) return false;365break;366case vmIntrinsics::_getAndAddShort:367if (!Matcher::match_rule_supported(Op_GetAndAddS)) return false;368break;369case vmIntrinsics::_getAndAddInt:370if (!Matcher::match_rule_supported(Op_GetAndAddI)) return false;371break;372case vmIntrinsics::_getAndAddLong:373if (!Matcher::match_rule_supported(Op_GetAndAddL)) return false;374break;375376case vmIntrinsics::_getAndSetByte:377if (!Matcher::match_rule_supported(Op_GetAndSetB)) return false;378break;379case vmIntrinsics::_getAndSetShort:380if (!Matcher::match_rule_supported(Op_GetAndSetS)) return false;381break;382case vmIntrinsics::_getAndSetInt:383if (!Matcher::match_rule_supported(Op_GetAndSetI)) return false;384break;385case vmIntrinsics::_getAndSetLong:386if (!Matcher::match_rule_supported(Op_GetAndSetL)) return false;387break;388case vmIntrinsics::_getAndSetReference:389#ifdef _LP64390if (!UseCompressedOops && !Matcher::match_rule_supported(Op_GetAndSetP)) return false;391if (UseCompressedOops && !Matcher::match_rule_supported(Op_GetAndSetN)) return false;392break;393#else394if (!Matcher::match_rule_supported(Op_GetAndSetP)) return false;395break;396#endif397case vmIntrinsics::_incrementExactI:398case vmIntrinsics::_addExactI:399if (!Matcher::match_rule_supported(Op_OverflowAddI)) return false;400break;401case vmIntrinsics::_incrementExactL:402case vmIntrinsics::_addExactL:403if (!Matcher::match_rule_supported(Op_OverflowAddL)) return false;404break;405case vmIntrinsics::_decrementExactI:406case vmIntrinsics::_subtractExactI:407if (!Matcher::match_rule_supported(Op_OverflowSubI)) return false;408break;409case vmIntrinsics::_decrementExactL:410case vmIntrinsics::_subtractExactL:411if (!Matcher::match_rule_supported(Op_OverflowSubL)) return false;412break;413case vmIntrinsics::_negateExactI:414if (!Matcher::match_rule_supported(Op_OverflowSubI)) return false;415break;416case vmIntrinsics::_negateExactL:417if (!Matcher::match_rule_supported(Op_OverflowSubL)) return false;418break;419case vmIntrinsics::_multiplyExactI:420if (!Matcher::match_rule_supported(Op_OverflowMulI)) return false;421break;422case vmIntrinsics::_multiplyExactL:423if (!Matcher::match_rule_supported(Op_OverflowMulL)) return false;424break;425case vmIntrinsics::_multiplyHigh:426if (!Matcher::match_rule_supported(Op_MulHiL)) return false;427break;428case vmIntrinsics::_getCallerClass:429if (vmClasses::reflect_CallerSensitive_klass() == NULL) return false;430break;431case vmIntrinsics::_onSpinWait:432if (!Matcher::match_rule_supported(Op_OnSpinWait)) return false;433break;434case vmIntrinsics::_fmaD:435if (!UseFMA || !Matcher::match_rule_supported(Op_FmaD)) return false;436break;437case vmIntrinsics::_fmaF:438if (!UseFMA || !Matcher::match_rule_supported(Op_FmaF)) return false;439break;440case vmIntrinsics::_isDigit:441if (!Matcher::match_rule_supported(Op_Digit)) return false;442break;443case vmIntrinsics::_isLowerCase:444if (!Matcher::match_rule_supported(Op_LowerCase)) return false;445break;446case vmIntrinsics::_isUpperCase:447if (!Matcher::match_rule_supported(Op_UpperCase)) return false;448break;449case vmIntrinsics::_isWhitespace:450if (!Matcher::match_rule_supported(Op_Whitespace)) return false;451break;452case vmIntrinsics::_maxF:453if (!Matcher::match_rule_supported(Op_MaxF)) return false;454break;455case vmIntrinsics::_minF:456if (!Matcher::match_rule_supported(Op_MinF)) return false;457break;458case vmIntrinsics::_maxD:459if (!Matcher::match_rule_supported(Op_MaxD)) return false;460break;461case vmIntrinsics::_minD:462if (!Matcher::match_rule_supported(Op_MinD)) return false;463break;464case vmIntrinsics::_writeback0:465if (!Matcher::match_rule_supported(Op_CacheWB)) return false;466break;467case vmIntrinsics::_writebackPreSync0:468if (!Matcher::match_rule_supported(Op_CacheWBPreSync)) return false;469break;470case vmIntrinsics::_writebackPostSync0:471if (!Matcher::match_rule_supported(Op_CacheWBPostSync)) return false;472break;473case vmIntrinsics::_rint:474case vmIntrinsics::_ceil:475case vmIntrinsics::_floor:476if (!Matcher::match_rule_supported(Op_RoundDoubleMode)) return false;477break;478case vmIntrinsics::_dcopySign:479if (!Matcher::match_rule_supported(Op_CopySignD)) return false;480break;481case vmIntrinsics::_fcopySign:482if (!Matcher::match_rule_supported(Op_CopySignF)) return false;483break;484case vmIntrinsics::_dsignum:485if (!Matcher::match_rule_supported(Op_SignumD)) return false;486break;487case vmIntrinsics::_fsignum:488if (!Matcher::match_rule_supported(Op_SignumF)) return false;489break;490case vmIntrinsics::_hashCode:491case vmIntrinsics::_identityHashCode:492case vmIntrinsics::_getClass:493case vmIntrinsics::_dsin:494case vmIntrinsics::_dcos:495case vmIntrinsics::_dtan:496case vmIntrinsics::_dabs:497case vmIntrinsics::_fabs:498case vmIntrinsics::_iabs:499case vmIntrinsics::_labs:500case vmIntrinsics::_datan2:501case vmIntrinsics::_dsqrt:502case vmIntrinsics::_dexp:503case vmIntrinsics::_dlog:504case vmIntrinsics::_dlog10:505case vmIntrinsics::_dpow:506case vmIntrinsics::_min:507case vmIntrinsics::_max:508case vmIntrinsics::_arraycopy:509case vmIntrinsics::_indexOfL:510case vmIntrinsics::_indexOfU:511case vmIntrinsics::_indexOfUL:512case vmIntrinsics::_indexOfIL:513case vmIntrinsics::_indexOfIU:514case vmIntrinsics::_indexOfIUL:515case vmIntrinsics::_indexOfU_char:516case vmIntrinsics::_indexOfL_char:517case vmIntrinsics::_toBytesStringU:518case vmIntrinsics::_getCharsStringU:519case vmIntrinsics::_getCharStringU:520case vmIntrinsics::_putCharStringU:521case vmIntrinsics::_getReference:522case vmIntrinsics::_getBoolean:523case vmIntrinsics::_getByte:524case vmIntrinsics::_getShort:525case vmIntrinsics::_getChar:526case vmIntrinsics::_getInt:527case vmIntrinsics::_getLong:528case vmIntrinsics::_getFloat:529case vmIntrinsics::_getDouble:530case vmIntrinsics::_putReference:531case vmIntrinsics::_putBoolean:532case vmIntrinsics::_putByte:533case vmIntrinsics::_putShort:534case vmIntrinsics::_putChar:535case vmIntrinsics::_putInt:536case vmIntrinsics::_putLong:537case vmIntrinsics::_putFloat:538case vmIntrinsics::_putDouble:539case vmIntrinsics::_getReferenceVolatile:540case vmIntrinsics::_getBooleanVolatile:541case vmIntrinsics::_getByteVolatile:542case vmIntrinsics::_getShortVolatile:543case vmIntrinsics::_getCharVolatile:544case vmIntrinsics::_getIntVolatile:545case vmIntrinsics::_getLongVolatile:546case vmIntrinsics::_getFloatVolatile:547case vmIntrinsics::_getDoubleVolatile:548case vmIntrinsics::_putReferenceVolatile:549case vmIntrinsics::_putBooleanVolatile:550case vmIntrinsics::_putByteVolatile:551case vmIntrinsics::_putShortVolatile:552case vmIntrinsics::_putCharVolatile:553case vmIntrinsics::_putIntVolatile:554case vmIntrinsics::_putLongVolatile:555case vmIntrinsics::_putFloatVolatile:556case vmIntrinsics::_putDoubleVolatile:557case vmIntrinsics::_getReferenceAcquire:558case vmIntrinsics::_getBooleanAcquire:559case vmIntrinsics::_getByteAcquire:560case vmIntrinsics::_getShortAcquire:561case vmIntrinsics::_getCharAcquire:562case vmIntrinsics::_getIntAcquire:563case vmIntrinsics::_getLongAcquire:564case vmIntrinsics::_getFloatAcquire:565case vmIntrinsics::_getDoubleAcquire:566case vmIntrinsics::_putReferenceRelease:567case vmIntrinsics::_putBooleanRelease:568case vmIntrinsics::_putByteRelease:569case vmIntrinsics::_putShortRelease:570case vmIntrinsics::_putCharRelease:571case vmIntrinsics::_putIntRelease:572case vmIntrinsics::_putLongRelease:573case vmIntrinsics::_putFloatRelease:574case vmIntrinsics::_putDoubleRelease:575case vmIntrinsics::_getReferenceOpaque:576case vmIntrinsics::_getBooleanOpaque:577case vmIntrinsics::_getByteOpaque:578case vmIntrinsics::_getShortOpaque:579case vmIntrinsics::_getCharOpaque:580case vmIntrinsics::_getIntOpaque:581case vmIntrinsics::_getLongOpaque:582case vmIntrinsics::_getFloatOpaque:583case vmIntrinsics::_getDoubleOpaque:584case vmIntrinsics::_putReferenceOpaque:585case vmIntrinsics::_putBooleanOpaque:586case vmIntrinsics::_putByteOpaque:587case vmIntrinsics::_putShortOpaque:588case vmIntrinsics::_putCharOpaque:589case vmIntrinsics::_putIntOpaque:590case vmIntrinsics::_putLongOpaque:591case vmIntrinsics::_putFloatOpaque:592case vmIntrinsics::_putDoubleOpaque:593case vmIntrinsics::_getShortUnaligned:594case vmIntrinsics::_getCharUnaligned:595case vmIntrinsics::_getIntUnaligned:596case vmIntrinsics::_getLongUnaligned:597case vmIntrinsics::_putShortUnaligned:598case vmIntrinsics::_putCharUnaligned:599case vmIntrinsics::_putIntUnaligned:600case vmIntrinsics::_putLongUnaligned:601case vmIntrinsics::_loadFence:602case vmIntrinsics::_storeFence:603case vmIntrinsics::_fullFence:604case vmIntrinsics::_currentThread:605#ifdef JFR_HAVE_INTRINSICS606case vmIntrinsics::_counterTime:607case vmIntrinsics::_getClassId:608case vmIntrinsics::_getEventWriter:609#endif610case vmIntrinsics::_currentTimeMillis:611case vmIntrinsics::_nanoTime:612case vmIntrinsics::_allocateInstance:613case vmIntrinsics::_allocateUninitializedArray:614case vmIntrinsics::_newArray:615case vmIntrinsics::_getLength:616case vmIntrinsics::_copyOf:617case vmIntrinsics::_copyOfRange:618case vmIntrinsics::_clone:619case vmIntrinsics::_isAssignableFrom:620case vmIntrinsics::_isInstance:621case vmIntrinsics::_getModifiers:622case vmIntrinsics::_isInterface:623case vmIntrinsics::_isArray:624case vmIntrinsics::_isPrimitive:625case vmIntrinsics::_isHidden:626case vmIntrinsics::_getSuperclass:627case vmIntrinsics::_getClassAccessFlags:628case vmIntrinsics::_floatToRawIntBits:629case vmIntrinsics::_floatToIntBits:630case vmIntrinsics::_intBitsToFloat:631case vmIntrinsics::_doubleToRawLongBits:632case vmIntrinsics::_doubleToLongBits:633case vmIntrinsics::_longBitsToDouble:634case vmIntrinsics::_Reference_get:635case vmIntrinsics::_Reference_refersTo0:636case vmIntrinsics::_PhantomReference_refersTo0:637case vmIntrinsics::_Class_cast:638case vmIntrinsics::_aescrypt_encryptBlock:639case vmIntrinsics::_aescrypt_decryptBlock:640case vmIntrinsics::_cipherBlockChaining_encryptAESCrypt:641case vmIntrinsics::_cipherBlockChaining_decryptAESCrypt:642case vmIntrinsics::_electronicCodeBook_encryptAESCrypt:643case vmIntrinsics::_electronicCodeBook_decryptAESCrypt:644case vmIntrinsics::_counterMode_AESCrypt:645case vmIntrinsics::_md5_implCompress:646case vmIntrinsics::_sha_implCompress:647case vmIntrinsics::_sha2_implCompress:648case vmIntrinsics::_sha5_implCompress:649case vmIntrinsics::_sha3_implCompress:650case vmIntrinsics::_digestBase_implCompressMB:651case vmIntrinsics::_multiplyToLen:652case vmIntrinsics::_squareToLen:653case vmIntrinsics::_mulAdd:654case vmIntrinsics::_montgomeryMultiply:655case vmIntrinsics::_montgomerySquare:656case vmIntrinsics::_bigIntegerRightShiftWorker:657case vmIntrinsics::_bigIntegerLeftShiftWorker:658case vmIntrinsics::_vectorizedMismatch:659case vmIntrinsics::_ghash_processBlocks:660case vmIntrinsics::_base64_encodeBlock:661case vmIntrinsics::_base64_decodeBlock:662case vmIntrinsics::_updateCRC32:663case vmIntrinsics::_updateBytesCRC32:664case vmIntrinsics::_updateByteBufferCRC32:665case vmIntrinsics::_updateBytesCRC32C:666case vmIntrinsics::_updateDirectByteBufferCRC32C:667case vmIntrinsics::_updateBytesAdler32:668case vmIntrinsics::_updateByteBufferAdler32:669case vmIntrinsics::_profileBoolean:670case vmIntrinsics::_isCompileConstant:671case vmIntrinsics::_Preconditions_checkIndex:672case vmIntrinsics::_Preconditions_checkLongIndex:673case vmIntrinsics::_getObjectSize:674break;675676case vmIntrinsics::_VectorUnaryOp:677case vmIntrinsics::_VectorBinaryOp:678case vmIntrinsics::_VectorTernaryOp:679case vmIntrinsics::_VectorBroadcastCoerced:680case vmIntrinsics::_VectorShuffleIota:681case vmIntrinsics::_VectorShuffleToVector:682case vmIntrinsics::_VectorLoadOp:683case vmIntrinsics::_VectorStoreOp:684case vmIntrinsics::_VectorGatherOp:685case vmIntrinsics::_VectorScatterOp:686case vmIntrinsics::_VectorReductionCoerced:687case vmIntrinsics::_VectorTest:688case vmIntrinsics::_VectorBlend:689case vmIntrinsics::_VectorRearrange:690case vmIntrinsics::_VectorCompare:691case vmIntrinsics::_VectorBroadcastInt:692case vmIntrinsics::_VectorConvert:693case vmIntrinsics::_VectorInsert:694case vmIntrinsics::_VectorExtract:695case vmIntrinsics::_VectorMaskOp:696return EnableVectorSupport;697case vmIntrinsics::_blackhole:698break;699700default:701return false;702}703return true;704}705706int C2Compiler::initial_code_buffer_size(int const_size) {707// See Compile::init_scratch_buffer_blob708int locs_size = sizeof(relocInfo) * PhaseOutput::MAX_locs_size;709int slop = 2 * CodeSection::end_slop(); // space between sections710return PhaseOutput::MAX_inst_size + PhaseOutput::MAX_stubs_size + const_size + slop + locs_size;711}712713714