hotspot/src/share/vm/opto/parse3.cpp
changeset 18956 f8fc5dd18a1d
parent 17383 3665c0901a0d
child 19770 7cb9f982ea81
equal deleted inserted replaced
18955:be9410d4a97c 18956:f8fc5dd18a1d
   292   }
   292   }
   293 
   293 
   294   // If reference is volatile, prevent following volatiles ops from
   294   // If reference is volatile, prevent following volatiles ops from
   295   // floating up before the volatile write.
   295   // floating up before the volatile write.
   296   if (is_vol) {
   296   if (is_vol) {
   297     // First place the specific membar for THIS volatile index. This first
   297     insert_mem_bar(Op_MemBarVolatile); // Use fat membar
   298     // membar is dependent on the store, keeping any other membars generated
       
   299     // below from floating up past the store.
       
   300     int adr_idx = C->get_alias_index(adr_type);
       
   301     insert_mem_bar_volatile(Op_MemBarVolatile, adr_idx, store);
       
   302 
       
   303     // Now place a membar for AliasIdxBot for the unknown yet-to-be-parsed
       
   304     // volatile alias indices. Skip this if the membar is redundant.
       
   305     if (adr_idx != Compile::AliasIdxBot) {
       
   306       insert_mem_bar_volatile(Op_MemBarVolatile, Compile::AliasIdxBot, store);
       
   307     }
       
   308 
       
   309     // Finally, place alias-index-specific membars for each volatile index
       
   310     // that isn't the adr_idx membar. Typically there's only 1 or 2.
       
   311     for( int i = Compile::AliasIdxRaw; i < C->num_alias_types(); i++ ) {
       
   312       if (i != adr_idx && C->alias_type(i)->is_volatile()) {
       
   313         insert_mem_bar_volatile(Op_MemBarVolatile, i, store);
       
   314       }
       
   315     }
       
   316   }
   298   }
   317 
   299 
   318   // If the field is final, the rules of Java say we are in <init> or <clinit>.
   300   // If the field is final, the rules of Java say we are in <init> or <clinit>.
   319   // Note the presence of writes to final non-static fields, so that we
   301   // Note the presence of writes to final non-static fields, so that we
   320   // can insert a memory barrier later on to keep the writes from floating
   302   // can insert a memory barrier later on to keep the writes from floating