1 /*
2 * Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved.
3 * Copyright (c) 2020, Red Hat, Inc. All rights reserved.
4 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 *
6 * This code is free software; you can redistribute it and/or modify it
7 * under the terms of the GNU General Public License version 2 only, as
8 * published by the Free Software Foundation.
9 *
10 * This code is distributed in the hope that it will be useful, but WITHOUT
11 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
13 * version 2 for more details (a copy is included in the LICENSE file that
14 * accompanied this code).
15 *
16 * You should have received a copy of the GNU General Public License version
17 * 2 along with this work; if not, write to the Free Software Foundation,
18 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
19 *
20 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
21 * or visit www.oracle.com if you need additional information or have any
22 * questions.
23 */
24
25 /**
26 * @test
27 * @bug 8193518 8249608
28 * @summary C2: Vector registers are sometimes corrupted at safepoint
29 * @run main/othervm -XX:-BackgroundCompilation -XX:+IgnoreUnrecognizedVMOptions -XX:+UseCountedLoopSafepoints -XX:LoopStripMiningIter=2 -XX:-TieredCompilation TestVectorsNotSavedAtSafepoint test1
30 * @run main/othervm -XX:-BackgroundCompilation TestVectorsNotSavedAtSafepoint test2
31 */
32
33 import java.util.Arrays;
34
35 public class TestVectorsNotSavedAtSafepoint {
36
37 static void test1(byte[] barray1, byte[] barray2, byte[] barray3, long[] larray, long v) {
38 // Uses wide vectors, v in vector registers is live at the
39 // safepoint of the outer strip mined loop
40 for (int i = 0; i < larray.length; i++) {
41 larray[i] = v;
42 }
43 // Runs for few iterations so limited unrolling and short
44 // vectors
45 for (int i = 0; i < barray3.length; i++) {
46 barray3[i] = (byte)(barray1[i] + barray2[i]);
47 }
|
1 /*
2 * Copyright (c) 2020, 2026, Oracle and/or its affiliates. All rights reserved.
3 * Copyright (c) 2020, Red Hat, Inc. All rights reserved.
4 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 *
6 * This code is free software; you can redistribute it and/or modify it
7 * under the terms of the GNU General Public License version 2 only, as
8 * published by the Free Software Foundation.
9 *
10 * This code is distributed in the hope that it will be useful, but WITHOUT
11 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
13 * version 2 for more details (a copy is included in the LICENSE file that
14 * accompanied this code).
15 *
16 * You should have received a copy of the GNU General Public License version
17 * 2 along with this work; if not, write to the Free Software Foundation,
18 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
19 *
20 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
21 * or visit www.oracle.com if you need additional information or have any
22 * questions.
23 */
24
25 /**
26 * @test
27 * @bug 8193518 8249608
28 * @requires vm.compMode != "Xcomp"
29 * @summary C2: Vector registers are sometimes corrupted at safepoint
30 * @run main/othervm -XX:-BackgroundCompilation -XX:+IgnoreUnrecognizedVMOptions -XX:+UseCountedLoopSafepoints -XX:LoopStripMiningIter=2 -XX:-TieredCompilation TestVectorsNotSavedAtSafepoint test1
31 * @run main/othervm -XX:-BackgroundCompilation TestVectorsNotSavedAtSafepoint test2
32 */
33
34 import java.util.Arrays;
35
36 public class TestVectorsNotSavedAtSafepoint {
37
38 static void test1(byte[] barray1, byte[] barray2, byte[] barray3, long[] larray, long v) {
39 // Uses wide vectors, v in vector registers is live at the
40 // safepoint of the outer strip mined loop
41 for (int i = 0; i < larray.length; i++) {
42 larray[i] = v;
43 }
44 // Runs for few iterations so limited unrolling and short
45 // vectors
46 for (int i = 0; i < barray3.length; i++) {
47 barray3[i] = (byte)(barray1[i] + barray2[i]);
48 }
|