hotspot/src/share/vm/c1/c1_ValueMap.hpp
changeset 12946 6007040eb77d
parent 11886 feebf5c9f40c
child 13391 30245956af37
equal deleted inserted replaced
12945:e63d6176cbd1 12946:6007040eb77d
   139   virtual void kill_field(ciField* field) = 0;
   139   virtual void kill_field(ciField* field) = 0;
   140   virtual void kill_array(ValueType* type) = 0;
   140   virtual void kill_array(ValueType* type) = 0;
   141 
   141 
   142   // visitor functions
   142   // visitor functions
   143   void do_StoreField     (StoreField*      x) {
   143   void do_StoreField     (StoreField*      x) {
   144     if (x->is_init_point()) {
   144     if (x->is_init_point() ||  // putstatic is an initialization point so treat it as a wide kill
   145       // putstatic is an initialization point so treat it as a wide kill
   145         // This is actually too strict and the JMM doesn't require
       
   146         // this in all cases (e.g. load a; volatile store b; load a)
       
   147         // but possible future optimizations might require this.
       
   148         x->field()->is_volatile()) {
   146       kill_memory();
   149       kill_memory();
   147     } else {
   150     } else {
   148       kill_field(x->field());
   151       kill_field(x->field());
   149     }
   152     }
   150   }
   153   }
   158 
   161 
   159   void do_Phi            (Phi*             x) { /* nothing to do */ }
   162   void do_Phi            (Phi*             x) { /* nothing to do */ }
   160   void do_Local          (Local*           x) { /* nothing to do */ }
   163   void do_Local          (Local*           x) { /* nothing to do */ }
   161   void do_Constant       (Constant*        x) { /* nothing to do */ }
   164   void do_Constant       (Constant*        x) { /* nothing to do */ }
   162   void do_LoadField      (LoadField*       x) {
   165   void do_LoadField      (LoadField*       x) {
   163     if (x->is_init_point()) {
   166     if (x->is_init_point() ||         // getstatic is an initialization point so treat it as a wide kill
   164       // getstatic is an initialization point so treat it as a wide kill
   167         x->field()->is_volatile()) {  // the JMM requires this
   165       kill_memory();
   168       kill_memory();
   166     }
   169     }
   167   }
   170   }
   168   void do_ArrayLength    (ArrayLength*     x) { /* nothing to do */ }
   171   void do_ArrayLength    (ArrayLength*     x) { /* nothing to do */ }
   169   void do_LoadIndexed    (LoadIndexed*     x) { /* nothing to do */ }
   172   void do_LoadIndexed    (LoadIndexed*     x) { /* nothing to do */ }