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);