Wed, 21 May 2014 10:56:41 -0700
Added tag jdk8u20-b15 for changeset 8c785f9bde6f
never@1472 | 1 | /* |
trims@1907 | 2 | * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. |
never@1472 | 3 | * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
never@1472 | 4 | * |
never@1472 | 5 | * This code is free software; you can redistribute it and/or modify it |
never@1472 | 6 | * under the terms of the GNU General Public License version 2 only, as |
never@1472 | 7 | * published by the Free Software Foundation. |
never@1472 | 8 | * |
never@1472 | 9 | * This code is distributed in the hope that it will be useful, but WITHOUT |
never@1472 | 10 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
never@1472 | 11 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
never@1472 | 12 | * version 2 for more details (a copy is included in the LICENSE file that |
never@1472 | 13 | * accompanied this code). |
never@1472 | 14 | * |
never@1472 | 15 | * You should have received a copy of the GNU General Public License version |
never@1472 | 16 | * 2 along with this work; if not, write to the Free Software Foundation, |
never@1472 | 17 | * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
never@1472 | 18 | * |
trims@1907 | 19 | * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
trims@1907 | 20 | * or visit www.oracle.com if you need additional information or have any |
trims@1907 | 21 | * questions. |
never@1472 | 22 | * |
never@1472 | 23 | */ |
never@1472 | 24 | |
never@1472 | 25 | /** |
never@1472 | 26 | * @test |
never@1472 | 27 | * @bug 6891750 |
never@1472 | 28 | * @summary deopt blob kills values in O5 |
never@1472 | 29 | * |
never@1472 | 30 | * @run main Test6891750 |
never@1472 | 31 | */ |
never@1472 | 32 | |
never@1472 | 33 | abstract class Base6891750 extends Thread { |
never@1472 | 34 | abstract public long m(); |
never@1472 | 35 | } |
never@1472 | 36 | class Other6891750 extends Base6891750 { |
never@1472 | 37 | public long m() { |
never@1472 | 38 | return 0; |
never@1472 | 39 | } |
never@1472 | 40 | } |
never@1472 | 41 | |
never@1472 | 42 | public class Test6891750 extends Base6891750 { |
never@1472 | 43 | Base6891750 d; |
never@1472 | 44 | volatile long value = 9; |
never@1472 | 45 | |
never@1472 | 46 | static int limit = 400000; |
never@1472 | 47 | |
never@1472 | 48 | Test6891750() { |
never@1472 | 49 | d = this; |
never@1472 | 50 | |
never@1472 | 51 | } |
never@1472 | 52 | public long m() { |
never@1472 | 53 | return value; |
never@1472 | 54 | } |
never@1472 | 55 | |
never@1472 | 56 | public long test(boolean doit) { |
never@1472 | 57 | if (doit) { |
never@1472 | 58 | long total0 = 0; |
never@1472 | 59 | long total1 = 0; |
never@1472 | 60 | long total2 = 0; |
never@1472 | 61 | long total3 = 0; |
never@1472 | 62 | long total4 = 0; |
never@1472 | 63 | long total5 = 0; |
never@1472 | 64 | long total6 = 0; |
never@1472 | 65 | long total7 = 0; |
never@1472 | 66 | long total8 = 0; |
never@1472 | 67 | long total9 = 0; |
never@1472 | 68 | for (int i = 0; i < limit; i++) { |
never@1472 | 69 | total0 += d.m(); |
never@1472 | 70 | total1 += d.m(); |
never@1472 | 71 | total2 += d.m(); |
never@1472 | 72 | total3 += d.m(); |
never@1472 | 73 | total4 += d.m(); |
never@1472 | 74 | total5 += d.m(); |
never@1472 | 75 | total6 += d.m(); |
never@1472 | 76 | total7 += d.m(); |
never@1472 | 77 | total8 += d.m(); |
never@1472 | 78 | total9 += d.m(); |
never@1472 | 79 | } |
never@1472 | 80 | return total0 + total1 + total2 + total3 + total4 + total5 + total6 + total7 + total8 + total9; |
never@1472 | 81 | } |
never@1472 | 82 | return 0; |
never@1472 | 83 | } |
never@1472 | 84 | |
never@1472 | 85 | public void run() { |
never@1472 | 86 | long result = test(true); |
never@1472 | 87 | for (int i = 0; i < 300; i++) { |
never@1472 | 88 | long result2 = test(true); |
never@1472 | 89 | if (result != result2) { |
never@1472 | 90 | throw new InternalError(result + " != " + result2); |
never@1472 | 91 | } |
never@1472 | 92 | } |
never@1472 | 93 | } |
never@1472 | 94 | |
never@1472 | 95 | public static void main(String[] args) throws Exception { |
never@1472 | 96 | Test6891750 Test6891750 = new Test6891750(); |
never@1472 | 97 | // warm it up |
never@1472 | 98 | for (int i = 0; i < 200000; i++) { |
never@1472 | 99 | Test6891750.test(false); |
never@1472 | 100 | } |
never@1472 | 101 | // set in off running |
never@1472 | 102 | Test6891750.start(); |
never@1472 | 103 | Thread.sleep(2000); |
never@1472 | 104 | |
never@1472 | 105 | // Load a class to invalidate CHA |
never@1472 | 106 | new Other6891750(); |
never@1472 | 107 | } |
never@1472 | 108 | } |