8202950: C2: assert(found_sfpt) failed: no node in loop that's not input to safepoint
Reviewed-by: neliasso, kvn
This commit is contained in:
parent
dd889cff52
commit
76bb390810
src/hotspot/share/opto
test/hotspot/jtreg/compiler/loopstripmining
@ -1667,6 +1667,18 @@ void PhaseIdealLoop::clone_loop_handle_data_uses(Node* old, Node_List &old_new,
|
||||
continue;
|
||||
}
|
||||
|
||||
// If use is referenced through control edge... (idx == 0)
|
||||
if (mode == IgnoreStripMined && idx == 0) {
|
||||
LoopNode *head = loop->_head->as_Loop();
|
||||
if (head->is_strip_mined() && is_dominator(head->outer_loop_exit(), prev)) {
|
||||
// That node is outside the inner loop, leave it outside the
|
||||
// outer loop as well to not confuse verification code.
|
||||
assert(!loop->_parent->is_member(use_loop), "should be out of the outer loop");
|
||||
_igvn.replace_input_of(use, 0, head->outer_loop_exit());
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
while(!outer_loop->is_member(get_loop(cfg))) {
|
||||
prev = cfg;
|
||||
cfg = cfg->_idx >= new_counter ? cfg->in(2) : idom(cfg);
|
||||
|
@ -0,0 +1,57 @@
|
||||
/*
|
||||
* Copyright (c) 2018, Red Hat, Inc. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License version 2 only, as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
* version 2 for more details (a copy is included in the LICENSE file that
|
||||
* accompanied this code).
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License version
|
||||
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*
|
||||
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
* or visit www.oracle.com if you need additional information or have any
|
||||
* questions.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @test
|
||||
* @bug 8202950
|
||||
* @summary C2: assert(found_sfpt) failed: no node in loop that's not input to safepoint
|
||||
*
|
||||
* @run main/othervm -Xcomp -Xbatch -XX:CompileOnly=UnexpectedPinnedNodeInOuterLoop -XX:-TieredCompilation UnexpectedPinnedNodeInOuterLoop
|
||||
*
|
||||
*/
|
||||
|
||||
public class UnexpectedPinnedNodeInOuterLoop {
|
||||
|
||||
public static final int N = 400;
|
||||
|
||||
public static volatile float fFld=0.488F;
|
||||
public static volatile int iFld=143;
|
||||
|
||||
public static void lMeth(int i2) {
|
||||
int i20=95, i21=-163, i22=-11, iArr[]=new int[N], iArr2[]=new int[N];
|
||||
byte by1=-97;
|
||||
|
||||
for (i20 = 15; 253 > i20; ++i20) {
|
||||
iFld += i21;
|
||||
for (i22 = 1; 7 > i22; i22++) {
|
||||
iArr[i20 + 1] >>= i20;
|
||||
}
|
||||
fFld = i2;
|
||||
iArr2[i20] -= (int)2.302F;
|
||||
}
|
||||
}
|
||||
|
||||
public static void main(String[] strArr) {
|
||||
lMeth(0);
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user