src/share/vm/opto/memnode.cpp

changeset 728
c3e045194476
parent 688
b0fe4deeb9fb
child 740
ab075d07f1ba
     1.1 --- a/src/share/vm/opto/memnode.cpp	Thu Jul 31 15:47:42 2008 -0700
     1.2 +++ b/src/share/vm/opto/memnode.cpp	Fri Aug 01 10:06:45 2008 -0700
     1.3 @@ -1231,6 +1231,10 @@
     1.4        // our new node, even though we may throw the node away.
     1.5        // (This tweaking with igvn only works because x is a new node.)
     1.6        igvn->set_type(x, t);
     1.7 +      // If x is a TypeNode, capture any more-precise type permanently into Node
     1.8 +      // othewise it will be not updated during igvn->transform since
     1.9 +      // igvn->type(x) is set to x->Value() already.
    1.10 +      x->raise_bottom_type(t);
    1.11        Node *y = x->Identity(igvn);
    1.12        if( y != x ) {
    1.13          wins++;
    1.14 @@ -1409,7 +1413,7 @@
    1.15      // had an original form like p1:(AddP x x (LShiftL quux 3)), where the
    1.16      // expression (LShiftL quux 3) independently optimized to the constant 8.
    1.17      if ((t->isa_int() == NULL) && (t->isa_long() == NULL)
    1.18 -        && Opcode() != Op_LoadKlass) {
    1.19 +        && Opcode() != Op_LoadKlass && Opcode() != Op_LoadNKlass) {
    1.20        // t might actually be lower than _type, if _type is a unique
    1.21        // concrete subclass of abstract class t.
    1.22        // Make sure the reference is not into the header, by comparing

mercurial