comparison src/share/vm/ci/ciMethodBlocks.cpp @ 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 6ca61c728c2d
children 039a914095f4
comparison
equal deleted inserted replaced
366:8261ee795323 367:194b8e3a2fc4
47 // Split the block spanning bci into two separate ranges. The former 47 // Split the block spanning bci into two separate ranges. The former
48 // block becomes the second half and a new range is created for the 48 // block becomes the second half and a new range is created for the
49 // first half. Returns the range beginning at bci. 49 // first half. Returns the range beginning at bci.
50 ciBlock *ciMethodBlocks::split_block_at(int bci) { 50 ciBlock *ciMethodBlocks::split_block_at(int bci) {
51 ciBlock *former_block = block_containing(bci); 51 ciBlock *former_block = block_containing(bci);
52 ciBlock *new_block = new(_arena) ciBlock(_method, _num_blocks++, this, former_block->start_bci()); 52 ciBlock *new_block = new(_arena) ciBlock(_method, _num_blocks++, former_block->start_bci());
53 _blocks->append(new_block); 53 _blocks->append(new_block);
54 assert(former_block != NULL, "must not be NULL"); 54 assert(former_block != NULL, "must not be NULL");
55 new_block->set_limit_bci(bci); 55 new_block->set_limit_bci(bci);
56 former_block->set_start_bci(bci); 56 former_block->set_start_bci(bci);
57 for (int pos=bci-1; pos >= 0; pos--) { 57 for (int pos=bci-1; pos >= 0; pos--) {
81 ciBlock *ciMethodBlocks::make_block_at(int bci) { 81 ciBlock *ciMethodBlocks::make_block_at(int bci) {
82 ciBlock *cb = block_containing(bci); 82 ciBlock *cb = block_containing(bci);
83 if (cb == NULL ) { 83 if (cb == NULL ) {
84 // This is our first time visiting this bytecode. Create 84 // This is our first time visiting this bytecode. Create
85 // a fresh block and assign it this starting point. 85 // a fresh block and assign it this starting point.
86 ciBlock *nb = new(_arena) ciBlock(_method, _num_blocks++, this, bci); 86 ciBlock *nb = new(_arena) ciBlock(_method, _num_blocks++, bci);
87 _blocks->append(nb); 87 _blocks->append(nb);
88 _bci_to_block[bci] = nb; 88 _bci_to_block[bci] = nb;
89 return nb; 89 return nb;
90 } else if (cb->start_bci() == bci) { 90 } else if (cb->start_bci() == bci) {
91 // The block begins at bci. Simply return it. 91 // The block begins at bci. Simply return it.
94 // We have already created a block containing bci but 94 // We have already created a block containing bci but
95 // not starting at bci. This existing block needs to 95 // not starting at bci. This existing block needs to
96 // be split into two. 96 // be split into two.
97 return split_block_at(bci); 97 return split_block_at(bci);
98 } 98 }
99 }
100
101 ciBlock *ciMethodBlocks::make_dummy_block() {
102 ciBlock *dum = new(_arena) ciBlock(_method, -1, 0);
103 return dum;
99 } 104 }
100 105
101 void ciMethodBlocks::do_analysis() { 106 void ciMethodBlocks::do_analysis() {
102 ciBytecodeStream s(_method); 107 ciBytecodeStream s(_method);
103 ciBlock *cur_block = block_containing(0); 108 ciBlock *cur_block = block_containing(0);
251 int b2bsize = _code_size * sizeof(ciBlock **); 256 int b2bsize = _code_size * sizeof(ciBlock **);
252 _bci_to_block = (ciBlock **) arena->Amalloc(b2bsize); 257 _bci_to_block = (ciBlock **) arena->Amalloc(b2bsize);
253 Copy::zero_to_words((HeapWord*) _bci_to_block, b2bsize / sizeof(HeapWord)); 258 Copy::zero_to_words((HeapWord*) _bci_to_block, b2bsize / sizeof(HeapWord));
254 259
255 // create initial block covering the entire method 260 // create initial block covering the entire method
256 ciBlock *b = new(arena) ciBlock(_method, _num_blocks++, this, 0); 261 ciBlock *b = new(arena) ciBlock(_method, _num_blocks++, 0);
257 _blocks->append(b); 262 _blocks->append(b);
258 _bci_to_block[0] = b; 263 _bci_to_block[0] = b;
259 264
260 // create blocks for exception handlers 265 // create blocks for exception handlers
261 if (meth->has_exception_handlers()) { 266 if (meth->has_exception_handlers()) {
332 } 337 }
333 } 338 }
334 #endif 339 #endif
335 340
336 341
337 ciBlock::ciBlock(ciMethod *method, int index, ciMethodBlocks *mb, int start_bci) : 342 ciBlock::ciBlock(ciMethod *method, int index, int start_bci) :
338 #ifndef PRODUCT 343 #ifndef PRODUCT
339 _method(method), 344 _method(method),
340 #endif 345 #endif
341 _idx(index), _flags(0), _start_bci(start_bci), _limit_bci(-1), _control_bci(fall_through_bci), 346 _idx(index), _flags(0), _start_bci(start_bci), _limit_bci(-1), _control_bci(fall_through_bci),
342 _ex_start_bci(-1), _ex_limit_bci(-1) { 347 _ex_start_bci(-1), _ex_limit_bci(-1) {