c2compiler.cpp revision 9248:6ab7e19c9220
1139804Simp/*
226156Sse * Copyright (c) 1999, 2015, Oracle and/or its affiliates. All rights reserved.
326156Sse * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
426156Sse *
526156Sse * This code is free software; you can redistribute it and/or modify it
626156Sse * under the terms of the GNU General Public License version 2 only, as
726156Sse * published by the Free Software Foundation.
826156Sse *
926156Sse * This code is distributed in the hope that it will be useful, but WITHOUT
1026156Sse * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
1126156Sse * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
1226156Sse * version 2 for more details (a copy is included in the LICENSE file that
1326156Sse * accompanied this code).
1426156Sse *
1526156Sse * You should have received a copy of the GNU General Public License version
1626156Sse * 2 along with this work; if not, write to the Free Software Foundation,
1726156Sse * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
1826156Sse *
1926156Sse * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
2026156Sse * or visit www.oracle.com if you need additional information or have any
2126156Sse * questions.
2226156Sse *
2326156Sse */
2426156Sse
2526156Sse#include "precompiled.hpp"
2626156Sse#include "opto/c2compiler.hpp"
27116182Sobrien#include "opto/compile.hpp"
28116182Sobrien#include "opto/optoreg.hpp"
2936887Sdfr#include "opto/output.hpp"
30121482Sjhb#include "opto/runtime.hpp"
31121482Sjhb
3241059Speter// register information defined by ADLC
3365822Sjhbextern const char register_save_policy[];
34110860Salfredextern const int  register_save_type[];
3565822Sjhb
3641059Speterconst char* C2Compiler::retry_no_subsuming_loads() {
3766698Sjhb  return "retry without subsuming loads";
3866698Sjhb}
3966698Sjhbconst char* C2Compiler::retry_no_escape_analysis() {
4066698Sjhb  return "retry without escape analysis";
41130128Sbde}
4274914Sjhbconst char* C2Compiler::retry_class_loading_during_parsing() {
4326156Sse  return "retry class loading during parsing";
4467365Sjhb}
4566698Sjhbbool C2Compiler::init_c2_runtime() {
4672759Sjhb
4772237Sjhb  // Check assumptions used while running ADLC
48139451Sjhb  Compile::adlc_verification();
4977582Stmm  assert(REG_COUNT <= ConcreteRegisterImpl::number_of_registers, "incompatible register counts");
5066698Sjhb
5166698Sjhb  for (int i = 0; i < ConcreteRegisterImpl::number_of_registers ; i++ ) {
5266698Sjhb      OptoReg::vm2opto[i] = OptoReg::Bad;
5366698Sjhb  }
5467551Sjhb
5572237Sjhb  for( OptoReg::Name i=OptoReg::Name(0); i<OptoReg::Name(REG_COUNT); i = OptoReg::add(i,1) ) {
56121482Sjhb    VMReg r = OptoReg::as_VMReg(i);
57121482Sjhb    if (r->is_valid()) {
58121482Sjhb      OptoReg::vm2opto[r->value()] = i;
59121482Sjhb    }
6026156Sse  }
61151658Sjhb
62151658Sjhb  // Check that runtime and architecture description agree on callee-saved-floats
63151658Sjhb  bool callee_saved_floats = false;
64151658Sjhb  for( OptoReg::Name i=OptoReg::Name(0); i<OptoReg::Name(_last_Mach_Reg); i = OptoReg::add(i,1) ) {
65151658Sjhb    // Is there a callee-saved float or double?
66151658Sjhb    if( register_save_policy[i] == 'E' /* callee-saved */ &&
67151658Sjhb       (register_save_type[i] == Op_RegF || register_save_type[i] == Op_RegD) ) {
68151658Sjhb      callee_saved_floats = true;
6972759Sjhb    }
7072759Sjhb  }
71151658Sjhb
72151658Sjhb  DEBUG_ONLY( Node::init_NodeProperty(); )
73151658Sjhb
74151658Sjhb  Compile::pd_compiler2_init();
75151658Sjhb
76151658Sjhb  CompilerThread* thread = CompilerThread::current();
77151658Sjhb
78151658Sjhb  HandleMark handle_mark(thread);
79151658Sjhb  return OptoRuntime::generate(thread->env());
80151658Sjhb}
81128339Sbde
82128339Sbdevoid C2Compiler::initialize() {
83173004Sjulian  // The first compiler thread that gets here will initialize the
8438244Sbde  // small amount of global state (and runtime stubs) that C2 needs.
8572237Sjhb
8672237Sjhb  // There is a race possible once at startup and then we're fine
87168850Snjl
88128331Sjhb  // Note that this is being called from a compiler thread not the
89128331Sjhb  // main startup thread.
90128331Sjhb  if (should_perform_init()) {
91128339Sbde    bool successful = C2Compiler::init_c2_runtime();
92151658Sjhb    int new_state = (successful) ? initialized : failed;
93151658Sjhb    set_state(new_state);
94128331Sjhb  }
95151658Sjhb}
96169320Spiso
97169320Spisovoid C2Compiler::compile_method(ciEnv* env, ciMethod* target, int entry_bci) {
98169320Spiso  assert(is_initialized(), "Compiler thread must be initialized");
99169320Spiso
100151658Sjhb  bool subsume_loads = SubsumeLoads;
101169320Spiso  bool do_escape_analysis = DoEscapeAnalysis && !env->should_retain_local_variables();
102151658Sjhb  bool eliminate_boxing = EliminateAutoBox;
103169320Spiso  while (!env->failing()) {
104169320Spiso    // Attempt to compile while subsuming loads into machine instructions.
105169320Spiso    Compile C(env, this, target, entry_bci, subsume_loads, do_escape_analysis, eliminate_boxing);
106169320Spiso
107169320Spiso    // Check result and retry if appropriate.
108169320Spiso    if (C.failure_reason() != NULL) {
109128339Sbde      if (C.failure_reason_is(retry_class_loading_during_parsing())) {
110151658Sjhb        env->report_failure(C.failure_reason());
111128339Sbde        continue;  // retry
112128339Sbde      }
113165124Sjhb      if (C.failure_reason_is(retry_no_subsuming_loads())) {
11472237Sjhb        assert(subsume_loads, "must make progress");
115151658Sjhb        subsume_loads = false;
11665822Sjhb        env->report_failure(C.failure_reason());
11772237Sjhb        continue;  // retry
11865822Sjhb      }
11972237Sjhb      if (C.failure_reason_is(retry_no_escape_analysis())) {
12078365Speter        assert(do_escape_analysis, "must make progress");
12165822Sjhb        do_escape_analysis = false;
12272237Sjhb        env->report_failure(C.failure_reason());
12365822Sjhb        continue;  // retry
12465822Sjhb      }
12565822Sjhb      if (C.has_boxed_value()) {
12665822Sjhb        // Recompile without boxing elimination regardless failure reason.
12765822Sjhb        assert(eliminate_boxing, "must make progress");
12865822Sjhb        eliminate_boxing = false;
12965822Sjhb        env->report_failure(C.failure_reason());
13065822Sjhb        continue;  // retry
13165822Sjhb      }
13265822Sjhb      // Pass any other failure reason up to the ciEnv.
13365822Sjhb      // Note that serious, irreversible failures are already logged
13465822Sjhb      // on the ciEnv via env->record_method_not_compilable().
13565822Sjhb      env->record_failure(C.failure_reason());
13665822Sjhb    }
13765822Sjhb    if (StressRecompilation) {
13878365Speter      if (subsume_loads) {
13978365Speter        subsume_loads = false;
14078365Speter        continue;  // retry
14172237Sjhb      }
14272237Sjhb      if (do_escape_analysis) {
14372237Sjhb        do_escape_analysis = false;
14465822Sjhb        continue;  // retry
14565822Sjhb      }
14665822Sjhb    }
14765822Sjhb
14872237Sjhb    // print inlining for last compilation only
149151658Sjhb    C.dump_print_inlining();
15065822Sjhb
15165822Sjhb    // No retry; just break the loop.
15265822Sjhb    break;
15365822Sjhb  }
15465822Sjhb}
15572237Sjhb
156151658Sjhbvoid C2Compiler::print_timers() {
15772237Sjhb  Compile::print_timers();
15872237Sjhb}
159151658Sjhb
16072237Sjhbbool C2Compiler::is_intrinsic_supported(const methodHandle& method, bool is_virtual) {
161151658Sjhb  vmIntrinsics::ID id = method->intrinsic_id();
16283366Sjulian  assert(id != vmIntrinsics::_none, "must be a VM intrinsic");
163151658Sjhb
16467551Sjhb  if (id < vmIntrinsics::FIRST_ID || id > vmIntrinsics::LAST_COMPILER_INLINE) {
165151658Sjhb    return false;
166151658Sjhb  }
16772237Sjhb
168151658Sjhb  // Only Object.hashCode and Object.clone intrinsics implement also a virtual
169151658Sjhb  // dispatch because calling both methods is expensive but both methods are
170151658Sjhb  // frequently overridden. All other intrinsics implement only a non-virtual
171151658Sjhb  // dispatch.
172151658Sjhb  if (is_virtual) {
173105354Srobert    switch (id) {
174151658Sjhb    case vmIntrinsics::_hashCode:
175173004Sjulian    case vmIntrinsics::_clone:
176170307Sjeff      break;
177151658Sjhb    default:
178170307Sjeff      return false;
179151658Sjhb    }
180151658Sjhb  }
181151658Sjhb
182151658Sjhb  switch (id) {
183151658Sjhb  case vmIntrinsics::_compareTo:
184151658Sjhb    if (!Matcher::match_rule_supported(Op_StrComp)) return false;
185151658Sjhb    break;
186151658Sjhb  case vmIntrinsics::_equals:
187151658Sjhb    if (!Matcher::match_rule_supported(Op_StrEquals)) return false;
188151658Sjhb    break;
189151658Sjhb  case vmIntrinsics::_equalsC:
190151658Sjhb    if (!Matcher::match_rule_supported(Op_AryEq)) return false;
191151658Sjhb    break;
192151658Sjhb  case vmIntrinsics::_copyMemory:
193151658Sjhb    if (StubRoutines::unsafe_arraycopy() == NULL) return false;
194151658Sjhb    break;
195137267Sjhb  case vmIntrinsics::_encodeISOArray:
196151658Sjhb    if (!Matcher::match_rule_supported(Op_EncodeISOArray)) return false;
197151658Sjhb    break;
198151658Sjhb  case vmIntrinsics::_bitCount_i:
199151658Sjhb    if (!Matcher::match_rule_supported(Op_PopCountI)) return false;
200151658Sjhb    break;
201151658Sjhb  case vmIntrinsics::_bitCount_l:
202151658Sjhb    if (!Matcher::match_rule_supported(Op_PopCountL)) return false;
203151658Sjhb    break;
204151658Sjhb  case vmIntrinsics::_numberOfLeadingZeros_i:
205137267Sjhb    if (!Matcher::match_rule_supported(Op_CountLeadingZerosI)) return false;
206137267Sjhb    break;
207137267Sjhb  case vmIntrinsics::_numberOfLeadingZeros_l:
208151658Sjhb    if (!Matcher::match_rule_supported(Op_CountLeadingZerosL)) return false;
209137267Sjhb    break;
210151658Sjhb  case vmIntrinsics::_numberOfTrailingZeros_i:
211151658Sjhb    if (!Matcher::match_rule_supported(Op_CountTrailingZerosI)) return false;
212151658Sjhb    break;
213151658Sjhb  case vmIntrinsics::_numberOfTrailingZeros_l:
214151658Sjhb    if (!Matcher::match_rule_supported(Op_CountTrailingZerosL)) return false;
215151658Sjhb    break;
216151658Sjhb  case vmIntrinsics::_reverseBytes_c:
217137267Sjhb    if (!Matcher::match_rule_supported(Op_ReverseBytesUS)) return false;
218151658Sjhb    break;
219151658Sjhb  case vmIntrinsics::_reverseBytes_s:
220151658Sjhb    if (!Matcher::match_rule_supported(Op_ReverseBytesS)) return false;
221151658Sjhb    break;
222151658Sjhb  case vmIntrinsics::_reverseBytes_i:
223151658Sjhb    if (!Matcher::match_rule_supported(Op_ReverseBytesI)) return false;
224151658Sjhb    break;
225151658Sjhb  case vmIntrinsics::_reverseBytes_l:
226151658Sjhb    if (!Matcher::match_rule_supported(Op_ReverseBytesL)) return false;
22772237Sjhb    break;
228151658Sjhb  case vmIntrinsics::_compareAndSwapObject:
22972237Sjhb#ifdef _LP64
230151658Sjhb    if (!UseCompressedOops && !Matcher::match_rule_supported(Op_CompareAndSwapP)) return false;
231151658Sjhb#endif
232151658Sjhb    break;
233151658Sjhb  case vmIntrinsics::_compareAndSwapLong:
234151658Sjhb    if (!Matcher::match_rule_supported(Op_CompareAndSwapL)) return false;
235151658Sjhb    break;
236151658Sjhb  case vmIntrinsics::_getAndAddInt:
237151658Sjhb    if (!Matcher::match_rule_supported(Op_GetAndAddI)) return false;
23872237Sjhb    break;
23972237Sjhb  case vmIntrinsics::_getAndAddLong:
240169320Spiso    if (!Matcher::match_rule_supported(Op_GetAndAddL)) return false;
24172237Sjhb    break;
242151658Sjhb  case vmIntrinsics::_getAndSetInt:
243151658Sjhb    if (!Matcher::match_rule_supported(Op_GetAndSetI)) return false;
24466698Sjhb    break;
245151658Sjhb  case vmIntrinsics::_getAndSetLong:
24672237Sjhb    if (!Matcher::match_rule_supported(Op_GetAndSetL)) return false;
24772237Sjhb    break;
248151658Sjhb  case vmIntrinsics::_getAndSetObject:
249151658Sjhb#ifdef _LP64
25072759Sjhb    if (!UseCompressedOops && !Matcher::match_rule_supported(Op_GetAndSetP)) return false;
251151658Sjhb    if (UseCompressedOops && !Matcher::match_rule_supported(Op_GetAndSetN)) return false;
252151658Sjhb    break;
253151658Sjhb#else
254151658Sjhb    if (!Matcher::match_rule_supported(Op_GetAndSetP)) return false;
255151658Sjhb    break;
256151658Sjhb#endif
25772759Sjhb  case vmIntrinsics::_incrementExactI:
25872237Sjhb  case vmIntrinsics::_addExactI:
259151658Sjhb    if (!Matcher::match_rule_supported(Op_OverflowAddI)) return false;
26072237Sjhb    break;
261151658Sjhb  case vmIntrinsics::_incrementExactL:
262151658Sjhb  case vmIntrinsics::_addExactL:
263151658Sjhb    if (!Matcher::match_rule_supported(Op_OverflowAddL)) return false;
264151658Sjhb    break;
265151658Sjhb  case vmIntrinsics::_decrementExactI:
266151658Sjhb  case vmIntrinsics::_subtractExactI:
267151658Sjhb    if (!Matcher::match_rule_supported(Op_OverflowSubI)) return false;
268151658Sjhb    break;
269151658Sjhb  case vmIntrinsics::_decrementExactL:
270169320Spiso  case vmIntrinsics::_subtractExactL:
271169320Spiso    if (!Matcher::match_rule_supported(Op_OverflowSubL)) return false;
272169320Spiso    break;
273169320Spiso  case vmIntrinsics::_negateExactI:
274169320Spiso    if (!Matcher::match_rule_supported(Op_OverflowSubI)) return false;
275169320Spiso    break;
276169320Spiso  case vmIntrinsics::_negateExactL:
277169320Spiso    if (!Matcher::match_rule_supported(Op_OverflowSubL)) return false;
27872237Sjhb    break;
279169320Spiso  case vmIntrinsics::_multiplyExactI:
280169320Spiso    if (!Matcher::match_rule_supported(Op_OverflowMulI)) return false;
281169320Spiso    break;
282169320Spiso  case vmIntrinsics::_multiplyExactL:
283169320Spiso    if (!Matcher::match_rule_supported(Op_OverflowMulL)) return false;
284169320Spiso    break;
285169320Spiso  case vmIntrinsics::_getCallerClass:
286169320Spiso    if (SystemDictionary::reflect_CallerSensitive_klass() == NULL) return false;
287169320Spiso    break;
288169320Spiso  case vmIntrinsics::_hashCode:
289169320Spiso  case vmIntrinsics::_identityHashCode:
290169320Spiso  case vmIntrinsics::_getClass:
291169320Spiso  case vmIntrinsics::_dsin:
292169320Spiso  case vmIntrinsics::_dcos:
293169320Spiso  case vmIntrinsics::_dtan:
294169320Spiso  case vmIntrinsics::_dabs:
295169320Spiso  case vmIntrinsics::_datan2:
296169320Spiso  case vmIntrinsics::_dsqrt:
297169320Spiso  case vmIntrinsics::_dexp:
298169320Spiso  case vmIntrinsics::_dlog:
299169320Spiso  case vmIntrinsics::_dlog10:
300169320Spiso  case vmIntrinsics::_dpow:
301169320Spiso  case vmIntrinsics::_min:
302169320Spiso  case vmIntrinsics::_max:
303169320Spiso  case vmIntrinsics::_arraycopy:
304169320Spiso  case vmIntrinsics::_indexOf:
305151658Sjhb  case vmIntrinsics::_getObject:
306151658Sjhb  case vmIntrinsics::_getBoolean:
307151658Sjhb  case vmIntrinsics::_getByte:
308151658Sjhb  case vmIntrinsics::_getShort:
309151658Sjhb  case vmIntrinsics::_getChar:
310151658Sjhb  case vmIntrinsics::_getInt:
311151658Sjhb  case vmIntrinsics::_getLong:
312151658Sjhb  case vmIntrinsics::_getFloat:
313151658Sjhb  case vmIntrinsics::_getDouble:
314151658Sjhb  case vmIntrinsics::_putObject:
315151658Sjhb  case vmIntrinsics::_putBoolean:
316151658Sjhb  case vmIntrinsics::_putByte:
317157728Sjhb  case vmIntrinsics::_putShort:
318157728Sjhb  case vmIntrinsics::_putChar:
319157728Sjhb  case vmIntrinsics::_putInt:
320157728Sjhb  case vmIntrinsics::_putLong:
321157728Sjhb  case vmIntrinsics::_putFloat:
322157728Sjhb  case vmIntrinsics::_putDouble:
323151658Sjhb  case vmIntrinsics::_getByte_raw:
324151658Sjhb  case vmIntrinsics::_getShort_raw:
325151658Sjhb  case vmIntrinsics::_getChar_raw:
326151658Sjhb  case vmIntrinsics::_getInt_raw:
327151658Sjhb  case vmIntrinsics::_getLong_raw:
328151658Sjhb  case vmIntrinsics::_getFloat_raw:
329169320Spiso  case vmIntrinsics::_getDouble_raw:
330151658Sjhb  case vmIntrinsics::_getAddress_raw:
331151658Sjhb  case vmIntrinsics::_putByte_raw:
332151658Sjhb  case vmIntrinsics::_putShort_raw:
333151658Sjhb  case vmIntrinsics::_putChar_raw:
334151658Sjhb  case vmIntrinsics::_putInt_raw:
335151658Sjhb  case vmIntrinsics::_putLong_raw:
336151658Sjhb  case vmIntrinsics::_putFloat_raw:
337151658Sjhb  case vmIntrinsics::_putDouble_raw:
338151658Sjhb  case vmIntrinsics::_putAddress_raw:
339173004Sjulian  case vmIntrinsics::_getObjectVolatile:
340173004Sjulian  case vmIntrinsics::_getBooleanVolatile:
341173051Sjulian  case vmIntrinsics::_getByteVolatile:
342151658Sjhb  case vmIntrinsics::_getShortVolatile:
343172836Sjulian  case vmIntrinsics::_getCharVolatile:
344170307Sjeff  case vmIntrinsics::_getIntVolatile:
345164936Sjulian  case vmIntrinsics::_getLongVolatile:
346103216Sjulian  case vmIntrinsics::_getFloatVolatile:
347170307Sjeff  case vmIntrinsics::_getDoubleVolatile:
348151658Sjhb  case vmIntrinsics::_putObjectVolatile:
349151658Sjhb  case vmIntrinsics::_putBooleanVolatile:
350151658Sjhb  case vmIntrinsics::_putByteVolatile:
351151658Sjhb  case vmIntrinsics::_putShortVolatile:
35272237Sjhb  case vmIntrinsics::_putCharVolatile:
353169320Spiso  case vmIntrinsics::_putIntVolatile:
354169320Spiso  case vmIntrinsics::_putLongVolatile:
355169320Spiso  case vmIntrinsics::_putFloatVolatile:
356169320Spiso  case vmIntrinsics::_putDoubleVolatile:
357169320Spiso  case vmIntrinsics::_getShortUnaligned:
358169320Spiso  case vmIntrinsics::_getCharUnaligned:
359169320Spiso  case vmIntrinsics::_getIntUnaligned:
36072237Sjhb  case vmIntrinsics::_getLongUnaligned:
361169320Spiso  case vmIntrinsics::_putShortUnaligned:
362169320Spiso  case vmIntrinsics::_putCharUnaligned:
363173004Sjulian  case vmIntrinsics::_putIntUnaligned:
364173004Sjulian  case vmIntrinsics::_putLongUnaligned:
365173051Sjulian  case vmIntrinsics::_compareAndSwapInt:
366169320Spiso  case vmIntrinsics::_putOrderedObject:
367172836Sjulian  case vmIntrinsics::_putOrderedInt:
368170307Sjeff  case vmIntrinsics::_putOrderedLong:
369169320Spiso  case vmIntrinsics::_loadFence:
370169320Spiso  case vmIntrinsics::_storeFence:
371170307Sjeff  case vmIntrinsics::_fullFence:
372169320Spiso  case vmIntrinsics::_currentThread:
373169320Spiso  case vmIntrinsics::_isInterrupted:
374169320Spiso#ifdef TRACE_HAVE_INTRINSICS
375169320Spiso  case vmIntrinsics::_classID:
376169320Spiso  case vmIntrinsics::_threadID:
377169320Spiso  case vmIntrinsics::_counterTime:
378169320Spiso#endif
379151658Sjhb  case vmIntrinsics::_currentTimeMillis:
380151658Sjhb  case vmIntrinsics::_nanoTime:
38172237Sjhb  case vmIntrinsics::_allocateInstance:
38283366Sjulian  case vmIntrinsics::_newArray:
38372237Sjhb  case vmIntrinsics::_getLength:
384157784Sscottl  case vmIntrinsics::_copyOf:
385151658Sjhb  case vmIntrinsics::_copyOfRange:
386170307Sjeff  case vmIntrinsics::_clone:
38776771Sjhb  case vmIntrinsics::_isAssignableFrom:
388103216Sjulian  case vmIntrinsics::_isInstance:
389103216Sjulian  case vmIntrinsics::_getModifiers:
390166188Sjeff  case vmIntrinsics::_isInterface:
39172237Sjhb  case vmIntrinsics::_isArray:
392170307Sjeff  case vmIntrinsics::_isPrimitive:
39372237Sjhb  case vmIntrinsics::_getSuperclass:
39472237Sjhb  case vmIntrinsics::_getClassAccessFlags:
395169320Spiso  case vmIntrinsics::_floatToRawIntBits:
39672237Sjhb  case vmIntrinsics::_floatToIntBits:
397151658Sjhb  case vmIntrinsics::_intBitsToFloat:
398166901Spiso  case vmIntrinsics::_doubleToRawLongBits:
399166901Spiso  case vmIntrinsics::_doubleToLongBits:
40072237Sjhb  case vmIntrinsics::_longBitsToDouble:
401151658Sjhb  case vmIntrinsics::_Reference_get:
402151658Sjhb  case vmIntrinsics::_Class_cast:
40372237Sjhb  case vmIntrinsics::_aescrypt_encryptBlock:
404166901Spiso  case vmIntrinsics::_aescrypt_decryptBlock:
40572237Sjhb  case vmIntrinsics::_cipherBlockChaining_encryptAESCrypt:
40672237Sjhb  case vmIntrinsics::_cipherBlockChaining_decryptAESCrypt:
407151658Sjhb  case vmIntrinsics::_sha_implCompress:
408151658Sjhb  case vmIntrinsics::_sha2_implCompress:
409166901Spiso  case vmIntrinsics::_sha5_implCompress:
41072237Sjhb  case vmIntrinsics::_digestBase_implCompressMB:
41172237Sjhb  case vmIntrinsics::_multiplyToLen:
41272237Sjhb  case vmIntrinsics::_squareToLen:
413151658Sjhb  case vmIntrinsics::_mulAdd:
41472237Sjhb  case vmIntrinsics::_montgomeryMultiply:
415166901Spiso  case vmIntrinsics::_montgomerySquare:
41672237Sjhb  case vmIntrinsics::_ghash_processBlocks:
41772237Sjhb  case vmIntrinsics::_updateCRC32:
41872237Sjhb  case vmIntrinsics::_updateBytesCRC32:
41972237Sjhb  case vmIntrinsics::_updateByteBufferCRC32:
42072237Sjhb  case vmIntrinsics::_updateBytesCRC32C:
42172237Sjhb  case vmIntrinsics::_updateDirectByteBufferCRC32C:
422151658Sjhb  case vmIntrinsics::_updateBytesAdler32:
423151658Sjhb  case vmIntrinsics::_updateByteBufferAdler32:
424151658Sjhb  case vmIntrinsics::_profileBoolean:
425151658Sjhb  case vmIntrinsics::_isCompileConstant:
426151658Sjhb    break;
427151658Sjhb  default:
428151658Sjhb    return false;
429151658Sjhb  }
430151658Sjhb  return true;
431122002Sjhb}
43272237Sjhb
433151658Sjhbint C2Compiler::initial_code_buffer_size() {
434151658Sjhb  assert(SegmentedCodeCache, "Should be only used with a segmented code cache");
435151658Sjhb  return Compile::MAX_inst_size + Compile::MAX_locs_size + initial_const_capacity;
436151658Sjhb}
437151658Sjhb