test/compiler/6891750/Test6891750.java

Mon, 28 Jul 2014 15:06:38 -0700

author
fzhinkin
date
Mon, 28 Jul 2014 15:06:38 -0700
changeset 6997
dbb05f6d93c4
parent 1907
c18cbe5936b8
child 6876
710a3c8b516e
permissions
-rw-r--r--

8051344: JVM crashed in Compile::start() during method parsing w/ UseRTMDeopt turned on
Summary: call rtm_deopt() only if there were no compilation bailouts before.
Reviewed-by: kvn

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 }

mercurial