src/share/vm/c1/c1_Compilation.hpp

Print this page
rev 4136 : 7153771: array bound check elimination for c1
Summary: when possible optimize out array bound checks, inserting predicates when needed.
Reviewed-by:

*** 24,35 **** --- 24,37 ---- #ifndef SHARE_VM_C1_C1_COMPILATION_HPP #define SHARE_VM_C1_C1_COMPILATION_HPP #include "ci/ciEnv.hpp" + #include "ci/ciMethodData.hpp" #include "code/exceptionHandlerTable.hpp" #include "memory/resourceArea.hpp" + #include "runtime/deoptimization.hpp" class CompilationResourceObj; class XHandlers; class ExceptionInfo; class DebugInformationRecorder;
*** 83,92 **** --- 85,95 ---- ExceptionHandlerTable _exception_handler_table; ImplicitExceptionTable _implicit_exception_table; LinearScan* _allocator; CodeOffsets _offsets; CodeBuffer _code; + bool _has_access_indexed; // compilation helpers void initialize(); void build_hir(); void emit_lir();
*** 138,147 **** --- 141,151 ---- FrameMap* frame_map() const { return _frame_map; } CodeBuffer* code() { return &_code; } C1_MacroAssembler* masm() const { return _masm; } CodeOffsets* offsets() { return &_offsets; } Arena* arena() { return _arena; } + bool has_access_indexed() { return _has_access_indexed; } // Instruction ids int get_next_id() { return _next_id++; } int number_of_instructions() const { return _next_id; }
*** 152,161 **** --- 156,166 ---- // setters void set_has_exception_handlers(bool f) { _has_exception_handlers = f; } void set_has_fpu_code(bool f) { _has_fpu_code = f; } void set_has_unsafe_access(bool f) { _has_unsafe_access = f; } void set_would_profile(bool f) { _would_profile = f; } + void set_has_access_indexed(bool f) { _has_access_indexed = f; } // Add a set of exception handlers covering the given PC offset void add_exception_handlers_for_pco(int pco, XHandlers* exception_handlers); // Statistics gathering void notice_inlined_method(ciMethod* method);
*** 231,240 **** --- 236,253 ---- } bool profile_checkcasts() { return env()->comp_level() == CompLevel_full_profile && C1UpdateMethodData && C1ProfileCheckcasts; } + + // will compilation make optimistic assumptions that might lead to + // deoptimization and that the runtime will account for? + bool is_optimistic() const { + return !TieredCompilation && + (RangeCheckElimination || UseLoopInvariantCodeMotion) && + method()->method_data()->trap_count(Deoptimization::Reason_none) == 0; + } }; // Macro definitions for unified bailout-support // The methods bailout() and bailed_out() are present in all classes