src/share/vm/adlc/formssel.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File 8167298 Cdiff src/share/vm/adlc/formssel.cpp

src/share/vm/adlc/formssel.cpp

Print this page
rev 12107 : 8167298: assert(tp->base() != Type::AnyPtr) crash with Unsafe.compareAndExchangeObject*
Summary: Unsafe.compareAndExchangeObject should keep track of returned type after matching
Reviewed-by: shade, vlivanov

*** 769,779 **** // This instruction captures the machine-independent bottom_type // Expected use is for pointer vs oop determination for LoadP bool InstructForm::captures_bottom_type(FormDict &globals) const { ! if( _matrule && _matrule->_rChild && (!strcmp(_matrule->_rChild->_opType,"CastPP") || // new result type !strcmp(_matrule->_rChild->_opType,"CastX2P") || // new result type !strcmp(_matrule->_rChild->_opType,"DecodeN") || !strcmp(_matrule->_rChild->_opType,"EncodeP") || !strcmp(_matrule->_rChild->_opType,"DecodeNKlass") || --- 769,779 ---- // This instruction captures the machine-independent bottom_type // Expected use is for pointer vs oop determination for LoadP bool InstructForm::captures_bottom_type(FormDict &globals) const { ! if (_matrule && _matrule->_rChild && (!strcmp(_matrule->_rChild->_opType,"CastPP") || // new result type !strcmp(_matrule->_rChild->_opType,"CastX2P") || // new result type !strcmp(_matrule->_rChild->_opType,"DecodeN") || !strcmp(_matrule->_rChild->_opType,"EncodeP") || !strcmp(_matrule->_rChild->_opType,"DecodeNKlass") ||
*** 781,791 **** !strcmp(_matrule->_rChild->_opType,"LoadN") || !strcmp(_matrule->_rChild->_opType,"LoadNKlass") || !strcmp(_matrule->_rChild->_opType,"CreateEx") || // type of exception !strcmp(_matrule->_rChild->_opType,"CheckCastPP") || !strcmp(_matrule->_rChild->_opType,"GetAndSetP") || ! !strcmp(_matrule->_rChild->_opType,"GetAndSetN")) ) return true; else if ( is_ideal_load() == Form::idealP ) return true; else if ( is_ideal_store() != Form::none ) return true; if (needs_base_oop_edge(globals)) return true; --- 781,793 ---- !strcmp(_matrule->_rChild->_opType,"LoadN") || !strcmp(_matrule->_rChild->_opType,"LoadNKlass") || !strcmp(_matrule->_rChild->_opType,"CreateEx") || // type of exception !strcmp(_matrule->_rChild->_opType,"CheckCastPP") || !strcmp(_matrule->_rChild->_opType,"GetAndSetP") || ! !strcmp(_matrule->_rChild->_opType,"GetAndSetN") || ! !strcmp(_matrule->_rChild->_opType,"CompareAndExchangeP") || ! !strcmp(_matrule->_rChild->_opType,"CompareAndExchangeN"))) return true; else if ( is_ideal_load() == Form::idealP ) return true; else if ( is_ideal_store() != Form::none ) return true; if (needs_base_oop_edge(globals)) return true;
src/share/vm/adlc/formssel.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File