[8u] Fix Shenandoah bindings in ADLC formssel
Aleksey Shipilev
shade at redhat.com
Thu Feb 18 11:31:50 UTC 2021
Hi,
While reading the sh/jdk8 difference against upstream, I realized that formssel.cpp changes are
stale. We need to drop ShenandoahReadBarrier mentions, since there so no such node at all.
InstructForm::captures_bottom_type does have ShenandoahCompareAndExchangeP/N in later JDKs, but no
such nodes are available in 8u. So I just dropped the unnecessary test.
MatchNode::needs_ideal_memory_edge needs ShenandoahCompareAndSwapN/P nodes, like all other JDK
versions do. Actually, later JDK revisions add *Weak* and *CompareAndExchange* variants, but for 8u
only CompareAndSwap are needed.
8u patch:
diff -r 25688d338e24 src/share/vm/adlc/formssel.cpp
--- a/src/share/vm/adlc/formssel.cpp Wed Feb 17 17:39:25 2021 +0100
+++ b/src/share/vm/adlc/formssel.cpp Thu Feb 18 12:27:37 2021 +0100
@@ -765,12 +765,11 @@
!strcmp(_matrule->_rChild->_opType,"LoadN") ||
!strcmp(_matrule->_rChild->_opType,"LoadNKlass") ||
!strcmp(_matrule->_rChild->_opType,"CreateEx") || // type of exception
!strcmp(_matrule->_rChild->_opType,"CheckCastPP") ||
!strcmp(_matrule->_rChild->_opType,"GetAndSetP") ||
- !strcmp(_matrule->_rChild->_opType,"GetAndSetN") ||
- !strcmp(_matrule->_rChild->_opType,"ShenandoahReadBarrier"))) return true;
+ !strcmp(_matrule->_rChild->_opType,"GetAndSetN")) ) return true;
else if ( is_ideal_load() == Form::idealP ) return true;
else if ( is_ideal_store() != Form::none ) return true;
if (needs_base_oop_edge(globals)) return true;
@@ -3473,15 +3472,15 @@
"StoreVector", "LoadVector",
"LoadRange", "LoadKlass", "LoadNKlass", "LoadL_unaligned", "LoadD_unaligned",
"LoadPLocked",
"StorePConditional", "StoreIConditional", "StoreLConditional",
"CompareAndSwapI", "CompareAndSwapL", "CompareAndSwapP", "CompareAndSwapN",
+ "ShenandoahCompareAndSwapN", "ShenandoahCompareAndSwapP",
"StoreCM",
"ClearArray",
"GetAndAddI", "GetAndSetI", "GetAndSetP",
"GetAndAddL", "GetAndSetL", "GetAndSetN",
- "ShenandoahReadBarrier",
};
int cnt = sizeof(needs_ideal_memory_list)/sizeof(char*);
if( strcmp(_opType,"PrefetchRead")==0 ||
strcmp(_opType,"PrefetchWrite")==0 ||
strcmp(_opType,"PrefetchAllocation")==0 )
Testing: hotspot_gc_shenandoah {fastdebug,release}
--
Thanks,
-Aleksey
More information about the shenandoah-dev
mailing list