[RFR] [8u] 8u202 Upstream Sync

Andrew John Hughes gnu.andrew at redhat.com
Mon Apr 8 16:07:32 UTC 2019



On 08/04/2019 10:11, Aleksey Shipilev wrote:
> On 4/8/19 6:53 AM, Andrew John Hughes wrote:
>> http://cr.openjdk.java.net/~andrew/shenandoah-8/u202/corba/merge.changeset
>> http://cr.openjdk.java.net/~andrew/shenandoah-8/u202/jaxp/merge.changeset
>> http://cr.openjdk.java.net/~andrew/shenandoah-8/u202/jaxws/merge.changeset
> 
> Looks trivially fine.
> 
>> http://cr.openjdk.java.net/~andrew/shenandoah-8/u202/jdk/merge.changeset
>> http://cr.openjdk.java.net/~andrew/shenandoah-8/u202/hotspot/merge.changeset
>> http://cr.openjdk.java.net/~andrew/shenandoah-8/u202/langtools/merge.changeset
> 
> Looks fine. Hotspot/Shenandoah changes would need to be tested right after the integration, I think.
> They look fine, but might surprise us.
> 
>> http://cr.openjdk.java.net/~andrew/shenandoah-8/u202/nashorn/merge.changeset
> 
> Looks trivially fine.
> 
>> http://cr.openjdk.java.net/~andrew/shenandoah-8/u202/root/merge.changeset
> 
> Looks fine.
> 
> Thumbs up.
> 
> -Aleksey
> 

Thanks. Pushed.

The only merge issue was in hotspot/src/share/vm/opto/library_call.cpp,
where a conditional is inverted:

-    if (type != T_OBJECT ) {
-      (void) store_to_memory(control(), adr, val, type, adr_type, mo,
is_volatile, unaligned, mismatched);
+    if (type == T_OBJECT ) {
+      val = shenandoah_read_barrier_storeval(val);
+      (void) store_oop_to_unknown(control(), heap_base_oop, adr,
adr_type, val, type, mo, mismatched);
     } else {
-      // Possibly an oop being stored to Java heap or native memory
-      if (!can_access_non_heap) {
-        // oop to Java heap.
-        val = shenandoah_read_barrier_storeval(val);
-        (void) store_oop_to_unknown(control(), heap_base_oop, adr,
adr_type, val, type, mo, mismatched);
-      } else {
-        // We can't tell at compile time if we are storing in the Java
heap or outside
-        // of it. So we need to emit code to conditionally do the
proper type of
-        // store.
-
-        IdealKit ideal(this);
-#define __ ideal.
-        // QQQ who knows what probability is here??
-        __ if_then(heap_base_oop, BoolTest::ne, null(),
PROB_UNLIKELY(0.999)); {
-          // Sync IdealKit and graphKit.
-          sync_kit(ideal);
-          Node* rb = shenandoah_read_barrier_storeval(val);
-          Node* st = store_oop_to_unknown(control(), heap_base_oop,
adr, adr_type, rb, type, mo, mismatched);
-          // Update IdealKit memory.
-          __ sync_kit(this);
-        } __ else_(); {
-          __ store(__ ctrl(), adr, val, type, alias_type->index(), mo,
is_volatile, mismatched);
-        } __ end_if();
-        // Final sync IdealKit and GraphKit.
-        final_sync(ideal);
-#undef __
-      }
+      (void) store_to_memory(control(), adr, val, type, adr_type, mo,
is_volatile, unaligned, mismatched);

so I moved the val = shenandoah_read_barrier_storeval(val) with the
store_oop_to_unknown it previously guarded. The other Node *rb =
shenandoah_read_barrier_storeval(val) was discarded along with the rest
of that else block.

This is part of 8155635: C2: Mixed unsafe accesses break alias analysis.
-- 
Andrew :)

Senior Free Java Software Engineer
Red Hat, Inc. (http://www.redhat.com)

PGP Key: ed25519/0xCFDA0F9B35964222 (hkp://keys.gnupg.net)
Fingerprint = 5132 579D D154 0ED2 3E04  C5A0 CFDA 0F9B 3596 4222
https://keybase.io/gnu_andrew



More information about the shenandoah-dev mailing list