Skip to content
Permalink
Browse files

8230185: assert(is_Loop()) failed: invalid node class

Adding missing check for a counted loop.

Reviewed-by: kvn, thartmann
  • Loading branch information
Jatin Bhateja
Jatin Bhateja committed Dec 18, 2019
1 parent b2c3323 commit 079db54d516bdec725aa552bbe43ee81041ef2b5
@@ -498,9 +498,10 @@ Node *PhaseIdealLoop::convert_add_to_muladd(Node* n) {
Node * in2 = n->in(2);
if (in1->Opcode() == Op_MulI && in2->Opcode() == Op_MulI) {
IdealLoopTree* loop_n = get_loop(get_ctrl(n));
if (loop_n->_head->as_Loop()->is_valid_counted_loop() &&
Matcher::match_rule_supported(Op_MulAddS2I) &&
Matcher::match_rule_supported(Op_MulAddVS2VI)) {
if (loop_n->is_counted() &&
loop_n->_head->as_Loop()->is_valid_counted_loop() &&
Matcher::match_rule_supported(Op_MulAddVS2VI) &&
Matcher::match_rule_supported(Op_MulAddS2I)) {
Node* mul_in1 = in1->in(1);
Node* mul_in2 = in1->in(2);
Node* mul_in3 = in2->in(1);
@@ -0,0 +1,60 @@
/*
* Copyright (c) 2019, Oracle and/or its affiliates. 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 8230185
* @summary assert(is_Loop()) failed: invalid node class, during OSR compilation
* for VNNI pattern match.
*
* @run main/othervm -Xcomp
* -XX:CompileCommand=compileonly,compiler.loopopts.TestIrreducibleLoopWithVNNI::*
* compiler.loopopts.TestIrreducibleLoopWithVNNI
*/

package compiler.loopopts;

public class TestIrreducibleLoopWithVNNI {
public static boolean condition = false;

public static void main(String[] strArr) {
TestIrreducibleLoopWithVNNI _instance = new TestIrreducibleLoopWithVNNI();
for (int i = 0; i < 10; i++) {
_instance.mainTest();
}
}

public void mainTest() {
int a = 1, b = 1, c = 1, d = 51;
for (b = 0; b < 100; b++) {
a = a + b * 342;
for (c = 0; c < 100; c++) {
for (d = 0; d < 1; d++)
a = d;
if (condition)
break;
}
a = d * a;
}
}
}

0 comments on commit 079db54

Please sign in to comment.
You can’t perform that action at this time.