mirror of
https://github.com/openjdk/jdk.git
synced 2025-09-17 09:34:38 +02:00
8150933: System::arraycopy intrinsic doesn't mark mismatched loads
Reviewed-by: kvn, shade
This commit is contained in:
parent
d466ce4948
commit
a1b61d2827
2 changed files with 12 additions and 7 deletions
|
@ -880,8 +880,14 @@ bool PhaseMacroExpand::generate_block_arraycopy(Node** ctrl, MergeMemNode** mem,
|
|||
Node* sptr = basic_plus_adr(src, src_off);
|
||||
Node* dptr = basic_plus_adr(dest, dest_off);
|
||||
uint alias_idx = C->get_alias_index(adr_type);
|
||||
Node* sval = transform_later(LoadNode::make(_igvn, *ctrl, (*mem)->memory_at(alias_idx), sptr, adr_type, TypeInt::INT, T_INT, MemNode::unordered));
|
||||
Node* st = transform_later(StoreNode::make(_igvn, *ctrl, (*mem)->memory_at(alias_idx), dptr, adr_type, sval, T_INT, MemNode::unordered));
|
||||
bool is_mismatched = (basic_elem_type != T_INT);
|
||||
Node* sval = transform_later(
|
||||
LoadNode::make(_igvn, *ctrl, (*mem)->memory_at(alias_idx), sptr, adr_type,
|
||||
TypeInt::INT, T_INT, MemNode::unordered, LoadNode::DependsOnlyOnTest,
|
||||
false /*unaligned*/, is_mismatched));
|
||||
Node* st = transform_later(
|
||||
StoreNode::make(_igvn, *ctrl, (*mem)->memory_at(alias_idx), dptr, adr_type,
|
||||
sval, T_INT, MemNode::unordered));
|
||||
(*mem)->set_memory_at(alias_idx, st);
|
||||
src_off += BytesPerInt;
|
||||
dest_off += BytesPerInt;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue