7199654: Remove LoadUI2LNode

Tue, 09 Oct 2012 12:40:05 -0700

author
vlivanov
date
Tue, 09 Oct 2012 12:40:05 -0700
changeset 4160
f6badecb7ea7
parent 4159
8e47bac5643a
child 4161
d336b3173277

7199654: Remove LoadUI2LNode
Summary: Removed LoadUI2L node from Ideal nodes, use match rule in .ad files instead.
Reviewed-by: kvn

src/cpu/sparc/vm/sparc.ad file | annotate | diff | comparison | revisions
src/cpu/x86/vm/x86_32.ad file | annotate | diff | comparison | revisions
src/cpu/x86/vm/x86_64.ad file | annotate | diff | comparison | revisions
src/share/vm/adlc/forms.cpp file | annotate | diff | comparison | revisions
src/share/vm/adlc/formssel.cpp file | annotate | diff | comparison | revisions
src/share/vm/opto/classes.hpp file | annotate | diff | comparison | revisions
src/share/vm/opto/compile.cpp file | annotate | diff | comparison | revisions
src/share/vm/opto/memnode.hpp file | annotate | diff | comparison | revisions
src/share/vm/opto/mulnode.cpp file | annotate | diff | comparison | revisions
src/share/vm/opto/superword.cpp file | annotate | diff | comparison | revisions
     1.1 --- a/src/cpu/sparc/vm/sparc.ad	Tue Oct 09 10:11:38 2012 +0200
     1.2 +++ b/src/cpu/sparc/vm/sparc.ad	Tue Oct 09 12:40:05 2012 -0700
     1.3 @@ -5885,8 +5885,8 @@
     1.4  %}
     1.5  
     1.6  // Load Unsigned Integer into a Long Register
     1.7 -instruct loadUI2L(iRegL dst, memory mem) %{
     1.8 -  match(Set dst (LoadUI2L mem));
     1.9 +instruct loadUI2L(iRegL dst, memory mem, immL_32bits mask) %{
    1.10 +  match(Set dst (AndL (ConvI2L (LoadI mem)) mask));
    1.11    ins_cost(MEMORY_REF_COST);
    1.12  
    1.13    size(4);
     2.1 --- a/src/cpu/x86/vm/x86_32.ad	Tue Oct 09 10:11:38 2012 +0200
     2.2 +++ b/src/cpu/x86/vm/x86_32.ad	Tue Oct 09 12:40:05 2012 -0700
     2.3 @@ -1558,9 +1558,6 @@
     2.4  // Returns true if the high 32 bits of the value is known to be zero.
     2.5  bool is_operand_hi32_zero(Node* n) {
     2.6    int opc = n->Opcode();
     2.7 -  if (opc == Op_LoadUI2L) {
     2.8 -    return true;
     2.9 -  }
    2.10    if (opc == Op_AndL) {
    2.11      Node* o2 = n->in(2);
    2.12      if (o2->is_Con() && (o2->get_long() & 0xFFFFFFFF00000000LL) == 0LL) {
    2.13 @@ -6152,8 +6149,8 @@
    2.14  %}
    2.15  
    2.16  // Load Unsigned Integer into Long Register
    2.17 -instruct loadUI2L(eRegL dst, memory mem, eFlagsReg cr) %{
    2.18 -  match(Set dst (LoadUI2L mem));
    2.19 +instruct loadUI2L(eRegL dst, memory mem, immL_32bits mask, eFlagsReg cr) %{
    2.20 +  match(Set dst (AndL (ConvI2L (LoadI mem)) mask));
    2.21    effect(KILL cr);
    2.22  
    2.23    ins_cost(250);
     3.1 --- a/src/cpu/x86/vm/x86_64.ad	Tue Oct 09 10:11:38 2012 +0200
     3.2 +++ b/src/cpu/x86/vm/x86_64.ad	Tue Oct 09 12:40:05 2012 -0700
     3.3 @@ -5200,9 +5200,9 @@
     3.4  %}
     3.5  
     3.6  // Load Unsigned Integer into Long Register
     3.7 -instruct loadUI2L(rRegL dst, memory mem)
     3.8 -%{
     3.9 -  match(Set dst (LoadUI2L mem));
    3.10 +instruct loadUI2L(rRegL dst, memory mem, immL_32bits mask) 
    3.11 +%{
    3.12 +  match(Set dst (AndL (ConvI2L (LoadI mem)) mask));
    3.13  
    3.14    ins_cost(125);
    3.15    format %{ "movl    $dst, $mem\t# uint -> long" %}
     4.1 --- a/src/share/vm/adlc/forms.cpp	Tue Oct 09 10:11:38 2012 +0200
     4.2 +++ b/src/share/vm/adlc/forms.cpp	Tue Oct 09 12:40:05 2012 -0700
     4.3 @@ -256,7 +256,6 @@
     4.4    if( strcmp(opType,"LoadD_unaligned")==0 )  return Form::idealD;
     4.5    if( strcmp(opType,"LoadF")==0 )  return Form::idealF;
     4.6    if( strcmp(opType,"LoadI")==0 )  return Form::idealI;
     4.7 -  if( strcmp(opType,"LoadUI2L")==0 )  return Form::idealI;
     4.8    if( strcmp(opType,"LoadKlass")==0 )  return Form::idealP;
     4.9    if( strcmp(opType,"LoadNKlass")==0 ) return Form::idealNKlass;
    4.10    if( strcmp(opType,"LoadL")==0 )  return Form::idealL;
     5.1 --- a/src/share/vm/adlc/formssel.cpp	Tue Oct 09 10:11:38 2012 +0200
     5.2 +++ b/src/share/vm/adlc/formssel.cpp	Tue Oct 09 12:40:05 2012 -0700
     5.3 @@ -3395,7 +3395,7 @@
     5.4    static const char *needs_ideal_memory_list[] = {
     5.5      "StoreI","StoreL","StoreP","StoreN","StoreNKlass","StoreD","StoreF" ,
     5.6      "StoreB","StoreC","Store" ,"StoreFP",
     5.7 -    "LoadI", "LoadUI2L", "LoadL", "LoadP" ,"LoadN", "LoadD" ,"LoadF"  ,
     5.8 +    "LoadI", "LoadL", "LoadP" ,"LoadN", "LoadD" ,"LoadF"  ,
     5.9      "LoadB" , "LoadUB", "LoadUS" ,"LoadS" ,"Load" ,
    5.10      "StoreVector", "LoadVector",
    5.11      "LoadRange", "LoadKlass", "LoadNKlass", "LoadL_unaligned", "LoadD_unaligned",
     6.1 --- a/src/share/vm/opto/classes.hpp	Tue Oct 09 10:11:38 2012 +0200
     6.2 +++ b/src/share/vm/opto/classes.hpp	Tue Oct 09 12:40:05 2012 -0700
     6.3 @@ -150,7 +150,6 @@
     6.4  macro(LoadD_unaligned)
     6.5  macro(LoadF)
     6.6  macro(LoadI)
     6.7 -macro(LoadUI2L)
     6.8  macro(LoadKlass)
     6.9  macro(LoadNKlass)
    6.10  macro(LoadL)
     7.1 --- a/src/share/vm/opto/compile.cpp	Tue Oct 09 10:11:38 2012 +0200
     7.2 +++ b/src/share/vm/opto/compile.cpp	Tue Oct 09 12:40:05 2012 -0700
     7.3 @@ -2293,7 +2293,6 @@
     7.4    case Op_LoadUB:
     7.5    case Op_LoadUS:
     7.6    case Op_LoadI:
     7.7 -  case Op_LoadUI2L:
     7.8    case Op_LoadKlass:
     7.9    case Op_LoadNKlass:
    7.10    case Op_LoadL:
     8.1 --- a/src/share/vm/opto/memnode.hpp	Tue Oct 09 10:11:38 2012 +0200
     8.2 +++ b/src/share/vm/opto/memnode.hpp	Tue Oct 09 12:40:05 2012 -0700
     8.3 @@ -274,18 +274,6 @@
     8.4    virtual BasicType memory_type() const { return T_INT; }
     8.5  };
     8.6  
     8.7 -//------------------------------LoadUI2LNode-----------------------------------
     8.8 -// Load an unsigned integer into long from memory
     8.9 -class LoadUI2LNode : public LoadNode {
    8.10 -public:
    8.11 -  LoadUI2LNode(Node* c, Node* mem, Node* adr, const TypePtr* at, const TypeLong* t = TypeLong::UINT)
    8.12 -    : LoadNode(c, mem, adr, at, t) {}
    8.13 -  virtual int Opcode() const;
    8.14 -  virtual uint ideal_reg() const { return Op_RegL; }
    8.15 -  virtual int store_Opcode() const { return Op_StoreL; }
    8.16 -  virtual BasicType memory_type() const { return T_LONG; }
    8.17 -};
    8.18 -
    8.19  //------------------------------LoadRangeNode----------------------------------
    8.20  // Load an array length from the array
    8.21  class LoadRangeNode : public LoadINode {
     9.1 --- a/src/share/vm/opto/mulnode.cpp	Tue Oct 09 10:11:38 2012 +0200
     9.2 +++ b/src/share/vm/opto/mulnode.cpp	Tue Oct 09 12:40:05 2012 -0700
     9.3 @@ -599,20 +599,6 @@
     9.4    Node* in1 = in(1);
     9.5    uint op = in1->Opcode();
     9.6  
     9.7 -  // Masking sign bits off of an integer?  Do an unsigned integer to
     9.8 -  // long load.
     9.9 -  // NOTE: This check must be *before* we try to convert the AndLNode
    9.10 -  // to an AndINode and commute it with ConvI2LNode because
    9.11 -  // 0xFFFFFFFFL masks the whole integer and we get a sign extension,
    9.12 -  // which is wrong.
    9.13 -  if (op == Op_ConvI2L && in1->in(1)->Opcode() == Op_LoadI && mask == CONST64(0x00000000FFFFFFFF)) {
    9.14 -    Node* load = in1->in(1);
    9.15 -    return new (phase->C) LoadUI2LNode(load->in(MemNode::Control),
    9.16 -                                          load->in(MemNode::Memory),
    9.17 -                                          load->in(MemNode::Address),
    9.18 -                                          load->adr_type());
    9.19 -  }
    9.20 -
    9.21    // Are we masking a long that was converted from an int with a mask
    9.22    // that fits in 32-bits?  Commute them and use an AndINode.  Don't
    9.23    // convert masks which would cause a sign extension of the integer
    10.1 --- a/src/share/vm/opto/superword.cpp	Tue Oct 09 10:11:38 2012 +0200
    10.2 +++ b/src/share/vm/opto/superword.cpp	Tue Oct 09 12:40:05 2012 -0700
    10.3 @@ -179,7 +179,6 @@
    10.4    for (int i = 0; i < _block.length(); i++) {
    10.5      Node* n = _block.at(i);
    10.6      if (n->is_Mem() && !n->is_LoadStore() && in_bb(n) &&
    10.7 -        n->Opcode() != Op_LoadUI2L &&
    10.8          is_java_primitive(n->as_Mem()->memory_type())) {
    10.9        int align = memory_alignment(n->as_Mem(), 0);
   10.10        if (align != bottom_align) {

mercurial