/* * Copyright (c) 2008, 2018, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ /* * @test * * @summary converted from VM Testbase jit/inline/inline007. * VM Testbase keywords: [jit, quick] * VM Testbase readme: * Inline007 is similar to inline004 in that it tests inlining. * Inline004 still functions, but is not testing inlining, in * JDK 1.2e. * * @library /vmTestbase * /test/lib * @run driver jdk.test.lib.FileInstaller . . * @build jit.inline.inline007.inline007 * @run driver ExecDriver --java jit.inline.inline007.inline007 */ package jit.inline.inline007; import java.io.ByteArrayOutputStream; import java.io.IOException; import nsk.share.TestFailure; import nsk.share.GoldChecker; class inline007_1 { final protected static int[] inlineObj = { 1, 2 }; protected static int inlineInt = 3; /* Not final */ } class inline007Sup extends inline007_1 { private int i1 = 0; Object obj1 = inline007_1.inlineObj; Object obj2 = inline007_1.inlineObj; Object obj3 = inline007_1.inlineObj; static int MPAT_Const4_fs_0() { return 1; } static Object MPAT_Const4_fs_1() { return null; } static int MPAT_GetStatic4_fs_0() { return inlineInt; } static Object MPAT_GetStatic4_fs_1() { return inlineObj; } int MPAT_Const4_fi_0() { return 1; } Object MPAT_Const4_fi_1() { return null; } int MPAT_GetField4_fi_0() { return i1; } Object MPAT_GetField4_fi_1() { return obj1; } void MPAT_PutField4_fi_0(int ival) { i1 = ival; return; } void MPAT_PutField4_fi_1(Object oval) { obj1 = oval; return; } void MPAT_PutField4Const4_fi() { i1 = -1; return; } int MPAT_GetStatic4_fi_0() { return inlineInt; } Object MPAT_GetStatic4_fi_1() { return inlineObj; } Object MPAT_Handle_fi() { return this; } } class inline007Sub extends inline007Sup { private int i1 = 0; Object obj1 = inline007_1.inlineObj; Object obj2 = inline007_1.inlineObj; Object obj3 = inline007_1.inlineObj; static int MPAT_Const4_fs_0() { return 1; } static Object MPAT_Const4_fs_1() { return null; } static int MPAT_GetStatic4_fs_0() { return inlineInt; } static Object MPAT_GetStatic4_fs_1() { return inlineObj; } int MPAT_Const4_fi_0() { return 1; } Object MPAT_Const4_fi_1() { return null; } int MPAT_GetField4_fi_0() { return i1; } Object MPAT_GetField4_fi_1() { return obj1; } void MPAT_PutField4_fi_0(int ival) { i1 = ival; return; } void MPAT_PutField4_fi_1(Object oval) { obj1 = oval; return; } void MPAT_PutField4Const4_fi() { i1 = -1; return; } int MPAT_GetStatic4_fi_0() { return inlineInt; } Object MPAT_GetStatic4_fi_1() { return inlineObj; } Object MPAT_Handle_fi() { return this; } } class inline007 extends inline007_1 { public static final GoldChecker goldChecker = new GoldChecker( "inline007" ); static int[] myIters = new int[14]; static int[] errFlag = new int[14]; static int pFlag = 0; final static int ITERS=5; int intTarg1 = 0; int intTarg2 = 0; Object objTarg1 = null; Object objTarg2 = null; inline007Sub inline007sub = new inline007Sub(); inline007Sup inline007sup = inline007sub; private void runFinals () { int jcount = 0; int icount = 0; if (pFlag==2) inline007.goldChecker.print("MPAT_Const4_fs_0"); try { for (jcount=0; jcount<ITERS; jcount++) { intTarg1 = inline007Sub.MPAT_Const4_fs_0(); intTarg2 = inline007Sup.MPAT_Const4_fs_0(); if (intTarg1 != intTarg2) errFlag[icount]++; } } catch (Exception e) { if (pFlag==2) inline007.goldChecker.print(": iteration="+(jcount+1)+": "+e); } finally { myIters[icount] = jcount; if (jcount != ITERS) errFlag[icount]++; if (pFlag==2) inline007.goldChecker.println(); } icount++; if (pFlag==2) inline007.goldChecker.print("MPAT_Const4_fs_1"); try { for (jcount=0; jcount<ITERS; jcount++) { objTarg2 = inline007Sub.MPAT_Const4_fs_1(); objTarg1 = inline007Sup.MPAT_Const4_fs_1(); if (objTarg2 != objTarg1) errFlag[icount]++; } } catch (Exception e) { if (pFlag==2) inline007.goldChecker.print(": iteration="+(jcount+1)+": "+e); } finally { myIters[icount] = jcount; if (jcount != ITERS) errFlag[icount]++; if (pFlag==2) inline007.goldChecker.println(); } icount++; if (pFlag==2) inline007.goldChecker.print("MPAT_GetStatic4_fs_0"); try { for (jcount=0; jcount<ITERS; jcount++) { intTarg2 = inline007Sub.MPAT_GetStatic4_fs_0(); intTarg1 = inline007Sup.MPAT_GetStatic4_fs_0(); if (intTarg1 != intTarg2) errFlag[icount]++; } } catch (Exception e) { if (pFlag==2) inline007.goldChecker.print(": iteration="+(jcount+1)+": "+e); } finally { myIters[icount] = jcount; if (jcount != ITERS) errFlag[icount]++; if (pFlag==2) inline007.goldChecker.println(); } icount++; if (pFlag==2) inline007.goldChecker.print("MPAT_GetStatic4_fs_1"); try { for (jcount=0; jcount<ITERS; jcount++) { objTarg2 = inline007Sub.MPAT_GetStatic4_fs_1(); objTarg1 = inline007Sup.MPAT_GetStatic4_fs_1(); if (objTarg1 != objTarg2) errFlag[icount]++; } } catch (Exception e) { if (pFlag==2) inline007.goldChecker.print(": iteration="+(jcount+1)+": "+e); } finally { myIters[icount] = jcount; if (jcount != ITERS) errFlag[icount]++; if (pFlag==2) inline007.goldChecker.println(); } icount++; /* Check inlining of instance methods */ if (pFlag==2) inline007.goldChecker.print("MPAT_Const4_fi_0"); try { for (jcount=0; jcount<ITERS; jcount++) { intTarg1 = inline007sub.MPAT_Const4_fi_0(); intTarg2 = inline007sup.MPAT_Const4_fi_0(); if (intTarg1 != intTarg2) errFlag[icount]++; } } catch (Exception e) { if (pFlag==2) inline007.goldChecker.print(": iteration="+(jcount+1)+": "+e); } finally { myIters[icount] = jcount; if (jcount != ITERS) errFlag[icount]++; if (pFlag==2) inline007.goldChecker.println(); } icount++; if (pFlag==2) inline007.goldChecker.print("MPAT_Const4_fi_1"); try { for (jcount=0; jcount<ITERS; jcount++) { objTarg1 = inline007sub.MPAT_Const4_fi_1(); objTarg2 = inline007sup.MPAT_Const4_fi_1(); if (objTarg1 != objTarg2) errFlag[icount]++; } } catch (Exception e) { if (pFlag==2) inline007.goldChecker.print(": iteration="+(jcount+1)+": "+e); } finally { myIters[icount] = jcount; if (jcount != ITERS) errFlag[icount]++; if (pFlag==2) inline007.goldChecker.println(); } icount++; if (pFlag==2) inline007.goldChecker.print("MPAT_GetStatic4_fi_0"); try { for (jcount=0; jcount<ITERS; jcount++) { intTarg2 = inline007sub.MPAT_GetStatic4_fi_0(); intTarg1 = inline007sup.MPAT_GetStatic4_fi_0(); if (intTarg1 != intTarg2) errFlag[icount]++; } } catch (Exception e) { if (pFlag==2) inline007.goldChecker.print(": iteration="+(jcount+1)+": "+e); } finally { myIters[icount] = jcount; if (jcount != ITERS) errFlag[icount]++; if (pFlag==2) inline007.goldChecker.println(); } if (pFlag==2) inline007.goldChecker.print("MPAT_GetStatic4_fi_1"); try { for (jcount=0; jcount<ITERS; jcount++) { objTarg2 = inline007sub.MPAT_GetStatic4_fi_1(); objTarg1 = inline007sup.MPAT_GetStatic4_fi_1(); if (objTarg1 != objTarg2) errFlag[icount]++; } } catch (Exception e) { if (pFlag==2) inline007.goldChecker.print(": iteration="+(jcount+1)+": "+e); } finally { myIters[icount] = jcount; if (jcount != ITERS) errFlag[icount]++; if (pFlag==2) inline007.goldChecker.println(); } icount++; if (pFlag==2) inline007.goldChecker.print("MPAT_GetField4_fi_0"); try { for (jcount=0; jcount<ITERS; jcount++) { intTarg1 = inline007sub.MPAT_GetField4_fi_0(); intTarg2 = inline007sup.MPAT_GetField4_fi_0(); if (intTarg1 != intTarg2) errFlag[icount]++; } } catch (Exception e) { if (pFlag==2) inline007.goldChecker.print(": iteration="+(jcount+1)+": "+e); } finally { myIters[icount] = jcount; if (jcount != ITERS) errFlag[icount]++; if (pFlag==2) inline007.goldChecker.println(); } icount++; if (pFlag==2) inline007.goldChecker.print("MPAT_GetField4_fi_1"); try { for (jcount=0; jcount<ITERS; jcount++) { objTarg2 = inline007sub.MPAT_GetField4_fi_1(); objTarg1 = inline007sup.MPAT_GetField4_fi_1(); if (objTarg1 != objTarg2) errFlag[icount]++; } } catch (Exception e) { if (pFlag==2) inline007.goldChecker.print(": iteration="+(jcount+1)+": "+e); } finally { myIters[icount] = jcount; if (jcount != ITERS) errFlag[icount]++; if (pFlag==2) inline007.goldChecker.println(); } icount++; if (pFlag==2) inline007.goldChecker.print("MPAT_PutField4_fi_0"); try { for (jcount=0; jcount<ITERS; jcount++) { inline007sub.MPAT_PutField4_fi_0(10); intTarg1 = inline007sup.MPAT_GetField4_fi_0(); if (intTarg1 != 10) errFlag[icount]++; } } catch (Exception e) { if (pFlag==2) inline007.goldChecker.print(": iteration="+(jcount+1)+": "+e); } finally { myIters[icount] = jcount; if (jcount != ITERS) errFlag[icount]++; if (pFlag==2) inline007.goldChecker.println(); } icount++; if (pFlag==2) inline007.goldChecker.print("MPAT_PutField4_fi_1"); try { for (jcount=0; jcount<ITERS; jcount++) { inline007sub.MPAT_PutField4_fi_1("String1"); objTarg1 = inline007sub.MPAT_GetField4_fi_1(); if (objTarg1 != "String1") errFlag[icount]++; } } catch (Exception e) { if (pFlag==2) inline007.goldChecker.print(": iteration="+(jcount+1)+": "+e); } finally { myIters[icount] = jcount; if (jcount != ITERS) errFlag[icount]++; if (pFlag==2) inline007.goldChecker.println(); } icount++; if (pFlag==2) inline007.goldChecker.print("MPAT_PutField4Const4_fi"); try { for (jcount=0; jcount<ITERS; jcount++) { inline007sub.MPAT_PutField4Const4_fi(); intTarg2 = inline007sup.MPAT_GetField4_fi_0(); if (intTarg2 != -1) errFlag[icount]++; } } catch (Exception e) { if (pFlag==2) inline007.goldChecker.print(": iteration="+(jcount+1)+": "+e); } finally { myIters[icount] = jcount; if (pFlag==2) inline007.goldChecker.println(); } icount++; if (pFlag==2) inline007.goldChecker.print("MPAT_Handle_fi"); try { for (jcount=0; jcount<ITERS; jcount++) { objTarg1 = inline007sub.MPAT_Handle_fi(); objTarg2 = inline007sup.MPAT_Handle_fi(); } } catch (Exception e) { if (pFlag==2) inline007.goldChecker.print(": iteration="+(jcount+1)+": "+e); } finally { myIters[icount] = jcount; if (jcount != ITERS) errFlag[icount]++; if (pFlag==2) inline007.goldChecker.println(); } icount++; } public static int result() { int ierr = 0; String state = null; ByteArrayOutputStream baos = new ByteArrayOutputStream(80); byte[] ba = new byte[80]; String s = null; String[] label = new String[14]; label[0] = new String("Const4 class method (int) "); label[1] = new String("Const4 class method (ref) "); label[2] = new String("GetStatic4 class method (int) "); label[3] = new String("GetStatic4 class method (ref) "); label[4] = new String("Const4 instance method (int) "); label[5] = new String("Const4 instance method (ref) "); label[6] = new String("GetStatic4 instance method (int)"); label[7] = new String("GetStatic4 instance method (ref)"); label[8] = new String("GetField4 instance method (int) "); label[9] = new String("GetField4 instance method (ref) "); label[10] = new String("PutField4 instance method (int) "); label[11] = new String("PutField4 instance method (ref) "); label[12] = new String("PutField4Const4 instance method "); label[13] = new String("Handle instance method "); // Report headers baos.reset(); try { for (int i=0; i<ba.length; i++) ba[i]=(byte)' '; s = "Pattern"; for (int i=0; i<s.length(); i++) ba[i]=(byte)s.charAt(i); baos.write(ba,0,32); } catch (IndexOutOfBoundsException e){ } try { for (int i=0; i<ba.length; i++) ba[i]=(byte)' '; baos.write(ba,0,3); s = "Errors"; for (int i=0; i<s.length(); i++) ba[i]=(byte)s.charAt(i); baos.write(ba,0,6); } catch (IndexOutOfBoundsException e){ } try { for (int i=0; i<ba.length; i++) ba[i]=(byte)' '; baos.write(ba,0,3); s = "Iterations"; for (int i=0; i<s.length(); i++) ba[i]=(byte)s.charAt(i); baos.write(ba,0,10); } catch (IndexOutOfBoundsException e){ } try { for (int i=0; i<ba.length; i++) ba[i]=(byte)' '; baos.write(ba,0,3); s = "State"; for (int i=0; i<s.length(); i++) ba[i]=(byte)s.charAt(i); baos.write(ba,0,5); } catch (IndexOutOfBoundsException e){ } inline007.goldChecker.print(baos.toString()); inline007.goldChecker.println(); // Report header underlining baos.reset(); try { for (int i=0; i<ba.length; i++) ba[i]=(byte)' '; s = "Pattern"; for (int i=0; i<s.length(); i++) ba[i]=(byte)'='; baos.write(ba,0,32); } catch (IndexOutOfBoundsException e){ } try { for (int i=0; i<ba.length; i++) ba[i]=(byte)' '; baos.write(ba,0,3); s = "Errors"; for (int i=0; i<s.length(); i++) ba[i]=(byte)'='; baos.write(ba,0,6); } catch (IndexOutOfBoundsException e){ } try { for (int i=0; i<ba.length; i++) ba[i]=(byte)' '; baos.write(ba,0,3); s = "Iterations"; for (int i=0; i<s.length(); i++) ba[i]=(byte)'='; baos.write(ba,0,10); } catch (IndexOutOfBoundsException e){ } try { for (int i=0; i<ba.length; i++) ba[i]=(byte)' '; baos.write(ba,0,3); s = "State"; for (int i=0; i<s.length(); i++) ba[i]=(byte)'='; baos.write(ba,0,5); } catch (IndexOutOfBoundsException e){ } inline007.goldChecker.print(baos.toString()); inline007.goldChecker.println(); for (int icount=0; icount<14; icount++) { if (myIters[icount] == ITERS && errFlag[icount] == 0) state="PASS"; else { ierr++; state="FAIL"; } baos.reset(); try { for (int i=0; i<ba.length; i++) ba[i]=(byte)' '; for (int i=0; i<label[icount].length(); i++) ba[i]=(byte)label[icount].charAt(i); baos.write(ba,0,32); } catch (IndexOutOfBoundsException e){ inline007.goldChecker.println("0: "+e); } try { for (int i=0; i<ba.length; i++) ba[i]=(byte)' '; baos.write(ba,0,3); s = Integer.toString(errFlag[icount]); for (int i=0; i<s.length(); i++) ba[i]=(byte)s.charAt(i); baos.write(ba,0,6); } catch (IndexOutOfBoundsException e){ inline007.goldChecker.println("1: "+e); } try { for (int i=0; i<ba.length; i++) ba[i]=(byte)' '; baos.write(ba,0,3); s = Integer.toString(myIters[icount]); for (int i=0; i<s.length(); i++) ba[i]=(byte)s.charAt(i); baos.write(ba,0,10); } catch (IndexOutOfBoundsException e){ inline007.goldChecker.println("1: "+e); } try { for (int i=0; i<ba.length; i++) ba[i]=(byte)' '; baos.write(ba,0,3); for (int i=0; i<state.length(); i++) ba[i]=(byte)state.charAt(i); baos.write(ba,0,5); } catch (IndexOutOfBoundsException e){ inline007.goldChecker.println("3: "+e); } inline007.goldChecker.print(baos.toString()); inline007.goldChecker.println(); } return ierr; } public static void main( String args[] ) { int ierr; inline007 myInline_n = new inline007(); inline007 myInline_f = new inline007(); if (args.length > 0 && args[0].equals("-help")) { inline007.goldChecker.println("usage: java inline007 [-print | -report]"); inline007.goldChecker.check(); return; } if (args.length > 0 && args[0].equals("-print")) pFlag = 2; if (args.length > 0 && args[0].equals("-report")) pFlag = 1; for (int ii=0; ii<14; ii++) myIters[ii]=ITERS; if (pFlag==2) inline007.goldChecker.println("inline007"); /* Give the JIT an initial look at all the methods */ myInline_f.runFinals(); ierr = inline007.result(); if (ierr == 0) { inline007.goldChecker.println("PASSED."); } else { inline007.goldChecker.println("FAILED. (ierr = " + ierr + ")"); } inline007.goldChecker.check(); } }