Mercurial > hg > graal-jvmci-8
comparison src/share/vm/opto/matcher.cpp @ 14439:50fdb38839eb
8028515: PPPC64 (part 113.2): opto: Introduce LoadFence/StoreFence.
Summary: Use new nodes for loadFence/storeFence intrinsics in C2.
Reviewed-by: kvn, dholmes
author | goetz |
---|---|
date | Tue, 26 Nov 2013 18:38:19 -0800 |
parents | da862781b584 |
children | 41b780b43b74 |
comparison
equal
deleted
inserted
replaced
14438:4cdf4f71177d | 14439:50fdb38839eb |
---|---|
2331 // intervening volatile load, and thus we don't need a barrier here. | 2331 // intervening volatile load, and thus we don't need a barrier here. |
2332 // We retain the Node to act as a compiler ordering barrier. | 2332 // We retain the Node to act as a compiler ordering barrier. |
2333 bool Matcher::post_store_load_barrier(const Node* vmb) { | 2333 bool Matcher::post_store_load_barrier(const Node* vmb) { |
2334 Compile* C = Compile::current(); | 2334 Compile* C = Compile::current(); |
2335 assert(vmb->is_MemBar(), ""); | 2335 assert(vmb->is_MemBar(), ""); |
2336 assert(vmb->Opcode() != Op_MemBarAcquire, ""); | 2336 assert(vmb->Opcode() != Op_MemBarAcquire && vmb->Opcode() != Op_LoadFence, ""); |
2337 const MemBarNode* membar = vmb->as_MemBar(); | 2337 const MemBarNode* membar = vmb->as_MemBar(); |
2338 | 2338 |
2339 // Get the Ideal Proj node, ctrl, that can be used to iterate forward | 2339 // Get the Ideal Proj node, ctrl, that can be used to iterate forward |
2340 Node* ctrl = NULL; | 2340 Node* ctrl = NULL; |
2341 for (DUIterator_Fast imax, i = membar->fast_outs(imax); i < imax; i++) { | 2341 for (DUIterator_Fast imax, i = membar->fast_outs(imax); i < imax; i++) { |
2376 } | 2376 } |
2377 | 2377 |
2378 if (x->is_MemBar()) { | 2378 if (x->is_MemBar()) { |
2379 // We must retain this membar if there is an upcoming volatile | 2379 // We must retain this membar if there is an upcoming volatile |
2380 // load, which will be followed by acquire membar. | 2380 // load, which will be followed by acquire membar. |
2381 if (xop == Op_MemBarAcquire) { | 2381 if (xop == Op_MemBarAcquire || xop == Op_LoadFence) { |
2382 return false; | 2382 return false; |
2383 } else { | 2383 } else { |
2384 // For other kinds of barriers, check by pretending we | 2384 // For other kinds of barriers, check by pretending we |
2385 // are them, and seeing if we can be removed. | 2385 // are them, and seeing if we can be removed. |
2386 return post_store_load_barrier(x->as_MemBar()); | 2386 return post_store_load_barrier(x->as_MemBar()); |