C2: adding things to EA

Aleksey Shipilev shade at redhat.com
Fri Jun 14 09:16:18 UTC 2019


Hi,

I am looking here in our C2 LRB fixup thingie:
 http://hg.openjdk.java.net/shenandoah/jdk/file/3f2b4cc07dbd/src/hotspot/share/gc/shenandoah/c2/shenandoahBarrierSetC2.cpp#l1121

...and have questions:

*) In SBSC2::escape_add_to_con_graph and SBSC2::escape_add_final_edges, shouldn't we add LoadAddr
input as well, like ShenandoahCompareAndExchange does?

diff -r 3f2b4cc07dbd src/hotspot/share/gc/shenandoah/c2/shenandoahBarrierSetC2.cpp
--- a/src/hotspot/share/gc/shenandoah/c2/shenandoahBarrierSetC2.cpp     Thu Jun 06 22:24:23 2019 +0200
+++ b/src/hotspot/share/gc/shenandoah/c2/shenandoahBarrierSetC2.cpp     Fri Jun 14 11:09:51 2019 +0200
@@ -1159,4 +1159,5 @@
     case Op_ShenandoahLoadReferenceBarrier:
       conn_graph->add_local_var_and_edge(n, PointsToNode::NoEscape,
n->in(ShenandoahLoadReferenceBarrierNode::ValueIn), delayed_worklist);
+      conn_graph->add_local_var_and_edge(n, PointsToNode::NoEscape,
n->in(ShenandoahLoadReferenceBarrierNode::LoadAddr), delayed_worklist);
       return true;
     default:
@@ -1185,4 +1186,5 @@
     case Op_ShenandoahLoadReferenceBarrier:
       conn_graph->add_local_var_and_edge(n, PointsToNode::NoEscape,
n->in(ShenandoahLoadReferenceBarrierNode::ValueIn), NULL);
+      conn_graph->add_local_var_and_edge(n, PointsToNode::NoEscape,
n->in(ShenandoahLoadReferenceBarrierNode::LoadAddr), NULL);
       return true;
     default:

*) Why do we only add NoEscape "adr" to CompareAndExchange, and not to CompareAndSwap? Ditto, why do
we only do the unsafe_access for CompareAndSwap, and not to CompareAndExchange?

*) ZGC also handles Op_Proj cases, do we care about those as well?

-- 
Thanks,
-Aleksey



More information about the shenandoah-dev mailing list