[11] RFR: Fix ShenandoahBarrierSetC2::enqueue_useful_gc_barrier (part of JDK-8212611)

Aleksey Shipilev shade at redhat.com
Fri Sep 6 14:58:11 UTC 2019


There is a discrepancy between jdk/jdk and sh/jdk11 definition of BSC2::enqueue_useful_gc_barrier,
where one thing adds the node to the IGVN worklist [1], and another adds all users to it [2]. It was
introduced by JDK-8212611 [3], and we should consider backporting it to 11u.

Meanwhile, sh/jdk11 x86_32 CTW fails without that patch:

$ CONF=linux-x86-normal-server-fastdebug make run-test TEST_VM_OPTS="-XX:-TieredCompilation
-XX:+UseShenandoahGC" TEST=applications/ctw/modules/jdk_scripting_nashorn.java

#
#  Internal Error (/home/shade/trunks/shenandoah-jdk11/src/hotspot/share/opto/compile.cpp:2851),
pid=23210, tid=23220
#  assert(!ShenandoahBarrierSetC2::has_only_shenandoah_wb_pre_uses(addp)) failed: useless address
computation?
#

I believe the best course of action would be to pick up safer parts of JDK-8212611 to sh/jdk11:
  https://cr.openjdk.java.net/~shade/shenandoah/11u-fix-bsc2-eugcb/webrev.01/

Testing: {x86_64, x86_32} CTW tests, {x86_64, x86_32} hotspot_gc_shenandoah (running)

-- 
Thanks,
-Aleksey


[1] sh/jdk11:
void ShenandoahBarrierSetC2::enqueue_useful_gc_barrier(Unique_Node_List &worklist, Node* node) const {
  if (node->Opcode() == Op_AddP && ShenandoahBarrierSetC2::has_only_shenandoah_wb_pre_uses(node)) {
    worklist.push(node);
  }
}

[2] jdk/jdk:
void ShenandoahBarrierSetC2::enqueue_useful_gc_barrier(PhaseIterGVN* igvn, Node* node) const {
  if (node->Opcode() == Op_AddP && ShenandoahBarrierSetC2::has_only_shenandoah_wb_pre_uses(node)) {
    igvn->add_users_to_worklist(node);
  }
}

[3] 8212611: Small collection of simple changes from shenandoah
 https://bugs.openjdk.java.net/browse/JDK-8212611



More information about the shenandoah-dev mailing list