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