76 int _first_block_size; // Size of unvalidated entry point code / OSR poison code
77 ExceptionHandlerTable _handler_table; // Table of native-code exception handlers
78 ImplicitExceptionTable _inc_table; // Table of implicit null checks in native code
79 C2CodeStubList _stub_list; // List of code stubs
80 OopMapSet* _oop_map_set; // Table of oop maps (one for each safepoint location)
81 BufferBlob* _scratch_buffer_blob; // For temporary code buffers.
82 relocInfo* _scratch_locs_memory; // For temporary code buffers.
83 int _scratch_const_size; // For temporary code buffers.
84 bool _in_scratch_emit_size; // true when in scratch_emit_size.
85
86 int _frame_slots; // Size of total frame in stack slots
87 CodeOffsets _code_offsets; // Offsets into the code for various interesting entries
88
89 uint _node_bundling_limit;
90 Bundle* _node_bundling_base; // Information for instruction bundling
91
92 // For deopt
93 int _orig_pc_slot;
94 int _orig_pc_slot_offset_in_bytes;
95
96 ConstantTable _constant_table; // The constant table for this compilation unit.
97
98 BufferSizingData _buf_sizes;
99 Block* _block;
100 uint _index;
101
102 void perform_mach_node_analysis();
103 void pd_perform_mach_node_analysis();
104
105 public:
106 PhaseOutput();
107 ~PhaseOutput();
108
109 // Convert Nodes to instruction bits and pass off to the VM
110 void Output();
111 bool need_stack_bang(int frame_size_in_bytes) const;
112 void compute_loop_first_inst_sizes();
113
114 void install_code(ciMethod* target,
115 int entry_bci,
177 // emit to scratch blob, report resulting size
178 uint scratch_emit_size(const Node* n);
179 void set_in_scratch_emit_size(bool x) { _in_scratch_emit_size = x; }
180 bool in_scratch_emit_size() const { return _in_scratch_emit_size; }
181
182 BufferSizingData* buffer_sizing_data() { return &_buf_sizes; }
183
184 enum ScratchBufferBlob {
185 MAX_inst_size = 2048,
186 MAX_locs_size = 128, // number of relocInfo elements
187 MAX_const_size = 128,
188 MAX_stubs_size = 128
189 };
190
191 int frame_slots() const { return _frame_slots; }
192 int frame_size_in_words() const; // frame_slots in units of the polymorphic 'words'
193 int frame_size_in_bytes() const { return _frame_slots << LogBytesPerInt; }
194
195 int bang_size_in_bytes() const;
196
197 void set_node_bundling_limit(uint n) { _node_bundling_limit = n; }
198 void set_node_bundling_base(Bundle* b) { _node_bundling_base = b; }
199
200 Bundle* node_bundling(const Node *n);
201 bool valid_bundle_info(const Node *n);
202
203 bool starts_bundle(const Node *n) const;
204 bool contains_as_owner(GrowableArray<MonitorValue*> *monarray, ObjectValue *ov) const;
205 bool contains_as_scalarized_obj(JVMState* jvms, MachSafePointNode* sfn,
206 GrowableArray<ScopeValue*>* objs,
207 ObjectValue* ov) const;
208
209 // Dump formatted assembly
210 #if defined(SUPPORT_OPTO_ASSEMBLY)
211 void dump_asm_on(outputStream* ost, int* pcs, uint pc_limit);
212 #else
213 void dump_asm_on(outputStream* ost, int* pcs, uint pc_limit) { return; }
214 #endif
215
216 // Build OopMaps for each GC point
|
76 int _first_block_size; // Size of unvalidated entry point code / OSR poison code
77 ExceptionHandlerTable _handler_table; // Table of native-code exception handlers
78 ImplicitExceptionTable _inc_table; // Table of implicit null checks in native code
79 C2CodeStubList _stub_list; // List of code stubs
80 OopMapSet* _oop_map_set; // Table of oop maps (one for each safepoint location)
81 BufferBlob* _scratch_buffer_blob; // For temporary code buffers.
82 relocInfo* _scratch_locs_memory; // For temporary code buffers.
83 int _scratch_const_size; // For temporary code buffers.
84 bool _in_scratch_emit_size; // true when in scratch_emit_size.
85
86 int _frame_slots; // Size of total frame in stack slots
87 CodeOffsets _code_offsets; // Offsets into the code for various interesting entries
88
89 uint _node_bundling_limit;
90 Bundle* _node_bundling_base; // Information for instruction bundling
91
92 // For deopt
93 int _orig_pc_slot;
94 int _orig_pc_slot_offset_in_bytes;
95
96 // For GC barriers
97 int _gc_barrier_save_slots;
98 int _gc_barrier_save_slots_offset_in_bytes;
99
100 ConstantTable _constant_table; // The constant table for this compilation unit.
101
102 BufferSizingData _buf_sizes;
103 Block* _block;
104 uint _index;
105
106 void perform_mach_node_analysis();
107 void pd_perform_mach_node_analysis();
108
109 public:
110 PhaseOutput();
111 ~PhaseOutput();
112
113 // Convert Nodes to instruction bits and pass off to the VM
114 void Output();
115 bool need_stack_bang(int frame_size_in_bytes) const;
116 void compute_loop_first_inst_sizes();
117
118 void install_code(ciMethod* target,
119 int entry_bci,
181 // emit to scratch blob, report resulting size
182 uint scratch_emit_size(const Node* n);
183 void set_in_scratch_emit_size(bool x) { _in_scratch_emit_size = x; }
184 bool in_scratch_emit_size() const { return _in_scratch_emit_size; }
185
186 BufferSizingData* buffer_sizing_data() { return &_buf_sizes; }
187
188 enum ScratchBufferBlob {
189 MAX_inst_size = 2048,
190 MAX_locs_size = 128, // number of relocInfo elements
191 MAX_const_size = 128,
192 MAX_stubs_size = 128
193 };
194
195 int frame_slots() const { return _frame_slots; }
196 int frame_size_in_words() const; // frame_slots in units of the polymorphic 'words'
197 int frame_size_in_bytes() const { return _frame_slots << LogBytesPerInt; }
198
199 int bang_size_in_bytes() const;
200
201 int gc_barrier_save_slots_offset_in_bytes() { return _gc_barrier_save_slots_offset_in_bytes; }
202
203 void set_node_bundling_limit(uint n) { _node_bundling_limit = n; }
204 void set_node_bundling_base(Bundle* b) { _node_bundling_base = b; }
205
206 Bundle* node_bundling(const Node *n);
207 bool valid_bundle_info(const Node *n);
208
209 bool starts_bundle(const Node *n) const;
210 bool contains_as_owner(GrowableArray<MonitorValue*> *monarray, ObjectValue *ov) const;
211 bool contains_as_scalarized_obj(JVMState* jvms, MachSafePointNode* sfn,
212 GrowableArray<ScopeValue*>* objs,
213 ObjectValue* ov) const;
214
215 // Dump formatted assembly
216 #if defined(SUPPORT_OPTO_ASSEMBLY)
217 void dump_asm_on(outputStream* ost, int* pcs, uint pc_limit);
218 #else
219 void dump_asm_on(outputStream* ost, int* pcs, uint pc_limit) { return; }
220 #endif
221
222 // Build OopMaps for each GC point
|