341 bool _wrote_stable; // Did we write a @Stable field? |
341 bool _wrote_stable; // Did we write a @Stable field? |
342 bool _wrote_fields; // Did we write any field? |
342 bool _wrote_fields; // Did we write any field? |
343 bool _count_invocations; // update and test invocation counter |
343 bool _count_invocations; // update and test invocation counter |
344 bool _method_data_update; // update method data oop |
344 bool _method_data_update; // update method data oop |
345 Node* _alloc_with_final; // An allocation node with final field |
345 Node* _alloc_with_final; // An allocation node with final field |
|
346 Node* _alloc_with_stable; // An allocation node with stable field |
346 |
347 |
347 // Variables which track Java semantics during bytecode parsing: |
348 // Variables which track Java semantics during bytecode parsing: |
348 |
349 |
349 Block* _block; // block currently getting parsed |
350 Block* _block; // block currently getting parsed |
350 ciBytecodeStream _iter; // stream of this method's bytecodes |
351 ciBytecodeStream _iter; // stream of this method's bytecodes |
396 void set_alloc_with_final(Node* n) { |
397 void set_alloc_with_final(Node* n) { |
397 assert((_alloc_with_final == NULL) || (_alloc_with_final == n), "different init objects?"); |
398 assert((_alloc_with_final == NULL) || (_alloc_with_final == n), "different init objects?"); |
398 _alloc_with_final = n; |
399 _alloc_with_final = n; |
399 } |
400 } |
400 |
401 |
|
402 Node* alloc_with_stable() const { |
|
403 if (_alloc_with_stable == NodeSentinel) { |
|
404 return NULL; |
|
405 } |
|
406 return _alloc_with_stable; |
|
407 } |
|
408 |
|
409 void set_alloc_with_stable(Node* n) { |
|
410 if (_alloc_with_stable == NodeSentinel) { |
|
411 // uninitialized status, initialize with current input, can be |
|
412 // null or valid node. |
|
413 _alloc_with_stable = n; |
|
414 } else if (_alloc_with_stable != n) { |
|
415 // _alloc_with_stable isn't equal to n |
|
416 _alloc_with_stable = NULL; |
|
417 } |
|
418 // _alloc_with_stable is equal with n, do nothing |
|
419 } |
|
420 |
401 Block* block() const { return _block; } |
421 Block* block() const { return _block; } |
402 ciBytecodeStream& iter() { return _iter; } |
422 ciBytecodeStream& iter() { return _iter; } |
403 Bytecodes::Code bc() const { return _iter.cur_bc(); } |
423 Bytecodes::Code bc() const { return _iter.cur_bc(); } |
404 |
424 |
405 void set_block(Block* b) { _block = b; } |
425 void set_block(Block* b) { _block = b; } |