Mercurial > hg > graal-compiler
comparison src/share/vm/opto/parse3.cpp @ 1100:f96a1a986f7b
6895383: JCK test throws NPE for method compiled with Escape Analysis
Summary: Add missing checks for MemBar nodes in EA.
Reviewed-by: never
author | kvn |
---|---|
date | Wed, 09 Dec 2009 16:40:45 -0800 |
parents | 148e5441d916 |
children | dd57230ba8fe |
comparison
equal
deleted
inserted
replaced
1099:c5d3d979ae27 | 1100:f96a1a986f7b |
---|---|
238 if (is_vol) { | 238 if (is_vol) { |
239 // First place the specific membar for THIS volatile index. This first | 239 // First place the specific membar for THIS volatile index. This first |
240 // membar is dependent on the store, keeping any other membars generated | 240 // membar is dependent on the store, keeping any other membars generated |
241 // below from floating up past the store. | 241 // below from floating up past the store. |
242 int adr_idx = C->get_alias_index(adr_type); | 242 int adr_idx = C->get_alias_index(adr_type); |
243 insert_mem_bar_volatile(Op_MemBarVolatile, adr_idx); | 243 insert_mem_bar_volatile(Op_MemBarVolatile, adr_idx, store); |
244 | 244 |
245 // Now place a membar for AliasIdxBot for the unknown yet-to-be-parsed | 245 // Now place a membar for AliasIdxBot for the unknown yet-to-be-parsed |
246 // volatile alias indices. Skip this if the membar is redundant. | 246 // volatile alias indices. Skip this if the membar is redundant. |
247 if (adr_idx != Compile::AliasIdxBot) { | 247 if (adr_idx != Compile::AliasIdxBot) { |
248 insert_mem_bar_volatile(Op_MemBarVolatile, Compile::AliasIdxBot); | 248 insert_mem_bar_volatile(Op_MemBarVolatile, Compile::AliasIdxBot, store); |
249 } | 249 } |
250 | 250 |
251 // Finally, place alias-index-specific membars for each volatile index | 251 // Finally, place alias-index-specific membars for each volatile index |
252 // that isn't the adr_idx membar. Typically there's only 1 or 2. | 252 // that isn't the adr_idx membar. Typically there's only 1 or 2. |
253 for( int i = Compile::AliasIdxRaw; i < C->num_alias_types(); i++ ) { | 253 for( int i = Compile::AliasIdxRaw; i < C->num_alias_types(); i++ ) { |
254 if (i != adr_idx && C->alias_type(i)->is_volatile()) { | 254 if (i != adr_idx && C->alias_type(i)->is_volatile()) { |
255 insert_mem_bar_volatile(Op_MemBarVolatile, i); | 255 insert_mem_bar_volatile(Op_MemBarVolatile, i, store); |
256 } | 256 } |
257 } | 257 } |
258 } | 258 } |
259 | 259 |
260 // If the field is final, the rules of Java say we are in <init> or <clinit>. | 260 // If the field is final, the rules of Java say we are in <init> or <clinit>. |