test/compiler/6689060/Test.java

Wed, 27 Apr 2016 01:25:04 +0800

author
aoqi
date
Wed, 27 Apr 2016 01:25:04 +0800
changeset 0
f90c822e73f8
child 6876
710a3c8b516e
permissions
-rw-r--r--

Initial load
http://hg.openjdk.java.net/jdk8u/jdk8u/hotspot/
changeset: 6782:28b50d07f6f8
tag: jdk8u25-b17

     1 /*
     2  * Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved.
     3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     4  *
     5  * This code is free software; you can redistribute it and/or modify it
     6  * under the terms of the GNU General Public License version 2 only, as
     7  * published by the Free Software Foundation.
     8  *
     9  * This code is distributed in the hope that it will be useful, but WITHOUT
    10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
    12  * version 2 for more details (a copy is included in the LICENSE file that
    13  * accompanied this code).
    14  *
    15  * You should have received a copy of the GNU General Public License version
    16  * 2 along with this work; if not, write to the Free Software Foundation,
    17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
    18  *
    19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
    20  * or visit www.oracle.com if you need additional information or have any
    21  * questions.
    22  */
    24 /*
    25  * @test
    26  * @bug 6689060
    27  * @summary Escape Analysis does not work with Compressed Oops
    28  * @run main/othervm -Xbatch -XX:CompileCommand=exclude,Test.dummy -XX:+AggressiveOpts Test
    29  */
    31 import java.lang.reflect.Array;
    33 class Point {
    34   int x;
    35   int y;
    36   Point next;
    37   int ax[];
    38   int ay[];
    39   Point pax[];
    40   Point pay[];
    41   public Point getNext() {
    42     return next;
    43   }
    44 }
    46 public class Test {
    48   void dummy() {
    49     // Empty method to verify correctness of DebugInfo.
    50     // Use -XX:CompileCommand=exclude,Test.dummy
    51   }
    53   int ival(int i) {
    54     return i*2;
    55   }
    57   int test80(int y, int l, int i) {
    58     Point p = new Point();
    59     p.ax = new int[2];
    60     p.ay = new int[2];
    61     int x = 3;
    62     p.ax[0] = x;
    63     p.ay[1] = 3 * x + y;
    64     dummy();
    65     return p.ax[0] * p.ay[1];
    66   }
    68   int test81(int y, int l, int i) {
    69     Point p = new Point();
    70     p.ax = new int[2];
    71     p.ay = new int[2];
    72     int x = 3;
    73     p.ax[0] = x;
    74     p.ay[1] = 3 * x + y;
    75     dummy();
    76     return p.ax[0] * p.ay[1];
    77   }
    80   int test44(int y) {
    81     Point p1 = new Point();
    82     p1.x = ival(3);
    83     dummy();
    84     p1.y = 3 * p1.x + y;
    85     return p1.y;
    86   }
    88   int test43(int y) {
    89     Point p1 = new Point();
    90     if ( (y & 1) == 1 ) {
    91       p1.x = ival(3);
    92     } else {
    93       p1.x = ival(5);
    94     }
    95     dummy();
    96     p1.y = 3 * p1.x + y;
    97     return p1.y;
    98   }
   100   int test42(int y) {
   101     Point p1 = new Point();
   102     p1.x = 3;
   103     for (int i = 0; i < y; i++) {
   104       if ( (i & 1) == 1 ) {
   105         p1.x += 4;
   106       }
   107     }
   108     p1.y = 3 * y + p1.x;
   109     return p1.y;
   110   }
   112   int test40(int y) {
   113     Point p1 = new Point();
   114     if ( (y & 1) == 1 ) {
   115       p1.x = 3;
   116     } else {
   117       p1.x = 5;
   118     }
   119     p1.y = 3 * p1.x + y;
   120     return p1.y;
   121   }
   123   int test41(int y) {
   124     Point p1 = new Point();
   125     if ( (y & 1) == 1 ) {
   126       p1.x += 4;
   127     } else {
   128       p1.x += 5;
   129     }
   130     p1.y = 3 * p1.x + y;
   131     return p1.y;
   132   }
   134   Point test00(int y) {
   135     int x = 3;
   136     Point p = new Point();
   137     p.x = x;
   138     p.y = 3 * x + y;
   139     return p;
   140   }
   142   Point test01(int y) {
   143     int x = 3;
   144     Point p = new Point();
   145     p.x = x;
   146     p.y = 3 * x + y;
   147     dummy();
   148     return p;
   149   }
   151   Point test02(int y) {
   152     int x = 3;
   153     Point p1 = null;
   154     for (int i = 0; i < y; i++) {
   155       Point p2 = new Point();
   156       p2.x = x;
   157       p2.y = 3 * y + x;
   158       p2.next = p1;
   159       p1 = p2;
   160     }
   161     return p1;
   162   }
   164   Point test03(int y) {
   165     int x = 3;
   166     Point p1 = null;
   167     for (int i = 0; i < y; i++) {
   168       Point p2 = new Point();
   169       p2.x = x;
   170       p2.y = 3 * y + x;
   171       p2.next = p1;
   172       p1 = p2;
   173     }
   174     dummy();
   175     return p1;
   176   }
   178   Point test04(int y) {
   179     int x = 3;
   180     Point p1 = null;
   181     for (int i = 0; i < y; i++) {
   182       Point p2 = new Point();
   183       p2.x = x;
   184       p2.y = 3 * y + x;
   185       p2.next = p1;
   186       dummy();
   187       p1 = p2;
   188     }
   189     return p1;
   190   }
   192   int test05(int y) {
   193     int x = 3;
   194     Point p1 = new Point();
   195     for (int i = 0; i < y; i++) {
   196       Point p2 = new Point();
   197       p2.x = x;
   198       p2.y = 3 * y + x;
   199       p1.next = p2;
   200       p1 = p2;
   201     }
   202     return p1.y;
   203   }
   205   int test0(int y) {
   206     int x = 3;
   207     Point p = new Point();
   208     p.x = x;
   209     p.y = 3 * x + y;
   210     dummy();
   211     return p.x * p.y;
   212   }
   214   int test1(int y) {
   215     Point p = new Point();
   216     if ( (y & 1) == 1 ) {
   217       p = new Point(); // Kill previous
   218     }
   219     int x = 3;
   220     p.x = x;
   221     p.y = 3 * x + y;
   222     dummy();
   223     return p.x * p.y;
   224   }
   226   int test2(int y) {
   227     Point p1 = new Point();
   228     Point p2 = new Point();
   229     p1.x = 3;
   230     p2.x = 4;
   231     p1.y = 3 * p2.x + y;
   232     p2.y = 3 * p1.x + y;
   233     dummy();
   234     return p1.y * p2.y;
   235   }
   237   int test3(int y, Point p1) {
   238     Point p2 = new Point();
   239     p1.x = 3;
   240     p2.x = 4;
   241     p1.y = 3 * p2.x + y;
   242     p2.y = 3 * p1.x + y;
   243     dummy();
   244     return p1.y * p2.y;
   245   }
   247   int test4(int y) {
   248     Point p1 = new Point();
   249     Point p2 = new Point();
   250     if ( (y & 1) == 1 ) {
   251       p1.x = 3;
   252       p2.x = 4;
   253     } else {
   254       p1.x = 5;
   255       p2.x = 6;
   256     }
   257     p1.y = 3 * p2.x + y;
   258     p2.y = 3 * p1.x + y;
   259     dummy();
   260     return p1.y * p2.y;
   261   }
   263   int test5(int y, Point p1) {
   264     Point p2 = new Point();
   265     if ( (y & 1) == 1 ) {
   266       p1.x = 3;
   267       p2.x = 4;
   268     } else {
   269       p1.x = 5;
   270       p2.x = 6;
   271     }
   272     p1.y = 3 * p2.x + y;
   273     p2.y = 3 * p1.x + y;
   274     dummy();
   275     return p1.y * p2.y;
   276   }
   278   int test6(int y) {
   279     Point p1 = new Point();
   280     Point p2 = new Point();
   281     p1.next = p2;
   282     if ( (y & 1) == 1 ) {
   283       p1.x = 3;
   284       p1.getNext().x = 4;
   285     } else {
   286       p1.x = 5;
   287       p1.getNext().x = 6;
   288     }
   289     p1.y = 3 * p2.x + y;
   290     p2.y = 3 * p1.x + y;
   291     dummy();
   292     return p1.y * p2.y;
   293   }
   295   int test7(int y, Point p1) {
   296     Point p2 = new Point();
   297     p1.next = p2;
   298     if ( (y & 1) == 1 ) {
   299       p1.x = 3;
   300       p1.getNext().x = 4;
   301     } else {
   302       p1.x = 5;
   303       p1.getNext().x = 6;
   304     }
   305     p1.y = 3 * p2.x + y;
   306     p2.y = 3 * p1.x + y;
   307     dummy();
   308     return p1.y * p2.y;
   309   }
   311   int test8(int y, int l, int i) {
   312     Point p = new Point();
   313     p.ax = new int[l];
   314     p.ay = new int[l];
   315     int x = 3;
   316     p.ax[i] = x;
   317     p.ay[i] = 3 * x + y;
   318     dummy();
   319     return p.ax[i] * p.ay[i];
   320   }
   322   int test9(int y, int l, int i) {
   323     Point p = new Point();
   324     p.pax = new Point[l];
   325     p.pay = new Point[l];
   326     p.pax[i] = new Point();
   327     p.pay[i] = new Point();
   328     p.pax[i].x = 3;
   329     p.pay[i].x = 4;
   330     p.pax[i].y = 3 * p.pay[i].x + y;
   331     p.pay[i].y = 3 * p.pax[i].x + y;
   332     dummy();
   333     return p.pax[i].y * p.pay[i].y;
   334   }
   336   int test10(int y, int l, int i, Class cls) {
   337     Point p = new Point();
   338     try {
   339       p.pax = (Point[])Array.newInstance(cls, l);
   340       p.pax[i] = (Point)cls.newInstance();
   341     }
   342     catch(java.lang.InstantiationException ex) {
   343       return 0;
   344     }
   345     catch(java.lang.IllegalAccessException ex) {
   346       return 0;
   347     }
   348     p.pax[i].x = 3;
   349     p.pax[i].y = 3 * p.pax[i].x + y;
   350     dummy();
   351     return p.pax[i].x * p.pax[i].y;
   352   }
   354   int test11(int y) {
   355     Point p1 = new Point();
   356     Point p2 = new Point();
   357     p1.next = p2;
   358     if ( (y & 1) == 1 ) {
   359       p1.x = 3;
   360       p1.next.x = 4;
   361     } else {
   362       p1.x = 5;
   363       p1.next.x = 6;
   364     }
   365     p1.y = 3 * p1.next.x + y;
   366     p1.next.y = 3 * p1.x + y;
   367     dummy();
   368     return p1.y * p1.next.y;
   369   }
   371   int test12(int y) {
   372     Point p1 = new Point();
   373     p1.next = p1;
   374     if ( (y & 1) == 1 ) {
   375       p1.x = 3;
   376       p1.next.x = 4;
   377     } else {
   378       p1.x = 5;
   379       p1.next.x = 6;
   380     }
   381     p1.y = 3 * p1.next.x + y;
   382     p1.next.y = 3 * p1.x + y;
   383     dummy();
   384     return p1.y * p1.next.y;
   385   }
   388   public static void main(String args[]) {
   389     Test tsr    = new Test();
   390     Point p     = new Point();
   391     Point ptmp  = p;
   392     Class cls   = Point.class;
   393     int y = 0;
   394     for (int i=0; i<10000; i++) {
   395       ptmp.next = tsr.test00(1);
   396       ptmp.next = tsr.test01(1);
   397       ptmp.next = tsr.test02(1);
   398       ptmp.next = tsr.test03(1);
   399       ptmp.next = tsr.test04(1);
   401       y = tsr.test05(1);
   403       y = tsr.test80(y, 1, 0);
   404       y = tsr.test81(y, 1, 0);
   406       y = tsr.test44(y);
   407       y = tsr.test43(y);
   408       y = tsr.test42(y);
   409       y = tsr.test40(y);
   410       y = tsr.test41(y);
   412       y = tsr.test0(y);
   413       y = tsr.test1(y);
   414       y = tsr.test2(y);
   415       y = tsr.test3(y, p);
   416       y = tsr.test4(y);
   417       y = tsr.test5(y, p);
   418       y = tsr.test6(y);
   419       y = tsr.test7(y, p);
   420       y = tsr.test8(y, 1, 0);
   421       y = tsr.test9(y, 1, 0);
   422       y = tsr.test10(y, 1, 0, cls);
   423       y = tsr.test11(y);
   424       y = tsr.test12(y);
   425     }
   426     for (int i=0; i<10000; i++) {
   427       ptmp.next = tsr.test00(1);
   428       ptmp.next = tsr.test01(1);
   429       ptmp.next = tsr.test02(1);
   430       ptmp.next = tsr.test03(1);
   431       ptmp.next = tsr.test04(1);
   433       y = tsr.test05(1);
   435       y = tsr.test80(y, 1, 0);
   436       y = tsr.test81(y, 1, 0);
   438       y = tsr.test44(y);
   439       y = tsr.test43(y);
   440       y = tsr.test42(y);
   441       y = tsr.test40(y);
   442       y = tsr.test41(y);
   444       y = tsr.test0(y);
   445       y = tsr.test1(y);
   446       y = tsr.test2(y);
   447       y = tsr.test3(y, p);
   448       y = tsr.test4(y);
   449       y = tsr.test5(y, p);
   450       y = tsr.test6(y);
   451       y = tsr.test7(y, p);
   452       y = tsr.test8(y, 1, 0);
   453       y = tsr.test9(y, 1, 0);
   454       y = tsr.test10(y, 1, 0, cls);
   455       y = tsr.test11(y);
   456       y = tsr.test12(y);
   457     }
   458     for (int i=0; i<10000; i++) {
   459       ptmp.next = tsr.test00(1);
   460       ptmp.next = tsr.test01(1);
   461       ptmp.next = tsr.test02(1);
   462       ptmp.next = tsr.test03(1);
   463       ptmp.next = tsr.test04(1);
   465       y = tsr.test05(1);
   467       y = tsr.test80(y, 1, 0);
   468       y = tsr.test81(y, 1, 0);
   470       y = tsr.test44(y);
   471       y = tsr.test43(y);
   472       y = tsr.test42(y);
   473       y = tsr.test40(y);
   474       y = tsr.test41(y);
   476       y = tsr.test0(y);
   477       y = tsr.test1(y);
   478       y = tsr.test2(y);
   479       y = tsr.test3(y, p);
   480       y = tsr.test4(y);
   481       y = tsr.test5(y, p);
   482       y = tsr.test6(y);
   483       y = tsr.test7(y, p);
   484       y = tsr.test8(y, 1, 0);
   485       y = tsr.test9(y, 1, 0);
   486       y = tsr.test10(y, 1, 0, cls);
   487       y = tsr.test11(y);
   488       y = tsr.test12(y);
   489     }
   491     int z = 0;
   492     y = tsr.test80(0, 1, 0);
   493     z += y;
   494     System.out.println("After 'test80' y=" + y);
   495     y = tsr.test81(0, 1, 0);
   496     z += y;
   497     System.out.println("After 'test81' y=" + y);
   499     y = tsr.test44(0);
   500     z += y;
   501     System.out.println("After 'test44' y=" + y);
   502     y = tsr.test43(0);
   503     z += y;
   504     System.out.println("After 'test43' y=" + y);
   505     y = tsr.test42(0);
   506     z += y;
   507     System.out.println("After 'test42' y=" + y);
   508     y = tsr.test40(0);
   509     z += y;
   510     System.out.println("After 'test40' y=" + y);
   511     y = tsr.test41(0);
   512     z += y;
   513     System.out.println("After 'test41' y=" + y);
   515     ptmp.next = tsr.test00(1);
   516     z += y;
   517     System.out.println("After 'test00' p.y=" + ptmp.next.y);
   518     ptmp.next = tsr.test01(1);
   519     z += y;
   520     System.out.println("After 'test01' p.y=" + ptmp.next.y);
   521     ptmp.next = tsr.test02(1);
   522     z += y;
   523     System.out.println("After 'test02' p.y=" + ptmp.next.y);
   524     ptmp.next = tsr.test03(1);
   525     z += y;
   526     System.out.println("After 'test03' p.y=" + ptmp.next.y);
   527     ptmp.next = tsr.test04(1);
   528     z += y;
   529     System.out.println("After 'test04' p.y=" + ptmp.next.y);
   531     y = tsr.test05(1);
   532     z += y;
   533     System.out.println("After 'test05' y=" + y);
   535     y = tsr.test0(0);
   536     z += y;
   537     System.out.println("After 'test0' y=" + y);
   538     y = tsr.test1(0);
   539     z += y;
   540     System.out.println("After 'test1' y=" + y);
   541     y = tsr.test2(0);
   542     z += y;
   543     System.out.println("After 'test2' y=" + y);
   544     y = tsr.test3(0, new Point());
   545     z += y;
   546     System.out.println("After 'test3' y=" + y);
   547     y = tsr.test4(0);
   548     z += y;
   549     System.out.println("After 'test4' y=" + y);
   550     y = tsr.test5(0, new Point());
   551     z += y;
   552     System.out.println("After 'test5' y=" + y);
   553     y = tsr.test6(0);
   554     z += y;
   555     System.out.println("After 'test6' y=" + y);
   556     y = tsr.test7(0, new Point());
   557     z += y;
   558     System.out.println("After 'test7' y=" + y);
   559     y = tsr.test8(0, 1, 0);
   560     z += y;
   561     System.out.println("After 'test8' y=" + y);
   562     y = tsr.test9(0, 1, 0);
   563     z += y;
   564     System.out.println("After 'test9' y=" + y);
   565     y = tsr.test10(0, 1, 0, cls);
   566     z += y;
   567     System.out.println("After 'test10' y=" + y);
   568     y = tsr.test11(0);
   569     z += y;
   570     System.out.println("After 'test11' y=" + y);
   571     y = tsr.test12(0);
   572     z += y;
   573     System.out.println("After 'test12' y=" + y);
   574     System.out.println("Sum of y =" + z);
   575   }
   576 }

mercurial