< prev index next >
src/share/vm/opto/library_call.cpp
Print this page
@@ -1582,10 +1582,17 @@
assert (arrayOopDesc::base_offset_in_bytes(T_CHAR) == arrayOopDesc::base_offset_in_bytes(T_BYTE),
"sanity: byte[] and char[] bases agree");
assert (type2aelembytes(T_CHAR) == type2aelembytes(T_BYTE)*2,
"sanity: byte[] and char[] scales agree");
+ // Bail when getChar over constants is requested: constant folding would
+ // reject folding mismatched char access over byte[]. A normal inlining for getChar
+ // Java method would constant fold nicely instead.
+ if (!is_store && value->is_Con() && index->is_Con()) {
+ return false;
+ }
+
Node* adr = array_element_address(value, index, T_CHAR);
if (is_store) {
(void) store_to_memory(control(), adr, ch, T_CHAR, TypeAryPtr::BYTES, MemNode::unordered,
false, false, true /* mismatched */);
} else {
< prev index next >