# HG changeset patch # User roland # Date 1580875979 0 # Node ID aa627f367a9a51542821dd4a20c372b23166f284 # Parent 2ab077a70b7962d4b2beea5cdeb653bb8d8f7cc5 8149543: range check CastII nodes should not be split through Phi Summary: splitting range check CastIIs through loop induction Phi prevents further optimizations Reviewed-by: kvn, mcberg diff -r 2ab077a70b79 -r aa627f367a9a src/share/vm/opto/loopopts.cpp --- a/src/share/vm/opto/loopopts.cpp Tue Feb 04 17:02:36 2020 +0000 +++ b/src/share/vm/opto/loopopts.cpp Wed Feb 05 04:12:59 2020 +0000 @@ -42,6 +42,15 @@ // so disable this for now return NULL; } + + // Splitting range check CastIIs through a loop induction Phi can + // cause new Phis to be created that are left unrelated to the loop + // induction Phi and prevent optimizations (vectorization) + if (n->Opcode() == Op_CastII && n->as_CastII()->has_range_check() && + region->is_CountedLoop() && n->in(1) == region->as_CountedLoop()->phi()) { + return NULL; + } + int wins = 0; assert(!n->is_CFG(), ""); assert(region->is_Region(), "");