--- a/src/hotspot/share/opto/loopopts.cpp Thu Sep 20 12:49:58 2018 -0700
+++ b/src/hotspot/share/opto/loopopts.cpp Wed Sep 12 16:38:13 2018 +0200
@@ -3383,12 +3383,19 @@
if (dom_lca(exit, u_ctrl) != exit) continue;
// Hit! Refactor use to use the post-incremented tripcounter.
// Compute a post-increment tripcounter.
- Node *opaq = new Opaque2Node( C, cle->incr() );
- register_new_node(opaq, exit);
+ Node* c = exit;
+ if (cl->is_strip_mined()) {
+ IdealLoopTree* outer_loop = get_loop(cl->outer_loop());
+ if (!outer_loop->is_member(u_loop)) {
+ c = cl->outer_loop_exit();
+ }
+ }
+ Node *opaq = new Opaque2Node(C, cle->incr());
+ register_new_node(opaq, c);
Node *neg_stride = _igvn.intcon(-cle->stride_con());
set_ctrl(neg_stride, C->root());
- Node *post = new AddINode( opaq, neg_stride);
- register_new_node(post, exit);
+ Node *post = new AddINode(opaq, neg_stride);
+ register_new_node(post, c);
_igvn.rehash_node_delayed(use);
for (uint j = 1; j < use->req(); j++) {
if (use->in(j) == phi)