--- a/hotspot/src/share/vm/opto/stringopts.cpp Thu Nov 19 16:07:22 2015 -0800
+++ b/hotspot/src/share/vm/opto/stringopts.cpp Fri Nov 20 10:09:42 2015 +0100
@@ -1293,7 +1293,7 @@
Node* index = __ SubI(charPos, __ intcon((bt == T_BYTE) ? 1 : 2));
Node* ch = __ AddI(r, __ intcon('0'));
Node* st = __ store_to_memory(kit.control(), kit.array_element_address(dst_array, index, T_BYTE),
- ch, bt, byte_adr_idx, MemNode::unordered);
+ ch, bt, byte_adr_idx, MemNode::unordered, (bt != T_BYTE) /* mismatched */);
iff = kit.create_and_map_if(head, __ Bool(__ CmpI(q, __ intcon(0)), BoolTest::ne),
PROB_FAIR, COUNT_UNKNOWN);
@@ -1331,7 +1331,7 @@
} else {
Node* index = __ SubI(charPos, __ intcon((bt == T_BYTE) ? 1 : 2));
st = __ store_to_memory(kit.control(), kit.array_element_address(dst_array, index, T_BYTE),
- sign, bt, byte_adr_idx, MemNode::unordered);
+ sign, bt, byte_adr_idx, MemNode::unordered, (bt != T_BYTE) /* mismatched */);
final_merge->init_req(merge_index + 1, kit.control());
final_mem->init_req(merge_index + 1, st);
@@ -1524,7 +1524,7 @@
} else {
val = readChar(src_array, i++);
}
- __ store(__ ctrl(), adr, __ ConI(val), T_CHAR, byte_adr_idx, MemNode::unordered);
+ __ store(__ ctrl(), adr, __ ConI(val), T_CHAR, byte_adr_idx, MemNode::unordered, true /* mismatched */);
index = __ AddI(index, __ ConI(2));
}
if (src_is_byte) {
@@ -1612,7 +1612,7 @@
}
if (!dcon || !dbyte) {
// Destination is UTF16. Store a char.
- __ store(__ ctrl(), adr, val, T_CHAR, byte_adr_idx, MemNode::unordered);
+ __ store(__ ctrl(), adr, val, T_CHAR, byte_adr_idx, MemNode::unordered, true /* mismatched */);
__ set(end, __ AddI(start, __ ConI(2)));
}
if (!dcon) {