Path: blob/master/test/hotspot/jtreg/vmTestbase/jit/inline/inline007/inline007.java
40948 views
/*1* Copyright (c) 2008, 2020, 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*26* @summary converted from VM Testbase jit/inline/inline007.27* VM Testbase keywords: [jit, quick]28* VM Testbase readme:29* Inline007 is similar to inline004 in that it tests inlining.30* Inline004 still functions, but is not testing inlining, in31* JDK 1.2e.32*33* @library /vmTestbase34* /test/lib35* @run main/othervm jit.inline.inline007.inline00736*/3738package jit.inline.inline007;394041import java.io.ByteArrayOutputStream;42import java.io.IOException;4344import nsk.share.TestFailure;45import nsk.share.GoldChecker;4647class inline007_1 {48final protected static int[] inlineObj = { 1, 2 };49protected static int inlineInt = 3; /* Not final */50}5152class inline007Sup extends inline007_1 {53private int i1 = 0;54Object obj1 = inline007_1.inlineObj;55Object obj2 = inline007_1.inlineObj;56Object obj3 = inline007_1.inlineObj;5758static int MPAT_Const4_fs_0() {59return 1;60}61static Object MPAT_Const4_fs_1() {62return null;63}64static int MPAT_GetStatic4_fs_0() {65return inlineInt;66}67static Object MPAT_GetStatic4_fs_1() {68return inlineObj;69}70int MPAT_Const4_fi_0() {71return 1;72}73Object MPAT_Const4_fi_1() {74return null;75}76int MPAT_GetField4_fi_0() {77return i1;78}79Object MPAT_GetField4_fi_1() {80return obj1;81}82void MPAT_PutField4_fi_0(int ival) {83i1 = ival;84return;85}86void MPAT_PutField4_fi_1(Object oval) {87obj1 = oval;88return;89}90void MPAT_PutField4Const4_fi() {91i1 = -1;92return;93}94int MPAT_GetStatic4_fi_0() {95return inlineInt;96}97Object MPAT_GetStatic4_fi_1() {98return inlineObj;99}100Object MPAT_Handle_fi() {101return this;102}103}104105class inline007Sub extends inline007Sup {106private int i1 = 0;107Object obj1 = inline007_1.inlineObj;108Object obj2 = inline007_1.inlineObj;109Object obj3 = inline007_1.inlineObj;110111static int MPAT_Const4_fs_0() {112return 1;113}114static Object MPAT_Const4_fs_1() {115return null;116}117static int MPAT_GetStatic4_fs_0() {118return inlineInt;119}120static Object MPAT_GetStatic4_fs_1() {121return inlineObj;122}123int MPAT_Const4_fi_0() {124return 1;125}126Object MPAT_Const4_fi_1() {127return null;128}129int MPAT_GetField4_fi_0() {130return i1;131}132Object MPAT_GetField4_fi_1() {133return obj1;134}135void MPAT_PutField4_fi_0(int ival) {136i1 = ival;137return;138}139void MPAT_PutField4_fi_1(Object oval) {140obj1 = oval;141return;142}143void MPAT_PutField4Const4_fi() {144i1 = -1;145return;146}147int MPAT_GetStatic4_fi_0() {148return inlineInt;149}150Object MPAT_GetStatic4_fi_1() {151return inlineObj;152}153Object MPAT_Handle_fi() {154return this;155}156}157158public class inline007 extends inline007_1 {159public static final GoldChecker goldChecker = new GoldChecker( "inline007" );160161static int[] myIters = new int[14];162static int[] errFlag = new int[14];163static int pFlag = 0;164final static int ITERS=5;165int intTarg1 = 0;166int intTarg2 = 0;167Object objTarg1 = null;168Object objTarg2 = null;169inline007Sub inline007sub = new inline007Sub();170inline007Sup inline007sup = inline007sub;171172private void runFinals () {173int jcount = 0;174int icount = 0;175176if (pFlag==2) inline007.goldChecker.print("MPAT_Const4_fs_0");177try {178for (jcount=0; jcount<ITERS; jcount++) {179intTarg1 = inline007Sub.MPAT_Const4_fs_0();180intTarg2 = inline007Sup.MPAT_Const4_fs_0();181if (intTarg1 != intTarg2) errFlag[icount]++;182}183} catch (Exception e) {184if (pFlag==2) inline007.goldChecker.print(": iteration="+(jcount+1)+": "+e);185} finally {186myIters[icount] = jcount;187if (jcount != ITERS) errFlag[icount]++;188if (pFlag==2) inline007.goldChecker.println();189}190icount++;191192if (pFlag==2) inline007.goldChecker.print("MPAT_Const4_fs_1");193try {194for (jcount=0; jcount<ITERS; jcount++) {195objTarg2 = inline007Sub.MPAT_Const4_fs_1();196objTarg1 = inline007Sup.MPAT_Const4_fs_1();197if (objTarg2 != objTarg1) errFlag[icount]++;198}199} catch (Exception e) {200if (pFlag==2) inline007.goldChecker.print(": iteration="+(jcount+1)+": "+e);201} finally {202myIters[icount] = jcount;203if (jcount != ITERS) errFlag[icount]++;204if (pFlag==2) inline007.goldChecker.println();205}206icount++;207208209if (pFlag==2) inline007.goldChecker.print("MPAT_GetStatic4_fs_0");210try {211for (jcount=0; jcount<ITERS; jcount++) {212intTarg2 = inline007Sub.MPAT_GetStatic4_fs_0();213intTarg1 = inline007Sup.MPAT_GetStatic4_fs_0();214if (intTarg1 != intTarg2) errFlag[icount]++;215}216} catch (Exception e) {217if (pFlag==2) inline007.goldChecker.print(": iteration="+(jcount+1)+": "+e);218} finally {219myIters[icount] = jcount;220if (jcount != ITERS) errFlag[icount]++;221if (pFlag==2) inline007.goldChecker.println();222}223icount++;224225226if (pFlag==2) inline007.goldChecker.print("MPAT_GetStatic4_fs_1");227try {228for (jcount=0; jcount<ITERS; jcount++) {229objTarg2 = inline007Sub.MPAT_GetStatic4_fs_1();230objTarg1 = inline007Sup.MPAT_GetStatic4_fs_1();231if (objTarg1 != objTarg2) errFlag[icount]++;232}233} catch (Exception e) {234if (pFlag==2) inline007.goldChecker.print(": iteration="+(jcount+1)+": "+e);235} finally {236myIters[icount] = jcount;237if (jcount != ITERS) errFlag[icount]++;238if (pFlag==2) inline007.goldChecker.println();239}240icount++;241242243/* Check inlining of instance methods */244if (pFlag==2) inline007.goldChecker.print("MPAT_Const4_fi_0");245try {246for (jcount=0; jcount<ITERS; jcount++) {247intTarg1 = inline007sub.MPAT_Const4_fi_0();248intTarg2 = inline007sup.MPAT_Const4_fi_0();249if (intTarg1 != intTarg2) errFlag[icount]++;250}251} catch (Exception e) {252if (pFlag==2) inline007.goldChecker.print(": iteration="+(jcount+1)+": "+e);253} finally {254myIters[icount] = jcount;255if (jcount != ITERS) errFlag[icount]++;256if (pFlag==2) inline007.goldChecker.println();257}258icount++;259260if (pFlag==2) inline007.goldChecker.print("MPAT_Const4_fi_1");261try {262for (jcount=0; jcount<ITERS; jcount++) {263objTarg1 = inline007sub.MPAT_Const4_fi_1();264objTarg2 = inline007sup.MPAT_Const4_fi_1();265if (objTarg1 != objTarg2) errFlag[icount]++;266}267} catch (Exception e) {268if (pFlag==2) inline007.goldChecker.print(": iteration="+(jcount+1)+": "+e);269} finally {270myIters[icount] = jcount;271if (jcount != ITERS) errFlag[icount]++;272if (pFlag==2) inline007.goldChecker.println();273}274icount++;275276if (pFlag==2) inline007.goldChecker.print("MPAT_GetStatic4_fi_0");277try {278for (jcount=0; jcount<ITERS; jcount++) {279intTarg2 = inline007sub.MPAT_GetStatic4_fi_0();280intTarg1 = inline007sup.MPAT_GetStatic4_fi_0();281if (intTarg1 != intTarg2) errFlag[icount]++;282}283} catch (Exception e) {284if (pFlag==2) inline007.goldChecker.print(": iteration="+(jcount+1)+": "+e);285} finally {286myIters[icount] = jcount;287if (jcount != ITERS) errFlag[icount]++;288if (pFlag==2) inline007.goldChecker.println();289}290if (pFlag==2) inline007.goldChecker.print("MPAT_GetStatic4_fi_1");291try {292for (jcount=0; jcount<ITERS; jcount++) {293objTarg2 = inline007sub.MPAT_GetStatic4_fi_1();294objTarg1 = inline007sup.MPAT_GetStatic4_fi_1();295if (objTarg1 != objTarg2) errFlag[icount]++;296}297} catch (Exception e) {298if (pFlag==2) inline007.goldChecker.print(": iteration="+(jcount+1)+": "+e);299} finally {300myIters[icount] = jcount;301if (jcount != ITERS) errFlag[icount]++;302if (pFlag==2) inline007.goldChecker.println();303}304icount++;305306if (pFlag==2) inline007.goldChecker.print("MPAT_GetField4_fi_0");307try {308for (jcount=0; jcount<ITERS; jcount++) {309intTarg1 = inline007sub.MPAT_GetField4_fi_0();310intTarg2 = inline007sup.MPAT_GetField4_fi_0();311if (intTarg1 != intTarg2) errFlag[icount]++;312}313} catch (Exception e) {314if (pFlag==2) inline007.goldChecker.print(": iteration="+(jcount+1)+": "+e);315} finally {316myIters[icount] = jcount;317if (jcount != ITERS) errFlag[icount]++;318if (pFlag==2) inline007.goldChecker.println();319}320icount++;321322if (pFlag==2) inline007.goldChecker.print("MPAT_GetField4_fi_1");323try {324for (jcount=0; jcount<ITERS; jcount++) {325objTarg2 = inline007sub.MPAT_GetField4_fi_1();326objTarg1 = inline007sup.MPAT_GetField4_fi_1();327if (objTarg1 != objTarg2) errFlag[icount]++;328}329} catch (Exception e) {330if (pFlag==2) inline007.goldChecker.print(": iteration="+(jcount+1)+": "+e);331} finally {332myIters[icount] = jcount;333if (jcount != ITERS) errFlag[icount]++;334if (pFlag==2) inline007.goldChecker.println();335}336icount++;337338if (pFlag==2) inline007.goldChecker.print("MPAT_PutField4_fi_0");339try {340for (jcount=0; jcount<ITERS; jcount++) {341inline007sub.MPAT_PutField4_fi_0(10);342intTarg1 = inline007sup.MPAT_GetField4_fi_0();343if (intTarg1 != 10) errFlag[icount]++;344}345} catch (Exception e) {346if (pFlag==2) inline007.goldChecker.print(": iteration="+(jcount+1)+": "+e);347} finally {348myIters[icount] = jcount;349if (jcount != ITERS) errFlag[icount]++;350if (pFlag==2) inline007.goldChecker.println();351}352icount++;353354if (pFlag==2) inline007.goldChecker.print("MPAT_PutField4_fi_1");355try {356for (jcount=0; jcount<ITERS; jcount++) {357inline007sub.MPAT_PutField4_fi_1("String1");358objTarg1 = inline007sub.MPAT_GetField4_fi_1();359if (objTarg1 != "String1") errFlag[icount]++;360}361} catch (Exception e) {362if (pFlag==2) inline007.goldChecker.print(": iteration="+(jcount+1)+": "+e);363} finally {364myIters[icount] = jcount;365if (jcount != ITERS) errFlag[icount]++;366if (pFlag==2) inline007.goldChecker.println();367}368icount++;369370if (pFlag==2) inline007.goldChecker.print("MPAT_PutField4Const4_fi");371try {372for (jcount=0; jcount<ITERS; jcount++) {373inline007sub.MPAT_PutField4Const4_fi();374intTarg2 = inline007sup.MPAT_GetField4_fi_0();375if (intTarg2 != -1) errFlag[icount]++;376}377} catch (Exception e) {378if (pFlag==2) inline007.goldChecker.print(": iteration="+(jcount+1)+": "+e);379} finally {380myIters[icount] = jcount;381if (pFlag==2) inline007.goldChecker.println();382}383icount++;384385if (pFlag==2) inline007.goldChecker.print("MPAT_Handle_fi");386try {387for (jcount=0; jcount<ITERS; jcount++) {388objTarg1 = inline007sub.MPAT_Handle_fi();389objTarg2 = inline007sup.MPAT_Handle_fi();390}391} catch (Exception e) {392if (pFlag==2) inline007.goldChecker.print(": iteration="+(jcount+1)+": "+e);393} finally {394myIters[icount] = jcount;395if (jcount != ITERS) errFlag[icount]++;396if (pFlag==2) inline007.goldChecker.println();397}398icount++;399}400401402public static int result() {403int ierr = 0;404String state = null;405ByteArrayOutputStream baos = new ByteArrayOutputStream(80);406byte[] ba = new byte[80];407String s = null;408409String[] label = new String[14];410label[0] = new String("Const4 class method (int) ");411label[1] = new String("Const4 class method (ref) ");412label[2] = new String("GetStatic4 class method (int) ");413label[3] = new String("GetStatic4 class method (ref) ");414label[4] = new String("Const4 instance method (int) ");415label[5] = new String("Const4 instance method (ref) ");416label[6] = new String("GetStatic4 instance method (int)");417label[7] = new String("GetStatic4 instance method (ref)");418label[8] = new String("GetField4 instance method (int) ");419label[9] = new String("GetField4 instance method (ref) ");420label[10] = new String("PutField4 instance method (int) ");421label[11] = new String("PutField4 instance method (ref) ");422label[12] = new String("PutField4Const4 instance method ");423label[13] = new String("Handle instance method ");424// Report headers425baos.reset();426try {427for (int i=0; i<ba.length; i++) ba[i]=(byte)' ';428s = "Pattern";429for (int i=0; i<s.length(); i++)430ba[i]=(byte)s.charAt(i);431baos.write(ba,0,32);432}433catch (IndexOutOfBoundsException e){434}435try {436for (int i=0; i<ba.length; i++) ba[i]=(byte)' ';437baos.write(ba,0,3);438s = "Errors";439for (int i=0; i<s.length(); i++)440ba[i]=(byte)s.charAt(i);441baos.write(ba,0,6);442}443catch (IndexOutOfBoundsException e){444}445try {446for (int i=0; i<ba.length; i++) ba[i]=(byte)' ';447baos.write(ba,0,3);448s = "Iterations";449for (int i=0; i<s.length(); i++)450ba[i]=(byte)s.charAt(i);451baos.write(ba,0,10);452}453catch (IndexOutOfBoundsException e){454}455try {456for (int i=0; i<ba.length; i++) ba[i]=(byte)' ';457baos.write(ba,0,3);458s = "State";459for (int i=0; i<s.length(); i++)460ba[i]=(byte)s.charAt(i);461baos.write(ba,0,5);462}463catch (IndexOutOfBoundsException e){464}465inline007.goldChecker.print(baos.toString());466inline007.goldChecker.println();467468// Report header underlining469baos.reset();470try {471for (int i=0; i<ba.length; i++) ba[i]=(byte)' ';472s = "Pattern";473for (int i=0; i<s.length(); i++)474ba[i]=(byte)'=';475baos.write(ba,0,32);476}477catch (IndexOutOfBoundsException e){478}479try {480for (int i=0; i<ba.length; i++) ba[i]=(byte)' ';481baos.write(ba,0,3);482s = "Errors";483for (int i=0; i<s.length(); i++)484ba[i]=(byte)'=';485baos.write(ba,0,6);486}487catch (IndexOutOfBoundsException e){488}489try {490for (int i=0; i<ba.length; i++) ba[i]=(byte)' ';491baos.write(ba,0,3);492s = "Iterations";493for (int i=0; i<s.length(); i++)494ba[i]=(byte)'=';495baos.write(ba,0,10);496}497catch (IndexOutOfBoundsException e){498}499try {500for (int i=0; i<ba.length; i++) ba[i]=(byte)' ';501baos.write(ba,0,3);502s = "State";503for (int i=0; i<s.length(); i++)504ba[i]=(byte)'=';505baos.write(ba,0,5);506}507catch (IndexOutOfBoundsException e){508}509inline007.goldChecker.print(baos.toString());510inline007.goldChecker.println();511512for (int icount=0; icount<14; icount++) {513if (myIters[icount] == ITERS && errFlag[icount] == 0)514state="PASS";515else {516ierr++;517state="FAIL";518}519baos.reset();520try {521for (int i=0; i<ba.length; i++) ba[i]=(byte)' ';522for (int i=0; i<label[icount].length(); i++)523ba[i]=(byte)label[icount].charAt(i);524baos.write(ba,0,32);525}526catch (IndexOutOfBoundsException e){527inline007.goldChecker.println("0: "+e);528}529try {530for (int i=0; i<ba.length; i++) ba[i]=(byte)' ';531baos.write(ba,0,3);532s = Integer.toString(errFlag[icount]);533for (int i=0; i<s.length(); i++)534ba[i]=(byte)s.charAt(i);535baos.write(ba,0,6);536}537catch (IndexOutOfBoundsException e){538inline007.goldChecker.println("1: "+e);539}540try {541for (int i=0; i<ba.length; i++) ba[i]=(byte)' ';542baos.write(ba,0,3);543s = Integer.toString(myIters[icount]);544for (int i=0; i<s.length(); i++)545ba[i]=(byte)s.charAt(i);546baos.write(ba,0,10);547}548catch (IndexOutOfBoundsException e){549inline007.goldChecker.println("1: "+e);550}551try {552for (int i=0; i<ba.length; i++) ba[i]=(byte)' ';553baos.write(ba,0,3);554for (int i=0; i<state.length(); i++)555ba[i]=(byte)state.charAt(i);556baos.write(ba,0,5);557}558catch (IndexOutOfBoundsException e){559inline007.goldChecker.println("3: "+e);560}561inline007.goldChecker.print(baos.toString());562inline007.goldChecker.println();563}564return ierr;565}566567public static void main( String args[] ) {568int ierr;569inline007 myInline_n = new inline007();570inline007 myInline_f = new inline007();571572if (args.length > 0 && args[0].equals("-help")) {573inline007.goldChecker.println("usage: java inline007 [-print | -report]");574inline007.goldChecker.check();575return;576}577if (args.length > 0 && args[0].equals("-print"))578pFlag = 2;579if (args.length > 0 && args[0].equals("-report"))580pFlag = 1;581for (int ii=0; ii<14; ii++) myIters[ii]=ITERS;582if (pFlag==2) inline007.goldChecker.println("inline007");583584/* Give the JIT an initial look at all the methods */585myInline_f.runFinals();586ierr = inline007.result();587if (ierr == 0) {588inline007.goldChecker.println("PASSED.");589}590else {591inline007.goldChecker.println("FAILED. (ierr = " + ierr + ")");592}593inline007.goldChecker.check();594}595}596597598