RFR: is_gc_barrier_node should accept barriers called with both CallLeaf and CallLeafNoFP

Aleksey Shipilev shade at redhat.com
Mon Nov 19 19:31:15 UTC 2018


Roman made the last "wrong" call go away here:
  http://hg.openjdk.java.net/shenandoah/jdk/rev/b821a7cd244f

Unfortunately, that change is not backportable. sh/jdk11, for example, uses
PhaseMacroExpand::make_leaf_call to emit clone barrier, which emits CallLeafNoFPNode. It seems more
prudent to allow matches to accept both call forms. This should be safe, as is_gc_barrier_node
checks the call by target name at the end.

Fix:

diff -r 630f375aaf9a src/hotspot/share/gc/shenandoah/c2/shenandoahBarrierSetC2.cpp
--- a/src/hotspot/share/gc/shenandoah/c2/shenandoahBarrierSetC2.cpp     Sat Nov 17 11:34:34 2018 +0100
+++ b/src/hotspot/share/gc/shenandoah/c2/shenandoahBarrierSetC2.cpp     Mon Nov 19 20:30:25 2018 +0100
@@ -891,7 +891,7 @@

 // Support for GC barriers emitted during parsing
 bool ShenandoahBarrierSetC2::is_gc_barrier_node(Node* node) const {
-  if (node->Opcode() != Op_CallLeaf) {
+  if (node->Opcode() != Op_CallLeaf && node->Opcode() != Op_CallLeafNoFP) {
     return false;
   }
   CallLeafNode *call = node->as_CallLeaf();


Testing: tier3_gc_shenandoah

Thanks,
-Aleksey



More information about the shenandoah-dev mailing list