comparison src/share/vm/opto/loopnode.cpp @ 1083:8b22f86d1740

6901572: JVM 1.6.16 crash on loops: assert(has_node(i),"") Summary: Skip the secondary induction variable handling if it is dead Reviewed-by: never, kvn
author cfang
date Wed, 02 Dec 2009 13:29:00 -0800
parents 046932b72aa2
children b2b6a9bf6238
comparison
equal deleted inserted replaced
1082:facbc74580c3 1083:8b22f86d1740
1277 // Look for induction variables 1277 // Look for induction variables
1278 1278
1279 // Visit all children, looking for Phis 1279 // Visit all children, looking for Phis
1280 for (DUIterator i = cl->outs(); cl->has_out(i); i++) { 1280 for (DUIterator i = cl->outs(); cl->has_out(i); i++) {
1281 Node *out = cl->out(i); 1281 Node *out = cl->out(i);
1282 if (!out->is_Phi() || out == phi) continue; // Looking for other phis 1282 // Look for other phis (secondary IVs). Skip dead ones
1283 if (!out->is_Phi() || out == phi || !phase->has_node(out)) continue;
1283 PhiNode* phi2 = out->as_Phi(); 1284 PhiNode* phi2 = out->as_Phi();
1284 Node *incr2 = phi2->in( LoopNode::LoopBackControl ); 1285 Node *incr2 = phi2->in( LoopNode::LoopBackControl );
1285 // Look for induction variables of the form: X += constant 1286 // Look for induction variables of the form: X += constant
1286 if( phi2->region() != _head || 1287 if( phi2->region() != _head ||
1287 incr2->req() != 3 || 1288 incr2->req() != 3 ||