代码拉取完成,页面将自动刷新
同步操作将从 src-openEuler/openjdk-21 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
Subject: [PATCH] Backport JDK-8340532: C2: assert(is_OuterStripMinedLoop())
failed: invalid node class: IfTrue
---
src/hotspot/share/opto/ifnode.cpp | 8 +++
src/hotspot/share/opto/loopTransform.cpp | 1 -
.../TestIdenticalDominatingCLE.java | 66 +++++++++++++++++++
3 files changed, 74 insertions(+), 1 deletion(-)
create mode 100644 test/hotspot/jtreg/compiler/loopstripmining/TestIdenticalDominatingCLE.java
diff --git a/src/hotspot/share/opto/ifnode.cpp b/src/hotspot/share/opto/ifnode.cpp
index f63f4ae80..f0e1b154d 100644
--- a/src/hotspot/share/opto/ifnode.cpp
+++ b/src/hotspot/share/opto/ifnode.cpp
@@ -1494,6 +1494,14 @@ Node* IfNode::Ideal(PhaseGVN *phase, bool can_reshape) {
Node* prev_dom = search_identical(dist);
if (prev_dom != nullptr) {
+ // Dominating CountedLoopEnd (left over from some now dead loop) will become the new loop exit. Outer strip mined
+ // loop will go away. Mark this loop as no longer strip mined.
+ if (is_CountedLoopEnd()) {
+ CountedLoopNode* counted_loop_node = as_CountedLoopEnd()->loopnode();
+ if (counted_loop_node != nullptr) {
+ counted_loop_node->clear_strip_mined();
+ }
+ }
// Replace dominated IfNode
return dominated_by(prev_dom, igvn, false);
}
diff --git a/src/hotspot/share/opto/loopTransform.cpp b/src/hotspot/share/opto/loopTransform.cpp
index e35657cd1..bb9a54919 100644
--- a/src/hotspot/share/opto/loopTransform.cpp
+++ b/src/hotspot/share/opto/loopTransform.cpp
@@ -717,7 +717,6 @@ void PhaseIdealLoop::do_peeling(IdealLoopTree *loop, Node_List &old_new) {
#endif
}
}
- Node* entry = head->in(LoopNode::EntryControl);
// Step 1: Clone the loop body. The clone becomes the peeled iteration.
// The pre-loop illegally has 2 control users (old & new loops).
diff --git a/test/hotspot/jtreg/compiler/loopstripmining/TestIdenticalDominatingCLE.java b/test/hotspot/jtreg/compiler/loopstripmining/TestIdenticalDominatingCLE.java
new file mode 100644
index 000000000..371c0fb2b
--- /dev/null
+++ b/test/hotspot/jtreg/compiler/loopstripmining/TestIdenticalDominatingCLE.java
@@ -0,0 +1,66 @@
+/*
+ * Copyright (c) 2024, 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 8340532
+ * @summary C2: assert(is_OuterStripMinedLoop()) failed: invalid node class: IfTrue
+ * @requires vm.compiler2.enabled
+ * @run main/othervm -XX:CompileOnly=TestIdenticalDominatingCLE::* -XX:CompileThreshold=100 -Xcomp -XX:-TieredCompilation
+ * -XX:-RangeCheckElimination -XX:LoopMaxUnroll=0 TestIdenticalDominatingCLE
+ *
+ */
+
+
+public class TestIdenticalDominatingCLE {
+ boolean bFld;
+ long lFld;
+ float[][] fArr = new float[6][6];
+
+ public static void main(String[] var0) {
+ TestIdenticalDominatingCLE t = new TestIdenticalDominatingCLE();
+ t.test();
+ }
+
+ void test() {
+ int i = 0;
+ do {
+ for (int j = 0; j < 2; j++) {
+ float f = fArr[j][3] / Float.valueOf((float)1.318095814E9);
+ switch (i) {
+ case 1:
+ if (bFld ^ bFld) {
+ } else {
+ for (int k = 0; k < 600; k++) {
+ }
+ }
+ break;
+ default:
+ if (bFld) {
+ }
+ }
+ }
+ lFld = ++i;
+ } while (i < 6);
+ }
+}
--
2.48.1
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。