1 /*
   2  * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
   3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4  *
   5  * This code is free software; you can redistribute it and/or modify it
   6  * under the terms of the GNU General Public License version 2 only, as
   7  * published by the Free Software Foundation.
   8  *
   9  * This code is distributed in the hope that it will be useful, but WITHOUT
  10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  12  * version 2 for more details (a copy is included in the LICENSE file that
  13  * accompanied this code).
  14  *
  15  * You should have received a copy of the GNU General Public License version
  16  * 2 along with this work; if not, write to the Free Software Foundation,
  17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  18  *
  19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  20  * or visit www.oracle.com if you need additional information or have any
  21  * questions.
  22  *
  23  */
  24 
  25 #include "precompiled.hpp"
  26 #include "memory/allocation.inline.hpp"
  27 #include "opto/addnode.hpp"
  28 #include "opto/compile.hpp"
  29 #include "opto/connode.hpp"
  30 #include "opto/machnode.hpp"
  31 #include "opto/matcher.hpp"
  32 #include "opto/memnode.hpp"
  33 #include "opto/phaseX.hpp"
  34 #include "opto/subnode.hpp"
  35 #include "runtime/sharedRuntime.hpp"
  36 
  37 // Optimization - Graph Style
  38 
  39 //=============================================================================
  40 //------------------------------hash-------------------------------------------
  41 uint ConNode::hash() const {
  42   return (uintptr_t)in(TypeFunc::Control) + _type->hash();
  43 }
  44 
  45 //------------------------------make-------------------------------------------
  46 ConNode *ConNode::make( Compile* C, const Type *t ) {
  47   switch( t->basic_type() ) {
  48   case T_INT:         return new (C) ConINode( t->is_int() );
  49   case T_LONG:        return new (C) ConLNode( t->is_long() );
  50   case T_FLOAT:       return new (C) ConFNode( t->is_float_constant() );
  51   case T_DOUBLE:      return new (C) ConDNode( t->is_double_constant() );
  52   case T_VOID:        return new (C) ConNode ( Type::TOP );
  53   case T_OBJECT:      return new (C) ConPNode( t->is_ptr() );
  54   case T_ARRAY:       return new (C) ConPNode( t->is_aryptr() );
  55   case T_ADDRESS:     return new (C) ConPNode( t->is_ptr() );
  56   case T_NARROWOOP:   return new (C) ConNNode( t->is_narrowoop() );
  57   case T_NARROWKLASS: return new (C) ConNKlassNode( t->is_narrowklass() );
  58   case T_METADATA:    return new (C) ConPNode( t->is_ptr() );
  59     // Expected cases:  TypePtr::NULL_PTR, any is_rawptr()
  60     // Also seen: AnyPtr(TopPTR *+top); from command line:
  61     //   r -XX:+PrintOpto -XX:CIStart=285 -XX:+CompileTheWorld -XX:CompileTheWorldStartAt=660
  62     // %%%% Stop using TypePtr::NULL_PTR to represent nulls:  use either TypeRawPtr::NULL_PTR
  63     // or else TypeOopPtr::NULL_PTR.  Then set Type::_basic_type[AnyPtr] = T_ILLEGAL
  64   }
  65   ShouldNotReachHere();
  66   return NULL;
  67 }
  68 
  69 //=============================================================================
  70 /*
  71 The major change is for CMoveP and StrComp.  They have related but slightly
  72 different problems.  They both take in TWO oops which are both null-checked
  73 independently before the using Node.  After CCP removes the CastPP's they need
  74 to pick up the guarding test edge - in this case TWO control edges.  I tried
  75 various solutions, all have problems:
  76 
  77 (1) Do nothing.  This leads to a bug where we hoist a Load from a CMoveP or a
  78 StrComp above a guarding null check.  I've seen both cases in normal -Xcomp
  79 testing.
  80 
  81 (2) Plug the control edge from 1 of the 2 oops in.  Apparent problem here is
  82 to figure out which test post-dominates.  The real problem is that it doesn't
  83 matter which one you pick.  After you pick up, the dominating-test elider in
  84 IGVN can remove the test and allow you to hoist up to the dominating test on
  85 the chosen oop bypassing the test on the not-chosen oop.  Seen in testing.
  86 Oops.
  87 
  88 (3) Leave the CastPP's in.  This makes the graph more accurate in some sense;
  89 we get to keep around the knowledge that an oop is not-null after some test.
  90 Alas, the CastPP's interfere with GVN (some values are the regular oop, some
  91 are the CastPP of the oop, all merge at Phi's which cannot collapse, etc).
  92 This cost us 10% on SpecJVM, even when I removed some of the more trivial
  93 cases in the optimizer.  Removing more useless Phi's started allowing Loads to
  94 illegally float above null checks.  I gave up on this approach.
  95 
  96 (4) Add BOTH control edges to both tests.  Alas, too much code knows that
  97 control edges are in slot-zero ONLY.  Many quick asserts fail; no way to do
  98 this one.  Note that I really want to allow the CMoveP to float and add both
  99 control edges to the dependent Load op - meaning I can select early but I
 100 cannot Load until I pass both tests.
 101 
 102 (5) Do not hoist CMoveP and StrComp.  To this end I added the v-call
 103 depends_only_on_test().  No obvious performance loss on Spec, but we are
 104 clearly conservative on CMoveP (also so on StrComp but that's unlikely to
 105 matter ever).
 106 
 107 */
 108 
 109 
 110 //------------------------------Ideal------------------------------------------
 111 // Return a node which is more "ideal" than the current node.
 112 // Move constants to the right.
 113 Node *CMoveNode::Ideal(PhaseGVN *phase, bool can_reshape) {
 114   if( in(0) && remove_dead_region(phase, can_reshape) ) return this;
 115   // Don't bother trying to transform a dead node
 116   if( in(0) && in(0)->is_top() )  return NULL;
 117   assert( !phase->eqv(in(Condition), this) &&
 118           !phase->eqv(in(IfFalse), this) &&
 119           !phase->eqv(in(IfTrue), this), "dead loop in CMoveNode::Ideal" );
 120   if( phase->type(in(Condition)) == Type::TOP )
 121     return NULL; // return NULL when Condition is dead
 122 
 123   if( in(IfFalse)->is_Con() && !in(IfTrue)->is_Con() ) {
 124     if( in(Condition)->is_Bool() ) {
 125       BoolNode* b  = in(Condition)->as_Bool();
 126       BoolNode* b2 = b->negate(phase);
 127       return make( phase->C, in(Control), phase->transform(b2), in(IfTrue), in(IfFalse), _type );
 128     }
 129   }
 130   return NULL;
 131 }
 132 
 133 //------------------------------is_cmove_id------------------------------------
 134 // Helper function to check for CMOVE identity.  Shared with PhiNode::Identity
 135 Node *CMoveNode::is_cmove_id( PhaseTransform *phase, Node *cmp, Node *t, Node *f, BoolNode *b ) {
 136   // Check for Cmp'ing and CMove'ing same values
 137   if( (phase->eqv(cmp->in(1),f) &&
 138        phase->eqv(cmp->in(2),t)) ||
 139       // Swapped Cmp is OK
 140       (phase->eqv(cmp->in(2),f) &&
 141        phase->eqv(cmp->in(1),t)) ) {
 142     // Give up this identity check for floating points because it may choose incorrect
 143     // value around 0.0 and -0.0
 144     if ( cmp->Opcode()==Op_CmpF || cmp->Opcode()==Op_CmpD )
 145       return NULL;
 146     // Check for "(t==f)?t:f;" and replace with "f"
 147     if( b->_test._test == BoolTest::eq )
 148       return f;
 149     // Allow the inverted case as well
 150     // Check for "(t!=f)?t:f;" and replace with "t"
 151     if( b->_test._test == BoolTest::ne )
 152       return t;
 153   }
 154   return NULL;
 155 }
 156 
 157 //------------------------------Identity---------------------------------------
 158 // Conditional-move is an identity if both inputs are the same, or the test
 159 // true or false.
 160 Node *CMoveNode::Identity( PhaseTransform *phase ) {
 161   if( phase->eqv(in(IfFalse),in(IfTrue)) ) // C-moving identical inputs?
 162     return in(IfFalse);         // Then it doesn't matter
 163   if( phase->type(in(Condition)) == TypeInt::ZERO )
 164     return in(IfFalse);         // Always pick left(false) input
 165   if( phase->type(in(Condition)) == TypeInt::ONE )
 166     return in(IfTrue);          // Always pick right(true) input
 167 
 168   // Check for CMove'ing a constant after comparing against the constant.
 169   // Happens all the time now, since if we compare equality vs a constant in
 170   // the parser, we "know" the variable is constant on one path and we force
 171   // it.  Thus code like "if( x==0 ) {/*EMPTY*/}" ends up inserting a
 172   // conditional move: "x = (x==0)?0:x;".  Yucko.  This fix is slightly more
 173   // general in that we don't need constants.
 174   if( in(Condition)->is_Bool() ) {
 175     BoolNode *b = in(Condition)->as_Bool();
 176     Node *cmp = b->in(1);
 177     if( cmp->is_Cmp() ) {
 178       Node *id = is_cmove_id( phase, cmp, in(IfTrue), in(IfFalse), b );
 179       if( id ) return id;
 180     }
 181   }
 182 
 183   return this;
 184 }
 185 
 186 //------------------------------Value------------------------------------------
 187 // Result is the meet of inputs
 188 const Type *CMoveNode::Value( PhaseTransform *phase ) const {
 189   if( phase->type(in(Condition)) == Type::TOP )
 190     return Type::TOP;
 191   return phase->type(in(IfFalse))->meet_speculative(phase->type(in(IfTrue)));
 192 }
 193 
 194 //------------------------------make-------------------------------------------
 195 // Make a correctly-flavored CMove.  Since _type is directly determined
 196 // from the inputs we do not need to specify it here.
 197 CMoveNode *CMoveNode::make( Compile *C, Node *c, Node *bol, Node *left, Node *right, const Type *t ) {
 198   switch( t->basic_type() ) {
 199   case T_INT:     return new (C) CMoveINode( bol, left, right, t->is_int() );
 200   case T_FLOAT:   return new (C) CMoveFNode( bol, left, right, t );
 201   case T_DOUBLE:  return new (C) CMoveDNode( bol, left, right, t );
 202   case T_LONG:    return new (C) CMoveLNode( bol, left, right, t->is_long() );
 203   case T_OBJECT:  return new (C) CMovePNode( c, bol, left, right, t->is_oopptr() );
 204   case T_ADDRESS: return new (C) CMovePNode( c, bol, left, right, t->is_ptr() );
 205   case T_NARROWOOP: return new (C) CMoveNNode( c, bol, left, right, t );
 206   default:
 207     ShouldNotReachHere();
 208     return NULL;
 209   }
 210 }
 211 
 212 //=============================================================================
 213 //------------------------------Ideal------------------------------------------
 214 // Return a node which is more "ideal" than the current node.
 215 // Check for conversions to boolean
 216 Node *CMoveINode::Ideal(PhaseGVN *phase, bool can_reshape) {
 217   // Try generic ideal's first
 218   Node *x = CMoveNode::Ideal(phase, can_reshape);
 219   if( x ) return x;
 220 
 221   // If zero is on the left (false-case, no-move-case) it must mean another
 222   // constant is on the right (otherwise the shared CMove::Ideal code would
 223   // have moved the constant to the right).  This situation is bad for Intel
 224   // and a don't-care for Sparc.  It's bad for Intel because the zero has to
 225   // be manifested in a register with a XOR which kills flags, which are live
 226   // on input to the CMoveI, leading to a situation which causes excessive
 227   // spilling on Intel.  For Sparc, if the zero in on the left the Sparc will
 228   // zero a register via G0 and conditionally-move the other constant.  If the
 229   // zero is on the right, the Sparc will load the first constant with a
 230   // 13-bit set-lo and conditionally move G0.  See bug 4677505.
 231   if( phase->type(in(IfFalse)) == TypeInt::ZERO && !(phase->type(in(IfTrue)) == TypeInt::ZERO) ) {
 232     if( in(Condition)->is_Bool() ) {
 233       BoolNode* b  = in(Condition)->as_Bool();
 234       BoolNode* b2 = b->negate(phase);
 235       return make( phase->C, in(Control), phase->transform(b2), in(IfTrue), in(IfFalse), _type );
 236     }
 237   }
 238 
 239   // Now check for booleans
 240   int flip = 0;
 241 
 242   // Check for picking from zero/one
 243   if( phase->type(in(IfFalse)) == TypeInt::ZERO && phase->type(in(IfTrue)) == TypeInt::ONE ) {
 244     flip = 1 - flip;
 245   } else if( phase->type(in(IfFalse)) == TypeInt::ONE && phase->type(in(IfTrue)) == TypeInt::ZERO ) {
 246   } else return NULL;
 247 
 248   // Check for eq/ne test
 249   if( !in(1)->is_Bool() ) return NULL;
 250   BoolNode *bol = in(1)->as_Bool();
 251   if( bol->_test._test == BoolTest::eq ) {
 252   } else if( bol->_test._test == BoolTest::ne ) {
 253     flip = 1-flip;
 254   } else return NULL;
 255 
 256   // Check for vs 0 or 1
 257   if( !bol->in(1)->is_Cmp() ) return NULL;
 258   const CmpNode *cmp = bol->in(1)->as_Cmp();
 259   if( phase->type(cmp->in(2)) == TypeInt::ZERO ) {
 260   } else if( phase->type(cmp->in(2)) == TypeInt::ONE ) {
 261     // Allow cmp-vs-1 if the other input is bounded by 0-1
 262     if( phase->type(cmp->in(1)) != TypeInt::BOOL )
 263       return NULL;
 264     flip = 1 - flip;
 265   } else return NULL;
 266 
 267   // Convert to a bool (flipped)
 268   // Build int->bool conversion
 269 #ifndef PRODUCT
 270   if( PrintOpto ) tty->print_cr("CMOV to I2B");
 271 #endif
 272   Node *n = new (phase->C) Conv2BNode( cmp->in(1) );
 273   if( flip )
 274     n = new (phase->C) XorINode( phase->transform(n), phase->intcon(1) );
 275 
 276   return n;
 277 }
 278 
 279 //=============================================================================
 280 //------------------------------Ideal------------------------------------------
 281 // Return a node which is more "ideal" than the current node.
 282 // Check for absolute value
 283 Node *CMoveFNode::Ideal(PhaseGVN *phase, bool can_reshape) {
 284   // Try generic ideal's first
 285   Node *x = CMoveNode::Ideal(phase, can_reshape);
 286   if( x ) return x;
 287 
 288   int  cmp_zero_idx = 0;        // Index of compare input where to look for zero
 289   int  phi_x_idx = 0;           // Index of phi input where to find naked x
 290 
 291   // Find the Bool
 292   if( !in(1)->is_Bool() ) return NULL;
 293   BoolNode *bol = in(1)->as_Bool();
 294   // Check bool sense
 295   switch( bol->_test._test ) {
 296   case BoolTest::lt: cmp_zero_idx = 1; phi_x_idx = IfTrue;  break;
 297   case BoolTest::le: cmp_zero_idx = 2; phi_x_idx = IfFalse; break;
 298   case BoolTest::gt: cmp_zero_idx = 2; phi_x_idx = IfTrue;  break;
 299   case BoolTest::ge: cmp_zero_idx = 1; phi_x_idx = IfFalse; break;
 300   default:           return NULL;                           break;
 301   }
 302 
 303   // Find zero input of CmpF; the other input is being abs'd
 304   Node *cmpf = bol->in(1);
 305   if( cmpf->Opcode() != Op_CmpF ) return NULL;
 306   Node *X = NULL;
 307   bool flip = false;
 308   if( phase->type(cmpf->in(cmp_zero_idx)) == TypeF::ZERO ) {
 309     X = cmpf->in(3 - cmp_zero_idx);
 310   } else if (phase->type(cmpf->in(3 - cmp_zero_idx)) == TypeF::ZERO) {
 311     // The test is inverted, we should invert the result...
 312     X = cmpf->in(cmp_zero_idx);
 313     flip = true;
 314   } else {
 315     return NULL;
 316   }
 317 
 318   // If X is found on the appropriate phi input, find the subtract on the other
 319   if( X != in(phi_x_idx) ) return NULL;
 320   int phi_sub_idx = phi_x_idx == IfTrue ? IfFalse : IfTrue;
 321   Node *sub = in(phi_sub_idx);
 322 
 323   // Allow only SubF(0,X) and fail out for all others; NegF is not OK
 324   if( sub->Opcode() != Op_SubF ||
 325       sub->in(2) != X ||
 326       phase->type(sub->in(1)) != TypeF::ZERO ) return NULL;
 327 
 328   Node *abs = new (phase->C) AbsFNode( X );
 329   if( flip )
 330     abs = new (phase->C) SubFNode(sub->in(1), phase->transform(abs));
 331 
 332   return abs;
 333 }
 334 
 335 //=============================================================================
 336 //------------------------------Ideal------------------------------------------
 337 // Return a node which is more "ideal" than the current node.
 338 // Check for absolute value
 339 Node *CMoveDNode::Ideal(PhaseGVN *phase, bool can_reshape) {
 340   // Try generic ideal's first
 341   Node *x = CMoveNode::Ideal(phase, can_reshape);
 342   if( x ) return x;
 343 
 344   int  cmp_zero_idx = 0;        // Index of compare input where to look for zero
 345   int  phi_x_idx = 0;           // Index of phi input where to find naked x
 346 
 347   // Find the Bool
 348   if( !in(1)->is_Bool() ) return NULL;
 349   BoolNode *bol = in(1)->as_Bool();
 350   // Check bool sense
 351   switch( bol->_test._test ) {
 352   case BoolTest::lt: cmp_zero_idx = 1; phi_x_idx = IfTrue;  break;
 353   case BoolTest::le: cmp_zero_idx = 2; phi_x_idx = IfFalse; break;
 354   case BoolTest::gt: cmp_zero_idx = 2; phi_x_idx = IfTrue;  break;
 355   case BoolTest::ge: cmp_zero_idx = 1; phi_x_idx = IfFalse; break;
 356   default:           return NULL;                           break;
 357   }
 358 
 359   // Find zero input of CmpD; the other input is being abs'd
 360   Node *cmpd = bol->in(1);
 361   if( cmpd->Opcode() != Op_CmpD ) return NULL;
 362   Node *X = NULL;
 363   bool flip = false;
 364   if( phase->type(cmpd->in(cmp_zero_idx)) == TypeD::ZERO ) {
 365     X = cmpd->in(3 - cmp_zero_idx);
 366   } else if (phase->type(cmpd->in(3 - cmp_zero_idx)) == TypeD::ZERO) {
 367     // The test is inverted, we should invert the result...
 368     X = cmpd->in(cmp_zero_idx);
 369     flip = true;
 370   } else {
 371     return NULL;
 372   }
 373 
 374   // If X is found on the appropriate phi input, find the subtract on the other
 375   if( X != in(phi_x_idx) ) return NULL;
 376   int phi_sub_idx = phi_x_idx == IfTrue ? IfFalse : IfTrue;
 377   Node *sub = in(phi_sub_idx);
 378 
 379   // Allow only SubD(0,X) and fail out for all others; NegD is not OK
 380   if( sub->Opcode() != Op_SubD ||
 381       sub->in(2) != X ||
 382       phase->type(sub->in(1)) != TypeD::ZERO ) return NULL;
 383 
 384   Node *abs = new (phase->C) AbsDNode( X );
 385   if( flip )
 386     abs = new (phase->C) SubDNode(sub->in(1), phase->transform(abs));
 387 
 388   return abs;
 389 }
 390 
 391 
 392 //=============================================================================
 393 // If input is already higher or equal to cast type, then this is an identity.
 394 Node *ConstraintCastNode::Identity( PhaseTransform *phase ) {
 395   return phase->type(in(1))->higher_equal_speculative(_type) ? in(1) : this;
 396 }
 397 
 398 //------------------------------Value------------------------------------------
 399 // Take 'join' of input and cast-up type
 400 const Type *ConstraintCastNode::Value( PhaseTransform *phase ) const {
 401   if( in(0) && phase->type(in(0)) == Type::TOP ) return Type::TOP;
 402   const Type* ft = phase->type(in(1))->filter_speculative(_type);
 403 
 404 #ifdef ASSERT
 405   // Previous versions of this function had some special case logic,
 406   // which is no longer necessary.  Make sure of the required effects.
 407   switch (Opcode()) {
 408   case Op_CastII:
 409     {
 410       const Type* t1 = phase->type(in(1));
 411       if( t1 == Type::TOP )  assert(ft == Type::TOP, "special case #1");
 412       const Type* rt = t1->join_speculative(_type);
 413       if (rt->empty())       assert(ft == Type::TOP, "special case #2");
 414       break;
 415     }
 416   case Op_CastPP:
 417     if (phase->type(in(1)) == TypePtr::NULL_PTR &&
 418         _type->isa_ptr() && _type->is_ptr()->_ptr == TypePtr::NotNull)
 419       assert(ft == Type::TOP, "special case #3");
 420     break;
 421   }
 422 #endif //ASSERT
 423 
 424   return ft;
 425 }
 426 
 427 //------------------------------Ideal------------------------------------------
 428 // Return a node which is more "ideal" than the current node.  Strip out
 429 // control copies
 430 Node *ConstraintCastNode::Ideal(PhaseGVN *phase, bool can_reshape){
 431   return (in(0) && remove_dead_region(phase, can_reshape)) ? this : NULL;
 432 }
 433 
 434 //------------------------------Ideal_DU_postCCP-------------------------------
 435 // Throw away cast after constant propagation
 436 Node *ConstraintCastNode::Ideal_DU_postCCP( PhaseCCP *ccp ) {
 437   const Type *t = ccp->type(in(1));
 438   ccp->hash_delete(this);
 439   set_type(t);                   // Turn into ID function
 440   ccp->hash_insert(this);
 441   return this;
 442 }
 443 
 444 
 445 //=============================================================================
 446 
 447 //------------------------------Ideal_DU_postCCP-------------------------------
 448 // If not converting int->oop, throw away cast after constant propagation
 449 Node *CastPPNode::Ideal_DU_postCCP( PhaseCCP *ccp ) {
 450   const Type *t = ccp->type(in(1));
 451   if (!t->isa_oop_ptr() || ((in(1)->is_DecodeN()) && Matcher::gen_narrow_oop_implicit_null_checks())) {
 452     return NULL; // do not transform raw pointers or narrow oops
 453   }
 454   return ConstraintCastNode::Ideal_DU_postCCP(ccp);
 455 }
 456 
 457 
 458 
 459 //=============================================================================
 460 //------------------------------Identity---------------------------------------
 461 // If input is already higher or equal to cast type, then this is an identity.
 462 Node *CheckCastPPNode::Identity( PhaseTransform *phase ) {
 463   // Toned down to rescue meeting at a Phi 3 different oops all implementing
 464   // the same interface.  CompileTheWorld starting at 502, kd12rc1.zip.
 465   return (phase->type(in(1)) == phase->type(this)) ? in(1) : this;
 466 }
 467 
 468 //------------------------------Value------------------------------------------
 469 // Take 'join' of input and cast-up type, unless working with an Interface
 470 const Type *CheckCastPPNode::Value( PhaseTransform *phase ) const {
 471   if( in(0) && phase->type(in(0)) == Type::TOP ) return Type::TOP;
 472 
 473   const Type *inn = phase->type(in(1));
 474   if( inn == Type::TOP ) return Type::TOP;  // No information yet
 475 
 476   const TypePtr *in_type   = inn->isa_ptr();
 477   const TypePtr *my_type   = _type->isa_ptr();
 478   const Type *result = _type;
 479   if( in_type != NULL && my_type != NULL ) {
 480     TypePtr::PTR   in_ptr    = in_type->ptr();
 481     if( in_ptr == TypePtr::Null ) {
 482       result = in_type;
 483     } else if( in_ptr == TypePtr::Constant ) {
 484       // Casting a constant oop to an interface?
 485       // (i.e., a String to a Comparable?)
 486       // Then return the interface.
 487       const TypeOopPtr *jptr = my_type->isa_oopptr();
 488       assert( jptr, "" );
 489       result =  (jptr->klass()->is_interface() || !in_type->higher_equal(_type))
 490         ? my_type->cast_to_ptr_type( TypePtr::NotNull )
 491         : in_type;
 492     } else {
 493       result =  my_type->cast_to_ptr_type( my_type->join_ptr(in_ptr) );
 494     }
 495   }
 496 
 497   // This is the code from TypePtr::xmeet() that prevents us from
 498   // having 2 ways to represent the same type. We have to replicate it
 499   // here because we don't go through meet/join.
 500   if (result->remove_speculative() == result->speculative()) {
 501     result = result->remove_speculative();
 502   }
 503 
 504   // Same as above: because we don't go through meet/join, remove the
 505   // speculative type if we know we won't use it.
 506   return result->cleanup_speculative();
 507 
 508   // JOIN NOT DONE HERE BECAUSE OF INTERFACE ISSUES.
 509   // FIX THIS (DO THE JOIN) WHEN UNION TYPES APPEAR!
 510 
 511   //
 512   // Remove this code after overnight run indicates no performance
 513   // loss from not performing JOIN at CheckCastPPNode
 514   //
 515   // const TypeInstPtr *in_oop = in->isa_instptr();
 516   // const TypeInstPtr *my_oop = _type->isa_instptr();
 517   // // If either input is an 'interface', return destination type
 518   // assert (in_oop == NULL || in_oop->klass() != NULL, "");
 519   // assert (my_oop == NULL || my_oop->klass() != NULL, "");
 520   // if( (in_oop && in_oop->klass()->is_interface())
 521   //   ||(my_oop && my_oop->klass()->is_interface()) ) {
 522   //   TypePtr::PTR  in_ptr = in->isa_ptr() ? in->is_ptr()->_ptr : TypePtr::BotPTR;
 523   //   // Preserve cast away nullness for interfaces
 524   //   if( in_ptr == TypePtr::NotNull && my_oop && my_oop->_ptr == TypePtr::BotPTR ) {
 525   //     return my_oop->cast_to_ptr_type(TypePtr::NotNull);
 526   //   }
 527   //   return _type;
 528   // }
 529   //
 530   // // Neither the input nor the destination type is an interface,
 531   //
 532   // // history: JOIN used to cause weird corner case bugs
 533   // //          return (in == TypeOopPtr::NULL_PTR) ? in : _type;
 534   // // JOIN picks up NotNull in common instance-of/check-cast idioms, both oops.
 535   // // JOIN does not preserve NotNull in other cases, e.g. RawPtr vs InstPtr
 536   // const Type *join = in->join(_type);
 537   // // Check if join preserved NotNull'ness for pointers
 538   // if( join->isa_ptr() && _type->isa_ptr() ) {
 539   //   TypePtr::PTR join_ptr = join->is_ptr()->_ptr;
 540   //   TypePtr::PTR type_ptr = _type->is_ptr()->_ptr;
 541   //   // If there isn't any NotNull'ness to preserve
 542   //   // OR if join preserved NotNull'ness then return it
 543   //   if( type_ptr == TypePtr::BotPTR  || type_ptr == TypePtr::Null ||
 544   //       join_ptr == TypePtr::NotNull || join_ptr == TypePtr::Constant ) {
 545   //     return join;
 546   //   }
 547   //   // ELSE return same old type as before
 548   //   return _type;
 549   // }
 550   // // Not joining two pointers
 551   // return join;
 552 }
 553 
 554 //------------------------------Ideal------------------------------------------
 555 // Return a node which is more "ideal" than the current node.  Strip out
 556 // control copies
 557 Node *CheckCastPPNode::Ideal(PhaseGVN *phase, bool can_reshape){
 558   return (in(0) && remove_dead_region(phase, can_reshape)) ? this : NULL;
 559 }
 560 
 561 
 562 Node* DecodeNNode::Identity(PhaseTransform* phase) {
 563   const Type *t = phase->type( in(1) );
 564   if( t == Type::TOP ) return in(1);
 565 
 566   if (in(1)->is_EncodeP()) {
 567     // (DecodeN (EncodeP p)) -> p
 568     return in(1)->in(1);
 569   }
 570   return this;
 571 }
 572 
 573 const Type *DecodeNNode::Value( PhaseTransform *phase ) const {
 574   const Type *t = phase->type( in(1) );
 575   if (t == Type::TOP) return Type::TOP;
 576   if (t == TypeNarrowOop::NULL_PTR) return TypePtr::NULL_PTR;
 577 
 578   assert(t->isa_narrowoop(), "only  narrowoop here");
 579   return t->make_ptr();
 580 }
 581 
 582 Node* EncodePNode::Identity(PhaseTransform* phase) {
 583   const Type *t = phase->type( in(1) );
 584   if( t == Type::TOP ) return in(1);
 585 
 586   if (in(1)->is_DecodeN()) {
 587     // (EncodeP (DecodeN p)) -> p
 588     return in(1)->in(1);
 589   }
 590   return this;
 591 }
 592 
 593 const Type *EncodePNode::Value( PhaseTransform *phase ) const {
 594   const Type *t = phase->type( in(1) );
 595   if (t == Type::TOP) return Type::TOP;
 596   if (t == TypePtr::NULL_PTR) return TypeNarrowOop::NULL_PTR;
 597 
 598   assert(t->isa_oop_ptr(), "only oopptr here");
 599   return t->make_narrowoop();
 600 }
 601 
 602 
 603 Node *EncodeNarrowPtrNode::Ideal_DU_postCCP( PhaseCCP *ccp ) {
 604   return MemNode::Ideal_common_DU_postCCP(ccp, this, in(1));
 605 }
 606 
 607 Node* DecodeNKlassNode::Identity(PhaseTransform* phase) {
 608   const Type *t = phase->type( in(1) );
 609   if( t == Type::TOP ) return in(1);
 610 
 611   if (in(1)->is_EncodePKlass()) {
 612     // (DecodeNKlass (EncodePKlass p)) -> p
 613     return in(1)->in(1);
 614   }
 615   return this;
 616 }
 617 
 618 const Type *DecodeNKlassNode::Value( PhaseTransform *phase ) const {
 619   const Type *t = phase->type( in(1) );
 620   if (t == Type::TOP) return Type::TOP;
 621   assert(t != TypeNarrowKlass::NULL_PTR, "null klass?");
 622 
 623   assert(t->isa_narrowklass(), "only narrow klass ptr here");
 624   return t->make_ptr();
 625 }
 626 
 627 Node* EncodePKlassNode::Identity(PhaseTransform* phase) {
 628   const Type *t = phase->type( in(1) );
 629   if( t == Type::TOP ) return in(1);
 630 
 631   if (in(1)->is_DecodeNKlass()) {
 632     // (EncodePKlass (DecodeNKlass p)) -> p
 633     return in(1)->in(1);
 634   }
 635   return this;
 636 }
 637 
 638 const Type *EncodePKlassNode::Value( PhaseTransform *phase ) const {
 639   const Type *t = phase->type( in(1) );
 640   if (t == Type::TOP) return Type::TOP;
 641   assert (t != TypePtr::NULL_PTR, "null klass?");
 642 
 643   assert(UseCompressedClassPointers && t->isa_klassptr(), "only klass ptr here");
 644   return t->make_narrowklass();
 645 }
 646 
 647 
 648 //=============================================================================
 649 //------------------------------Identity---------------------------------------
 650 Node *Conv2BNode::Identity( PhaseTransform *phase ) {
 651   const Type *t = phase->type( in(1) );
 652   if( t == Type::TOP ) return in(1);
 653   if( t == TypeInt::ZERO ) return in(1);
 654   if( t == TypeInt::ONE ) return in(1);
 655   if( t == TypeInt::BOOL ) return in(1);
 656   return this;
 657 }
 658 
 659 //------------------------------Value------------------------------------------
 660 const Type *Conv2BNode::Value( PhaseTransform *phase ) const {
 661   const Type *t = phase->type( in(1) );
 662   if( t == Type::TOP ) return Type::TOP;
 663   if( t == TypeInt::ZERO ) return TypeInt::ZERO;
 664   if( t == TypePtr::NULL_PTR ) return TypeInt::ZERO;
 665   const TypePtr *tp = t->isa_ptr();
 666   if( tp != NULL ) {
 667     if( tp->ptr() == TypePtr::AnyNull ) return Type::TOP;
 668     if( tp->ptr() == TypePtr::Constant) return TypeInt::ONE;
 669     if (tp->ptr() == TypePtr::NotNull)  return TypeInt::ONE;
 670     return TypeInt::BOOL;
 671   }
 672   if (t->base() != Type::Int) return TypeInt::BOOL;
 673   const TypeInt *ti = t->is_int();
 674   if( ti->_hi < 0 || ti->_lo > 0 ) return TypeInt::ONE;
 675   return TypeInt::BOOL;
 676 }
 677 
 678 
 679 // The conversions operations are all Alpha sorted.  Please keep it that way!
 680 //=============================================================================
 681 //------------------------------Value------------------------------------------
 682 const Type *ConvD2FNode::Value( PhaseTransform *phase ) const {
 683   const Type *t = phase->type( in(1) );
 684   if( t == Type::TOP ) return Type::TOP;
 685   if( t == Type::DOUBLE ) return Type::FLOAT;
 686   const TypeD *td = t->is_double_constant();
 687   return TypeF::make( (float)td->getd() );
 688 }
 689 
 690 //------------------------------Identity---------------------------------------
 691 // Float's can be converted to doubles with no loss of bits.  Hence
 692 // converting a float to a double and back to a float is a NOP.
 693 Node *ConvD2FNode::Identity(PhaseTransform *phase) {
 694   return (in(1)->Opcode() == Op_ConvF2D) ? in(1)->in(1) : this;
 695 }
 696 
 697 //=============================================================================
 698 //------------------------------Value------------------------------------------
 699 const Type *ConvD2INode::Value( PhaseTransform *phase ) const {
 700   const Type *t = phase->type( in(1) );
 701   if( t == Type::TOP ) return Type::TOP;
 702   if( t == Type::DOUBLE ) return TypeInt::INT;
 703   const TypeD *td = t->is_double_constant();
 704   return TypeInt::make( SharedRuntime::d2i( td->getd() ) );
 705 }
 706 
 707 //------------------------------Ideal------------------------------------------
 708 // If converting to an int type, skip any rounding nodes
 709 Node *ConvD2INode::Ideal(PhaseGVN *phase, bool can_reshape) {
 710   if( in(1)->Opcode() == Op_RoundDouble )
 711     set_req(1,in(1)->in(1));
 712   return NULL;
 713 }
 714 
 715 //------------------------------Identity---------------------------------------
 716 // Int's can be converted to doubles with no loss of bits.  Hence
 717 // converting an integer to a double and back to an integer is a NOP.
 718 Node *ConvD2INode::Identity(PhaseTransform *phase) {
 719   return (in(1)->Opcode() == Op_ConvI2D) ? in(1)->in(1) : this;
 720 }
 721 
 722 //=============================================================================
 723 //------------------------------Value------------------------------------------
 724 const Type *ConvD2LNode::Value( PhaseTransform *phase ) const {
 725   const Type *t = phase->type( in(1) );
 726   if( t == Type::TOP ) return Type::TOP;
 727   if( t == Type::DOUBLE ) return TypeLong::LONG;
 728   const TypeD *td = t->is_double_constant();
 729   return TypeLong::make( SharedRuntime::d2l( td->getd() ) );
 730 }
 731 
 732 //------------------------------Identity---------------------------------------
 733 Node *ConvD2LNode::Identity(PhaseTransform *phase) {
 734   // Remove ConvD2L->ConvL2D->ConvD2L sequences.
 735   if( in(1)       ->Opcode() == Op_ConvL2D &&
 736       in(1)->in(1)->Opcode() == Op_ConvD2L )
 737     return in(1)->in(1);
 738   return this;
 739 }
 740 
 741 //------------------------------Ideal------------------------------------------
 742 // If converting to an int type, skip any rounding nodes
 743 Node *ConvD2LNode::Ideal(PhaseGVN *phase, bool can_reshape) {
 744   if( in(1)->Opcode() == Op_RoundDouble )
 745     set_req(1,in(1)->in(1));
 746   return NULL;
 747 }
 748 
 749 //=============================================================================
 750 //------------------------------Value------------------------------------------
 751 const Type *ConvF2DNode::Value( PhaseTransform *phase ) const {
 752   const Type *t = phase->type( in(1) );
 753   if( t == Type::TOP ) return Type::TOP;
 754   if( t == Type::FLOAT ) return Type::DOUBLE;
 755   const TypeF *tf = t->is_float_constant();
 756   return TypeD::make( (double)tf->getf() );
 757 }
 758 
 759 //=============================================================================
 760 //------------------------------Value------------------------------------------
 761 const Type *ConvF2INode::Value( PhaseTransform *phase ) const {
 762   const Type *t = phase->type( in(1) );
 763   if( t == Type::TOP )       return Type::TOP;
 764   if( t == Type::FLOAT ) return TypeInt::INT;
 765   const TypeF *tf = t->is_float_constant();
 766   return TypeInt::make( SharedRuntime::f2i( tf->getf() ) );
 767 }
 768 
 769 //------------------------------Identity---------------------------------------
 770 Node *ConvF2INode::Identity(PhaseTransform *phase) {
 771   // Remove ConvF2I->ConvI2F->ConvF2I sequences.
 772   if( in(1)       ->Opcode() == Op_ConvI2F &&
 773       in(1)->in(1)->Opcode() == Op_ConvF2I )
 774     return in(1)->in(1);
 775   return this;
 776 }
 777 
 778 //------------------------------Ideal------------------------------------------
 779 // If converting to an int type, skip any rounding nodes
 780 Node *ConvF2INode::Ideal(PhaseGVN *phase, bool can_reshape) {
 781   if( in(1)->Opcode() == Op_RoundFloat )
 782     set_req(1,in(1)->in(1));
 783   return NULL;
 784 }
 785 
 786 //=============================================================================
 787 //------------------------------Value------------------------------------------
 788 const Type *ConvF2LNode::Value( PhaseTransform *phase ) const {
 789   const Type *t = phase->type( in(1) );
 790   if( t == Type::TOP )       return Type::TOP;
 791   if( t == Type::FLOAT ) return TypeLong::LONG;
 792   const TypeF *tf = t->is_float_constant();
 793   return TypeLong::make( SharedRuntime::f2l( tf->getf() ) );
 794 }
 795 
 796 //------------------------------Identity---------------------------------------
 797 Node *ConvF2LNode::Identity(PhaseTransform *phase) {
 798   // Remove ConvF2L->ConvL2F->ConvF2L sequences.
 799   if( in(1)       ->Opcode() == Op_ConvL2F &&
 800       in(1)->in(1)->Opcode() == Op_ConvF2L )
 801     return in(1)->in(1);
 802   return this;
 803 }
 804 
 805 //------------------------------Ideal------------------------------------------
 806 // If converting to an int type, skip any rounding nodes
 807 Node *ConvF2LNode::Ideal(PhaseGVN *phase, bool can_reshape) {
 808   if( in(1)->Opcode() == Op_RoundFloat )
 809     set_req(1,in(1)->in(1));
 810   return NULL;
 811 }
 812 
 813 //=============================================================================
 814 //------------------------------Value------------------------------------------
 815 const Type *ConvI2DNode::Value( PhaseTransform *phase ) const {
 816   const Type *t = phase->type( in(1) );
 817   if( t == Type::TOP ) return Type::TOP;
 818   const TypeInt *ti = t->is_int();
 819   if( ti->is_con() ) return TypeD::make( (double)ti->get_con() );
 820   return bottom_type();
 821 }
 822 
 823 //=============================================================================
 824 //------------------------------Value------------------------------------------
 825 const Type *ConvI2FNode::Value( PhaseTransform *phase ) const {
 826   const Type *t = phase->type( in(1) );
 827   if( t == Type::TOP ) return Type::TOP;
 828   const TypeInt *ti = t->is_int();
 829   if( ti->is_con() ) return TypeF::make( (float)ti->get_con() );
 830   return bottom_type();
 831 }
 832 
 833 //------------------------------Identity---------------------------------------
 834 Node *ConvI2FNode::Identity(PhaseTransform *phase) {
 835   // Remove ConvI2F->ConvF2I->ConvI2F sequences.
 836   if( in(1)       ->Opcode() == Op_ConvF2I &&
 837       in(1)->in(1)->Opcode() == Op_ConvI2F )
 838     return in(1)->in(1);
 839   return this;
 840 }
 841 
 842 //=============================================================================
 843 //------------------------------Value------------------------------------------
 844 const Type *ConvI2LNode::Value( PhaseTransform *phase ) const {
 845   const Type *t = phase->type( in(1) );
 846   if( t == Type::TOP ) return Type::TOP;
 847   const TypeInt *ti = t->is_int();
 848   const Type* tl = TypeLong::make(ti->_lo, ti->_hi, ti->_widen);
 849   // Join my declared type against my incoming type.
 850   tl = tl->filter(_type);
 851   return tl;
 852 }
 853 
 854 #ifdef _LP64
 855 static inline bool long_ranges_overlap(jlong lo1, jlong hi1,
 856                                        jlong lo2, jlong hi2) {
 857   // Two ranges overlap iff one range's low point falls in the other range.
 858   return (lo2 <= lo1 && lo1 <= hi2) || (lo1 <= lo2 && lo2 <= hi1);
 859 }
 860 #endif
 861 
 862 //------------------------------Ideal------------------------------------------
 863 Node *ConvI2LNode::Ideal(PhaseGVN *phase, bool can_reshape) {
 864   const TypeLong* this_type = this->type()->is_long();
 865   Node* this_changed = NULL;
 866 
 867   // If _major_progress, then more loop optimizations follow.  Do NOT
 868   // remove this node's type assertion until no more loop ops can happen.
 869   // The progress bit is set in the major loop optimizations THEN comes the
 870   // call to IterGVN and any chance of hitting this code.  Cf. Opaque1Node.
 871   if (can_reshape && !phase->C->major_progress()) {
 872     const TypeInt* in_type = phase->type(in(1))->isa_int();
 873     if (in_type != NULL && this_type != NULL &&
 874         (in_type->_lo != this_type->_lo ||
 875          in_type->_hi != this_type->_hi)) {
 876       // Although this WORSENS the type, it increases GVN opportunities,
 877       // because I2L nodes with the same input will common up, regardless
 878       // of slightly differing type assertions.  Such slight differences
 879       // arise routinely as a result of loop unrolling, so this is a
 880       // post-unrolling graph cleanup.  Choose a type which depends only
 881       // on my input.  (Exception:  Keep a range assertion of >=0 or <0.)
 882       jlong lo1 = this_type->_lo;
 883       jlong hi1 = this_type->_hi;
 884       int   w1  = this_type->_widen;
 885       if (lo1 != (jint)lo1 ||
 886           hi1 != (jint)hi1 ||
 887           lo1 > hi1) {
 888         // Overflow leads to wraparound, wraparound leads to range saturation.
 889         lo1 = min_jint; hi1 = max_jint;
 890       } else if (lo1 >= 0) {
 891         // Keep a range assertion of >=0.
 892         lo1 = 0;        hi1 = max_jint;
 893       } else if (hi1 < 0) {
 894         // Keep a range assertion of <0.
 895         lo1 = min_jint; hi1 = -1;
 896       } else {
 897         lo1 = min_jint; hi1 = max_jint;
 898       }
 899       const TypeLong* wtype = TypeLong::make(MAX2((jlong)in_type->_lo, lo1),
 900                                              MIN2((jlong)in_type->_hi, hi1),
 901                                              MAX2((int)in_type->_widen, w1));
 902       if (wtype != type()) {
 903         set_type(wtype);
 904         // Note: this_type still has old type value, for the logic below.
 905         this_changed = this;
 906       }
 907     }
 908   }
 909 
 910 #ifdef _LP64
 911   // Convert ConvI2L(AddI(x, y)) to AddL(ConvI2L(x), ConvI2L(y)) ,
 912   // but only if x and y have subranges that cannot cause 32-bit overflow,
 913   // under the assumption that x+y is in my own subrange this->type().
 914 
 915   // This assumption is based on a constraint (i.e., type assertion)
 916   // established in Parse::array_addressing or perhaps elsewhere.
 917   // This constraint has been adjoined to the "natural" type of
 918   // the incoming argument in(0).  We know (because of runtime
 919   // checks) - that the result value I2L(x+y) is in the joined range.
 920   // Hence we can restrict the incoming terms (x, y) to values such
 921   // that their sum also lands in that range.
 922 
 923   // This optimization is useful only on 64-bit systems, where we hope
 924   // the addition will end up subsumed in an addressing mode.
 925   // It is necessary to do this when optimizing an unrolled array
 926   // copy loop such as x[i++] = y[i++].
 927 
 928   // On 32-bit systems, it's better to perform as much 32-bit math as
 929   // possible before the I2L conversion, because 32-bit math is cheaper.
 930   // There's no common reason to "leak" a constant offset through the I2L.
 931   // Addressing arithmetic will not absorb it as part of a 64-bit AddL.
 932 
 933   Node* z = in(1);
 934   int op = z->Opcode();
 935   if (op == Op_AddI || op == Op_SubI) {
 936     Node* x = z->in(1);
 937     Node* y = z->in(2);
 938     assert (x != z && y != z, "dead loop in ConvI2LNode::Ideal");
 939     if (phase->type(x) == Type::TOP)  return this_changed;
 940     if (phase->type(y) == Type::TOP)  return this_changed;
 941     const TypeInt*  tx = phase->type(x)->is_int();
 942     const TypeInt*  ty = phase->type(y)->is_int();
 943     const TypeLong* tz = this_type;
 944     jlong xlo = tx->_lo;
 945     jlong xhi = tx->_hi;
 946     jlong ylo = ty->_lo;
 947     jlong yhi = ty->_hi;
 948     jlong zlo = tz->_lo;
 949     jlong zhi = tz->_hi;
 950     jlong vbit = CONST64(1) << BitsPerInt;
 951     int widen =  MAX2(tx->_widen, ty->_widen);
 952     if (op == Op_SubI) {
 953       jlong ylo0 = ylo;
 954       ylo = -yhi;
 955       yhi = -ylo0;
 956     }
 957     // See if x+y can cause positive overflow into z+2**32
 958     if (long_ranges_overlap(xlo+ylo, xhi+yhi, zlo+vbit, zhi+vbit)) {
 959       return this_changed;
 960     }
 961     // See if x+y can cause negative overflow into z-2**32
 962     if (long_ranges_overlap(xlo+ylo, xhi+yhi, zlo-vbit, zhi-vbit)) {
 963       return this_changed;
 964     }
 965     // Now it's always safe to assume x+y does not overflow.
 966     // This is true even if some pairs x,y might cause overflow, as long
 967     // as that overflow value cannot fall into [zlo,zhi].
 968 
 969     // Confident that the arithmetic is "as if infinite precision",
 970     // we can now use z's range to put constraints on those of x and y.
 971     // The "natural" range of x [xlo,xhi] can perhaps be narrowed to a
 972     // more "restricted" range by intersecting [xlo,xhi] with the
 973     // range obtained by subtracting y's range from the asserted range
 974     // of the I2L conversion.  Here's the interval arithmetic algebra:
 975     //    x == z-y == [zlo,zhi]-[ylo,yhi] == [zlo,zhi]+[-yhi,-ylo]
 976     //    => x in [zlo-yhi, zhi-ylo]
 977     //    => x in [zlo-yhi, zhi-ylo] INTERSECT [xlo,xhi]
 978     //    => x in [xlo MAX zlo-yhi, xhi MIN zhi-ylo]
 979     jlong rxlo = MAX2(xlo, zlo - yhi);
 980     jlong rxhi = MIN2(xhi, zhi - ylo);
 981     // And similarly, x changing place with y:
 982     jlong rylo = MAX2(ylo, zlo - xhi);
 983     jlong ryhi = MIN2(yhi, zhi - xlo);
 984     if (rxlo > rxhi || rylo > ryhi) {
 985       return this_changed;  // x or y is dying; don't mess w/ it
 986     }
 987     if (op == Op_SubI) {
 988       jlong rylo0 = rylo;
 989       rylo = -ryhi;
 990       ryhi = -rylo0;
 991     }
 992 
 993     Node* cx = phase->transform( new (phase->C) ConvI2LNode(x, TypeLong::make(rxlo, rxhi, widen)) );
 994     Node* cy = phase->transform( new (phase->C) ConvI2LNode(y, TypeLong::make(rylo, ryhi, widen)) );
 995     switch (op) {
 996     case Op_AddI:  return new (phase->C) AddLNode(cx, cy);
 997     case Op_SubI:  return new (phase->C) SubLNode(cx, cy);
 998     default:       ShouldNotReachHere();
 999     }
1000   }
1001 #endif //_LP64
1002 
1003   return this_changed;
1004 }
1005 
1006 //=============================================================================
1007 //------------------------------Value------------------------------------------
1008 const Type *ConvL2DNode::Value( PhaseTransform *phase ) const {
1009   const Type *t = phase->type( in(1) );
1010   if( t == Type::TOP ) return Type::TOP;
1011   const TypeLong *tl = t->is_long();
1012   if( tl->is_con() ) return TypeD::make( (double)tl->get_con() );
1013   return bottom_type();
1014 }
1015 
1016 //=============================================================================
1017 //------------------------------Value------------------------------------------
1018 const Type *ConvL2FNode::Value( PhaseTransform *phase ) const {
1019   const Type *t = phase->type( in(1) );
1020   if( t == Type::TOP ) return Type::TOP;
1021   const TypeLong *tl = t->is_long();
1022   if( tl->is_con() ) return TypeF::make( (float)tl->get_con() );
1023   return bottom_type();
1024 }
1025 
1026 //=============================================================================
1027 //----------------------------Identity-----------------------------------------
1028 Node *ConvL2INode::Identity( PhaseTransform *phase ) {
1029   // Convert L2I(I2L(x)) => x
1030   if (in(1)->Opcode() == Op_ConvI2L)  return in(1)->in(1);
1031   return this;
1032 }
1033 
1034 //------------------------------Value------------------------------------------
1035 const Type *ConvL2INode::Value( PhaseTransform *phase ) const {
1036   const Type *t = phase->type( in(1) );
1037   if( t == Type::TOP ) return Type::TOP;
1038   const TypeLong *tl = t->is_long();
1039   if (tl->is_con())
1040     // Easy case.
1041     return TypeInt::make((jint)tl->get_con());
1042   return bottom_type();
1043 }
1044 
1045 //------------------------------Ideal------------------------------------------
1046 // Return a node which is more "ideal" than the current node.
1047 // Blow off prior masking to int
1048 Node *ConvL2INode::Ideal(PhaseGVN *phase, bool can_reshape) {
1049   Node *andl = in(1);
1050   uint andl_op = andl->Opcode();
1051   if( andl_op == Op_AndL ) {
1052     // Blow off prior masking to int
1053     if( phase->type(andl->in(2)) == TypeLong::make( 0xFFFFFFFF ) ) {
1054       set_req(1,andl->in(1));
1055       return this;
1056     }
1057   }
1058 
1059   // Swap with a prior add: convL2I(addL(x,y)) ==> addI(convL2I(x),convL2I(y))
1060   // This replaces an 'AddL' with an 'AddI'.
1061   if( andl_op == Op_AddL ) {
1062     // Don't do this for nodes which have more than one user since
1063     // we'll end up computing the long add anyway.
1064     if (andl->outcnt() > 1) return NULL;
1065 
1066     Node* x = andl->in(1);
1067     Node* y = andl->in(2);
1068     assert( x != andl && y != andl, "dead loop in ConvL2INode::Ideal" );
1069     if (phase->type(x) == Type::TOP)  return NULL;
1070     if (phase->type(y) == Type::TOP)  return NULL;
1071     Node *add1 = phase->transform(new (phase->C) ConvL2INode(x));
1072     Node *add2 = phase->transform(new (phase->C) ConvL2INode(y));
1073     return new (phase->C) AddINode(add1,add2);
1074   }
1075 
1076   // Disable optimization: LoadL->ConvL2I ==> LoadI.
1077   // It causes problems (sizes of Load and Store nodes do not match)
1078   // in objects initialization code and Escape Analysis.
1079   return NULL;
1080 }
1081 
1082 //=============================================================================
1083 //------------------------------Value------------------------------------------
1084 const Type *CastX2PNode::Value( PhaseTransform *phase ) const {
1085   const Type* t = phase->type(in(1));
1086   if (t == Type::TOP) return Type::TOP;
1087   if (t->base() == Type_X && t->singleton()) {
1088     uintptr_t bits = (uintptr_t) t->is_intptr_t()->get_con();
1089     if (bits == 0)   return TypePtr::NULL_PTR;
1090     return TypeRawPtr::make((address) bits);
1091   }
1092   return CastX2PNode::bottom_type();
1093 }
1094 
1095 //------------------------------Idealize---------------------------------------
1096 static inline bool fits_in_int(const Type* t, bool but_not_min_int = false) {
1097   if (t == Type::TOP)  return false;
1098   const TypeX* tl = t->is_intptr_t();
1099   jint lo = min_jint;
1100   jint hi = max_jint;
1101   if (but_not_min_int)  ++lo;  // caller wants to negate the value w/o overflow
1102   return (tl->_lo >= lo) && (tl->_hi <= hi);
1103 }
1104 
1105 static inline Node* addP_of_X2P(PhaseGVN *phase,
1106                                 Node* base,
1107                                 Node* dispX,
1108                                 bool negate = false) {
1109   if (negate) {
1110     dispX = new (phase->C) SubXNode(phase->MakeConX(0), phase->transform(dispX));
1111   }
1112   return new (phase->C) AddPNode(phase->C->top(),
1113                           phase->transform(new (phase->C) CastX2PNode(base)),
1114                           phase->transform(dispX));
1115 }
1116 
1117 Node *CastX2PNode::Ideal(PhaseGVN *phase, bool can_reshape) {
1118   // convert CastX2P(AddX(x, y)) to AddP(CastX2P(x), y) if y fits in an int
1119   int op = in(1)->Opcode();
1120   Node* x;
1121   Node* y;
1122   switch (op) {
1123   case Op_SubX:
1124     x = in(1)->in(1);
1125     // Avoid ideal transformations ping-pong between this and AddP for raw pointers.
1126     if (phase->find_intptr_t_con(x, -1) == 0)
1127       break;
1128     y = in(1)->in(2);
1129     if (fits_in_int(phase->type(y), true)) {
1130       return addP_of_X2P(phase, x, y, true);
1131     }
1132     break;
1133   case Op_AddX:
1134     x = in(1)->in(1);
1135     y = in(1)->in(2);
1136     if (fits_in_int(phase->type(y))) {
1137       return addP_of_X2P(phase, x, y);
1138     }
1139     if (fits_in_int(phase->type(x))) {
1140       return addP_of_X2P(phase, y, x);
1141     }
1142     break;
1143   }
1144   return NULL;
1145 }
1146 
1147 //------------------------------Identity---------------------------------------
1148 Node *CastX2PNode::Identity( PhaseTransform *phase ) {
1149   if (in(1)->Opcode() == Op_CastP2X)  return in(1)->in(1);
1150   return this;
1151 }
1152 
1153 //=============================================================================
1154 //------------------------------Value------------------------------------------
1155 const Type *CastP2XNode::Value( PhaseTransform *phase ) const {
1156   const Type* t = phase->type(in(1));
1157   if (t == Type::TOP) return Type::TOP;
1158   if (t->base() == Type::RawPtr && t->singleton()) {
1159     uintptr_t bits = (uintptr_t) t->is_rawptr()->get_con();
1160     return TypeX::make(bits);
1161   }
1162   return CastP2XNode::bottom_type();
1163 }
1164 
1165 Node *CastP2XNode::Ideal(PhaseGVN *phase, bool can_reshape) {
1166   return (in(0) && remove_dead_region(phase, can_reshape)) ? this : NULL;
1167 }
1168 
1169 //------------------------------Identity---------------------------------------
1170 Node *CastP2XNode::Identity( PhaseTransform *phase ) {
1171   if (in(1)->Opcode() == Op_CastX2P)  return in(1)->in(1);
1172   return this;
1173 }
1174 
1175 
1176 //=============================================================================
1177 //------------------------------Identity---------------------------------------
1178 // Remove redundant roundings
1179 Node *RoundFloatNode::Identity( PhaseTransform *phase ) {
1180   assert(Matcher::strict_fp_requires_explicit_rounding, "should only generate for Intel");
1181   // Do not round constants
1182   if (phase->type(in(1))->base() == Type::FloatCon)  return in(1);
1183   int op = in(1)->Opcode();
1184   // Redundant rounding
1185   if( op == Op_RoundFloat ) return in(1);
1186   // Already rounded
1187   if( op == Op_Parm ) return in(1);
1188   if( op == Op_LoadF ) return in(1);
1189   return this;
1190 }
1191 
1192 //------------------------------Value------------------------------------------
1193 const Type *RoundFloatNode::Value( PhaseTransform *phase ) const {
1194   return phase->type( in(1) );
1195 }
1196 
1197 //=============================================================================
1198 //------------------------------Identity---------------------------------------
1199 // Remove redundant roundings.  Incoming arguments are already rounded.
1200 Node *RoundDoubleNode::Identity( PhaseTransform *phase ) {
1201   assert(Matcher::strict_fp_requires_explicit_rounding, "should only generate for Intel");
1202   // Do not round constants
1203   if (phase->type(in(1))->base() == Type::DoubleCon)  return in(1);
1204   int op = in(1)->Opcode();
1205   // Redundant rounding
1206   if( op == Op_RoundDouble ) return in(1);
1207   // Already rounded
1208   if( op == Op_Parm ) return in(1);
1209   if( op == Op_LoadD ) return in(1);
1210   if( op == Op_ConvF2D ) return in(1);
1211   if( op == Op_ConvI2D ) return in(1);
1212   return this;
1213 }
1214 
1215 //------------------------------Value------------------------------------------
1216 const Type *RoundDoubleNode::Value( PhaseTransform *phase ) const {
1217   return phase->type( in(1) );
1218 }
1219 
1220 
1221 //=============================================================================
1222 // Do not allow value-numbering
1223 uint Opaque1Node::hash() const { return NO_HASH; }
1224 uint Opaque1Node::cmp( const Node &n ) const {
1225   return (&n == this);          // Always fail except on self
1226 }
1227 
1228 //------------------------------Identity---------------------------------------
1229 // If _major_progress, then more loop optimizations follow.  Do NOT remove
1230 // the opaque Node until no more loop ops can happen.  Note the timing of
1231 // _major_progress; it's set in the major loop optimizations THEN comes the
1232 // call to IterGVN and any chance of hitting this code.  Hence there's no
1233 // phase-ordering problem with stripping Opaque1 in IGVN followed by some
1234 // more loop optimizations that require it.
1235 Node *Opaque1Node::Identity( PhaseTransform *phase ) {
1236   return phase->C->major_progress() ? this : in(1);
1237 }
1238 
1239 //=============================================================================
1240 // A node to prevent unwanted optimizations.  Allows constant folding.  Stops
1241 // value-numbering, most Ideal calls or Identity functions.  This Node is
1242 // specifically designed to prevent the pre-increment value of a loop trip
1243 // counter from being live out of the bottom of the loop (hence causing the
1244 // pre- and post-increment values both being live and thus requiring an extra
1245 // temp register and an extra move).  If we "accidentally" optimize through
1246 // this kind of a Node, we'll get slightly pessimal, but correct, code.  Thus
1247 // it's OK to be slightly sloppy on optimizations here.
1248 
1249 // Do not allow value-numbering
1250 uint Opaque2Node::hash() const { return NO_HASH; }
1251 uint Opaque2Node::cmp( const Node &n ) const {
1252   return (&n == this);          // Always fail except on self
1253 }
1254 
1255 
1256 //------------------------------Value------------------------------------------
1257 const Type *MoveL2DNode::Value( PhaseTransform *phase ) const {
1258   const Type *t = phase->type( in(1) );
1259   if( t == Type::TOP ) return Type::TOP;
1260   const TypeLong *tl = t->is_long();
1261   if( !tl->is_con() ) return bottom_type();
1262   JavaValue v;
1263   v.set_jlong(tl->get_con());
1264   return TypeD::make( v.get_jdouble() );
1265 }
1266 
1267 //------------------------------Value------------------------------------------
1268 const Type *MoveI2FNode::Value( PhaseTransform *phase ) const {
1269   const Type *t = phase->type( in(1) );
1270   if( t == Type::TOP ) return Type::TOP;
1271   const TypeInt *ti = t->is_int();
1272   if( !ti->is_con() )   return bottom_type();
1273   JavaValue v;
1274   v.set_jint(ti->get_con());
1275   return TypeF::make( v.get_jfloat() );
1276 }
1277 
1278 //------------------------------Value------------------------------------------
1279 const Type *MoveF2INode::Value( PhaseTransform *phase ) const {
1280   const Type *t = phase->type( in(1) );
1281   if( t == Type::TOP )       return Type::TOP;
1282   if( t == Type::FLOAT ) return TypeInt::INT;
1283   const TypeF *tf = t->is_float_constant();
1284   JavaValue v;
1285   v.set_jfloat(tf->getf());
1286   return TypeInt::make( v.get_jint() );
1287 }
1288 
1289 //------------------------------Value------------------------------------------
1290 const Type *MoveD2LNode::Value( PhaseTransform *phase ) const {
1291   const Type *t = phase->type( in(1) );
1292   if( t == Type::TOP ) return Type::TOP;
1293   if( t == Type::DOUBLE ) return TypeLong::LONG;
1294   const TypeD *td = t->is_double_constant();
1295   JavaValue v;
1296   v.set_jdouble(td->getd());
1297   return TypeLong::make( v.get_jlong() );
1298 }
1299 
1300 //------------------------------Value------------------------------------------
1301 const Type* CountLeadingZerosINode::Value(PhaseTransform* phase) const {
1302   const Type* t = phase->type(in(1));
1303   if (t == Type::TOP) return Type::TOP;
1304   const TypeInt* ti = t->isa_int();
1305   if (ti && ti->is_con()) {
1306     jint i = ti->get_con();
1307     // HD, Figure 5-6
1308     if (i == 0)
1309       return TypeInt::make(BitsPerInt);
1310     int n = 1;
1311     unsigned int x = i;
1312     if (x >> 16 == 0) { n += 16; x <<= 16; }
1313     if (x >> 24 == 0) { n +=  8; x <<=  8; }
1314     if (x >> 28 == 0) { n +=  4; x <<=  4; }
1315     if (x >> 30 == 0) { n +=  2; x <<=  2; }
1316     n -= x >> 31;
1317     return TypeInt::make(n);
1318   }
1319   return TypeInt::INT;
1320 }
1321 
1322 //------------------------------Value------------------------------------------
1323 const Type* CountLeadingZerosLNode::Value(PhaseTransform* phase) const {
1324   const Type* t = phase->type(in(1));
1325   if (t == Type::TOP) return Type::TOP;
1326   const TypeLong* tl = t->isa_long();
1327   if (tl && tl->is_con()) {
1328     jlong l = tl->get_con();
1329     // HD, Figure 5-6
1330     if (l == 0)
1331       return TypeInt::make(BitsPerLong);
1332     int n = 1;
1333     unsigned int x = (((julong) l) >> 32);
1334     if (x == 0) { n += 32; x = (int) l; }
1335     if (x >> 16 == 0) { n += 16; x <<= 16; }
1336     if (x >> 24 == 0) { n +=  8; x <<=  8; }
1337     if (x >> 28 == 0) { n +=  4; x <<=  4; }
1338     if (x >> 30 == 0) { n +=  2; x <<=  2; }
1339     n -= x >> 31;
1340     return TypeInt::make(n);
1341   }
1342   return TypeInt::INT;
1343 }
1344 
1345 //------------------------------Value------------------------------------------
1346 const Type* CountTrailingZerosINode::Value(PhaseTransform* phase) const {
1347   const Type* t = phase->type(in(1));
1348   if (t == Type::TOP) return Type::TOP;
1349   const TypeInt* ti = t->isa_int();
1350   if (ti && ti->is_con()) {
1351     jint i = ti->get_con();
1352     // HD, Figure 5-14
1353     int y;
1354     if (i == 0)
1355       return TypeInt::make(BitsPerInt);
1356     int n = 31;
1357     y = i << 16; if (y != 0) { n = n - 16; i = y; }
1358     y = i <<  8; if (y != 0) { n = n -  8; i = y; }
1359     y = i <<  4; if (y != 0) { n = n -  4; i = y; }
1360     y = i <<  2; if (y != 0) { n = n -  2; i = y; }
1361     y = i <<  1; if (y != 0) { n = n -  1; }
1362     return TypeInt::make(n);
1363   }
1364   return TypeInt::INT;
1365 }
1366 
1367 //------------------------------Value------------------------------------------
1368 const Type* CountTrailingZerosLNode::Value(PhaseTransform* phase) const {
1369   const Type* t = phase->type(in(1));
1370   if (t == Type::TOP) return Type::TOP;
1371   const TypeLong* tl = t->isa_long();
1372   if (tl && tl->is_con()) {
1373     jlong l = tl->get_con();
1374     // HD, Figure 5-14
1375     int x, y;
1376     if (l == 0)
1377       return TypeInt::make(BitsPerLong);
1378     int n = 63;
1379     y = (int) l; if (y != 0) { n = n - 32; x = y; } else x = (((julong) l) >> 32);
1380     y = x << 16; if (y != 0) { n = n - 16; x = y; }
1381     y = x <<  8; if (y != 0) { n = n -  8; x = y; }
1382     y = x <<  4; if (y != 0) { n = n -  4; x = y; }
1383     y = x <<  2; if (y != 0) { n = n -  2; x = y; }
1384     y = x <<  1; if (y != 0) { n = n -  1; }
1385     return TypeInt::make(n);
1386   }
1387   return TypeInt::INT;
1388 }