RFR(XS): 8227384: C2 compilation fails with "graph should be schedulable" when running with -XX:-EliminateLocks
Roland Westrelin
rwestrel at redhat.com
Thu Sep 26 15:37:35 UTC 2019
Hi Vladimir,
> My concern is that your loading from Klass::prototype_header_offset (or make constant) instead of
> loading from object's mark word in LoadNod Ideal() and Value() methods bypassing Store into mark
> word or possible access to object from other thread before this load. It is okay if
> object/allocation is not escaping but not in general case I think.
LoadNode::is_new_object_mark_load() checks the memory edge of the load:
1565 if (alloc != NULL && mem->is_Proj() &&
1566 mem->in(0) != NULL &&
1567 mem->in(0) == alloc->initialization() &&
So it can't bypass a store unless the store was captured but stores to
headers are not captured (see below).
Roland.
int InitializeNode::captured_store_insertion_point(intptr_t start,
int size_in_bytes,
PhaseTransform* phase) {
const int FAIL = 0, MAX_STORE = BytesPerLong;
if (is_complete())
return FAIL; // arraycopy got here first; punt
assert(allocation() != NULL, "must be present");
// no negatives, no header fields:
if (start < (intptr_t) allocation()->minimum_header_size()) return FAIL;
More information about the hotspot-compiler-dev
mailing list