--- old/src/hotspot/share/opto/memnode.cpp 2020-08-07 00:44:18.000000000 +0300 +++ new/src/hotspot/share/opto/memnode.cpp 2020-08-07 00:44:18.000000000 +0300 @@ -633,7 +633,8 @@ } if (st_offset != offset && st_offset != Type::OffsetBot) { - const int MAX_STORE = BytesPerLong; + const int MAX_STORE = MAX2(BytesPerLong, (int)MaxVectorSize); + assert(mem->as_Store()->memory_size() <= MAX_STORE, ""); if (st_offset >= offset + size_in_bytes || st_offset <= offset - MAX_STORE || st_offset <= offset - mem->as_Store()->memory_size()) { @@ -1101,7 +1102,12 @@ // (This is one of the few places where a generic PhaseTransform // can create new nodes. Think of it as lazily manifesting // virtually pre-existing constants.) - return phase->zerocon(memory_type()); + if (memory_type() != T_VOID) { + return phase->zerocon(memory_type()); + } else { + // TODO: materialize all-zero vector constant + assert(!isa_Load() || as_Load()->type()->isa_vect(), ""); + } } // A load from an initialization barrier can match a captured store. @@ -2546,6 +2552,8 @@ assert(Opcode() == st->Opcode() || st->Opcode() == Op_StoreVector || Opcode() == Op_StoreVector || + st->Opcode() == Op_StoreVectorScatter || + Opcode() == Op_StoreVectorScatter || phase->C->get_alias_index(adr_type()) == Compile::AliasIdxRaw || (Opcode() == Op_StoreL && st->Opcode() == Op_StoreI) || // expanded ClearArrayNode (Opcode() == Op_StoreI && st->Opcode() == Op_StoreL) || // initialization by arraycopy @@ -3729,7 +3737,7 @@ int InitializeNode::captured_store_insertion_point(intptr_t start, int size_in_bytes, PhaseTransform* phase) { - const int FAIL = 0, MAX_STORE = BytesPerLong; + const int FAIL = 0, MAX_STORE = MAX2(BytesPerLong, (int)MaxVectorSize); if (is_complete()) return FAIL; // arraycopy got here first; punt @@ -3759,6 +3767,7 @@ } return -(int)i; // not found; here is where to put it } else if (st_off < start) { + assert(st->as_Store()->memory_size() <= MAX_STORE, ""); if (size_in_bytes != 0 && start < st_off + MAX_STORE && start < st_off + st->as_Store()->memory_size()) {