blob: 3db807f949efb1001407975195c89fa18660f020 [file] [log] [blame]
/*
* 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();
}
}