RFR: Handle missing ShenandoahWriteBarrierRB case

Aleksey Shipilev shade at redhat.com
Thu Jul 26 09:45:39 UTC 2018


Performance experiments with WB slowpath need this missing case:

diff -r db10dfda040d src/hotspot/share/gc/shenandoah/c2/shenandoahSupport.cpp
--- a/src/hotspot/share/gc/shenandoah/c2/shenandoahSupport.cpp  Wed Jul 25 09:53:22 2018 -0400
+++ b/src/hotspot/share/gc/shenandoah/c2/shenandoahSupport.cpp  Thu Jul 26 11:38:20 2018 +0200
@@ -2820,12 +2820,18 @@
                                                         Node* raw_mem_phi, Node* unc_region, int
alias, Unique_Node_List& uses,
                                                         PhaseIdealLoop* phase) {
   evacuation_in_progress_null_check(c, val, evacuation_iff, unc, unc_ctrl, unc_region, uses, phase);

   IdealLoopTree *loop = phase->get_loop(c);
-  Node* rbtrue = new ShenandoahReadBarrierNode(c, wb_mem, val);
-  phase->register_new_node(rbtrue, c);
+
+  Node* rbtrue;
+  if (ShenandoahWriteBarrierRB) {
+    rbtrue = new ShenandoahReadBarrierNode(c, wb_mem, val);
+    phase->register_new_node(rbtrue, c);
+  } else {
+    rbtrue = val;
+  }

   Node* in_cset_fast_test_failure = NULL;
   in_cset_fast_test(c, rbtrue, raw_mem, wb_mem, region, val_phi, mem_phi, raw_mem_phi, phase);

   // The slow path stub consumes and produces raw memory in addition


Testing; tier3_gc_shenandoah

Thanks,
-Aleksey



More information about the shenandoah-dev mailing list