Mercurial > hg > jdk9-shenandoah > hotspot
changeset 9446:553da5b66da3
Make sure memory dependency remain correct after eliminating or optimizing write barriers.
author | rkennke |
---|---|
date | Tue, 18 Aug 2015 18:34:37 +0200 |
parents | 4a1d26f20b62 |
children | 3882524b04a9 |
files | src/share/vm/opto/compile.cpp src/share/vm/opto/graphKit.cpp |
diffstat | 2 files changed, 5 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/src/share/vm/opto/compile.cpp Tue Aug 11 13:01:06 2015 +0200 +++ b/src/share/vm/opto/compile.cpp Tue Aug 18 18:34:37 2015 +0200 @@ -61,6 +61,7 @@ #include "opto/phaseX.hpp" #include "opto/rootnode.hpp" #include "opto/runtime.hpp" +#include "opto/shenandoahSupport.hpp" #include "opto/stringopts.hpp" #include "opto/type.hpp" #include "opto/vectornode.hpp" @@ -3176,8 +3177,9 @@ } break; case Op_ShenandoahReadBarrier: + break; case Op_ShenandoahWriteBarrier: - // TODO: What to do here? + n->set_req(ShenandoahBarrierNode::Memory, immutable_memory()); break; default: assert( !n->is_Call(), "" );
--- a/src/share/vm/opto/graphKit.cpp Tue Aug 11 13:01:06 2015 +0200 +++ b/src/share/vm/opto/graphKit.cpp Tue Aug 18 18:34:37 2015 +0200 @@ -4488,8 +4488,7 @@ phi ->init_req(_null_path, obj); memphi->init_req(_null_path, prev_mem); - // ShenandoahWriteBarrierNode* wb = new ShenandoahWriteBarrierNode(NULL, memory(adr_type), not_null_obj); - ShenandoahWriteBarrierNode* wb = new ShenandoahWriteBarrierNode(NULL, immutable_memory(), not_null_obj); + ShenandoahWriteBarrierNode* wb = new ShenandoahWriteBarrierNode(NULL, memory(adr_type), not_null_obj); Node* n = _gvn.transform(wb); if (n == wb) { // New barrier needs memory projection. Node* proj = _gvn.transform(new ShenandoahWBMemProjNode(n)); @@ -4507,8 +4506,7 @@ return _gvn.transform(phi); } else { // We know it is not null. Simple barrier is sufficient. - // ShenandoahWriteBarrierNode* wb = new ShenandoahWriteBarrierNode(NULL, memory(adr_type), obj); - ShenandoahWriteBarrierNode* wb = new ShenandoahWriteBarrierNode(NULL, immutable_memory(), obj); + ShenandoahWriteBarrierNode* wb = new ShenandoahWriteBarrierNode(NULL, memory(adr_type), obj); Node* n = _gvn.transform(wb); if (n == wb) { // New barrier needs memory projection. Node* proj = _gvn.transform(new ShenandoahWBMemProjNode(n));