db359f11b5
Changed UseSwitchProfiling from experimental to diagnostic. Reviewed-by: dholmes, shade, thartmann
169 lines
7.3 KiB
Java
169 lines
7.3 KiB
Java
/*
|
|
* 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 8223502
|
|
* @summary Node estimate for loop unswitching is not correct:
|
|
* assert(delta <= 2 * required) failed: Bad node estimate
|
|
*
|
|
* @requires !vm.graal.enabled
|
|
*
|
|
* @run main/othervm -XX:-TieredCompilation -XX:-BackgroundCompilation
|
|
* -XX:-UseOnStackReplacement -XX:CompileOnly=LoopUnswitchingBadNodeBudget::test
|
|
* -XX:CompileCommand=dontinline,LoopUnswitchingBadNodeBudget::helper
|
|
* -XX:+UnlockDiagnosticVMOptions -XX:-UseSwitchProfiling LoopUnswitchingBadNodeBudget
|
|
*
|
|
*/
|
|
|
|
public class LoopUnswitchingBadNodeBudget {
|
|
|
|
public static void main(String[] args) {
|
|
for (int i = 0; i < 20_000; i++) {
|
|
for (int j = 0; j < 100; j++) {
|
|
test(j, true, 0, 0, 0);
|
|
test(j, false, 0, 0, 0);
|
|
}
|
|
}
|
|
}
|
|
|
|
private static int test(int j, boolean flag, int k, int l, int m) {
|
|
int res = 0;
|
|
for (int i = 0; i < 24; i++) {
|
|
if (flag) {
|
|
k = k / 2;
|
|
l = l * 2;
|
|
m = m + 2;
|
|
}
|
|
switch (j) {
|
|
case 0: break;
|
|
case 1: return helper(j, k, l, m);
|
|
case 2: return helper(j, k, l, m);
|
|
case 3: return helper(j, k, l, m);
|
|
case 4: return helper(j, k, l, m);
|
|
case 5: return helper(j, k, l, m);
|
|
case 6: return helper(j, k, l, m);
|
|
case 7: return helper(j, k, l, m);
|
|
case 8: return helper(j, k, l, m);
|
|
case 9: return helper(j, k, l, m);
|
|
case 10: return helper(j, k, l, m);
|
|
case 11: return helper(j, k, l, m);
|
|
case 12: return helper(j, k, l, m);
|
|
case 13: return helper(j, k, l, m);
|
|
case 14: return helper(j, k, l, m);
|
|
case 15: return helper(j, k, l, m);
|
|
case 16: return helper(j, k, l, m);
|
|
case 17: return helper(j, k, l, m);
|
|
case 18: return helper(j, k, l, m);
|
|
case 19: return helper(j, k, l, m);
|
|
case 20: return helper(j, k, l, m);
|
|
case 21: return helper(j, k, l, m);
|
|
case 22: return helper(j, k, l, m);
|
|
case 23: return helper(j, k, l, m);
|
|
case 24: return helper(j, k, l, m);
|
|
case 25: return helper(j, k, l, m);
|
|
case 26: return helper(j, k, l, m);
|
|
case 27: return helper(j, k, l, m);
|
|
case 28: return helper(j, k, l, m);
|
|
case 29: return helper(j, k, l, m);
|
|
case 30: return helper(j, k, l, m);
|
|
case 31: return helper(j, k, l, m);
|
|
case 32: return helper(j, k, l, m);
|
|
case 33: return helper(j, k, l, m);
|
|
case 34: return helper(j, k, l, m);
|
|
case 35: return helper(j, k, l, m);
|
|
case 36: return helper(j, k, l, m);
|
|
case 37: return helper(j, k, l, m);
|
|
case 38: return helper(j, k, l, m);
|
|
case 39: return helper(j, k, l, m);
|
|
case 40: return helper(j, k, l, m);
|
|
case 41: return helper(j, k, l, m);
|
|
case 42: return helper(j, k, l, m);
|
|
case 43: return helper(j, k, l, m);
|
|
case 44: return helper(j, k, l, m);
|
|
case 45: return helper(j, k, l, m);
|
|
case 46: return helper(j, k, l, m);
|
|
case 47: return helper(j, k, l, m);
|
|
case 48: return helper(j, k, l, m);
|
|
case 49: return helper(j, k, l, m);
|
|
case 50: return helper(j, k, l, m);
|
|
case 51: return helper(j, k, l, m);
|
|
case 52: return helper(j, k, l, m);
|
|
case 53: return helper(j, k, l, m);
|
|
case 54: return helper(j, k, l, m);
|
|
case 55: return helper(j, k, l, m);
|
|
case 56: return helper(j, k, l, m);
|
|
case 57: return helper(j, k, l, m);
|
|
case 58: return helper(j, k, l, m);
|
|
case 59: return helper(j, k, l, m);
|
|
case 60: return helper(j, k, l, m);
|
|
case 61: return helper(j, k, l, m);
|
|
case 62: return helper(j, k, l, m);
|
|
case 63: return helper(j, k, l, m);
|
|
case 64: return helper(j, k, l, m);
|
|
case 65: return helper(j, k, l, m);
|
|
case 66: return helper(j, k, l, m);
|
|
case 67: return helper(j, k, l, m);
|
|
case 68: return helper(j, k, l, m);
|
|
case 69: return helper(j, k, l, m);
|
|
case 70: return helper(j, k, l, m);
|
|
case 71: return helper(j, k, l, m);
|
|
case 72: return helper(j, k, l, m);
|
|
case 73: return helper(j, k, l, m);
|
|
case 74: return helper(j, k, l, m);
|
|
case 75: return helper(j, k, l, m);
|
|
case 76: return helper(j, k, l, m);
|
|
case 77: return helper(j, k, l, m);
|
|
case 78: return helper(j, k, l, m);
|
|
case 79: return helper(j, k, l, m);
|
|
case 80: return helper(j, k, l, m);
|
|
case 81: return helper(j, k, l, m);
|
|
case 82: return helper(j, k, l, m);
|
|
case 83: return helper(j, k, l, m);
|
|
case 84: return helper(j, k, l, m);
|
|
case 85: return helper(j, k, l, m);
|
|
case 86: return helper(j, k, l, m);
|
|
case 87: return helper(j, k, l, m);
|
|
case 88: return helper(j, k, l, m);
|
|
case 89: return helper(j, k, l, m);
|
|
case 90: return helper(j, k, l, m);
|
|
case 91: return helper(j, k, l, m);
|
|
case 92: return helper(j, k, l, m);
|
|
case 93: return helper(j, k, l, m);
|
|
case 94: return helper(j, k, l, m);
|
|
case 95: return helper(j, k, l, m);
|
|
case 96: return helper(j, k, l, m);
|
|
case 97: return helper(j, k, l, m);
|
|
case 98: return helper(j, k, l, m);
|
|
case 99: return helper(j, k, l, m);
|
|
}
|
|
res += helper(j, k, l, m);
|
|
}
|
|
return res;
|
|
}
|
|
|
|
private static int helper(int j, int k, int l, int m) {
|
|
return j + k;
|
|
}
|
|
}
|