[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