src/share/vm/adlc/formssel.cpp

changeset 1059
337400e7a5dd
parent 1040
98cb887364d3
child 1063
7bb995fbd3c0
     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;

mercurial