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