Skip to content

Commit eb758d5

Browse files
committedJun 18, 2020
8247763: assert(outer->outcnt() == 2) failed: 'only phis' failure in LoopNode::verify_strip_mined()
Reviewed-by: kvn, thartmann
1 parent f834dc3 commit eb758d5

File tree

2 files changed

+72
-0
lines changed

2 files changed

+72
-0
lines changed
 

‎src/hotspot/share/opto/loopopts.cpp

+3
Original file line numberDiff line numberDiff line change
@@ -909,6 +909,9 @@ void PhaseIdealLoop::try_move_store_after_loop(Node* n) {
909909

910910
// Compute latest point this store can go
911911
Node* lca = get_late_ctrl(n, get_ctrl(n));
912+
if (lca->is_OuterStripMinedLoop()) {
913+
lca = lca->in(LoopNode::EntryControl);
914+
}
912915
if (n_loop->is_member(get_loop(lca))) {
913916
// LCA is in the loop - bail out
914917
_igvn.replace_node(hook, n);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
/*
2+
* Copyright (c) 2020, Red Hat, Inc. All rights reserved.
3+
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4+
*
5+
* This code is free software; you can redistribute it and/or modify it
6+
* under the terms of the GNU General Public License version 2 only, as
7+
* published by the Free Software Foundation.
8+
*
9+
* This code is distributed in the hope that it will be useful, but WITHOUT
10+
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11+
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12+
* version 2 for more details (a copy is included in the LICENSE file that
13+
* accompanied this code).
14+
*
15+
* You should have received a copy of the GNU General Public License version
16+
* 2 along with this work; if not, write to the Free Software Foundation,
17+
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18+
*
19+
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20+
* or visit www.oracle.com if you need additional information or have any
21+
* questions.
22+
*/
23+
24+
/**
25+
* @test
26+
* @bug 8247763
27+
* @summary assert(outer->outcnt() == 2) failed: 'only phis' failure in LoopNode::verify_strip_mined()
28+
*
29+
* @run main/othervm -Xcomp -XX:CompileOnly=TestStoreSunkToOuterLoop TestStoreSunkToOuterLoop
30+
*
31+
*/
32+
33+
public class TestStoreSunkToOuterLoop {
34+
35+
public static final int N = 400;
36+
public static long instanceCount=-62761L;
37+
public static boolean bFld=false;
38+
public static int iArrFld[]=new int[N];
39+
40+
public void mainTest() {
41+
42+
int i15=226, i16=54621, i19=780;
43+
float f3=0.671F, f4=-101.846F;
44+
45+
i15 = 1;
46+
do {
47+
if (bFld) continue;
48+
for (i16 = 1; i16 < 101; ++i16) {
49+
iArrFld[i16 - 1] = i15;
50+
instanceCount = i16;
51+
}
52+
} while (++i15 < 248);
53+
f3 += -2061721519L;
54+
for (f4 = 324; f4 > 3; f4--) {
55+
for (i19 = 4; i19 < 78; ++i19) {
56+
f3 -= -11;
57+
}
58+
}
59+
60+
System.out.println(instanceCount);
61+
}
62+
63+
public static void main(String[] strArr) {
64+
TestStoreSunkToOuterLoop _instance = new TestStoreSunkToOuterLoop();
65+
for (int i = 0; i < 10; i++ ) {
66+
_instance.mainTest();
67+
}
68+
}
69+
}

0 commit comments

Comments
 (0)
Please sign in to comment.