< prev index next >

src/share/vm/ci/bcEscapeAnalyzer.hpp

Print this page
rev 9028 : 8218201: Failures when vmIntrinsics::_getClass is not inlined
Summary: Fix BCEscapeAnalyzer to correctly handle _getClass intrinsic.
Reviewed-by: kvn, dlong, redestad, neliasso


  84   void clear_bits(ArgumentMap vars, VectorSet &bs);
  85   void set_method_escape(ArgumentMap vars);
  86   void set_global_escape(ArgumentMap vars, bool merge = false);
  87   void set_dirty(ArgumentMap vars);
  88   void set_modified(ArgumentMap vars, int offs, int size);
  89 
  90   bool is_recursive_call(ciMethod* callee);
  91   void add_dependence(ciKlass *klass, ciMethod *meth);
  92   void propagate_dependencies(ciMethod *meth);
  93   void invoke(StateInfo &state, Bytecodes::Code code, ciMethod* target, ciKlass* holder);
  94 
  95   void iterate_one_block(ciBlock *blk, StateInfo &state, GrowableArray<ciBlock *> &successors);
  96   void iterate_blocks(Arena *);
  97   void merge_block_states(StateInfo *blockstates, ciBlock *dest, StateInfo *s_state);
  98 
  99   // analysis
 100   void initialize();
 101   void clear_escape_info();
 102   void compute_escape_info();
 103   vmIntrinsics::ID known_intrinsic();
 104   bool compute_escape_for_intrinsic(vmIntrinsics::ID iid);
 105   bool do_analysis();
 106 
 107   void read_escape_info();
 108 
 109   bool contains(uint arg_set1, uint arg_set2);
 110 
 111  public:
 112   BCEscapeAnalyzer(ciMethod* method, BCEscapeAnalyzer* parent = NULL);
 113 
 114   // accessors
 115   ciMethod*         method() const               { return _method; }
 116   ciMethodData*     methodData() const           { return _methodData; }
 117   BCEscapeAnalyzer* parent() const               { return _parent; }
 118   int               level() const                { return _level; }
 119   GrowableArray<ciMetadata *>* dependencies()    { return &_dependencies; }
 120   bool              has_dependencies() const     { return !_dependencies.is_empty(); }
 121 
 122   // retrieval of interprocedural escape information
 123 
 124   // The given argument does not escape the callee.
 125   bool is_arg_local(int i) const {




  84   void clear_bits(ArgumentMap vars, VectorSet &bs);
  85   void set_method_escape(ArgumentMap vars);
  86   void set_global_escape(ArgumentMap vars, bool merge = false);
  87   void set_dirty(ArgumentMap vars);
  88   void set_modified(ArgumentMap vars, int offs, int size);
  89 
  90   bool is_recursive_call(ciMethod* callee);
  91   void add_dependence(ciKlass *klass, ciMethod *meth);
  92   void propagate_dependencies(ciMethod *meth);
  93   void invoke(StateInfo &state, Bytecodes::Code code, ciMethod* target, ciKlass* holder);
  94 
  95   void iterate_one_block(ciBlock *blk, StateInfo &state, GrowableArray<ciBlock *> &successors);
  96   void iterate_blocks(Arena *);
  97   void merge_block_states(StateInfo *blockstates, ciBlock *dest, StateInfo *s_state);
  98 
  99   // analysis
 100   void initialize();
 101   void clear_escape_info();
 102   void compute_escape_info();
 103   vmIntrinsics::ID known_intrinsic();
 104   void compute_escape_for_intrinsic(vmIntrinsics::ID iid);
 105   void do_analysis();
 106 
 107   void read_escape_info();
 108 
 109   bool contains(uint arg_set1, uint arg_set2);
 110 
 111  public:
 112   BCEscapeAnalyzer(ciMethod* method, BCEscapeAnalyzer* parent = NULL);
 113 
 114   // accessors
 115   ciMethod*         method() const               { return _method; }
 116   ciMethodData*     methodData() const           { return _methodData; }
 117   BCEscapeAnalyzer* parent() const               { return _parent; }
 118   int               level() const                { return _level; }
 119   GrowableArray<ciMetadata *>* dependencies()    { return &_dependencies; }
 120   bool              has_dependencies() const     { return !_dependencies.is_empty(); }
 121 
 122   // retrieval of interprocedural escape information
 123 
 124   // The given argument does not escape the callee.
 125   bool is_arg_local(int i) const {


< prev index next >