blob: 9fb9c4668b72d6646e146ac2012858f9b34b2cab [file] [log] [blame]
Calin Juravle10e244f2015-01-26 18:54:32 +00001/*
2 * Copyright (C) 2015 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
17public class Main {
18
19 // CHECK-START: Main Main.keepTest(Main) instruction_simplifier_after_types (before)
20 // CHECK: NullCheck
21 // CHECK: InvokeStaticOrDirect
22
23 // CHECK-START: Main Main.keepTest(Main) instruction_simplifier_after_types (after)
24 // CHECK: NullCheck
25 // CHECK: InvokeStaticOrDirect
26 public Main keepTest(Main m) {
27 return m.g();
28 }
29
30 // CHECK-START: Main Main.thisTest() instruction_simplifier (before)
31 // CHECK: NullCheck
32 // CHECK: InvokeStaticOrDirect
33
34 // CHECK-START: Main Main.thisTest() instruction_simplifier (after)
35 // CHECK-NOT: NullCheck
36 // CHECK: InvokeStaticOrDirect
37 public Main thisTest() {
38 return g();
39 }
40
41 // CHECK-START: Main Main.newInstanceRemoveTest() instruction_simplifier (before)
Calin Juravleb97b39c2015-02-09 18:22:09 +000042 // CHECK: NewInstance
43 // CHECK: NullCheck
44 // CHECK: InvokeStaticOrDirect
45 // CHECK: NullCheck
46 // CHECK: InvokeStaticOrDirect
Calin Juravle10e244f2015-01-26 18:54:32 +000047
48 // CHECK-START: Main Main.newInstanceRemoveTest() instruction_simplifier (after)
49 // CHECK-NOT: NullCheck
50 public Main newInstanceRemoveTest() {
51 Main m = new Main();
52 return m.g();
53 }
54
55 // CHECK-START: Main Main.newArrayRemoveTest() instruction_simplifier (before)
Calin Juravleb97b39c2015-02-09 18:22:09 +000056 // CHECK: NewArray
57 // CHECK: NullCheck
58 // CHECK: ArrayGet
Calin Juravle10e244f2015-01-26 18:54:32 +000059
60 // CHECK-START: Main Main.newArrayRemoveTest() instruction_simplifier (after)
Calin Juravleb97b39c2015-02-09 18:22:09 +000061 // CHECK: NewArray
Calin Juravle10e244f2015-01-26 18:54:32 +000062 // CHECK-NOT: NullCheck
Calin Juravleb97b39c2015-02-09 18:22:09 +000063 // CHECK: ArrayGet
Calin Juravle10e244f2015-01-26 18:54:32 +000064 public Main newArrayRemoveTest() {
65 Main[] ms = new Main[1];
66 return ms[0];
67 }
68
69 // CHECK-START: Main Main.ifRemoveTest(boolean) instruction_simplifier_after_types (before)
Calin Juravleb97b39c2015-02-09 18:22:09 +000070 // CHECK: NewInstance
71 // CHECK: NullCheck
Calin Juravle10e244f2015-01-26 18:54:32 +000072
73 // CHECK-START: Main Main.ifRemoveTest(boolean) instruction_simplifier_after_types (after)
Calin Juravleb97b39c2015-02-09 18:22:09 +000074 // CHECK: NewInstance
Calin Juravle10e244f2015-01-26 18:54:32 +000075 // CHECK-NOT: NullCheck
76 public Main ifRemoveTest(boolean flag) {
77 Main m = null;
78 if (flag) {
79 m = new Main();
80 } else {
81 m = new Main(1);
82 }
83 return m.g();
84 }
85
86 // CHECK-START: Main Main.ifKeepTest(boolean) instruction_simplifier_after_types (before)
Calin Juravleb97b39c2015-02-09 18:22:09 +000087 // CHECK: NewInstance
88 // CHECK: NullCheck
Calin Juravle10e244f2015-01-26 18:54:32 +000089
90 // CHECK-START: Main Main.ifKeepTest(boolean) instruction_simplifier_after_types (after)
Calin Juravleb97b39c2015-02-09 18:22:09 +000091 // CHECK: NewInstance
92 // CHECK: NullCheck
Calin Juravle10e244f2015-01-26 18:54:32 +000093 public Main ifKeepTest(boolean flag) {
94 Main m = null;
95 if (flag) {
96 m = new Main(1);
97 }
98 return m.g();
99 }
100
101 // CHECK-START: Main Main.forRemoveTest(int) instruction_simplifier_after_types (before)
102 // CHECK: NullCheck
103
104 // CHECK-START: Main Main.forRemoveTest(int) instruction_simplifier_after_types (after)
105 // CHECK-NOT: NullCheck
106 public Main forRemoveTest(int count) {
107 Main a = new Main();
108 Main m = new Main();
109 for (int i = 0; i < count; i++) {
110 if (i % 2 == 0) {
111 m = a;
112 }
113 }
114 return m.g();
115 }
116
117 // CHECK-START: Main Main.forKeepTest(int) instruction_simplifier_after_types (before)
118 // CHECK: NullCheck
119
120 // CHECK-START: Main Main.forKeepTest(int) instruction_simplifier_after_types (after)
121 // CHECK: NullCheck
122 public Main forKeepTest(int count) {
123 Main a = new Main();
124 Main m = new Main();
125 for (int i = 0; i < count; i++) {
126 if (i % 2 == 0) {
127 m = a;
128 } else {
129 m = null;
130 }
131 }
132 return m.g();
133 }
134
135 // CHECK-START: Main Main.phiFlowRemoveTest(int) instruction_simplifier_after_types (before)
136 // CHECK: NullCheck
137
138 // CHECK-START: Main Main.phiFlowRemoveTest(int) instruction_simplifier_after_types (after)
139 // CHECK-NOT: NullCheck
140 public Main phiFlowRemoveTest(int count) {
141 Main a = new Main();
142 Main m = new Main();
143 for (int i = 0; i < count; i++) {
144 if (i % 2 == 0) {
145 m = a;
146 }
147 }
148 Main n = new Main();
149 for (int i = 0; i < count; i++) {
150 if (i % 3 == 0) {
151 n = m;
152 }
153 }
154 return n.g();
155 }
156
157 // CHECK-START: Main Main.phiFlowKeepTest(int) instruction_simplifier_after_types (before)
158 // CHECK: NullCheck
159
160 // CHECK-START: Main Main.phiFlowKeepTest(int) instruction_simplifier_after_types (after)
161 // CHECK: NullCheck
162 public Main phiFlowKeepTest(int count) {
163 Main a = new Main();
164 Main m = new Main();
165 for (int i = 0; i < count; i++) {
166 if (i % 2 == 0) {
167 m = a;
168 } else {
169 m = null;
170 }
171 }
172 Main n = new Main();
173 for (int i = 0; i < count; i++) {
174 if (i % 3 == 0) {
175 n = m;
176 }
177 }
178 return n.g();
179 }
180
181 // CHECK-START: Main Main.scopeRemoveTest(int, Main) instruction_simplifier (before)
182 // CHECK: NullCheck
183
184 // CHECK-START: Main Main.scopeRemoveTest(int, Main) instruction_simplifier (after)
185 // CHECK-NOT: NullCheck
186 public Main scopeRemoveTest(int count, Main a) {
187 Main m = null;
188 for (int i = 0; i < count; i++) {
189 if (i % 2 == 0) {
190 m = new Main();
191 m.g();
192 } else {
193 m = a;
194 }
195 }
196 return m;
197 }
198
199 // CHECK-START: Main Main.scopeKeepTest(int, Main) instruction_simplifier_after_types (before)
200 // CHECK: NullCheck
201
202 // CHECK-START: Main Main.scopeKeepTest(int, Main) instruction_simplifier_after_types (after)
203 // CHECK: NullCheck
204 public Main scopeKeepTest(int count, Main a) {
205 Main m = new Main();
206 for (int i = 0; i < count; i++) {
207 if (i % 2 == 0) {
208 m = a;
209 } else {
210 m = a;
211 m.g();
212 }
213 }
214 return m;
215 }
216
217 public Main() {}
218 public Main(int dummy) {}
219
220 private Main g() {
221 // avoids inlining
222 throw new RuntimeException();
223 }
224
225 public static void main(String[] args) {
226 new Main();
227 }
228
229}