• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
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 
17 import java.util.Arrays;
18 
19 // Modified from a fuzz test.
20 public class Main {
21 
22   private interface X {
x()23     int x();
24   }
25 
26   private class A {
a()27     public int a() {
28       return (+ (Math.multiplyExact(mI, mI)));
29     }
30   }
31 
32   private class B extends A implements X {
a()33     public int a() {
34       return super.a() + ((int) (Math.max(364746077.0f, ((float) mD))));
35     }
x()36     public int x() {
37       return (mI >> (mI++));
38     }
39   }
40 
41   private static class C implements X {
s()42     public static int s() {
43       return 671468641;
44     }
c()45     public int c() {
46       return -383762838;
47     }
x()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 
Main()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 
testMethod()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 
main(String[] args)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 
209