Mercurial > hg > truffle
comparison src/share/vm/opto/connode.cpp @ 113:ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
Summary: Compressed oops in instances, arrays, and headers. Code contributors are coleenp, phh, never, swamyv
Reviewed-by: jmasa, kamg, acorn, tbell, kvn, rasbold
author | coleenp |
---|---|
date | Sun, 13 Apr 2008 17:43:42 -0400 |
parents | f34d9da7acb2 |
children | b130b98db9cf |
comparison
equal
deleted
inserted
replaced
110:a49a647afe9a | 113:ba764ed4b6f2 |
---|---|
33 return (uintptr_t)in(TypeFunc::Control) + _type->hash(); | 33 return (uintptr_t)in(TypeFunc::Control) + _type->hash(); |
34 } | 34 } |
35 | 35 |
36 //------------------------------make------------------------------------------- | 36 //------------------------------make------------------------------------------- |
37 ConNode *ConNode::make( Compile* C, const Type *t ) { | 37 ConNode *ConNode::make( Compile* C, const Type *t ) { |
38 if (t->isa_narrowoop()) return new (C, 1) ConNNode( t->is_narrowoop() ); | |
38 switch( t->basic_type() ) { | 39 switch( t->basic_type() ) { |
39 case T_INT: return new (C, 1) ConINode( t->is_int() ); | 40 case T_INT: return new (C, 1) ConINode( t->is_int() ); |
40 case T_ARRAY: return new (C, 1) ConPNode( t->is_aryptr() ); | 41 case T_ARRAY: return new (C, 1) ConPNode( t->is_aryptr() ); |
41 case T_LONG: return new (C, 1) ConLNode( t->is_long() ); | 42 case T_LONG: return new (C, 1) ConLNode( t->is_long() ); |
42 case T_FLOAT: return new (C, 1) ConFNode( t->is_float_constant() ); | 43 case T_FLOAT: return new (C, 1) ConFNode( t->is_float_constant() ); |
459 } else { | 460 } else { |
460 int opc = n->Opcode(); | 461 int opc = n->Opcode(); |
461 possible_alias = n->is_Phi() || | 462 possible_alias = n->is_Phi() || |
462 opc == Op_CheckCastPP || | 463 opc == Op_CheckCastPP || |
463 opc == Op_StorePConditional || | 464 opc == Op_StorePConditional || |
464 opc == Op_CompareAndSwapP; | 465 opc == Op_CompareAndSwapP || |
466 opc == Op_CompareAndSwapN; | |
465 } | 467 } |
466 return possible_alias; | 468 return possible_alias; |
467 } | 469 } |
468 | 470 |
469 //------------------------------Value------------------------------------------ | 471 //------------------------------Value------------------------------------------ |
547 // control copies | 549 // control copies |
548 Node *CheckCastPPNode::Ideal(PhaseGVN *phase, bool can_reshape){ | 550 Node *CheckCastPPNode::Ideal(PhaseGVN *phase, bool can_reshape){ |
549 return (in(0) && remove_dead_region(phase, can_reshape)) ? this : NULL; | 551 return (in(0) && remove_dead_region(phase, can_reshape)) ? this : NULL; |
550 } | 552 } |
551 | 553 |
554 | |
555 Node* DecodeNNode::Identity(PhaseTransform* phase) { | |
556 const Type *t = phase->type( in(1) ); | |
557 if( t == Type::TOP ) return in(1); | |
558 | |
559 if (in(1)->Opcode() == Op_EncodeP) { | |
560 // (DecodeN (EncodeP p)) -> p | |
561 return in(1)->in(1); | |
562 } | |
563 return this; | |
564 } | |
565 | |
566 Node* EncodePNode::Identity(PhaseTransform* phase) { | |
567 const Type *t = phase->type( in(1) ); | |
568 if( t == Type::TOP ) return in(1); | |
569 | |
570 if (in(1)->Opcode() == Op_DecodeN) { | |
571 // (EncodeP (DecodeN p)) -> p | |
572 return in(1)->in(1); | |
573 } | |
574 return this; | |
575 } | |
576 | |
577 | |
578 Node* EncodePNode::encode(PhaseGVN* phase, Node* value) { | |
579 const Type* newtype = value->bottom_type(); | |
580 if (newtype == TypePtr::NULL_PTR) { | |
581 return phase->transform(new (phase->C, 1) ConNNode(TypeNarrowOop::NULL_PTR)); | |
582 } else { | |
583 return phase->transform(new (phase->C, 2) EncodePNode(value, | |
584 newtype->is_oopptr()->make_narrowoop())); | |
585 } | |
586 } | |
587 | |
588 | |
552 //============================================================================= | 589 //============================================================================= |
553 //------------------------------Identity--------------------------------------- | 590 //------------------------------Identity--------------------------------------- |
554 Node *Conv2BNode::Identity( PhaseTransform *phase ) { | 591 Node *Conv2BNode::Identity( PhaseTransform *phase ) { |
555 const Type *t = phase->type( in(1) ); | 592 const Type *t = phase->type( in(1) ); |
556 if( t == Type::TOP ) return in(1); | 593 if( t == Type::TOP ) return in(1); |