equal
deleted
inserted
replaced
328 |
328 |
329 GraphKit _exits; // Record all normal returns and throws here. |
329 GraphKit _exits; // Record all normal returns and throws here. |
330 bool _wrote_final; // Did we write a final field? |
330 bool _wrote_final; // Did we write a final field? |
331 bool _count_invocations; // update and test invocation counter |
331 bool _count_invocations; // update and test invocation counter |
332 bool _method_data_update; // update method data oop |
332 bool _method_data_update; // update method data oop |
|
333 Node* _alloc_with_final; // An allocation node with final field |
333 |
334 |
334 // Variables which track Java semantics during bytecode parsing: |
335 // Variables which track Java semantics during bytecode parsing: |
335 |
336 |
336 Block* _block; // block currently getting parsed |
337 Block* _block; // block currently getting parsed |
337 ciBytecodeStream _iter; // stream of this method's bytecodes |
338 ciBytecodeStream _iter; // stream of this method's bytecodes |
368 GraphKit& exits() { return _exits; } |
369 GraphKit& exits() { return _exits; } |
369 bool wrote_final() const { return _wrote_final; } |
370 bool wrote_final() const { return _wrote_final; } |
370 void set_wrote_final(bool z) { _wrote_final = z; } |
371 void set_wrote_final(bool z) { _wrote_final = z; } |
371 bool count_invocations() const { return _count_invocations; } |
372 bool count_invocations() const { return _count_invocations; } |
372 bool method_data_update() const { return _method_data_update; } |
373 bool method_data_update() const { return _method_data_update; } |
|
374 Node* alloc_with_final() const { return _alloc_with_final; } |
|
375 void set_alloc_with_final(Node* n) { |
|
376 assert((_alloc_with_final == NULL) || (_alloc_with_final == n), "different init objects?"); |
|
377 _alloc_with_final = n; |
|
378 } |
373 |
379 |
374 Block* block() const { return _block; } |
380 Block* block() const { return _block; } |
375 ciBytecodeStream& iter() { return _iter; } |
381 ciBytecodeStream& iter() { return _iter; } |
376 Bytecodes::Code bc() const { return _iter.cur_bc(); } |
382 Bytecodes::Code bc() const { return _iter.cur_bc(); } |
377 |
383 |
510 void do_get_xxx(Node* obj, ciField* field, bool is_field); |
516 void do_get_xxx(Node* obj, ciField* field, bool is_field); |
511 void do_put_xxx(Node* obj, ciField* field, bool is_field); |
517 void do_put_xxx(Node* obj, ciField* field, bool is_field); |
512 |
518 |
513 // loading from a constant field or the constant pool |
519 // loading from a constant field or the constant pool |
514 // returns false if push failed (non-perm field constants only, not ldcs) |
520 // returns false if push failed (non-perm field constants only, not ldcs) |
515 bool push_constant(ciConstant con, bool require_constant = false); |
521 bool push_constant(ciConstant con, bool require_constant = false, bool is_autobox_cache = false); |
516 |
522 |
517 // implementation of object creation bytecodes |
523 // implementation of object creation bytecodes |
518 void emit_guard_for_new(ciInstanceKlass* klass); |
524 void emit_guard_for_new(ciInstanceKlass* klass); |
519 void do_new(); |
525 void do_new(); |
520 void do_newarray(BasicType elemtype); |
526 void do_newarray(BasicType elemtype); |