RFR (11u, XXL): Upstream/backport Shenandoah to JDK11u - the review thread
Aditya Mandaleeka
adityam at microsoft.com
Fri Jul 24 22:23:09 UTC 2020
Hey Roman,
Thanks for addressing the comments! Just following up on one of them:
>
> > The outermost block has been relaxed to be under `#if
> > INCLUDE_G1GC || INCLUDE_SHENANDOAHGC`, but I think
> > that last line above (the call to
> > G1ThreadLocalData::dirty_card_queue_buffer_offset()) won't compile if
> > G1
> > is disabled, will it? I haven't verified it myself, but you may
> > want to check that. I assume including
> > Shenandoah and not G1 is a valid configuration based on the other
> > checks you added.
> >
>
> I think you're missing the final #endif after the block that you showed
> here. The one that closes the #if INCLUDE_G1GC || INCLUDE_SHENANDOAHGC.
> I think it's ok. Also notice that
> G1ThreadLocalData::dirty_card_queue_buffer_offset() will never happen
> with Shenandoah, we don't use the dirty_card_queue.
I think I should have explained the issue I see better.
Here is the relevant code from escape.cpp again, after the patch:
#if INCLUDE_G1GC || INCLUDE_SHENANDOAHGC
if ((UseG1GC SHENANDOAHGC_ONLY(|| UseShenandoahGC)) && adr->is_AddP()) {
Node* base = get_addp_base(adr);
if (base->Opcode() == Op_LoadP &&
base->in(MemNode::Address)->is_AddP()) {
adr = base->in(MemNode::Address);
Node* tls = get_addp_base(adr);
if (tls->Opcode() == Op_ThreadLocal) {
int offs = (int)igvn->find_intptr_t_con(adr->in(AddPNode::Offset), Type::OffsetBot);
#if INCLUDE_G1GC && INCLUDE_SHENANDOAHGC
const int buf_offset = in_bytes(UseG1GC ? G1ThreadLocalData::satb_mark_queue_buffer_offset()
: ShenandoahThreadLocalData::satb_mark_queue_buffer_offset());
#elif INCLUDE_G1GC
const int buf_offset = in_bytes(G1ThreadLocalData::satb_mark_queue_buffer_offset());
#else
const int buf_offset = in_bytes(ShenandoahThreadLocalData::satb_mark_queue_buffer_offset());
#endif
if (offs == buf_offset) {
break; // G1 pre barrier previous oop value store.
}
if (offs == in_bytes(G1ThreadLocalData::dirty_card_queue_buffer_offset())) {
break; // G1 post barrier card address store.
}
}
}
}
#endif
That last call to G1ThreadLocalData::dirty_card_queue_buffer_offset() is guarded only by
the `#if INCLUDE_G1GC || INCLUDE_SHENANDOAHGC` so it can be included in the compilation
unit even when INCLUDE_G1GC is off (as long as INCLUDE_SHENANDOAHGC is on), and thus cause
a build break. I think that part needs to also be guarded under #if INCLUDE_G1GC.
-Aditya
More information about the jdk-updates-dev
mailing list