test/compiler/8005419/Test8005419.java

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

author
fzhinkin
date
Mon, 28 Jul 2014 15:06:38 -0700
changeset 6997
dbb05f6d93c4
parent 6198
55fb97c4c58d
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

kvn@4413 1 /*
mikael@6198 2 * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
kvn@4413 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
kvn@4413 4 *
kvn@4413 5 * This code is free software; you can redistribute it and/or modify it
kvn@4413 6 * under the terms of the GNU General Public License version 2 only, as
kvn@4413 7 * published by the Free Software Foundation.
kvn@4413 8 *
kvn@4413 9 * This code is distributed in the hope that it will be useful, but WITHOUT
kvn@4413 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
kvn@4413 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
kvn@4413 12 * version 2 for more details (a copy is included in the LICENSE file that
kvn@4413 13 * accompanied this code).
kvn@4413 14 *
kvn@4413 15 * You should have received a copy of the GNU General Public License version
kvn@4413 16 * 2 along with this work; if not, write to the Free Software Foundation,
kvn@4413 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
kvn@4413 18 *
kvn@4413 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
kvn@4413 20 * or visit www.oracle.com if you need additional information or have any
kvn@4413 21 * questions.
kvn@4413 22 */
kvn@4413 23
kvn@4413 24 /*
kvn@4413 25 * @test
kvn@4413 26 * @bug 8005419
kvn@4413 27 * @summary Improve intrinsics code performance on x86 by using AVX2
kvn@4413 28 * @run main/othervm -Xbatch -Xmx64m Test8005419
kvn@4413 29 *
kvn@4413 30 */
kvn@4413 31
kvn@4413 32 public class Test8005419 {
kvn@4413 33 public static int SIZE = 64;
kvn@4413 34
kvn@4413 35 public static void main(String[] args) {
kvn@4413 36 char[] a = new char[SIZE];
kvn@4413 37 char[] b = new char[SIZE];
kvn@4413 38
kvn@4413 39 for (int i = 16; i < SIZE; i++) {
kvn@4413 40 a[i] = (char)i;
kvn@4413 41 b[i] = (char)i;
kvn@4413 42 }
kvn@4413 43 String s1 = new String(a);
kvn@4413 44 String s2 = new String(b);
kvn@4413 45
kvn@4413 46 // Warm up
kvn@4413 47 boolean failed = false;
kvn@4413 48 int result = 0;
kvn@4413 49 for (int i = 0; i < 10000; i++) {
kvn@4413 50 result += test(s1, s2);
kvn@4413 51 }
kvn@4413 52 for (int i = 0; i < 10000; i++) {
kvn@4413 53 result += test(s1, s2);
kvn@4413 54 }
kvn@4413 55 for (int i = 0; i < 10000; i++) {
kvn@4413 56 result += test(s1, s2);
kvn@4413 57 }
kvn@4413 58 if (result != 0) failed = true;
kvn@4413 59
kvn@4413 60 System.out.println("Start testing");
kvn@4413 61 // Compare same string
kvn@4413 62 result = test(s1, s1);
kvn@4413 63 if (result != 0) {
kvn@4413 64 failed = true;
kvn@4413 65 System.out.println("Failed same: result = " + result + ", expected 0");
kvn@4413 66 }
kvn@4413 67 // Compare equal strings
kvn@4413 68 for (int i = 1; i <= SIZE; i++) {
kvn@4413 69 s1 = new String(a, 0, i);
kvn@4413 70 s2 = new String(b, 0, i);
kvn@4413 71 result = test(s1, s2);
kvn@4413 72 if (result != 0) {
kvn@4413 73 failed = true;
kvn@4413 74 System.out.println("Failed equals s1[" + i + "], s2[" + i + "]: result = " + result + ", expected 0");
kvn@4413 75 }
kvn@4413 76 }
kvn@4413 77 // Compare equal strings but different sizes
kvn@4413 78 for (int i = 1; i <= SIZE; i++) {
kvn@4413 79 s1 = new String(a, 0, i);
kvn@4413 80 for (int j = 1; j <= SIZE; j++) {
kvn@4413 81 s2 = new String(b, 0, j);
kvn@4413 82 result = test(s1, s2);
kvn@4413 83 if (result != (i-j)) {
kvn@4413 84 failed = true;
kvn@4413 85 System.out.println("Failed diff size s1[" + i + "], s2[" + j + "]: result = " + result + ", expected " + (i-j));
kvn@4413 86 }
kvn@4413 87 }
kvn@4413 88 }
kvn@4413 89 // Compare strings with one char different and different sizes
kvn@4413 90 for (int i = 1; i <= SIZE; i++) {
kvn@4413 91 s1 = new String(a, 0, i);
kvn@4413 92 for (int j = 0; j < i; j++) {
kvn@4413 93 b[j] -= 3; // change char
kvn@4413 94 s2 = new String(b, 0, i);
kvn@4413 95 result = test(s1, s2);
kvn@4413 96 int chdiff = a[j] - b[j];
kvn@4413 97 if (result != chdiff) {
kvn@4413 98 failed = true;
kvn@4413 99 System.out.println("Failed diff char s1[" + i + "], s2[" + i + "]: result = " + result + ", expected " + chdiff);
kvn@4413 100 }
kvn@4413 101 result = test(s2, s1);
kvn@4413 102 chdiff = b[j] - a[j];
kvn@4413 103 if (result != chdiff) {
kvn@4413 104 failed = true;
kvn@4413 105 System.out.println("Failed diff char s2[" + i + "], s1[" + i + "]: result = " + result + ", expected " + chdiff);
kvn@4413 106 }
kvn@4413 107 b[j] += 3; // restore
kvn@4413 108 }
kvn@4413 109 }
kvn@4413 110 if (failed) {
kvn@4413 111 System.out.println("FAILED");
kvn@4413 112 System.exit(97);
kvn@4413 113 }
kvn@4413 114 System.out.println("PASSED");
kvn@4413 115 }
kvn@4413 116
kvn@4413 117 private static int test(String str1, String str2) {
kvn@4413 118 return str1.compareTo(str2);
kvn@4413 119 }
kvn@4413 120 }

mercurial