src/share/vm/opto/memnode.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File hotspot Cdiff src/share/vm/opto/memnode.cpp

src/share/vm/opto/memnode.cpp

Print this page

        

*** 1580,1607 **** // No match. return NULL; } 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; } return (conbt != loadbt); } // 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()) { 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(); --- 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; } + if (loadbt == T_BOOLEAN) { + loadbt = T_BYTE; + } + if (conbt == T_BOOLEAN) { + conbt = T_BYTE; + } 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 && !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