blob: 0fe3d873ea0e6e43ed88fe5ee93d10897c14d97b [file] [log] [blame]
Mingyao Yange58bdca2016-10-28 11:07:24 -07001/*
2 * Copyright (C) 2016 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17import java.util.Arrays;
18
19// Modified from a fuzz test.
20public class Main {
21
22 private interface X {
23 int x();
24 }
25
26 private class A {
27 public int a() {
28 return (+ (Math.multiplyExact(mI, mI)));
29 }
30 }
31
32 private class B extends A implements X {
33 public int a() {
34 return super.a() + ((int) (Math.max(364746077.0f, ((float) mD))));
35 }
36 public int x() {
37 return (mI >> (mI++));
38 }
39 }
40
41 private static class C implements X {
42 public static int s() {
43 return 671468641;
44 }
45 public int c() {
46 return -383762838;
47 }
48 public int x() {
49 return -138813312;
50 }
51 }
52
53 private A mA = new B();
54 private B mB = new B();
55 private X mBX = new B();
56 private C mC = new C();
57 private X mCX = new C();
58
59 private boolean mZ = false;
60 private int mI = 0;
61 private long mJ = 0;
62 private float mF = 0;
63 private double mD = 0;
64
65 private boolean[] mArray = new boolean[576];
66
67 private Main() {
68 boolean a = false;
69 for (int i0 = 0; i0 < 576; i0++) {
70 mArray[i0] = a;
71 a = !a;
72 }
73 }
74
75 /// CHECK-START: float Main.testMethod() load_store_elimination (before)
76 /// CHECK-DAG: Deoptimize
77 /// CHECK-DAG: Deoptimize
78 /// CHECK-DAG: NewInstance
79 /// CHECK-DAG: NewInstance
80 /// CHECK-DAG: NewInstance
81 /// CHECK-DAG: NewInstance
82 /// CHECK-DAG: NewInstance
83 /// CHECK-DAG: NewInstance
84 /// CHECK-DAG: NewInstance
85 /// CHECK-DAG: NewInstance
86 /// CHECK-DAG: NewInstance
87 /// CHECK-DAG: NewInstance
88 /// CHECK-DAG: NewInstance
89 /// CHECK-DAG: NewInstance
90 /// CHECK-DAG: NewInstance
91 /// CHECK-DAG: NewInstance
92 /// CHECK-NOT: NewInstance
93
94 /// CHECK-START: float Main.testMethod() load_store_elimination (after)
95 /// CHECK-DAG: Deoptimize
96 /// CHECK-DAG: Deoptimize
97 /// CHECK-NOT: NewInstance
98
99 private float testMethod() {
100 {
101 int lI0 = (-1456058746 << mI);
102 mD = ((double)(int)(double) mD);
103 for (int i0 = 56 - 1; i0 >= 0; i0--) {
104 mArray[i0] &= (Boolean.logicalOr(((true ? ((boolean) new Boolean((mZ))) : mZ) || mArray[i0]), (mZ)));
105 mF *= (mF * mF);
106 if ((mZ ^ true)) {
107 mF *= ((float)(int)(float) 267827331.0f);
108 mZ ^= ((false & ((boolean) new Boolean(false))) | mZ);
109 for (int i1 = 576 - 1; i1 >= 0; i1--) {
110 mZ &= ((mArray[279]) | ((boolean) new Boolean(true)));
111 mD -= (--mD);
112 for (int i2 = 56 - 1; i2 >= 0; i2--) {
113 mF /= (mF - mF);
114 mI = (Math.min(((int) new Integer(mI)), (766538816 * (++mI))));
115 mF += (mZ ? (mB.a()) : ((! mZ) ? -752042357.0f : (++mF)));
116 mJ |= ((long) new Long((-2084191070L + (mJ | mJ))));
117 lI0 |= ((int) new Integer(((int) new Integer(mI))));
118 if (((boolean) new Boolean(false))) {
119 mZ &= (mZ);
120 mF *= (mF--);
121 mD = (Double.POSITIVE_INFINITY);
122 mF += ((float)(int)(float) (-2026938813.0f * 638401585.0f));
123 mJ = (--mJ);
124 for (int i3 = 56 - 1; i3 >= 0; i3--) {
125 mI &= (- mI);
126 mD = (--mD);
127 mArray[426] = (mZ || false);
128 mF -= (((this instanceof Main) ? mF : mF) + 976981405.0f);
129 mZ &= ((mZ) & (this instanceof Main));
130 }
131 mZ ^= (Float.isFinite(-1975953895.0f));
132 } else {
133 mJ /= ((long) (Math.nextDown(-1519600008.0f)));
134 mJ <<= (Math.round(1237681786.0));
135 }
136 }
137 mArray[i0] &= (false || ((1256071300.0f != -353296391.0f) ? false : (mZ ^ mArray[i0])));
138 mF *= (+ ((float) mD));
139 for (int i2 = 0; i2 < 576; i2++) {
140 mD *= ((double) lI0);
141 lI0 = (lI0 & (Integer.MIN_VALUE));
142 mF -= (--mF);
143 }
144 if ((this instanceof Main)) {
145 mZ ^= ((boolean) new Boolean(true));
146 } else {
147 {
148 int lI1 = (mZ ? (--lI0) : 1099574344);
149 mJ >>= (Math.incrementExact(mJ));
150 mJ = (~ -2103354070L);
151 }
152 }
153 }
154 } else {
155 mJ *= (- ((long) new Long(479832084L)));
156 mJ %= (Long.MAX_VALUE);
157 mD /= (--mD);
158 if ((mI > ((mBX.x()) << mI))) {
159 {
160 long lJ0 = (mJ--);
161 mI >>>= (mBX.x());
162 }
163 mF = (+ 505094603.0f);
164 mD *= (((boolean) new Boolean((! false))) ? mD : 1808773781.0);
165 mI *= (Integer.MIN_VALUE);
166 for (int i1 = 576 - 1; i1 >= 0; i1--) {
167 if (((boolean) new Boolean(false))) {
168 mD += ((double)(float)(double) -1051436901.0);
169 } else {
170 mF -= ((float)(int)(float) (Float.min(mF, (mF--))));
171 }
172 for (int i2 = 0; i2 < 576; i2++) {
173 mJ -= ((long) new Long(-1968644857L));
174 mJ ^= (+ (mC.s()));
175 }
176 }
177 } else {
178 mF -= ((- mF) + -2145489966.0f);
179 }
180 mD -= (mD++);
181 mD = (949112777.0 * 1209996119.0);
182 }
183 mZ &= (Boolean.logicalAnd(true, ((mZ) & (((boolean) new Boolean(true)) && true))));
184 }
185 }
186 return ((float) 964977619L);
187 }
188
189 public static void main(String[] args) {
190 System.out.println("Start....");
191 Main t = new Main();
192 float r = 1883600237.0f;
193 try {
194 r = t.testMethod();
195 } catch (Exception e) {
196 // Arithmetic, null pointer, index out of bounds, etc.
197 System.out.println("An exception was caught.");
198 }
199 System.out.println("r = " + r);
200 System.out.println("mZ = " + t.mZ);
201 System.out.println("mI = " + t.mI);
202 System.out.println("mJ = " + t.mJ);
203 System.out.println("mF = " + t.mF);
204 System.out.println("mD = " + t.mD);
205 System.out.println("Done....");
206 }
207}
208