< prev index next >
src/share/vm/opto/parse.hpp
Print this page
@@ -341,10 +341,11 @@
bool _wrote_stable; // Did we write a @Stable field?
bool _wrote_fields; // Did we write any field?
bool _count_invocations; // update and test invocation counter
bool _method_data_update; // update method data oop
Node* _alloc_with_final; // An allocation node with final field
+ Node* _alloc_with_stable; // An allocation node with stable field
// Variables which track Java semantics during bytecode parsing:
Block* _block; // block currently getting parsed
ciBytecodeStream _iter; // stream of this method's bytecodes
@@ -396,10 +397,29 @@
void set_alloc_with_final(Node* n) {
assert((_alloc_with_final == NULL) || (_alloc_with_final == n), "different init objects?");
_alloc_with_final = n;
}
+ Node* alloc_with_stable() const {
+ if (_alloc_with_stable == NodeSentinel) {
+ return NULL;
+ }
+ return _alloc_with_stable;
+ }
+
+ void set_alloc_with_stable(Node* n) {
+ // uninitialized status, initialized with current input, can be null or valid node.
+ if (_alloc_with_stable == NodeSentinel) {
+ _alloc_with_stable = n;
+ }
+ // _alloc_with_stable is isn't equal with n
+ else if (_alloc_with_stable != n) {
+ _alloc_with_stable = NULL;
+ }
+ // _alloc_with_stable is equal with n, do nothing
+ }
+
Block* block() const { return _block; }
ciBytecodeStream& iter() { return _iter; }
Bytecodes::Code bc() const { return _iter.cur_bc(); }
void set_block(Block* b) { _block = b; }
< prev index next >