480 assert(vw > 1, "sanity"); |
480 assert(vw > 1, "sanity"); |
481 Node* init_nd = pre_end->init_trip(); |
481 Node* init_nd = pre_end->init_trip(); |
482 if (init_nd->is_Con() && p.invar() == NULL) { |
482 if (init_nd->is_Con() && p.invar() == NULL) { |
483 int init = init_nd->bottom_type()->is_int()->get_con(); |
483 int init = init_nd->bottom_type()->is_int()->get_con(); |
484 int init_offset = init * p.scale_in_bytes() + offset; |
484 int init_offset = init * p.scale_in_bytes() + offset; |
485 assert(init_offset >= 0, "positive offset from object start"); |
485 if (init_offset < 0) { // negative offset from object start? |
|
486 return false; // may happen in dead loop |
|
487 } |
486 if (vw % span == 0) { |
488 if (vw % span == 0) { |
487 // If vm is a multiple of span, we use formula (1). |
489 // If vm is a multiple of span, we use formula (1). |
488 if (span > 0) { |
490 if (span > 0) { |
489 return (vw - (init_offset % vw)) % span == 0; |
491 return (vw - (init_offset % vw)) % span == 0; |
490 } else { |
492 } else { |