1 /* 2 * Copyright (c) 1997, 2012, 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(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(_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(_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(_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 // Determine whether "n" is a node which can cause an alias of one of its inputs. Node types 469 // which can create aliases are: CheckCastPP, Phi, and any store (if there is also a load from 470 // the location.) 471 // Note: this checks for aliases created in this compilation, not ones which may 472 // be potentially created at call sites. 473 static bool can_cause_alias(Node *n, PhaseTransform *phase) { 474 bool possible_alias = false; 475 476 if (n->is_Store()) { 477 possible_alias = !n->as_Store()->value_never_loaded(phase); 478 } else { 479 int opc = n->Opcode(); 480 possible_alias = n->is_Phi() || 481 opc == Op_CheckCastPP || 482 opc == Op_StorePConditional || 483 opc == Op_CompareAndSwapP || 484 opc == Op_CompareAndSwapN || 485 opc == Op_GetAndSetP || 486 opc == Op_GetAndSetN; 487 } 488 return possible_alias; 489 } 490 491 //------------------------------Value------------------------------------------ 492 // Take 'join' of input and cast-up type, unless working with an Interface 493 const Type *CheckCastPPNode::Value( PhaseTransform *phase ) const { 494 if( in(0) && phase->type(in(0)) == Type::TOP ) return Type::TOP; 495 496 const Type *inn = phase->type(in(1)); 497 if( inn == Type::TOP ) return Type::TOP; // No information yet 498 499 const TypePtr *in_type = inn->isa_ptr(); 500 const TypePtr *my_type = _type->isa_ptr(); 501 const Type *result = _type; 502 if( in_type != NULL && my_type != NULL ) { 503 TypePtr::PTR in_ptr = in_type->ptr(); 504 if( in_ptr == TypePtr::Null ) { 505 result = in_type; 506 } else if( in_ptr == TypePtr::Constant ) { 507 // Casting a constant oop to an interface? 508 // (i.e., a String to a Comparable?) 509 // Then return the interface. 510 const TypeOopPtr *jptr = my_type->isa_oopptr(); 511 assert( jptr, "" ); 512 result = (jptr->klass()->is_interface() || !in_type->higher_equal(_type)) 513 ? my_type->cast_to_ptr_type( TypePtr::NotNull ) 514 : in_type; 515 } else { 516 result = my_type->cast_to_ptr_type( my_type->join_ptr(in_ptr) ); 517 } 518 } 519 return result; 520 521 // JOIN NOT DONE HERE BECAUSE OF INTERFACE ISSUES. 522 // FIX THIS (DO THE JOIN) WHEN UNION TYPES APPEAR! 523 524 // 525 // Remove this code after overnight run indicates no performance 526 // loss from not performing JOIN at CheckCastPPNode 527 // 528 // const TypeInstPtr *in_oop = in->isa_instptr(); 529 // const TypeInstPtr *my_oop = _type->isa_instptr(); 530 // // If either input is an 'interface', return destination type 531 // assert (in_oop == NULL || in_oop->klass() != NULL, ""); 532 // assert (my_oop == NULL || my_oop->klass() != NULL, ""); 533 // if( (in_oop && in_oop->klass()->is_interface()) 534 // ||(my_oop && my_oop->klass()->is_interface()) ) { 535 // TypePtr::PTR in_ptr = in->isa_ptr() ? in->is_ptr()->_ptr : TypePtr::BotPTR; 536 // // Preserve cast away nullness for interfaces 537 // if( in_ptr == TypePtr::NotNull && my_oop && my_oop->_ptr == TypePtr::BotPTR ) { 538 // return my_oop->cast_to_ptr_type(TypePtr::NotNull); 539 // } 540 // return _type; 541 // } 542 // 543 // // Neither the input nor the destination type is an interface, 544 // 545 // // history: JOIN used to cause weird corner case bugs 546 // // return (in == TypeOopPtr::NULL_PTR) ? in : _type; 547 // // JOIN picks up NotNull in common instance-of/check-cast idioms, both oops. 548 // // JOIN does not preserve NotNull in other cases, e.g. RawPtr vs InstPtr 549 // const Type *join = in->join(_type); 550 // // Check if join preserved NotNull'ness for pointers 551 // if( join->isa_ptr() && _type->isa_ptr() ) { 552 // TypePtr::PTR join_ptr = join->is_ptr()->_ptr; 553 // TypePtr::PTR type_ptr = _type->is_ptr()->_ptr; 554 // // If there isn't any NotNull'ness to preserve 555 // // OR if join preserved NotNull'ness then return it 556 // if( type_ptr == TypePtr::BotPTR || type_ptr == TypePtr::Null || 557 // join_ptr == TypePtr::NotNull || join_ptr == TypePtr::Constant ) { 558 // return join; 559 // } 560 // // ELSE return same old type as before 561 // return _type; 562 // } 563 // // Not joining two pointers 564 // return join; 565 } 566 567 //------------------------------Ideal------------------------------------------ 568 // Return a node which is more "ideal" than the current node. Strip out 569 // control copies 570 Node *CheckCastPPNode::Ideal(PhaseGVN *phase, bool can_reshape){ 571 return (in(0) && remove_dead_region(phase, can_reshape)) ? this : NULL; 572 } 573 574 575 Node* DecodeNNode::Identity(PhaseTransform* phase) { 576 const Type *t = phase->type( in(1) ); 577 if( t == Type::TOP ) return in(1); 578 579 if (in(1)->is_EncodeP()) { 580 // (DecodeN (EncodeP p)) -> p 581 return in(1)->in(1); 582 } 583 return this; 584 } 585 586 const Type *DecodeNNode::Value( PhaseTransform *phase ) const { 587 const Type *t = phase->type( in(1) ); 588 if (t == Type::TOP) return Type::TOP; 589 if (t == TypeNarrowOop::NULL_PTR) return TypePtr::NULL_PTR; 590 591 assert(t->isa_narrowoop(), "only narrowoop here"); 592 return t->make_ptr(); 593 } 594 595 Node* EncodePNode::Identity(PhaseTransform* phase) { 596 const Type *t = phase->type( in(1) ); 597 if( t == Type::TOP ) return in(1); 598 599 if (in(1)->is_DecodeN()) { 600 // (EncodeP (DecodeN p)) -> p 601 return in(1)->in(1); 602 } 603 return this; 604 } 605 606 const Type *EncodePNode::Value( PhaseTransform *phase ) const { 607 const Type *t = phase->type( in(1) ); 608 if (t == Type::TOP) return Type::TOP; 609 if (t == TypePtr::NULL_PTR) return TypeNarrowOop::NULL_PTR; 610 611 assert(t->isa_oop_ptr(), "only oopptr here"); 612 return t->make_narrowoop(); 613 } 614 615 616 Node *EncodeNarrowPtrNode::Ideal_DU_postCCP( PhaseCCP *ccp ) { 617 return MemNode::Ideal_common_DU_postCCP(ccp, this, in(1)); 618 } 619 620 Node* DecodeNKlassNode::Identity(PhaseTransform* phase) { 621 const Type *t = phase->type( in(1) ); 622 if( t == Type::TOP ) return in(1); 623 624 if (in(1)->is_EncodePKlass()) { 625 // (DecodeNKlass (EncodePKlass p)) -> p 626 return in(1)->in(1); 627 } 628 return this; 629 } 630 631 const Type *DecodeNKlassNode::Value( PhaseTransform *phase ) const { 632 const Type *t = phase->type( in(1) ); 633 if (t == Type::TOP) return Type::TOP; 634 assert(t != TypeNarrowKlass::NULL_PTR, "null klass?"); 635 636 assert(t->isa_narrowklass(), "only narrow klass ptr here"); 637 return t->make_ptr(); 638 } 639 640 Node* EncodePKlassNode::Identity(PhaseTransform* phase) { 641 const Type *t = phase->type( in(1) ); 642 if( t == Type::TOP ) return in(1); 643 644 if (in(1)->is_DecodeNKlass()) { 645 // (EncodePKlass (DecodeNKlass p)) -> p 646 return in(1)->in(1); 647 } 648 return this; 649 } 650 651 const Type *EncodePKlassNode::Value( PhaseTransform *phase ) const { 652 const Type *t = phase->type( in(1) ); 653 if (t == Type::TOP) return Type::TOP; 654 assert (t != TypePtr::NULL_PTR, "null klass?"); 655 656 assert(UseCompressedKlassPointers && t->isa_klassptr(), "only klass ptr here"); 657 return t->make_narrowklass(); 658 } 659 660 661 //============================================================================= 662 //------------------------------Identity--------------------------------------- 663 Node *Conv2BNode::Identity( PhaseTransform *phase ) { 664 const Type *t = phase->type( in(1) ); 665 if( t == Type::TOP ) return in(1); 666 if( t == TypeInt::ZERO ) return in(1); 667 if( t == TypeInt::ONE ) return in(1); 668 if( t == TypeInt::BOOL ) return in(1); 669 return this; 670 } 671 672 //------------------------------Value------------------------------------------ 673 const Type *Conv2BNode::Value( PhaseTransform *phase ) const { 674 const Type *t = phase->type( in(1) ); 675 if( t == Type::TOP ) return Type::TOP; 676 if( t == TypeInt::ZERO ) return TypeInt::ZERO; 677 if( t == TypePtr::NULL_PTR ) return TypeInt::ZERO; 678 const TypePtr *tp = t->isa_ptr(); 679 if( tp != NULL ) { 680 if( tp->ptr() == TypePtr::AnyNull ) return Type::TOP; 681 if( tp->ptr() == TypePtr::Constant) return TypeInt::ONE; 682 if (tp->ptr() == TypePtr::NotNull) return TypeInt::ONE; 683 return TypeInt::BOOL; 684 } 685 if (t->base() != Type::Int) return TypeInt::BOOL; 686 const TypeInt *ti = t->is_int(); 687 if( ti->_hi < 0 || ti->_lo > 0 ) return TypeInt::ONE; 688 return TypeInt::BOOL; 689 } 690 691 692 // The conversions operations are all Alpha sorted. Please keep it that way! 693 //============================================================================= 694 //------------------------------Value------------------------------------------ 695 const Type *ConvD2FNode::Value( PhaseTransform *phase ) const { 696 const Type *t = phase->type( in(1) ); 697 if( t == Type::TOP ) return Type::TOP; 698 if( t == Type::DOUBLE ) return Type::FLOAT; 699 const TypeD *td = t->is_double_constant(); 700 return TypeF::make( (float)td->getd() ); 701 } 702 703 //------------------------------Identity--------------------------------------- 704 // Float's can be converted to doubles with no loss of bits. Hence 705 // converting a float to a double and back to a float is a NOP. 706 Node *ConvD2FNode::Identity(PhaseTransform *phase) { 707 return (in(1)->Opcode() == Op_ConvF2D) ? in(1)->in(1) : this; 708 } 709 710 //============================================================================= 711 //------------------------------Value------------------------------------------ 712 const Type *ConvD2INode::Value( PhaseTransform *phase ) const { 713 const Type *t = phase->type( in(1) ); 714 if( t == Type::TOP ) return Type::TOP; 715 if( t == Type::DOUBLE ) return TypeInt::INT; 716 const TypeD *td = t->is_double_constant(); 717 return TypeInt::make( SharedRuntime::d2i( td->getd() ) ); 718 } 719 720 //------------------------------Ideal------------------------------------------ 721 // If converting to an int type, skip any rounding nodes 722 Node *ConvD2INode::Ideal(PhaseGVN *phase, bool can_reshape) { 723 if( in(1)->Opcode() == Op_RoundDouble ) 724 set_req(1,in(1)->in(1)); 725 return NULL; 726 } 727 728 //------------------------------Identity--------------------------------------- 729 // Int's can be converted to doubles with no loss of bits. Hence 730 // converting an integer to a double and back to an integer is a NOP. 731 Node *ConvD2INode::Identity(PhaseTransform *phase) { 732 return (in(1)->Opcode() == Op_ConvI2D) ? in(1)->in(1) : this; 733 } 734 735 //============================================================================= 736 //------------------------------Value------------------------------------------ 737 const Type *ConvD2LNode::Value( PhaseTransform *phase ) const { 738 const Type *t = phase->type( in(1) ); 739 if( t == Type::TOP ) return Type::TOP; 740 if( t == Type::DOUBLE ) return TypeLong::LONG; 741 const TypeD *td = t->is_double_constant(); 742 return TypeLong::make( SharedRuntime::d2l( td->getd() ) ); 743 } 744 745 //------------------------------Identity--------------------------------------- 746 Node *ConvD2LNode::Identity(PhaseTransform *phase) { 747 // Remove ConvD2L->ConvL2D->ConvD2L sequences. 748 if( in(1) ->Opcode() == Op_ConvL2D && 749 in(1)->in(1)->Opcode() == Op_ConvD2L ) 750 return in(1)->in(1); 751 return this; 752 } 753 754 //------------------------------Ideal------------------------------------------ 755 // If converting to an int type, skip any rounding nodes 756 Node *ConvD2LNode::Ideal(PhaseGVN *phase, bool can_reshape) { 757 if( in(1)->Opcode() == Op_RoundDouble ) 758 set_req(1,in(1)->in(1)); 759 return NULL; 760 } 761 762 //============================================================================= 763 //------------------------------Value------------------------------------------ 764 const Type *ConvF2DNode::Value( PhaseTransform *phase ) const { 765 const Type *t = phase->type( in(1) ); 766 if( t == Type::TOP ) return Type::TOP; 767 if( t == Type::FLOAT ) return Type::DOUBLE; 768 const TypeF *tf = t->is_float_constant(); 769 return TypeD::make( (double)tf->getf() ); 770 } 771 772 //============================================================================= 773 //------------------------------Value------------------------------------------ 774 const Type *ConvF2INode::Value( PhaseTransform *phase ) const { 775 const Type *t = phase->type( in(1) ); 776 if( t == Type::TOP ) return Type::TOP; 777 if( t == Type::FLOAT ) return TypeInt::INT; 778 const TypeF *tf = t->is_float_constant(); 779 return TypeInt::make( SharedRuntime::f2i( tf->getf() ) ); 780 } 781 782 //------------------------------Identity--------------------------------------- 783 Node *ConvF2INode::Identity(PhaseTransform *phase) { 784 // Remove ConvF2I->ConvI2F->ConvF2I sequences. 785 if( in(1) ->Opcode() == Op_ConvI2F && 786 in(1)->in(1)->Opcode() == Op_ConvF2I ) 787 return in(1)->in(1); 788 return this; 789 } 790 791 //------------------------------Ideal------------------------------------------ 792 // If converting to an int type, skip any rounding nodes 793 Node *ConvF2INode::Ideal(PhaseGVN *phase, bool can_reshape) { 794 if( in(1)->Opcode() == Op_RoundFloat ) 795 set_req(1,in(1)->in(1)); 796 return NULL; 797 } 798 799 //============================================================================= 800 //------------------------------Value------------------------------------------ 801 const Type *ConvF2LNode::Value( PhaseTransform *phase ) const { 802 const Type *t = phase->type( in(1) ); 803 if( t == Type::TOP ) return Type::TOP; 804 if( t == Type::FLOAT ) return TypeLong::LONG; 805 const TypeF *tf = t->is_float_constant(); 806 return TypeLong::make( SharedRuntime::f2l( tf->getf() ) ); 807 } 808 809 //------------------------------Identity--------------------------------------- 810 Node *ConvF2LNode::Identity(PhaseTransform *phase) { 811 // Remove ConvF2L->ConvL2F->ConvF2L sequences. 812 if( in(1) ->Opcode() == Op_ConvL2F && 813 in(1)->in(1)->Opcode() == Op_ConvF2L ) 814 return in(1)->in(1); 815 return this; 816 } 817 818 //------------------------------Ideal------------------------------------------ 819 // If converting to an int type, skip any rounding nodes 820 Node *ConvF2LNode::Ideal(PhaseGVN *phase, bool can_reshape) { 821 if( in(1)->Opcode() == Op_RoundFloat ) 822 set_req(1,in(1)->in(1)); 823 return NULL; 824 } 825 826 //============================================================================= 827 //------------------------------Value------------------------------------------ 828 const Type *ConvI2DNode::Value( PhaseTransform *phase ) const { 829 const Type *t = phase->type( in(1) ); 830 if( t == Type::TOP ) return Type::TOP; 831 const TypeInt *ti = t->is_int(); 832 if( ti->is_con() ) return TypeD::make( (double)ti->get_con() ); 833 return bottom_type(); 834 } 835 836 //============================================================================= 837 //------------------------------Value------------------------------------------ 838 const Type *ConvI2FNode::Value( PhaseTransform *phase ) const { 839 const Type *t = phase->type( in(1) ); 840 if( t == Type::TOP ) return Type::TOP; 841 const TypeInt *ti = t->is_int(); 842 if( ti->is_con() ) return TypeF::make( (float)ti->get_con() ); 843 return bottom_type(); 844 } 845 846 //------------------------------Identity--------------------------------------- 847 Node *ConvI2FNode::Identity(PhaseTransform *phase) { 848 // Remove ConvI2F->ConvF2I->ConvI2F sequences. 849 if( in(1) ->Opcode() == Op_ConvF2I && 850 in(1)->in(1)->Opcode() == Op_ConvI2F ) 851 return in(1)->in(1); 852 return this; 853 } 854 855 //============================================================================= 856 //------------------------------Value------------------------------------------ 857 const Type *ConvI2LNode::Value( PhaseTransform *phase ) const { 858 const Type *t = phase->type( in(1) ); 859 if( t == Type::TOP ) return Type::TOP; 860 const TypeInt *ti = t->is_int(); 861 const Type* tl = TypeLong::make(ti->_lo, ti->_hi, ti->_widen); 862 // Join my declared type against my incoming type. 863 tl = tl->filter(_type); 864 return tl; 865 } 866 867 #ifdef _LP64 868 static inline bool long_ranges_overlap(jlong lo1, jlong hi1, 869 jlong lo2, jlong hi2) { 870 // Two ranges overlap iff one range's low point falls in the other range. 871 return (lo2 <= lo1 && lo1 <= hi2) || (lo1 <= lo2 && lo2 <= hi1); 872 } 873 #endif 874 875 //------------------------------Ideal------------------------------------------ 876 Node *ConvI2LNode::Ideal(PhaseGVN *phase, bool can_reshape) { 877 const TypeLong* this_type = this->type()->is_long(); 878 Node* this_changed = NULL; 879 880 // If _major_progress, then more loop optimizations follow. Do NOT 881 // remove this node's type assertion until no more loop ops can happen. 882 // The progress bit is set in the major loop optimizations THEN comes the 883 // call to IterGVN and any chance of hitting this code. Cf. Opaque1Node. 884 if (can_reshape && !phase->C->major_progress()) { 885 const TypeInt* in_type = phase->type(in(1))->isa_int(); 886 if (in_type != NULL && this_type != NULL && 887 (in_type->_lo != this_type->_lo || 888 in_type->_hi != this_type->_hi)) { 889 // Although this WORSENS the type, it increases GVN opportunities, 890 // because I2L nodes with the same input will common up, regardless 891 // of slightly differing type assertions. Such slight differences 892 // arise routinely as a result of loop unrolling, so this is a 893 // post-unrolling graph cleanup. Choose a type which depends only 894 // on my input. (Exception: Keep a range assertion of >=0 or <0.) 895 jlong lo1 = this_type->_lo; 896 jlong hi1 = this_type->_hi; 897 int w1 = this_type->_widen; 898 if (lo1 != (jint)lo1 || 899 hi1 != (jint)hi1 || 900 lo1 > hi1) { 901 // Overflow leads to wraparound, wraparound leads to range saturation. 902 lo1 = min_jint; hi1 = max_jint; 903 } else if (lo1 >= 0) { 904 // Keep a range assertion of >=0. 905 lo1 = 0; hi1 = max_jint; 906 } else if (hi1 < 0) { 907 // Keep a range assertion of <0. 908 lo1 = min_jint; hi1 = -1; 909 } else { 910 lo1 = min_jint; hi1 = max_jint; 911 } 912 const TypeLong* wtype = TypeLong::make(MAX2((jlong)in_type->_lo, lo1), 913 MIN2((jlong)in_type->_hi, hi1), 914 MAX2((int)in_type->_widen, w1)); 915 if (wtype != type()) { 916 set_type(wtype); 917 // Note: this_type still has old type value, for the logic below. 918 this_changed = this; 919 } 920 } 921 } 922 923 #ifdef _LP64 924 // Convert ConvI2L(AddI(x, y)) to AddL(ConvI2L(x), ConvI2L(y)) , 925 // but only if x and y have subranges that cannot cause 32-bit overflow, 926 // under the assumption that x+y is in my own subrange this->type(). 927 928 // This assumption is based on a constraint (i.e., type assertion) 929 // established in Parse::array_addressing or perhaps elsewhere. 930 // This constraint has been adjoined to the "natural" type of 931 // the incoming argument in(0). We know (because of runtime 932 // checks) - that the result value I2L(x+y) is in the joined range. 933 // Hence we can restrict the incoming terms (x, y) to values such 934 // that their sum also lands in that range. 935 936 // This optimization is useful only on 64-bit systems, where we hope 937 // the addition will end up subsumed in an addressing mode. 938 // It is necessary to do this when optimizing an unrolled array 939 // copy loop such as x[i++] = y[i++]. 940 941 // On 32-bit systems, it's better to perform as much 32-bit math as 942 // possible before the I2L conversion, because 32-bit math is cheaper. 943 // There's no common reason to "leak" a constant offset through the I2L. 944 // Addressing arithmetic will not absorb it as part of a 64-bit AddL. 945 946 Node* z = in(1); 947 int op = z->Opcode(); 948 if (op == Op_AddI || op == Op_SubI) { 949 Node* x = z->in(1); 950 Node* y = z->in(2); 951 assert (x != z && y != z, "dead loop in ConvI2LNode::Ideal"); 952 if (phase->type(x) == Type::TOP) return this_changed; 953 if (phase->type(y) == Type::TOP) return this_changed; 954 const TypeInt* tx = phase->type(x)->is_int(); 955 const TypeInt* ty = phase->type(y)->is_int(); 956 const TypeLong* tz = this_type; 957 jlong xlo = tx->_lo; 958 jlong xhi = tx->_hi; 959 jlong ylo = ty->_lo; 960 jlong yhi = ty->_hi; 961 jlong zlo = tz->_lo; 962 jlong zhi = tz->_hi; 963 jlong vbit = CONST64(1) << BitsPerInt; 964 int widen = MAX2(tx->_widen, ty->_widen); 965 if (op == Op_SubI) { 966 jlong ylo0 = ylo; 967 ylo = -yhi; 968 yhi = -ylo0; 969 } 970 // See if x+y can cause positive overflow into z+2**32 971 if (long_ranges_overlap(xlo+ylo, xhi+yhi, zlo+vbit, zhi+vbit)) { 972 return this_changed; 973 } 974 // See if x+y can cause negative overflow into z-2**32 975 if (long_ranges_overlap(xlo+ylo, xhi+yhi, zlo-vbit, zhi-vbit)) { 976 return this_changed; 977 } 978 // Now it's always safe to assume x+y does not overflow. 979 // This is true even if some pairs x,y might cause overflow, as long 980 // as that overflow value cannot fall into [zlo,zhi]. 981 982 // Confident that the arithmetic is "as if infinite precision", 983 // we can now use z's range to put constraints on those of x and y. 984 // The "natural" range of x [xlo,xhi] can perhaps be narrowed to a 985 // more "restricted" range by intersecting [xlo,xhi] with the 986 // range obtained by subtracting y's range from the asserted range 987 // of the I2L conversion. Here's the interval arithmetic algebra: 988 // x == z-y == [zlo,zhi]-[ylo,yhi] == [zlo,zhi]+[-yhi,-ylo] 989 // => x in [zlo-yhi, zhi-ylo] 990 // => x in [zlo-yhi, zhi-ylo] INTERSECT [xlo,xhi] 991 // => x in [xlo MAX zlo-yhi, xhi MIN zhi-ylo] 992 jlong rxlo = MAX2(xlo, zlo - yhi); 993 jlong rxhi = MIN2(xhi, zhi - ylo); 994 // And similarly, x changing place with y: 995 jlong rylo = MAX2(ylo, zlo - xhi); 996 jlong ryhi = MIN2(yhi, zhi - xlo); 997 if (rxlo > rxhi || rylo > ryhi) { 998 return this_changed; // x or y is dying; don't mess w/ it 999 } 1000 if (op == Op_SubI) { 1001 jlong rylo0 = rylo; 1002 rylo = -ryhi; 1003 ryhi = -rylo0; 1004 } 1005 1006 Node* cx = phase->transform( new (phase->C) ConvI2LNode(x, TypeLong::make(rxlo, rxhi, widen)) ); 1007 Node* cy = phase->transform( new (phase->C) ConvI2LNode(y, TypeLong::make(rylo, ryhi, widen)) ); 1008 switch (op) { 1009 case Op_AddI: return new (phase->C) AddLNode(cx, cy); 1010 case Op_SubI: return new (phase->C) SubLNode(cx, cy); 1011 default: ShouldNotReachHere(); 1012 } 1013 } 1014 #endif //_LP64 1015 1016 return this_changed; 1017 } 1018 1019 //============================================================================= 1020 //------------------------------Value------------------------------------------ 1021 const Type *ConvL2DNode::Value( PhaseTransform *phase ) const { 1022 const Type *t = phase->type( in(1) ); 1023 if( t == Type::TOP ) return Type::TOP; 1024 const TypeLong *tl = t->is_long(); 1025 if( tl->is_con() ) return TypeD::make( (double)tl->get_con() ); 1026 return bottom_type(); 1027 } 1028 1029 //============================================================================= 1030 //------------------------------Value------------------------------------------ 1031 const Type *ConvL2FNode::Value( PhaseTransform *phase ) const { 1032 const Type *t = phase->type( in(1) ); 1033 if( t == Type::TOP ) return Type::TOP; 1034 const TypeLong *tl = t->is_long(); 1035 if( tl->is_con() ) return TypeF::make( (float)tl->get_con() ); 1036 return bottom_type(); 1037 } 1038 1039 //============================================================================= 1040 //----------------------------Identity----------------------------------------- 1041 Node *ConvL2INode::Identity( PhaseTransform *phase ) { 1042 // Convert L2I(I2L(x)) => x 1043 if (in(1)->Opcode() == Op_ConvI2L) return in(1)->in(1); 1044 return this; 1045 } 1046 1047 //------------------------------Value------------------------------------------ 1048 const Type *ConvL2INode::Value( PhaseTransform *phase ) const { 1049 const Type *t = phase->type( in(1) ); 1050 if( t == Type::TOP ) return Type::TOP; 1051 const TypeLong *tl = t->is_long(); 1052 if (tl->is_con()) 1053 // Easy case. 1054 return TypeInt::make((jint)tl->get_con()); 1055 return bottom_type(); 1056 } 1057 1058 //------------------------------Ideal------------------------------------------ 1059 // Return a node which is more "ideal" than the current node. 1060 // Blow off prior masking to int 1061 Node *ConvL2INode::Ideal(PhaseGVN *phase, bool can_reshape) { 1062 Node *andl = in(1); 1063 uint andl_op = andl->Opcode(); 1064 if( andl_op == Op_AndL ) { 1065 // Blow off prior masking to int 1066 if( phase->type(andl->in(2)) == TypeLong::make( 0xFFFFFFFF ) ) { 1067 set_req(1,andl->in(1)); 1068 return this; 1069 } 1070 } 1071 1072 // Swap with a prior add: convL2I(addL(x,y)) ==> addI(convL2I(x),convL2I(y)) 1073 // This replaces an 'AddL' with an 'AddI'. 1074 if( andl_op == Op_AddL ) { 1075 // Don't do this for nodes which have more than one user since 1076 // we'll end up computing the long add anyway. 1077 if (andl->outcnt() > 1) return NULL; 1078 1079 Node* x = andl->in(1); 1080 Node* y = andl->in(2); 1081 assert( x != andl && y != andl, "dead loop in ConvL2INode::Ideal" ); 1082 if (phase->type(x) == Type::TOP) return NULL; 1083 if (phase->type(y) == Type::TOP) return NULL; 1084 Node *add1 = phase->transform(new (phase->C) ConvL2INode(x)); 1085 Node *add2 = phase->transform(new (phase->C) ConvL2INode(y)); 1086 return new (phase->C) AddINode(add1,add2); 1087 } 1088 1089 // Disable optimization: LoadL->ConvL2I ==> LoadI. 1090 // It causes problems (sizes of Load and Store nodes do not match) 1091 // in objects initialization code and Escape Analysis. 1092 return NULL; 1093 } 1094 1095 //============================================================================= 1096 //------------------------------Value------------------------------------------ 1097 const Type *CastX2PNode::Value( PhaseTransform *phase ) const { 1098 const Type* t = phase->type(in(1)); 1099 if (t == Type::TOP) return Type::TOP; 1100 if (t->base() == Type_X && t->singleton()) { 1101 uintptr_t bits = (uintptr_t) t->is_intptr_t()->get_con(); 1102 if (bits == 0) return TypePtr::NULL_PTR; 1103 return TypeRawPtr::make((address) bits); 1104 } 1105 return CastX2PNode::bottom_type(); 1106 } 1107 1108 //------------------------------Idealize--------------------------------------- 1109 static inline bool fits_in_int(const Type* t, bool but_not_min_int = false) { 1110 if (t == Type::TOP) return false; 1111 const TypeX* tl = t->is_intptr_t(); 1112 jint lo = min_jint; 1113 jint hi = max_jint; 1114 if (but_not_min_int) ++lo; // caller wants to negate the value w/o overflow 1115 return (tl->_lo >= lo) && (tl->_hi <= hi); 1116 } 1117 1118 static inline Node* addP_of_X2P(PhaseGVN *phase, 1119 Node* base, 1120 Node* dispX, 1121 bool negate = false) { 1122 if (negate) { 1123 dispX = new (phase->C) SubXNode(phase->MakeConX(0), phase->transform(dispX)); 1124 } 1125 return new (phase->C) AddPNode(phase->C->top(), 1126 phase->transform(new (phase->C) CastX2PNode(base)), 1127 phase->transform(dispX)); 1128 } 1129 1130 Node *CastX2PNode::Ideal(PhaseGVN *phase, bool can_reshape) { 1131 // convert CastX2P(AddX(x, y)) to AddP(CastX2P(x), y) if y fits in an int 1132 int op = in(1)->Opcode(); 1133 Node* x; 1134 Node* y; 1135 switch (op) { 1136 case Op_SubX: 1137 x = in(1)->in(1); 1138 // Avoid ideal transformations ping-pong between this and AddP for raw pointers. 1139 if (phase->find_intptr_t_con(x, -1) == 0) 1140 break; 1141 y = in(1)->in(2); 1142 if (fits_in_int(phase->type(y), true)) { 1143 return addP_of_X2P(phase, x, y, true); 1144 } 1145 break; 1146 case Op_AddX: 1147 x = in(1)->in(1); 1148 y = in(1)->in(2); 1149 if (fits_in_int(phase->type(y))) { 1150 return addP_of_X2P(phase, x, y); 1151 } 1152 if (fits_in_int(phase->type(x))) { 1153 return addP_of_X2P(phase, y, x); 1154 } 1155 break; 1156 } 1157 return NULL; 1158 } 1159 1160 //------------------------------Identity--------------------------------------- 1161 Node *CastX2PNode::Identity( PhaseTransform *phase ) { 1162 if (in(1)->Opcode() == Op_CastP2X) return in(1)->in(1); 1163 return this; 1164 } 1165 1166 //============================================================================= 1167 //------------------------------Value------------------------------------------ 1168 const Type *CastP2XNode::Value( PhaseTransform *phase ) const { 1169 const Type* t = phase->type(in(1)); 1170 if (t == Type::TOP) return Type::TOP; 1171 if (t->base() == Type::RawPtr && t->singleton()) { 1172 uintptr_t bits = (uintptr_t) t->is_rawptr()->get_con(); 1173 return TypeX::make(bits); 1174 } 1175 return CastP2XNode::bottom_type(); 1176 } 1177 1178 Node *CastP2XNode::Ideal(PhaseGVN *phase, bool can_reshape) { 1179 return (in(0) && remove_dead_region(phase, can_reshape)) ? this : NULL; 1180 } 1181 1182 //------------------------------Identity--------------------------------------- 1183 Node *CastP2XNode::Identity( PhaseTransform *phase ) { 1184 if (in(1)->Opcode() == Op_CastX2P) return in(1)->in(1); 1185 return this; 1186 } 1187 1188 1189 //============================================================================= 1190 //------------------------------Identity--------------------------------------- 1191 // Remove redundant roundings 1192 Node *RoundFloatNode::Identity( PhaseTransform *phase ) { 1193 assert(Matcher::strict_fp_requires_explicit_rounding, "should only generate for Intel"); 1194 // Do not round constants 1195 if (phase->type(in(1))->base() == Type::FloatCon) return in(1); 1196 int op = in(1)->Opcode(); 1197 // Redundant rounding 1198 if( op == Op_RoundFloat ) return in(1); 1199 // Already rounded 1200 if( op == Op_Parm ) return in(1); 1201 if( op == Op_LoadF ) return in(1); 1202 return this; 1203 } 1204 1205 //------------------------------Value------------------------------------------ 1206 const Type *RoundFloatNode::Value( PhaseTransform *phase ) const { 1207 return phase->type( in(1) ); 1208 } 1209 1210 //============================================================================= 1211 //------------------------------Identity--------------------------------------- 1212 // Remove redundant roundings. Incoming arguments are already rounded. 1213 Node *RoundDoubleNode::Identity( PhaseTransform *phase ) { 1214 assert(Matcher::strict_fp_requires_explicit_rounding, "should only generate for Intel"); 1215 // Do not round constants 1216 if (phase->type(in(1))->base() == Type::DoubleCon) return in(1); 1217 int op = in(1)->Opcode(); 1218 // Redundant rounding 1219 if( op == Op_RoundDouble ) return in(1); 1220 // Already rounded 1221 if( op == Op_Parm ) return in(1); 1222 if( op == Op_LoadD ) return in(1); 1223 if( op == Op_ConvF2D ) return in(1); 1224 if( op == Op_ConvI2D ) return in(1); 1225 return this; 1226 } 1227 1228 //------------------------------Value------------------------------------------ 1229 const Type *RoundDoubleNode::Value( PhaseTransform *phase ) const { 1230 return phase->type( in(1) ); 1231 } 1232 1233 1234 //============================================================================= 1235 // Do not allow value-numbering 1236 uint Opaque1Node::hash() const { return NO_HASH; } 1237 uint Opaque1Node::cmp( const Node &n ) const { 1238 return (&n == this); // Always fail except on self 1239 } 1240 1241 //------------------------------Identity--------------------------------------- 1242 // If _major_progress, then more loop optimizations follow. Do NOT remove 1243 // the opaque Node until no more loop ops can happen. Note the timing of 1244 // _major_progress; it's set in the major loop optimizations THEN comes the 1245 // call to IterGVN and any chance of hitting this code. Hence there's no 1246 // phase-ordering problem with stripping Opaque1 in IGVN followed by some 1247 // more loop optimizations that require it. 1248 Node *Opaque1Node::Identity( PhaseTransform *phase ) { 1249 return phase->C->major_progress() ? this : in(1); 1250 } 1251 1252 //============================================================================= 1253 // A node to prevent unwanted optimizations. Allows constant folding. Stops 1254 // value-numbering, most Ideal calls or Identity functions. This Node is 1255 // specifically designed to prevent the pre-increment value of a loop trip 1256 // counter from being live out of the bottom of the loop (hence causing the 1257 // pre- and post-increment values both being live and thus requiring an extra 1258 // temp register and an extra move). If we "accidentally" optimize through 1259 // this kind of a Node, we'll get slightly pessimal, but correct, code. Thus 1260 // it's OK to be slightly sloppy on optimizations here. 1261 1262 // Do not allow value-numbering 1263 uint Opaque2Node::hash() const { return NO_HASH; } 1264 uint Opaque2Node::cmp( const Node &n ) const { 1265 return (&n == this); // Always fail except on self 1266 } 1267 1268 1269 //------------------------------Value------------------------------------------ 1270 const Type *MoveL2DNode::Value( PhaseTransform *phase ) const { 1271 const Type *t = phase->type( in(1) ); 1272 if( t == Type::TOP ) return Type::TOP; 1273 const TypeLong *tl = t->is_long(); 1274 if( !tl->is_con() ) return bottom_type(); 1275 JavaValue v; 1276 v.set_jlong(tl->get_con()); 1277 return TypeD::make( v.get_jdouble() ); 1278 } 1279 1280 //------------------------------Value------------------------------------------ 1281 const Type *MoveI2FNode::Value( PhaseTransform *phase ) const { 1282 const Type *t = phase->type( in(1) ); 1283 if( t == Type::TOP ) return Type::TOP; 1284 const TypeInt *ti = t->is_int(); 1285 if( !ti->is_con() ) return bottom_type(); 1286 JavaValue v; 1287 v.set_jint(ti->get_con()); 1288 return TypeF::make( v.get_jfloat() ); 1289 } 1290 1291 //------------------------------Value------------------------------------------ 1292 const Type *MoveF2INode::Value( PhaseTransform *phase ) const { 1293 const Type *t = phase->type( in(1) ); 1294 if( t == Type::TOP ) return Type::TOP; 1295 if( t == Type::FLOAT ) return TypeInt::INT; 1296 const TypeF *tf = t->is_float_constant(); 1297 JavaValue v; 1298 v.set_jfloat(tf->getf()); 1299 return TypeInt::make( v.get_jint() ); 1300 } 1301 1302 //------------------------------Value------------------------------------------ 1303 const Type *MoveD2LNode::Value( PhaseTransform *phase ) const { 1304 const Type *t = phase->type( in(1) ); 1305 if( t == Type::TOP ) return Type::TOP; 1306 if( t == Type::DOUBLE ) return TypeLong::LONG; 1307 const TypeD *td = t->is_double_constant(); 1308 JavaValue v; 1309 v.set_jdouble(td->getd()); 1310 return TypeLong::make( v.get_jlong() ); 1311 } 1312 1313 //------------------------------Value------------------------------------------ 1314 const Type* CountLeadingZerosINode::Value(PhaseTransform* phase) const { 1315 const Type* t = phase->type(in(1)); 1316 if (t == Type::TOP) return Type::TOP; 1317 const TypeInt* ti = t->isa_int(); 1318 if (ti && ti->is_con()) { 1319 jint i = ti->get_con(); 1320 // HD, Figure 5-6 1321 if (i == 0) 1322 return TypeInt::make(BitsPerInt); 1323 int n = 1; 1324 unsigned int x = i; 1325 if (x >> 16 == 0) { n += 16; x <<= 16; } 1326 if (x >> 24 == 0) { n += 8; x <<= 8; } 1327 if (x >> 28 == 0) { n += 4; x <<= 4; } 1328 if (x >> 30 == 0) { n += 2; x <<= 2; } 1329 n -= x >> 31; 1330 return TypeInt::make(n); 1331 } 1332 return TypeInt::INT; 1333 } 1334 1335 //------------------------------Value------------------------------------------ 1336 const Type* CountLeadingZerosLNode::Value(PhaseTransform* phase) const { 1337 const Type* t = phase->type(in(1)); 1338 if (t == Type::TOP) return Type::TOP; 1339 const TypeLong* tl = t->isa_long(); 1340 if (tl && tl->is_con()) { 1341 jlong l = tl->get_con(); 1342 // HD, Figure 5-6 1343 if (l == 0) 1344 return TypeInt::make(BitsPerLong); 1345 int n = 1; 1346 unsigned int x = (((julong) l) >> 32); 1347 if (x == 0) { n += 32; x = (int) l; } 1348 if (x >> 16 == 0) { n += 16; x <<= 16; } 1349 if (x >> 24 == 0) { n += 8; x <<= 8; } 1350 if (x >> 28 == 0) { n += 4; x <<= 4; } 1351 if (x >> 30 == 0) { n += 2; x <<= 2; } 1352 n -= x >> 31; 1353 return TypeInt::make(n); 1354 } 1355 return TypeInt::INT; 1356 } 1357 1358 //------------------------------Value------------------------------------------ 1359 const Type* CountTrailingZerosINode::Value(PhaseTransform* phase) const { 1360 const Type* t = phase->type(in(1)); 1361 if (t == Type::TOP) return Type::TOP; 1362 const TypeInt* ti = t->isa_int(); 1363 if (ti && ti->is_con()) { 1364 jint i = ti->get_con(); 1365 // HD, Figure 5-14 1366 int y; 1367 if (i == 0) 1368 return TypeInt::make(BitsPerInt); 1369 int n = 31; 1370 y = i << 16; if (y != 0) { n = n - 16; i = y; } 1371 y = i << 8; if (y != 0) { n = n - 8; i = y; } 1372 y = i << 4; if (y != 0) { n = n - 4; i = y; } 1373 y = i << 2; if (y != 0) { n = n - 2; i = y; } 1374 y = i << 1; if (y != 0) { n = n - 1; } 1375 return TypeInt::make(n); 1376 } 1377 return TypeInt::INT; 1378 } 1379 1380 //------------------------------Value------------------------------------------ 1381 const Type* CountTrailingZerosLNode::Value(PhaseTransform* phase) const { 1382 const Type* t = phase->type(in(1)); 1383 if (t == Type::TOP) return Type::TOP; 1384 const TypeLong* tl = t->isa_long(); 1385 if (tl && tl->is_con()) { 1386 jlong l = tl->get_con(); 1387 // HD, Figure 5-14 1388 int x, y; 1389 if (l == 0) 1390 return TypeInt::make(BitsPerLong); 1391 int n = 63; 1392 y = (int) l; if (y != 0) { n = n - 32; x = y; } else x = (((julong) l) >> 32); 1393 y = x << 16; if (y != 0) { n = n - 16; x = y; } 1394 y = x << 8; if (y != 0) { n = n - 8; x = y; } 1395 y = x << 4; if (y != 0) { n = n - 4; x = y; } 1396 y = x << 2; if (y != 0) { n = n - 2; x = y; } 1397 y = x << 1; if (y != 0) { n = n - 1; } 1398 return TypeInt::make(n); 1399 } 1400 return TypeInt::INT; 1401 }