Mercurial > hg > truffle
comparison src/share/vm/opto/parse.hpp @ 367:194b8e3a2fc4
6384206: Phis which are later unneeded are impairing our ability to inline based on static types
Reviewed-by: rasbold, jrose
author | never |
---|---|
date | Wed, 17 Sep 2008 12:59:52 -0700 |
parents | 18aab3cdd513 |
children | b1d6a3e95810 |
comparison
equal
deleted
inserted
replaced
366:8261ee795323 | 367:194b8e3a2fc4 |
---|---|
165 } | 165 } |
166 Block* successor_for_bci(int bci); | 166 Block* successor_for_bci(int bci); |
167 | 167 |
168 int start() const { return flow()->start(); } | 168 int start() const { return flow()->start(); } |
169 int limit() const { return flow()->limit(); } | 169 int limit() const { return flow()->limit(); } |
170 int pre_order() const { return flow()->pre_order(); } | 170 int rpo() const { return flow()->rpo(); } |
171 int start_sp() const { return flow()->stack_size(); } | 171 int start_sp() const { return flow()->stack_size(); } |
172 | |
173 bool is_loop_head() const { return flow()->is_loop_head(); } | |
174 bool is_SEL_head() const { return flow()->is_single_entry_loop_head(); } | |
175 bool is_SEL_backedge(Block* pred) const{ return is_SEL_head() && pred->rpo() >= rpo(); } | |
176 bool is_invariant_local(uint i) const { | |
177 const JVMState* jvms = start_map()->jvms(); | |
178 if (!jvms->is_loc(i)) return false; | |
179 return flow()->is_invariant_local(i - jvms->locoff()); | |
180 } | |
181 bool can_elide_SEL_phi(uint i) const { assert(is_SEL_head(),""); return is_invariant_local(i); } | |
172 | 182 |
173 const Type* peek(int off=0) const { return stack_type_at(start_sp() - (off+1)); } | 183 const Type* peek(int off=0) const { return stack_type_at(start_sp() - (off+1)); } |
174 | 184 |
175 const Type* stack_type_at(int i) const; | 185 const Type* stack_type_at(int i) const; |
176 const Type* local_type_at(int i) const; | 186 const Type* local_type_at(int i) const; |
303 int depth() const { return _depth; } | 313 int depth() const { return _depth; } |
304 const TypeFunc* tf() const { return _tf; } | 314 const TypeFunc* tf() const { return _tf; } |
305 // entry_bci() -- see osr_bci, etc. | 315 // entry_bci() -- see osr_bci, etc. |
306 | 316 |
307 ciTypeFlow* flow() const { return _flow; } | 317 ciTypeFlow* flow() const { return _flow; } |
308 // blocks() -- see pre_order_at, start_block, etc. | 318 // blocks() -- see rpo_at, start_block, etc. |
309 int block_count() const { return _block_count; } | 319 int block_count() const { return _block_count; } |
310 | 320 |
311 GraphKit& exits() { return _exits; } | 321 GraphKit& exits() { return _exits; } |
312 bool wrote_final() const { return _wrote_final; } | 322 bool wrote_final() const { return _wrote_final; } |
313 void set_wrote_final(bool z) { _wrote_final = z; } | 323 void set_wrote_final(bool z) { _wrote_final = z; } |
328 void set_parse_bci(int bci); | 338 void set_parse_bci(int bci); |
329 | 339 |
330 // Must this parse be aborted? | 340 // Must this parse be aborted? |
331 bool failing() { return C->failing(); } | 341 bool failing() { return C->failing(); } |
332 | 342 |
333 Block* pre_order_at(int po) { | 343 Block* rpo_at(int rpo) { |
334 assert(0 <= po && po < _block_count, "oob"); | 344 assert(0 <= rpo && rpo < _block_count, "oob"); |
335 return &_blocks[po]; | 345 return &_blocks[rpo]; |
336 } | 346 } |
337 Block* start_block() { | 347 Block* start_block() { |
338 return pre_order_at(flow()->start_block()->pre_order()); | 348 return rpo_at(flow()->start_block()->rpo()); |
339 } | 349 } |
340 // Can return NULL if the flow pass did not complete a block. | 350 // Can return NULL if the flow pass did not complete a block. |
341 Block* successor_for_bci(int bci) { | 351 Block* successor_for_bci(int bci) { |
342 return block()->successor_for_bci(bci); | 352 return block()->successor_for_bci(bci); |
343 } | 353 } |
356 void load_state_from(Block* b); | 366 void load_state_from(Block* b); |
357 void store_state_to(Block* b) { b->record_state(this); } | 367 void store_state_to(Block* b) { b->record_state(this); } |
358 | 368 |
359 // Parse all the basic blocks. | 369 // Parse all the basic blocks. |
360 void do_all_blocks(); | 370 void do_all_blocks(); |
361 | |
362 // Helper for do_all_blocks; makes one pass in pre-order. | |
363 void visit_blocks(); | |
364 | 371 |
365 // Parse the current basic block | 372 // Parse the current basic block |
366 void do_one_block(); | 373 void do_one_block(); |
367 | 374 |
368 // Raise an error if we get a bad ciTypeFlow CFG. | 375 // Raise an error if we get a bad ciTypeFlow CFG. |