1.1 --- a/src/share/vm/adlc/formssel.cpp Fri Mar 06 21:36:50 2009 -0800 1.2 +++ b/src/share/vm/adlc/formssel.cpp Mon Mar 09 03:17:11 2009 -0700 1.3 @@ -3310,8 +3310,8 @@ 1.4 static const char *needs_ideal_memory_list[] = { 1.5 "StoreI","StoreL","StoreP","StoreN","StoreD","StoreF" , 1.6 "StoreB","StoreC","Store" ,"StoreFP", 1.7 - "LoadI" ,"LoadL", "LoadP" ,"LoadN", "LoadD" ,"LoadF" , 1.8 - "LoadB" ,"LoadUS" ,"LoadS" ,"Load" , 1.9 + "LoadI", "LoadUI2L", "LoadL", "LoadP" ,"LoadN", "LoadD" ,"LoadF" , 1.10 + "LoadB" , "LoadUB", "LoadUS" ,"LoadS" ,"Load" , 1.11 "Store4I","Store2I","Store2L","Store2D","Store4F","Store2F","Store16B", 1.12 "Store8B","Store4B","Store8C","Store4C","Store2C", 1.13 "Load4I" ,"Load2I" ,"Load2L" ,"Load2D" ,"Load4F" ,"Load2F" ,"Load16B" , 1.14 @@ -3431,10 +3431,16 @@ 1.15 const InstructForm *form2_inst = form2 ? form2->is_instruction() : NULL; 1.16 const char *name_left = mRule2->_lChild ? mRule2->_lChild->_opType : NULL; 1.17 const char *name_right = mRule2->_rChild ? mRule2->_rChild->_opType : NULL; 1.18 + DataType data_type = Form::none; 1.19 + if (form->is_operand()) { 1.20 + // Make sure the loadX matches the type of the reg 1.21 + data_type = form->ideal_to_Reg_type(form->is_operand()->ideal_type(globals)); 1.22 + } 1.23 // Detect reg vs (loadX memory) 1.24 if( form->is_cisc_reg(globals) 1.25 && form2_inst 1.26 - && (is_load_from_memory(mRule2->_opType) != Form::none) // reg vs. (load memory) 1.27 + && data_type != Form::none 1.28 + && (is_load_from_memory(mRule2->_opType) == data_type) // reg vs. (load memory) 1.29 && (name_left != NULL) // NOT (load) 1.30 && (name_right == NULL) ) { // NOT (load memory foo) 1.31 const Form *form2_left = name_left ? globals[name_left] : NULL;