Mercurial > hg > truffle
comparison src/share/vm/opto/connode.cpp @ 124:b130b98db9cf
6689060: Escape Analysis does not work with Compressed Oops
Summary: 64-bits VM crashes with -XX:+AggresiveOpts (Escape Analysis + Compressed Oops)
Reviewed-by: never, sgoldman
author | kvn |
---|---|
date | Wed, 23 Apr 2008 11:20:36 -0700 |
parents | ba764ed4b6f2 |
children | 885ed790ecf0 |
comparison
equal
deleted
inserted
replaced
123:9e5a7340635e | 124:b130b98db9cf |
---|---|
561 return in(1)->in(1); | 561 return in(1)->in(1); |
562 } | 562 } |
563 return this; | 563 return this; |
564 } | 564 } |
565 | 565 |
566 const Type *DecodeNNode::Value( PhaseTransform *phase ) const { | |
567 if (phase->type( in(1) ) == TypeNarrowOop::NULL_PTR) { | |
568 return TypePtr::NULL_PTR; | |
569 } | |
570 return bottom_type(); | |
571 } | |
572 | |
573 Node* DecodeNNode::decode(PhaseGVN* phase, Node* value) { | |
574 if (value->Opcode() == Op_EncodeP) { | |
575 // (DecodeN (EncodeP p)) -> p | |
576 return value->in(1); | |
577 } | |
578 const Type* newtype = value->bottom_type(); | |
579 if (newtype == TypeNarrowOop::NULL_PTR) { | |
580 return phase->transform(new (phase->C, 1) ConPNode(TypePtr::NULL_PTR)); | |
581 } else { | |
582 return phase->transform(new (phase->C, 2) DecodeNNode(value, newtype->is_narrowoop()->make_oopptr())); | |
583 } | |
584 } | |
585 | |
566 Node* EncodePNode::Identity(PhaseTransform* phase) { | 586 Node* EncodePNode::Identity(PhaseTransform* phase) { |
567 const Type *t = phase->type( in(1) ); | 587 const Type *t = phase->type( in(1) ); |
568 if( t == Type::TOP ) return in(1); | 588 if( t == Type::TOP ) return in(1); |
569 | 589 |
570 if (in(1)->Opcode() == Op_DecodeN) { | 590 if (in(1)->Opcode() == Op_DecodeN) { |
572 return in(1)->in(1); | 592 return in(1)->in(1); |
573 } | 593 } |
574 return this; | 594 return this; |
575 } | 595 } |
576 | 596 |
597 const Type *EncodePNode::Value( PhaseTransform *phase ) const { | |
598 if (phase->type( in(1) ) == TypePtr::NULL_PTR) { | |
599 return TypeNarrowOop::NULL_PTR; | |
600 } | |
601 return bottom_type(); | |
602 } | |
577 | 603 |
578 Node* EncodePNode::encode(PhaseGVN* phase, Node* value) { | 604 Node* EncodePNode::encode(PhaseGVN* phase, Node* value) { |
605 if (value->Opcode() == Op_DecodeN) { | |
606 // (EncodeP (DecodeN p)) -> p | |
607 return value->in(1); | |
608 } | |
579 const Type* newtype = value->bottom_type(); | 609 const Type* newtype = value->bottom_type(); |
580 if (newtype == TypePtr::NULL_PTR) { | 610 if (newtype == TypePtr::NULL_PTR) { |
581 return phase->transform(new (phase->C, 1) ConNNode(TypeNarrowOop::NULL_PTR)); | 611 return phase->transform(new (phase->C, 1) ConNNode(TypeNarrowOop::NULL_PTR)); |
612 } else if (newtype->isa_oopptr()) { | |
613 return phase->transform(new (phase->C, 2) EncodePNode(value, newtype->is_oopptr()->make_narrowoop())); | |
582 } else { | 614 } else { |
583 return phase->transform(new (phase->C, 2) EncodePNode(value, | 615 ShouldNotReachHere(); |
584 newtype->is_oopptr()->make_narrowoop())); | 616 return NULL; // to make C++ compiler happy. |
585 } | 617 } |
586 } | 618 } |
587 | 619 |
588 | 620 |
589 //============================================================================= | 621 //============================================================================= |