hotspot/src/share/vm/opto/parse.hpp
changeset 17383 3665c0901a0d
parent 15816 33b9a6b4f9df
child 19770 7cb9f982ea81
equal deleted inserted replaced
17382:bba473b81ec0 17383:3665c0901a0d
   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);