Path: blob/master/test/hotspot/jtreg/compiler/loopopts/LoopUnswitchingBadNodeBudget.java
41149 views
/*1* Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.2* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.3*4* This code is free software; you can redistribute it and/or modify it5* under the terms of the GNU General Public License version 2 only, as6* published by the Free Software Foundation.7*8* This code is distributed in the hope that it will be useful, but WITHOUT9* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or10* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License11* version 2 for more details (a copy is included in the LICENSE file that12* accompanied this code).13*14* You should have received a copy of the GNU General Public License version15* 2 along with this work; if not, write to the Free Software Foundation,16* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.17*18* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA19* or visit www.oracle.com if you need additional information or have any20* questions.21*/2223/*24* @test25* @bug 822350226* @summary Node estimate for loop unswitching is not correct:27* assert(delta <= 2 * required) failed: Bad node estimate28*29* @requires !vm.graal.enabled30*31* @run main/othervm -XX:-TieredCompilation -XX:-BackgroundCompilation32* -XX:-UseOnStackReplacement -XX:CompileOnly=LoopUnswitchingBadNodeBudget::test33* -XX:CompileCommand=dontinline,LoopUnswitchingBadNodeBudget::helper34* -XX:+UnlockDiagnosticVMOptions -XX:-UseSwitchProfiling LoopUnswitchingBadNodeBudget35*36*/3738public class LoopUnswitchingBadNodeBudget {3940public static void main(String[] args) {41for (int i = 0; i < 20_000; i++) {42for (int j = 0; j < 100; j++) {43test(j, true, 0, 0, 0);44test(j, false, 0, 0, 0);45}46}47}4849private static int test(int j, boolean flag, int k, int l, int m) {50int res = 0;51for (int i = 0; i < 24; i++) {52if (flag) {53k = k / 2;54l = l * 2;55m = m + 2;56}57switch (j) {58case 0: break;59case 1: return helper(j, k, l, m);60case 2: return helper(j, k, l, m);61case 3: return helper(j, k, l, m);62case 4: return helper(j, k, l, m);63case 5: return helper(j, k, l, m);64case 6: return helper(j, k, l, m);65case 7: return helper(j, k, l, m);66case 8: return helper(j, k, l, m);67case 9: return helper(j, k, l, m);68case 10: return helper(j, k, l, m);69case 11: return helper(j, k, l, m);70case 12: return helper(j, k, l, m);71case 13: return helper(j, k, l, m);72case 14: return helper(j, k, l, m);73case 15: return helper(j, k, l, m);74case 16: return helper(j, k, l, m);75case 17: return helper(j, k, l, m);76case 18: return helper(j, k, l, m);77case 19: return helper(j, k, l, m);78case 20: return helper(j, k, l, m);79case 21: return helper(j, k, l, m);80case 22: return helper(j, k, l, m);81case 23: return helper(j, k, l, m);82case 24: return helper(j, k, l, m);83case 25: return helper(j, k, l, m);84case 26: return helper(j, k, l, m);85case 27: return helper(j, k, l, m);86case 28: return helper(j, k, l, m);87case 29: return helper(j, k, l, m);88case 30: return helper(j, k, l, m);89case 31: return helper(j, k, l, m);90case 32: return helper(j, k, l, m);91case 33: return helper(j, k, l, m);92case 34: return helper(j, k, l, m);93case 35: return helper(j, k, l, m);94case 36: return helper(j, k, l, m);95case 37: return helper(j, k, l, m);96case 38: return helper(j, k, l, m);97case 39: return helper(j, k, l, m);98case 40: return helper(j, k, l, m);99case 41: return helper(j, k, l, m);100case 42: return helper(j, k, l, m);101case 43: return helper(j, k, l, m);102case 44: return helper(j, k, l, m);103case 45: return helper(j, k, l, m);104case 46: return helper(j, k, l, m);105case 47: return helper(j, k, l, m);106case 48: return helper(j, k, l, m);107case 49: return helper(j, k, l, m);108case 50: return helper(j, k, l, m);109case 51: return helper(j, k, l, m);110case 52: return helper(j, k, l, m);111case 53: return helper(j, k, l, m);112case 54: return helper(j, k, l, m);113case 55: return helper(j, k, l, m);114case 56: return helper(j, k, l, m);115case 57: return helper(j, k, l, m);116case 58: return helper(j, k, l, m);117case 59: return helper(j, k, l, m);118case 60: return helper(j, k, l, m);119case 61: return helper(j, k, l, m);120case 62: return helper(j, k, l, m);121case 63: return helper(j, k, l, m);122case 64: return helper(j, k, l, m);123case 65: return helper(j, k, l, m);124case 66: return helper(j, k, l, m);125case 67: return helper(j, k, l, m);126case 68: return helper(j, k, l, m);127case 69: return helper(j, k, l, m);128case 70: return helper(j, k, l, m);129case 71: return helper(j, k, l, m);130case 72: return helper(j, k, l, m);131case 73: return helper(j, k, l, m);132case 74: return helper(j, k, l, m);133case 75: return helper(j, k, l, m);134case 76: return helper(j, k, l, m);135case 77: return helper(j, k, l, m);136case 78: return helper(j, k, l, m);137case 79: return helper(j, k, l, m);138case 80: return helper(j, k, l, m);139case 81: return helper(j, k, l, m);140case 82: return helper(j, k, l, m);141case 83: return helper(j, k, l, m);142case 84: return helper(j, k, l, m);143case 85: return helper(j, k, l, m);144case 86: return helper(j, k, l, m);145case 87: return helper(j, k, l, m);146case 88: return helper(j, k, l, m);147case 89: return helper(j, k, l, m);148case 90: return helper(j, k, l, m);149case 91: return helper(j, k, l, m);150case 92: return helper(j, k, l, m);151case 93: return helper(j, k, l, m);152case 94: return helper(j, k, l, m);153case 95: return helper(j, k, l, m);154case 96: return helper(j, k, l, m);155case 97: return helper(j, k, l, m);156case 98: return helper(j, k, l, m);157case 99: return helper(j, k, l, m);158}159res += helper(j, k, l, m);160}161return res;162}163164private static int helper(int j, int k, int l, int m) {165return j + k;166}167}168169170