jdk

Форк
0
/
TestRangeCheckCmpUOverflowVsSub.java 
64 строки · 2.3 Кб
1
/*
2
 * Copyright (c) 2023, Oracle and/or its affiliates. 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 8299959
27
 * @summary In CmpU::Value, the sub computation may be narrower than the overflow computation.
28
 * @requires vm.compiler2.enabled
29
 *
30
 * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+StressCCP -Xcomp -XX:-TieredCompilation
31
 *                   -XX:CompileCommand=compileonly,compiler.rangechecks.TestRangeCheckCmpUOverflowVsSub::test
32
 *                   -XX:RepeatCompilation=50
33
 *                   compiler.rangechecks.TestRangeCheckCmpUOverflowVsSub
34
*/
35

36
package compiler.rangechecks;
37

38
public class TestRangeCheckCmpUOverflowVsSub {
39
    static int arr[] = new int[400];
40

41
    public static void main(String[] strArr) {
42
        for (int i = 0; i < 10; i++) {
43
            test(); // repeat for multiple compilations
44
        }
45
    }
46

47
    static void test() {
48
        for(int i = 0; i < 50_000; i++) {} //empty loop - trigger OSR faster
49
        int val;
50
        int zero = arr[5];
51
        int i = 1;
52
        do {
53
            for (int j = 1; j < 3; j++) {
54
                for (int k = 2; k > i; k -= 3) {
55
                    try {
56
                        val = arr[i + 1] % k;
57
                        val = arr[i - 1] % zero;
58
                        val = arr[k - 1];
59
                    } catch (ArithmeticException e) {} // catch div by zero
60
                }
61
            }
62
        } while (++i < 3);
63
    }
64
}
65

66

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.