src/share/vm/opto/memnode.cpp
Index
Unified diffs
Context diffs
Sdiffs
Patch
New
Old
Previous File
Next File
*** old/src/share/vm/opto/memnode.cpp Mon Feb 29 15:32:14 2016
--- new/src/share/vm/opto/memnode.cpp Mon Feb 29 15:32:14 2016
*** 1580,1607 ****
--- 1580,1617 ----
// No match.
return NULL;
}
+ #ifdef ASSERT
static bool is_mismatched_access(ciConstant con, BasicType loadbt) {
BasicType conbt = con.basic_type();
assert(conbt != T_NARROWOOP, "sanity");
if (loadbt == T_NARROWOOP || loadbt == T_ARRAY) {
! loadbt = T_OBJECT;
+ switch (conbt) {
+ case T_BOOLEAN: conbt = T_BYTE; break;
! case T_ARRAY: conbt = T_OBJECT; break;
+ }
+ switch (loadbt) {
+ case T_BOOLEAN: loadbt = T_BYTE; break;
+ case T_NARROWOOP: loadbt = T_OBJECT; break;
+ case T_ARRAY: loadbt = T_OBJECT; break;
+ case T_ADDRESS: loadbt = T_OBJECT; break;
}
return (conbt != loadbt);
}
+ #endif // ASSERT
// Try to constant-fold a stable array element.
static const Type* fold_stable_ary_elem(const TypeAryPtr* ary, int off, BasicType loadbt) {
assert(ary->const_oop(), "array should be constant");
assert(ary->is_stable(), "array should be stable");
// Decode the results of GraphKit::array_element_address.
ciArray* aobj = ary->const_oop()->as_array();
ciConstant con = aobj->element_value_by_offset(off);
- if (con.basic_type() != T_ILLEGAL && !is_mismatched_access(con, loadbt) && !con.is_null_or_zero()) {
+ assert(!is_mismatched_access(con, loadbt),
+ "conbt=%s; loadbt=%s", type2name(con.basic_type()), type2name(loadbt));
const Type* con_type = Type::make_from_constant(con);
if (con_type != NULL) {
if (con_type->isa_aryptr()) {
// Join with the array element type, in case it is also stable.
int dim = ary->stable_dimension();
src/share/vm/opto/memnode.cpp
Index
Unified diffs
Context diffs
Sdiffs
Patch
New
Old
Previous File
Next File