c2compiler.cpp revision 12777:0a7b3b558838
1/*
2 * Copyright (c) 1999, 2017, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 *
23 */
24
25#include "precompiled.hpp"
26#include "opto/c2compiler.hpp"
27#include "opto/compile.hpp"
28#include "opto/optoreg.hpp"
29#include "opto/output.hpp"
30#include "opto/runtime.hpp"
31
32// register information defined by ADLC
33extern const char register_save_policy[];
34extern const int  register_save_type[];
35
36const char* C2Compiler::retry_no_subsuming_loads() {
37  return "retry without subsuming loads";
38}
39const char* C2Compiler::retry_no_escape_analysis() {
40  return "retry without escape analysis";
41}
42const char* C2Compiler::retry_class_loading_during_parsing() {
43  return "retry class loading during parsing";
44}
45bool C2Compiler::init_c2_runtime() {
46
47  // Check assumptions used while running ADLC
48  Compile::adlc_verification();
49  assert(REG_COUNT <= ConcreteRegisterImpl::number_of_registers, "incompatible register counts");
50
51  for (int i = 0; i < ConcreteRegisterImpl::number_of_registers ; i++ ) {
52      OptoReg::vm2opto[i] = OptoReg::Bad;
53  }
54
55  for( OptoReg::Name i=OptoReg::Name(0); i<OptoReg::Name(REG_COUNT); i = OptoReg::add(i,1) ) {
56    VMReg r = OptoReg::as_VMReg(i);
57    if (r->is_valid()) {
58      OptoReg::vm2opto[r->value()] = i;
59    }
60  }
61
62  // Check that runtime and architecture description agree on callee-saved-floats
63  bool callee_saved_floats = false;
64  for( OptoReg::Name i=OptoReg::Name(0); i<OptoReg::Name(_last_Mach_Reg); i = OptoReg::add(i,1) ) {
65    // Is there a callee-saved float or double?
66    if( register_save_policy[i] == 'E' /* callee-saved */ &&
67       (register_save_type[i] == Op_RegF || register_save_type[i] == Op_RegD) ) {
68      callee_saved_floats = true;
69    }
70  }
71
72  DEBUG_ONLY( Node::init_NodeProperty(); )
73
74  Compile::pd_compiler2_init();
75
76  CompilerThread* thread = CompilerThread::current();
77
78  HandleMark handle_mark(thread);
79  return OptoRuntime::generate(thread->env());
80}
81
82void C2Compiler::initialize() {
83  // The first compiler thread that gets here will initialize the
84  // small amount of global state (and runtime stubs) that C2 needs.
85
86  // There is a race possible once at startup and then we're fine
87
88  // Note that this is being called from a compiler thread not the
89  // main startup thread.
90  if (should_perform_init()) {
91    bool successful = C2Compiler::init_c2_runtime();
92    int new_state = (successful) ? initialized : failed;
93    set_state(new_state);
94  }
95}
96
97void C2Compiler::compile_method(ciEnv* env, ciMethod* target, int entry_bci, DirectiveSet* directive) {
98  assert(is_initialized(), "Compiler thread must be initialized");
99
100  bool subsume_loads = SubsumeLoads;
101  bool do_escape_analysis = DoEscapeAnalysis && !env->should_retain_local_variables();
102  bool eliminate_boxing = EliminateAutoBox;
103
104  while (!env->failing()) {
105    // Attempt to compile while subsuming loads into machine instructions.
106    Compile C(env, this, target, entry_bci, subsume_loads, do_escape_analysis, eliminate_boxing, directive);
107
108    // Check result and retry if appropriate.
109    if (C.failure_reason() != NULL) {
110      if (C.failure_reason_is(retry_class_loading_during_parsing())) {
111        env->report_failure(C.failure_reason());
112        continue;  // retry
113      }
114      if (C.failure_reason_is(retry_no_subsuming_loads())) {
115        assert(subsume_loads, "must make progress");
116        subsume_loads = false;
117        env->report_failure(C.failure_reason());
118        continue;  // retry
119      }
120      if (C.failure_reason_is(retry_no_escape_analysis())) {
121        assert(do_escape_analysis, "must make progress");
122        do_escape_analysis = false;
123        env->report_failure(C.failure_reason());
124        continue;  // retry
125      }
126      if (C.has_boxed_value()) {
127        // Recompile without boxing elimination regardless failure reason.
128        assert(eliminate_boxing, "must make progress");
129        eliminate_boxing = false;
130        env->report_failure(C.failure_reason());
131        continue;  // retry
132      }
133      // Pass any other failure reason up to the ciEnv.
134      // Note that serious, irreversible failures are already logged
135      // on the ciEnv via env->record_method_not_compilable().
136      env->record_failure(C.failure_reason());
137    }
138    if (StressRecompilation) {
139      if (subsume_loads) {
140        subsume_loads = false;
141        continue;  // retry
142      }
143      if (do_escape_analysis) {
144        do_escape_analysis = false;
145        continue;  // retry
146      }
147    }
148
149    // print inlining for last compilation only
150    C.dump_print_inlining();
151
152    // No retry; just break the loop.
153    break;
154  }
155}
156
157void C2Compiler::print_timers() {
158  Compile::print_timers();
159}
160
161bool C2Compiler::is_intrinsic_supported(const methodHandle& method, bool is_virtual) {
162  vmIntrinsics::ID id = method->intrinsic_id();
163  assert(id != vmIntrinsics::_none, "must be a VM intrinsic");
164
165  if (id < vmIntrinsics::FIRST_ID || id > vmIntrinsics::LAST_COMPILER_INLINE) {
166    return false;
167  }
168
169  // Only Object.hashCode and Object.clone intrinsics implement also a virtual
170  // dispatch because calling both methods is expensive but both methods are
171  // frequently overridden. All other intrinsics implement only a non-virtual
172  // dispatch.
173  if (is_virtual) {
174    switch (id) {
175    case vmIntrinsics::_hashCode:
176    case vmIntrinsics::_clone:
177      break;
178    default:
179      return false;
180    }
181  }
182
183  switch (id) {
184  case vmIntrinsics::_compressStringC:
185  case vmIntrinsics::_compressStringB:
186    if (!Matcher::has_match_rule(Op_StrCompressedCopy)) return false;
187    break;
188  case vmIntrinsics::_inflateStringC:
189  case vmIntrinsics::_inflateStringB:
190    if (!Matcher::has_match_rule(Op_StrInflatedCopy)) return false;
191    break;
192  case vmIntrinsics::_compareToL:
193  case vmIntrinsics::_compareToU:
194  case vmIntrinsics::_compareToLU:
195  case vmIntrinsics::_compareToUL:
196    if (!Matcher::match_rule_supported(Op_StrComp)) return false;
197    break;
198  case vmIntrinsics::_equalsL:
199  case vmIntrinsics::_equalsU:
200    if (!Matcher::match_rule_supported(Op_StrEquals)) return false;
201    break;
202  case vmIntrinsics::_equalsB:
203  case vmIntrinsics::_equalsC:
204    if (!Matcher::match_rule_supported(Op_AryEq)) return false;
205    break;
206  case vmIntrinsics::_copyMemory:
207    if (StubRoutines::unsafe_arraycopy() == NULL) return false;
208    break;
209  case vmIntrinsics::_encodeISOArray:
210  case vmIntrinsics::_encodeByteISOArray:
211    if (!Matcher::match_rule_supported(Op_EncodeISOArray)) return false;
212    break;
213  case vmIntrinsics::_hasNegatives:
214    if (!Matcher::match_rule_supported(Op_HasNegatives))  return false;
215    break;
216  case vmIntrinsics::_bitCount_i:
217    if (!Matcher::match_rule_supported(Op_PopCountI)) return false;
218    break;
219  case vmIntrinsics::_bitCount_l:
220    if (!Matcher::match_rule_supported(Op_PopCountL)) return false;
221    break;
222  case vmIntrinsics::_numberOfLeadingZeros_i:
223    if (!Matcher::match_rule_supported(Op_CountLeadingZerosI)) return false;
224    break;
225  case vmIntrinsics::_numberOfLeadingZeros_l:
226    if (!Matcher::match_rule_supported(Op_CountLeadingZerosL)) return false;
227    break;
228  case vmIntrinsics::_numberOfTrailingZeros_i:
229    if (!Matcher::match_rule_supported(Op_CountTrailingZerosI)) return false;
230    break;
231  case vmIntrinsics::_numberOfTrailingZeros_l:
232    if (!Matcher::match_rule_supported(Op_CountTrailingZerosL)) return false;
233    break;
234  case vmIntrinsics::_reverseBytes_c:
235    if (!Matcher::match_rule_supported(Op_ReverseBytesUS)) return false;
236    break;
237  case vmIntrinsics::_reverseBytes_s:
238    if (!Matcher::match_rule_supported(Op_ReverseBytesS)) return false;
239    break;
240  case vmIntrinsics::_reverseBytes_i:
241    if (!Matcher::match_rule_supported(Op_ReverseBytesI)) return false;
242    break;
243  case vmIntrinsics::_reverseBytes_l:
244    if (!Matcher::match_rule_supported(Op_ReverseBytesL)) return false;
245    break;
246
247  /* CompareAndSet, Object: */
248  case vmIntrinsics::_compareAndSetObject:
249#ifdef _LP64
250    if ( UseCompressedOops && !Matcher::match_rule_supported(Op_CompareAndSwapN)) return false;
251    if (!UseCompressedOops && !Matcher::match_rule_supported(Op_CompareAndSwapP)) return false;
252#else
253    if (!Matcher::match_rule_supported(Op_CompareAndSwapP)) return false;
254#endif
255    break;
256  case vmIntrinsics::_weakCompareAndSetObjectPlain:
257  case vmIntrinsics::_weakCompareAndSetObjectAcquire:
258  case vmIntrinsics::_weakCompareAndSetObjectRelease:
259  case vmIntrinsics::_weakCompareAndSetObject:
260#ifdef _LP64
261    if ( UseCompressedOops && !Matcher::match_rule_supported(Op_WeakCompareAndSwapN)) return false;
262    if (!UseCompressedOops && !Matcher::match_rule_supported(Op_WeakCompareAndSwapP)) return false;
263#else
264    if (!Matcher::match_rule_supported(Op_WeakCompareAndSwapP)) return false;
265#endif
266    break;
267  /* CompareAndSet, Long: */
268  case vmIntrinsics::_compareAndSetLong:
269    if (!Matcher::match_rule_supported(Op_CompareAndSwapL)) return false;
270    break;
271  case vmIntrinsics::_weakCompareAndSetLongPlain:
272  case vmIntrinsics::_weakCompareAndSetLongAcquire:
273  case vmIntrinsics::_weakCompareAndSetLongRelease:
274  case vmIntrinsics::_weakCompareAndSetLong:
275    if (!Matcher::match_rule_supported(Op_WeakCompareAndSwapL)) return false;
276    break;
277
278  /* CompareAndSet, Int: */
279  case vmIntrinsics::_compareAndSetInt:
280    if (!Matcher::match_rule_supported(Op_CompareAndSwapI)) return false;
281    break;
282  case vmIntrinsics::_weakCompareAndSetIntPlain:
283  case vmIntrinsics::_weakCompareAndSetIntAcquire:
284  case vmIntrinsics::_weakCompareAndSetIntRelease:
285  case vmIntrinsics::_weakCompareAndSetInt:
286    if (!Matcher::match_rule_supported(Op_WeakCompareAndSwapL)) return false;
287    break;
288
289  /* CompareAndSet, Byte: */
290  case vmIntrinsics::_compareAndSetByte:
291    if (!Matcher::match_rule_supported(Op_CompareAndSwapB)) return false;
292    break;
293  case vmIntrinsics::_weakCompareAndSetBytePlain:
294  case vmIntrinsics::_weakCompareAndSetByteAcquire:
295  case vmIntrinsics::_weakCompareAndSetByteRelease:
296  case vmIntrinsics::_weakCompareAndSetByte:
297    if (!Matcher::match_rule_supported(Op_WeakCompareAndSwapB)) return false;
298    break;
299
300  /* CompareAndSet, Short: */
301  case vmIntrinsics::_compareAndSetShort:
302    if (!Matcher::match_rule_supported(Op_CompareAndSwapS)) return false;
303    break;
304  case vmIntrinsics::_weakCompareAndSetShortPlain:
305  case vmIntrinsics::_weakCompareAndSetShortAcquire:
306  case vmIntrinsics::_weakCompareAndSetShortRelease:
307  case vmIntrinsics::_weakCompareAndSetShort:
308    if (!Matcher::match_rule_supported(Op_WeakCompareAndSwapS)) return false;
309    break;
310
311  /* CompareAndExchange, Object: */
312  case vmIntrinsics::_compareAndExchangeObject:
313  case vmIntrinsics::_compareAndExchangeObjectAcquire:
314  case vmIntrinsics::_compareAndExchangeObjectRelease:
315#ifdef _LP64
316    if ( UseCompressedOops && !Matcher::match_rule_supported(Op_CompareAndExchangeN)) return false;
317    if (!UseCompressedOops && !Matcher::match_rule_supported(Op_CompareAndExchangeP)) return false;
318#else
319    if (!Matcher::match_rule_supported(Op_CompareAndExchangeP)) return false;
320#endif
321    break;
322
323  /* CompareAndExchange, Long: */
324  case vmIntrinsics::_compareAndExchangeLong:
325  case vmIntrinsics::_compareAndExchangeLongAcquire:
326  case vmIntrinsics::_compareAndExchangeLongRelease:
327    if (!Matcher::match_rule_supported(Op_CompareAndExchangeL)) return false;
328    break;
329
330  /* CompareAndExchange, Int: */
331  case vmIntrinsics::_compareAndExchangeInt:
332  case vmIntrinsics::_compareAndExchangeIntAcquire:
333  case vmIntrinsics::_compareAndExchangeIntRelease:
334    if (!Matcher::match_rule_supported(Op_CompareAndExchangeI)) return false;
335    break;
336
337  /* CompareAndExchange, Byte: */
338  case vmIntrinsics::_compareAndExchangeByte:
339  case vmIntrinsics::_compareAndExchangeByteAcquire:
340  case vmIntrinsics::_compareAndExchangeByteRelease:
341    if (!Matcher::match_rule_supported(Op_CompareAndExchangeB)) return false;
342    break;
343
344  /* CompareAndExchange, Short: */
345  case vmIntrinsics::_compareAndExchangeShort:
346  case vmIntrinsics::_compareAndExchangeShortAcquire:
347  case vmIntrinsics::_compareAndExchangeShortRelease:
348    if (!Matcher::match_rule_supported(Op_CompareAndExchangeS)) return false;
349    break;
350
351  case vmIntrinsics::_getAndAddByte:
352    if (!Matcher::match_rule_supported(Op_GetAndAddB)) return false;
353    break;
354  case vmIntrinsics::_getAndAddShort:
355    if (!Matcher::match_rule_supported(Op_GetAndAddS)) return false;
356    break;
357  case vmIntrinsics::_getAndAddInt:
358    if (!Matcher::match_rule_supported(Op_GetAndAddI)) return false;
359    break;
360  case vmIntrinsics::_getAndAddLong:
361    if (!Matcher::match_rule_supported(Op_GetAndAddL)) return false;
362    break;
363
364  case vmIntrinsics::_getAndSetByte:
365    if (!Matcher::match_rule_supported(Op_GetAndSetB)) return false;
366    break;
367  case vmIntrinsics::_getAndSetShort:
368    if (!Matcher::match_rule_supported(Op_GetAndSetS)) return false;
369    break;
370  case vmIntrinsics::_getAndSetInt:
371    if (!Matcher::match_rule_supported(Op_GetAndSetI)) return false;
372    break;
373  case vmIntrinsics::_getAndSetLong:
374    if (!Matcher::match_rule_supported(Op_GetAndSetL)) return false;
375    break;
376  case vmIntrinsics::_getAndSetObject:
377#ifdef _LP64
378    if (!UseCompressedOops && !Matcher::match_rule_supported(Op_GetAndSetP)) return false;
379    if (UseCompressedOops && !Matcher::match_rule_supported(Op_GetAndSetN)) return false;
380    break;
381#else
382    if (!Matcher::match_rule_supported(Op_GetAndSetP)) return false;
383    break;
384#endif
385  case vmIntrinsics::_incrementExactI:
386  case vmIntrinsics::_addExactI:
387    if (!Matcher::match_rule_supported(Op_OverflowAddI)) return false;
388    break;
389  case vmIntrinsics::_incrementExactL:
390  case vmIntrinsics::_addExactL:
391    if (!Matcher::match_rule_supported(Op_OverflowAddL)) return false;
392    break;
393  case vmIntrinsics::_decrementExactI:
394  case vmIntrinsics::_subtractExactI:
395    if (!Matcher::match_rule_supported(Op_OverflowSubI)) return false;
396    break;
397  case vmIntrinsics::_decrementExactL:
398  case vmIntrinsics::_subtractExactL:
399    if (!Matcher::match_rule_supported(Op_OverflowSubL)) return false;
400    break;
401  case vmIntrinsics::_negateExactI:
402    if (!Matcher::match_rule_supported(Op_OverflowSubI)) return false;
403    break;
404  case vmIntrinsics::_negateExactL:
405    if (!Matcher::match_rule_supported(Op_OverflowSubL)) return false;
406    break;
407  case vmIntrinsics::_multiplyExactI:
408    if (!Matcher::match_rule_supported(Op_OverflowMulI)) return false;
409    break;
410  case vmIntrinsics::_multiplyExactL:
411    if (!Matcher::match_rule_supported(Op_OverflowMulL)) return false;
412    break;
413  case vmIntrinsics::_getCallerClass:
414    if (SystemDictionary::reflect_CallerSensitive_klass() == NULL) return false;
415    break;
416  case vmIntrinsics::_onSpinWait:
417    if (!Matcher::match_rule_supported(Op_OnSpinWait)) return false;
418    break;
419  case vmIntrinsics::_fmaD:
420    if (!UseFMA || !Matcher::match_rule_supported(Op_FmaD)) return false;
421    break;
422  case vmIntrinsics::_fmaF:
423    if (!UseFMA || !Matcher::match_rule_supported(Op_FmaF)) return false;
424    break;
425  case vmIntrinsics::_hashCode:
426  case vmIntrinsics::_identityHashCode:
427  case vmIntrinsics::_getClass:
428  case vmIntrinsics::_dsin:
429  case vmIntrinsics::_dcos:
430  case vmIntrinsics::_dtan:
431  case vmIntrinsics::_dabs:
432  case vmIntrinsics::_datan2:
433  case vmIntrinsics::_dsqrt:
434  case vmIntrinsics::_dexp:
435  case vmIntrinsics::_dlog:
436  case vmIntrinsics::_dlog10:
437  case vmIntrinsics::_dpow:
438  case vmIntrinsics::_min:
439  case vmIntrinsics::_max:
440  case vmIntrinsics::_arraycopy:
441  case vmIntrinsics::_indexOfL:
442  case vmIntrinsics::_indexOfU:
443  case vmIntrinsics::_indexOfUL:
444  case vmIntrinsics::_indexOfIL:
445  case vmIntrinsics::_indexOfIU:
446  case vmIntrinsics::_indexOfIUL:
447  case vmIntrinsics::_indexOfU_char:
448  case vmIntrinsics::_toBytesStringU:
449  case vmIntrinsics::_getCharsStringU:
450  case vmIntrinsics::_getCharStringU:
451  case vmIntrinsics::_putCharStringU:
452  case vmIntrinsics::_getObject:
453  case vmIntrinsics::_getBoolean:
454  case vmIntrinsics::_getByte:
455  case vmIntrinsics::_getShort:
456  case vmIntrinsics::_getChar:
457  case vmIntrinsics::_getInt:
458  case vmIntrinsics::_getLong:
459  case vmIntrinsics::_getFloat:
460  case vmIntrinsics::_getDouble:
461  case vmIntrinsics::_putObject:
462  case vmIntrinsics::_putBoolean:
463  case vmIntrinsics::_putByte:
464  case vmIntrinsics::_putShort:
465  case vmIntrinsics::_putChar:
466  case vmIntrinsics::_putInt:
467  case vmIntrinsics::_putLong:
468  case vmIntrinsics::_putFloat:
469  case vmIntrinsics::_putDouble:
470  case vmIntrinsics::_getObjectVolatile:
471  case vmIntrinsics::_getBooleanVolatile:
472  case vmIntrinsics::_getByteVolatile:
473  case vmIntrinsics::_getShortVolatile:
474  case vmIntrinsics::_getCharVolatile:
475  case vmIntrinsics::_getIntVolatile:
476  case vmIntrinsics::_getLongVolatile:
477  case vmIntrinsics::_getFloatVolatile:
478  case vmIntrinsics::_getDoubleVolatile:
479  case vmIntrinsics::_putObjectVolatile:
480  case vmIntrinsics::_putBooleanVolatile:
481  case vmIntrinsics::_putByteVolatile:
482  case vmIntrinsics::_putShortVolatile:
483  case vmIntrinsics::_putCharVolatile:
484  case vmIntrinsics::_putIntVolatile:
485  case vmIntrinsics::_putLongVolatile:
486  case vmIntrinsics::_putFloatVolatile:
487  case vmIntrinsics::_putDoubleVolatile:
488  case vmIntrinsics::_getObjectAcquire:
489  case vmIntrinsics::_getBooleanAcquire:
490  case vmIntrinsics::_getByteAcquire:
491  case vmIntrinsics::_getShortAcquire:
492  case vmIntrinsics::_getCharAcquire:
493  case vmIntrinsics::_getIntAcquire:
494  case vmIntrinsics::_getLongAcquire:
495  case vmIntrinsics::_getFloatAcquire:
496  case vmIntrinsics::_getDoubleAcquire:
497  case vmIntrinsics::_putObjectRelease:
498  case vmIntrinsics::_putBooleanRelease:
499  case vmIntrinsics::_putByteRelease:
500  case vmIntrinsics::_putShortRelease:
501  case vmIntrinsics::_putCharRelease:
502  case vmIntrinsics::_putIntRelease:
503  case vmIntrinsics::_putLongRelease:
504  case vmIntrinsics::_putFloatRelease:
505  case vmIntrinsics::_putDoubleRelease:
506  case vmIntrinsics::_getObjectOpaque:
507  case vmIntrinsics::_getBooleanOpaque:
508  case vmIntrinsics::_getByteOpaque:
509  case vmIntrinsics::_getShortOpaque:
510  case vmIntrinsics::_getCharOpaque:
511  case vmIntrinsics::_getIntOpaque:
512  case vmIntrinsics::_getLongOpaque:
513  case vmIntrinsics::_getFloatOpaque:
514  case vmIntrinsics::_getDoubleOpaque:
515  case vmIntrinsics::_putObjectOpaque:
516  case vmIntrinsics::_putBooleanOpaque:
517  case vmIntrinsics::_putByteOpaque:
518  case vmIntrinsics::_putShortOpaque:
519  case vmIntrinsics::_putCharOpaque:
520  case vmIntrinsics::_putIntOpaque:
521  case vmIntrinsics::_putLongOpaque:
522  case vmIntrinsics::_putFloatOpaque:
523  case vmIntrinsics::_putDoubleOpaque:
524  case vmIntrinsics::_getShortUnaligned:
525  case vmIntrinsics::_getCharUnaligned:
526  case vmIntrinsics::_getIntUnaligned:
527  case vmIntrinsics::_getLongUnaligned:
528  case vmIntrinsics::_putShortUnaligned:
529  case vmIntrinsics::_putCharUnaligned:
530  case vmIntrinsics::_putIntUnaligned:
531  case vmIntrinsics::_putLongUnaligned:
532  case vmIntrinsics::_loadFence:
533  case vmIntrinsics::_storeFence:
534  case vmIntrinsics::_fullFence:
535  case vmIntrinsics::_currentThread:
536  case vmIntrinsics::_isInterrupted:
537#ifdef TRACE_HAVE_INTRINSICS
538  case vmIntrinsics::_counterTime:
539  case vmIntrinsics::_getClassId:
540  case vmIntrinsics::_getBufferWriter:
541#endif
542  case vmIntrinsics::_currentTimeMillis:
543  case vmIntrinsics::_nanoTime:
544  case vmIntrinsics::_allocateInstance:
545  case vmIntrinsics::_allocateUninitializedArray:
546  case vmIntrinsics::_newArray:
547  case vmIntrinsics::_getLength:
548  case vmIntrinsics::_copyOf:
549  case vmIntrinsics::_copyOfRange:
550  case vmIntrinsics::_clone:
551  case vmIntrinsics::_isAssignableFrom:
552  case vmIntrinsics::_isInstance:
553  case vmIntrinsics::_getModifiers:
554  case vmIntrinsics::_isInterface:
555  case vmIntrinsics::_isArray:
556  case vmIntrinsics::_isPrimitive:
557  case vmIntrinsics::_getSuperclass:
558  case vmIntrinsics::_getClassAccessFlags:
559  case vmIntrinsics::_floatToRawIntBits:
560  case vmIntrinsics::_floatToIntBits:
561  case vmIntrinsics::_intBitsToFloat:
562  case vmIntrinsics::_doubleToRawLongBits:
563  case vmIntrinsics::_doubleToLongBits:
564  case vmIntrinsics::_longBitsToDouble:
565  case vmIntrinsics::_Reference_get:
566  case vmIntrinsics::_Class_cast:
567  case vmIntrinsics::_aescrypt_encryptBlock:
568  case vmIntrinsics::_aescrypt_decryptBlock:
569  case vmIntrinsics::_cipherBlockChaining_encryptAESCrypt:
570  case vmIntrinsics::_cipherBlockChaining_decryptAESCrypt:
571  case vmIntrinsics::_counterMode_AESCrypt:
572  case vmIntrinsics::_sha_implCompress:
573  case vmIntrinsics::_sha2_implCompress:
574  case vmIntrinsics::_sha5_implCompress:
575  case vmIntrinsics::_digestBase_implCompressMB:
576  case vmIntrinsics::_multiplyToLen:
577  case vmIntrinsics::_squareToLen:
578  case vmIntrinsics::_mulAdd:
579  case vmIntrinsics::_montgomeryMultiply:
580  case vmIntrinsics::_montgomerySquare:
581  case vmIntrinsics::_vectorizedMismatch:
582  case vmIntrinsics::_ghash_processBlocks:
583  case vmIntrinsics::_updateCRC32:
584  case vmIntrinsics::_updateBytesCRC32:
585  case vmIntrinsics::_updateByteBufferCRC32:
586  case vmIntrinsics::_updateBytesCRC32C:
587  case vmIntrinsics::_updateDirectByteBufferCRC32C:
588  case vmIntrinsics::_updateBytesAdler32:
589  case vmIntrinsics::_updateByteBufferAdler32:
590  case vmIntrinsics::_profileBoolean:
591  case vmIntrinsics::_isCompileConstant:
592  case vmIntrinsics::_Preconditions_checkIndex:
593    break;
594  default:
595    return false;
596  }
597  return true;
598}
599
600int C2Compiler::initial_code_buffer_size() {
601  assert(SegmentedCodeCache, "Should be only used with a segmented code cache");
602  return Compile::MAX_inst_size + Compile::MAX_locs_size + initial_const_capacity;
603}
604