Mercurial > hg > graal-compiler
comparison src/share/vm/opto/compile.cpp @ 164:c436414a719e
6703890: Compressed Oops: add LoadNKlass node to generate narrow oops (32-bits) compare instructions
Summary: Add LoadNKlass and CMoveN nodes, use CmpN and ConN nodes to generate narrow oops compare instructions.
Reviewed-by: never, rasbold
author | kvn |
---|---|
date | Wed, 21 May 2008 13:46:23 -0700 |
parents | 885ed790ecf0 |
children | 7793bd37a336 |
comparison
equal
deleted
inserted
replaced
163:885ed790ecf0 | 164:c436414a719e |
---|---|
1966 case Op_StoreN: | 1966 case Op_StoreN: |
1967 case Op_LoadB: | 1967 case Op_LoadB: |
1968 case Op_LoadC: | 1968 case Op_LoadC: |
1969 case Op_LoadI: | 1969 case Op_LoadI: |
1970 case Op_LoadKlass: | 1970 case Op_LoadKlass: |
1971 case Op_LoadNKlass: | |
1971 case Op_LoadL: | 1972 case Op_LoadL: |
1972 case Op_LoadL_unaligned: | 1973 case Op_LoadL_unaligned: |
1973 case Op_LoadPLocked: | 1974 case Op_LoadPLocked: |
1974 case Op_LoadLLocked: | 1975 case Op_LoadLLocked: |
1975 case Op_LoadP: | 1976 case Op_LoadP: |
1995 addp->in(AddPNode::Base)->is_top() || // Top OK for allocation | 1996 addp->in(AddPNode::Base)->is_top() || // Top OK for allocation |
1996 addp->in(AddPNode::Base) == n->in(AddPNode::Base), | 1997 addp->in(AddPNode::Base) == n->in(AddPNode::Base), |
1997 "Base pointers must match" ); | 1998 "Base pointers must match" ); |
1998 break; | 1999 break; |
1999 } | 2000 } |
2001 | |
2002 #ifdef _LP64 | |
2003 case Op_CmpP: | |
2004 if( n->in(1)->Opcode() == Op_DecodeN ) { | |
2005 Compile* C = Compile::current(); | |
2006 Node* in2 = NULL; | |
2007 if( n->in(2)->Opcode() == Op_DecodeN ) { | |
2008 in2 = n->in(2)->in(1); | |
2009 } else if ( n->in(2)->Opcode() == Op_ConP ) { | |
2010 const Type* t = n->in(2)->bottom_type(); | |
2011 if (t == TypePtr::NULL_PTR) { | |
2012 Node *in1 = n->in(1); | |
2013 uint i = 0; | |
2014 for (; i < in1->outcnt(); i++) { | |
2015 if (in1->raw_out(i)->is_AddP()) | |
2016 break; | |
2017 } | |
2018 if (i >= in1->outcnt()) { | |
2019 // Don't replace CmpP(o ,null) if 'o' is used in AddP | |
2020 // to generate implicit NULL check. | |
2021 in2 = ConNode::make(C, TypeNarrowOop::NULL_PTR); | |
2022 } | |
2023 } else if (t->isa_oopptr()) { | |
2024 in2 = ConNode::make(C, t->is_oopptr()->make_narrowoop()); | |
2025 } | |
2026 } | |
2027 if( in2 != NULL ) { | |
2028 Node* cmpN = new (C, 3) CmpNNode(n->in(1)->in(1), in2); | |
2029 n->replace_by( cmpN ); | |
2030 } | |
2031 } | |
2032 #endif | |
2000 | 2033 |
2001 case Op_ModI: | 2034 case Op_ModI: |
2002 if (UseDivMod) { | 2035 if (UseDivMod) { |
2003 // Check if a%b and a/b both exist | 2036 // Check if a%b and a/b both exist |
2004 Node* d = n->find_similar(Op_DivI); | 2037 Node* d = n->find_similar(Op_DivI); |