src/share/vm/opto/cfgnode.hpp

changeset 8945
3b6372514697
parent 8940
eb9e617d6f64
child 9041
95a08233f46c
     1.1 --- a/src/share/vm/opto/cfgnode.hpp	Fri Oct 21 20:34:04 2016 +0300
     1.2 +++ b/src/share/vm/opto/cfgnode.hpp	Fri Oct 28 22:36:23 2016 +0000
     1.3 @@ -119,6 +119,9 @@
     1.4  // input in slot 0.
     1.5  class PhiNode : public TypeNode {
     1.6    const TypePtr* const _adr_type; // non-null only for Type::MEMORY nodes.
     1.7 +  // The following fields are only used for data PhiNodes to indicate
     1.8 +  // that the PhiNode represents the value of a known instance field.
     1.9 +        int _inst_mem_id; // Instance memory id (node index of the memory Phi)
    1.10    const int _inst_id;     // Instance id of the memory slice.
    1.11    const int _inst_index;  // Alias index of the instance memory slice.
    1.12    // Array elements references have the same alias_idx but different offset.
    1.13 @@ -138,11 +141,13 @@
    1.14    };
    1.15  
    1.16    PhiNode( Node *r, const Type *t, const TypePtr* at = NULL,
    1.17 +           const int imid = -1,
    1.18             const int iid = TypeOopPtr::InstanceTop,
    1.19             const int iidx = Compile::AliasIdxTop,
    1.20             const int ioffs = Type::OffsetTop )
    1.21      : TypeNode(t,r->req()),
    1.22        _adr_type(at),
    1.23 +      _inst_mem_id(imid),
    1.24        _inst_id(iid),
    1.25        _inst_index(iidx),
    1.26        _inst_offset(ioffs)
    1.27 @@ -187,11 +192,14 @@
    1.28    virtual bool pinned() const { return in(0) != 0; }
    1.29    virtual const TypePtr *adr_type() const { verify_adr_type(true); return _adr_type; }
    1.30  
    1.31 +  void  set_inst_mem_id(int inst_mem_id) { _inst_mem_id = inst_mem_id; }
    1.32 +  const int inst_mem_id() const { return _inst_mem_id; }
    1.33    const int inst_id()     const { return _inst_id; }
    1.34    const int inst_index()  const { return _inst_index; }
    1.35    const int inst_offset() const { return _inst_offset; }
    1.36 -  bool is_same_inst_field(const Type* tp, int id, int index, int offset) {
    1.37 +  bool is_same_inst_field(const Type* tp, int mem_id, int id, int index, int offset) {
    1.38      return type()->basic_type() == tp->basic_type() &&
    1.39 +           inst_mem_id() == mem_id &&
    1.40             inst_id()     == id     &&
    1.41             inst_index()  == index  &&
    1.42             inst_offset() == offset &&

mercurial