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));