< prev index next >

src/share/vm/opto/graphKit.cpp

Print this page
rev 14282 : Factor out keep-alive barrier from usual pre-barrier implementations.

@@ -1629,10 +1629,47 @@
       ShouldNotReachHere();
 
   }
 }
 
+void GraphKit::keep_alive_barrier(Node* ctl, Node* obj) {
+  BarrierSet* bs = Universe::heap()->barrier_set();
+  switch (bs->kind()) {
+    case BarrierSet::G1SATBCTLogging:
+      pre_barrier(false /* do_load */,
+                  ctl,
+                  NULL /* obj */,
+                  NULL /* adr */,
+                  max_juint /* alias_idx */,
+                  NULL /* val */,
+                  NULL /* val_type */,
+                  obj /* pre_val */,
+                  T_OBJECT);
+      break;
+    case BarrierSet::ShenandoahBarrierSet:
+      if (ShenandoahKeepAliveBarrier) {
+        pre_barrier(false /* do_load */,
+                    ctl,
+                    NULL /* obj */,
+                    NULL /* adr */,
+                    max_juint /* alias_idx */,
+                    NULL /* val */,
+                    NULL /* val_type */,
+                    obj /* pre_val */,
+                    T_OBJECT);
+      }
+      break;
+    case BarrierSet::CardTableForRS:
+    case BarrierSet::CardTableExtension:
+    case BarrierSet::ModRef:
+      break;
+    default      :
+      ShouldNotReachHere();
+
+  }
+}
+
 Node* GraphKit::store_oop(Node* ctl,
                           Node* obj,
                           Node* adr,
                           const TypePtr* adr_type,
                           Node* val,
< prev index next >