comparison src/share/vm/opto/memnode.cpp @ 293:c3e045194476

6731641: assert(m->adr_type() == mach->adr_type(),"matcher should not change adr type") Summary: fixed few addP node type and narrow oop type problems. Reviewed-by: rasbold, never
author kvn
date Fri, 01 Aug 2008 10:06:45 -0700
parents b0fe4deeb9fb
children ab075d07f1ba
comparison
equal deleted inserted replaced
257:40b69ca33f4b 293:c3e045194476
1229 // Note that some Identity methods call phase->type(this). 1229 // Note that some Identity methods call phase->type(this).
1230 // Make sure that the type array is big enough for 1230 // Make sure that the type array is big enough for
1231 // our new node, even though we may throw the node away. 1231 // our new node, even though we may throw the node away.
1232 // (This tweaking with igvn only works because x is a new node.) 1232 // (This tweaking with igvn only works because x is a new node.)
1233 igvn->set_type(x, t); 1233 igvn->set_type(x, t);
1234 // If x is a TypeNode, capture any more-precise type permanently into Node
1235 // othewise it will be not updated during igvn->transform since
1236 // igvn->type(x) is set to x->Value() already.
1237 x->raise_bottom_type(t);
1234 Node *y = x->Identity(igvn); 1238 Node *y = x->Identity(igvn);
1235 if( y != x ) { 1239 if( y != x ) {
1236 wins++; 1240 wins++;
1237 x = y; 1241 x = y;
1238 } else { 1242 } else {
1407 // it is possible that p1 will have a type like Foo*[int+]:NotNull*+any. 1411 // it is possible that p1 will have a type like Foo*[int+]:NotNull*+any.
1408 // In fact, that could have been the original type of p1, and p1 could have 1412 // In fact, that could have been the original type of p1, and p1 could have
1409 // had an original form like p1:(AddP x x (LShiftL quux 3)), where the 1413 // had an original form like p1:(AddP x x (LShiftL quux 3)), where the
1410 // expression (LShiftL quux 3) independently optimized to the constant 8. 1414 // expression (LShiftL quux 3) independently optimized to the constant 8.
1411 if ((t->isa_int() == NULL) && (t->isa_long() == NULL) 1415 if ((t->isa_int() == NULL) && (t->isa_long() == NULL)
1412 && Opcode() != Op_LoadKlass) { 1416 && Opcode() != Op_LoadKlass && Opcode() != Op_LoadNKlass) {
1413 // t might actually be lower than _type, if _type is a unique 1417 // t might actually be lower than _type, if _type is a unique
1414 // concrete subclass of abstract class t. 1418 // concrete subclass of abstract class t.
1415 // Make sure the reference is not into the header, by comparing 1419 // Make sure the reference is not into the header, by comparing
1416 // the offset against the offset of the start of the array's data. 1420 // the offset against the offset of the start of the array's data.
1417 // Different array types begin at slightly different offsets (12 vs. 16). 1421 // Different array types begin at slightly different offsets (12 vs. 16).