# HG changeset patch # User roland # Date 1455190932 -3600 # Node ID 5c3f2bcc3b9488c999d16cfc5ba1922a1373ca36 # Parent c9035b8e388be31121c7d1e5c8cd6d6c3777209b 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 c9035b8e388b -r 5c3f2bcc3b94 src/share/vm/opto/loopopts.cpp --- a/src/share/vm/opto/loopopts.cpp Wed Feb 03 10:58:50 2016 +0100 +++ b/src/share/vm/opto/loopopts.cpp Thu Feb 11 12:42:12 2016 +0100 @@ -43,6 +43,14 @@ 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(), "");