test/compiler/6689060/Test.java

changeset 0
f90c822e73f8
child 6876
710a3c8b516e
equal deleted inserted replaced
-1:000000000000 0:f90c822e73f8
1 /*
2 * Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 */
23
24 /*
25 * @test
26 * @bug 6689060
27 * @summary Escape Analysis does not work with Compressed Oops
28 * @run main/othervm -Xbatch -XX:CompileCommand=exclude,Test.dummy -XX:+AggressiveOpts Test
29 */
30
31 import java.lang.reflect.Array;
32
33 class Point {
34 int x;
35 int y;
36 Point next;
37 int ax[];
38 int ay[];
39 Point pax[];
40 Point pay[];
41 public Point getNext() {
42 return next;
43 }
44 }
45
46 public class Test {
47
48 void dummy() {
49 // Empty method to verify correctness of DebugInfo.
50 // Use -XX:CompileCommand=exclude,Test.dummy
51 }
52
53 int ival(int i) {
54 return i*2;
55 }
56
57 int test80(int y, int l, int i) {
58 Point p = new Point();
59 p.ax = new int[2];
60 p.ay = new int[2];
61 int x = 3;
62 p.ax[0] = x;
63 p.ay[1] = 3 * x + y;
64 dummy();
65 return p.ax[0] * p.ay[1];
66 }
67
68 int test81(int y, int l, int i) {
69 Point p = new Point();
70 p.ax = new int[2];
71 p.ay = new int[2];
72 int x = 3;
73 p.ax[0] = x;
74 p.ay[1] = 3 * x + y;
75 dummy();
76 return p.ax[0] * p.ay[1];
77 }
78
79
80 int test44(int y) {
81 Point p1 = new Point();
82 p1.x = ival(3);
83 dummy();
84 p1.y = 3 * p1.x + y;
85 return p1.y;
86 }
87
88 int test43(int y) {
89 Point p1 = new Point();
90 if ( (y & 1) == 1 ) {
91 p1.x = ival(3);
92 } else {
93 p1.x = ival(5);
94 }
95 dummy();
96 p1.y = 3 * p1.x + y;
97 return p1.y;
98 }
99
100 int test42(int y) {
101 Point p1 = new Point();
102 p1.x = 3;
103 for (int i = 0; i < y; i++) {
104 if ( (i & 1) == 1 ) {
105 p1.x += 4;
106 }
107 }
108 p1.y = 3 * y + p1.x;
109 return p1.y;
110 }
111
112 int test40(int y) {
113 Point p1 = new Point();
114 if ( (y & 1) == 1 ) {
115 p1.x = 3;
116 } else {
117 p1.x = 5;
118 }
119 p1.y = 3 * p1.x + y;
120 return p1.y;
121 }
122
123 int test41(int y) {
124 Point p1 = new Point();
125 if ( (y & 1) == 1 ) {
126 p1.x += 4;
127 } else {
128 p1.x += 5;
129 }
130 p1.y = 3 * p1.x + y;
131 return p1.y;
132 }
133
134 Point test00(int y) {
135 int x = 3;
136 Point p = new Point();
137 p.x = x;
138 p.y = 3 * x + y;
139 return p;
140 }
141
142 Point test01(int y) {
143 int x = 3;
144 Point p = new Point();
145 p.x = x;
146 p.y = 3 * x + y;
147 dummy();
148 return p;
149 }
150
151 Point test02(int y) {
152 int x = 3;
153 Point p1 = null;
154 for (int i = 0; i < y; i++) {
155 Point p2 = new Point();
156 p2.x = x;
157 p2.y = 3 * y + x;
158 p2.next = p1;
159 p1 = p2;
160 }
161 return p1;
162 }
163
164 Point test03(int y) {
165 int x = 3;
166 Point p1 = null;
167 for (int i = 0; i < y; i++) {
168 Point p2 = new Point();
169 p2.x = x;
170 p2.y = 3 * y + x;
171 p2.next = p1;
172 p1 = p2;
173 }
174 dummy();
175 return p1;
176 }
177
178 Point test04(int y) {
179 int x = 3;
180 Point p1 = null;
181 for (int i = 0; i < y; i++) {
182 Point p2 = new Point();
183 p2.x = x;
184 p2.y = 3 * y + x;
185 p2.next = p1;
186 dummy();
187 p1 = p2;
188 }
189 return p1;
190 }
191
192 int test05(int y) {
193 int x = 3;
194 Point p1 = new Point();
195 for (int i = 0; i < y; i++) {
196 Point p2 = new Point();
197 p2.x = x;
198 p2.y = 3 * y + x;
199 p1.next = p2;
200 p1 = p2;
201 }
202 return p1.y;
203 }
204
205 int test0(int y) {
206 int x = 3;
207 Point p = new Point();
208 p.x = x;
209 p.y = 3 * x + y;
210 dummy();
211 return p.x * p.y;
212 }
213
214 int test1(int y) {
215 Point p = new Point();
216 if ( (y & 1) == 1 ) {
217 p = new Point(); // Kill previous
218 }
219 int x = 3;
220 p.x = x;
221 p.y = 3 * x + y;
222 dummy();
223 return p.x * p.y;
224 }
225
226 int test2(int y) {
227 Point p1 = new Point();
228 Point p2 = new Point();
229 p1.x = 3;
230 p2.x = 4;
231 p1.y = 3 * p2.x + y;
232 p2.y = 3 * p1.x + y;
233 dummy();
234 return p1.y * p2.y;
235 }
236
237 int test3(int y, Point p1) {
238 Point p2 = new Point();
239 p1.x = 3;
240 p2.x = 4;
241 p1.y = 3 * p2.x + y;
242 p2.y = 3 * p1.x + y;
243 dummy();
244 return p1.y * p2.y;
245 }
246
247 int test4(int y) {
248 Point p1 = new Point();
249 Point p2 = new Point();
250 if ( (y & 1) == 1 ) {
251 p1.x = 3;
252 p2.x = 4;
253 } else {
254 p1.x = 5;
255 p2.x = 6;
256 }
257 p1.y = 3 * p2.x + y;
258 p2.y = 3 * p1.x + y;
259 dummy();
260 return p1.y * p2.y;
261 }
262
263 int test5(int y, Point p1) {
264 Point p2 = new Point();
265 if ( (y & 1) == 1 ) {
266 p1.x = 3;
267 p2.x = 4;
268 } else {
269 p1.x = 5;
270 p2.x = 6;
271 }
272 p1.y = 3 * p2.x + y;
273 p2.y = 3 * p1.x + y;
274 dummy();
275 return p1.y * p2.y;
276 }
277
278 int test6(int y) {
279 Point p1 = new Point();
280 Point p2 = new Point();
281 p1.next = p2;
282 if ( (y & 1) == 1 ) {
283 p1.x = 3;
284 p1.getNext().x = 4;
285 } else {
286 p1.x = 5;
287 p1.getNext().x = 6;
288 }
289 p1.y = 3 * p2.x + y;
290 p2.y = 3 * p1.x + y;
291 dummy();
292 return p1.y * p2.y;
293 }
294
295 int test7(int y, Point p1) {
296 Point p2 = new Point();
297 p1.next = p2;
298 if ( (y & 1) == 1 ) {
299 p1.x = 3;
300 p1.getNext().x = 4;
301 } else {
302 p1.x = 5;
303 p1.getNext().x = 6;
304 }
305 p1.y = 3 * p2.x + y;
306 p2.y = 3 * p1.x + y;
307 dummy();
308 return p1.y * p2.y;
309 }
310
311 int test8(int y, int l, int i) {
312 Point p = new Point();
313 p.ax = new int[l];
314 p.ay = new int[l];
315 int x = 3;
316 p.ax[i] = x;
317 p.ay[i] = 3 * x + y;
318 dummy();
319 return p.ax[i] * p.ay[i];
320 }
321
322 int test9(int y, int l, int i) {
323 Point p = new Point();
324 p.pax = new Point[l];
325 p.pay = new Point[l];
326 p.pax[i] = new Point();
327 p.pay[i] = new Point();
328 p.pax[i].x = 3;
329 p.pay[i].x = 4;
330 p.pax[i].y = 3 * p.pay[i].x + y;
331 p.pay[i].y = 3 * p.pax[i].x + y;
332 dummy();
333 return p.pax[i].y * p.pay[i].y;
334 }
335
336 int test10(int y, int l, int i, Class cls) {
337 Point p = new Point();
338 try {
339 p.pax = (Point[])Array.newInstance(cls, l);
340 p.pax[i] = (Point)cls.newInstance();
341 }
342 catch(java.lang.InstantiationException ex) {
343 return 0;
344 }
345 catch(java.lang.IllegalAccessException ex) {
346 return 0;
347 }
348 p.pax[i].x = 3;
349 p.pax[i].y = 3 * p.pax[i].x + y;
350 dummy();
351 return p.pax[i].x * p.pax[i].y;
352 }
353
354 int test11(int y) {
355 Point p1 = new Point();
356 Point p2 = new Point();
357 p1.next = p2;
358 if ( (y & 1) == 1 ) {
359 p1.x = 3;
360 p1.next.x = 4;
361 } else {
362 p1.x = 5;
363 p1.next.x = 6;
364 }
365 p1.y = 3 * p1.next.x + y;
366 p1.next.y = 3 * p1.x + y;
367 dummy();
368 return p1.y * p1.next.y;
369 }
370
371 int test12(int y) {
372 Point p1 = new Point();
373 p1.next = p1;
374 if ( (y & 1) == 1 ) {
375 p1.x = 3;
376 p1.next.x = 4;
377 } else {
378 p1.x = 5;
379 p1.next.x = 6;
380 }
381 p1.y = 3 * p1.next.x + y;
382 p1.next.y = 3 * p1.x + y;
383 dummy();
384 return p1.y * p1.next.y;
385 }
386
387
388 public static void main(String args[]) {
389 Test tsr = new Test();
390 Point p = new Point();
391 Point ptmp = p;
392 Class cls = Point.class;
393 int y = 0;
394 for (int i=0; i<10000; i++) {
395 ptmp.next = tsr.test00(1);
396 ptmp.next = tsr.test01(1);
397 ptmp.next = tsr.test02(1);
398 ptmp.next = tsr.test03(1);
399 ptmp.next = tsr.test04(1);
400
401 y = tsr.test05(1);
402
403 y = tsr.test80(y, 1, 0);
404 y = tsr.test81(y, 1, 0);
405
406 y = tsr.test44(y);
407 y = tsr.test43(y);
408 y = tsr.test42(y);
409 y = tsr.test40(y);
410 y = tsr.test41(y);
411
412 y = tsr.test0(y);
413 y = tsr.test1(y);
414 y = tsr.test2(y);
415 y = tsr.test3(y, p);
416 y = tsr.test4(y);
417 y = tsr.test5(y, p);
418 y = tsr.test6(y);
419 y = tsr.test7(y, p);
420 y = tsr.test8(y, 1, 0);
421 y = tsr.test9(y, 1, 0);
422 y = tsr.test10(y, 1, 0, cls);
423 y = tsr.test11(y);
424 y = tsr.test12(y);
425 }
426 for (int i=0; i<10000; i++) {
427 ptmp.next = tsr.test00(1);
428 ptmp.next = tsr.test01(1);
429 ptmp.next = tsr.test02(1);
430 ptmp.next = tsr.test03(1);
431 ptmp.next = tsr.test04(1);
432
433 y = tsr.test05(1);
434
435 y = tsr.test80(y, 1, 0);
436 y = tsr.test81(y, 1, 0);
437
438 y = tsr.test44(y);
439 y = tsr.test43(y);
440 y = tsr.test42(y);
441 y = tsr.test40(y);
442 y = tsr.test41(y);
443
444 y = tsr.test0(y);
445 y = tsr.test1(y);
446 y = tsr.test2(y);
447 y = tsr.test3(y, p);
448 y = tsr.test4(y);
449 y = tsr.test5(y, p);
450 y = tsr.test6(y);
451 y = tsr.test7(y, p);
452 y = tsr.test8(y, 1, 0);
453 y = tsr.test9(y, 1, 0);
454 y = tsr.test10(y, 1, 0, cls);
455 y = tsr.test11(y);
456 y = tsr.test12(y);
457 }
458 for (int i=0; i<10000; i++) {
459 ptmp.next = tsr.test00(1);
460 ptmp.next = tsr.test01(1);
461 ptmp.next = tsr.test02(1);
462 ptmp.next = tsr.test03(1);
463 ptmp.next = tsr.test04(1);
464
465 y = tsr.test05(1);
466
467 y = tsr.test80(y, 1, 0);
468 y = tsr.test81(y, 1, 0);
469
470 y = tsr.test44(y);
471 y = tsr.test43(y);
472 y = tsr.test42(y);
473 y = tsr.test40(y);
474 y = tsr.test41(y);
475
476 y = tsr.test0(y);
477 y = tsr.test1(y);
478 y = tsr.test2(y);
479 y = tsr.test3(y, p);
480 y = tsr.test4(y);
481 y = tsr.test5(y, p);
482 y = tsr.test6(y);
483 y = tsr.test7(y, p);
484 y = tsr.test8(y, 1, 0);
485 y = tsr.test9(y, 1, 0);
486 y = tsr.test10(y, 1, 0, cls);
487 y = tsr.test11(y);
488 y = tsr.test12(y);
489 }
490
491 int z = 0;
492 y = tsr.test80(0, 1, 0);
493 z += y;
494 System.out.println("After 'test80' y=" + y);
495 y = tsr.test81(0, 1, 0);
496 z += y;
497 System.out.println("After 'test81' y=" + y);
498
499 y = tsr.test44(0);
500 z += y;
501 System.out.println("After 'test44' y=" + y);
502 y = tsr.test43(0);
503 z += y;
504 System.out.println("After 'test43' y=" + y);
505 y = tsr.test42(0);
506 z += y;
507 System.out.println("After 'test42' y=" + y);
508 y = tsr.test40(0);
509 z += y;
510 System.out.println("After 'test40' y=" + y);
511 y = tsr.test41(0);
512 z += y;
513 System.out.println("After 'test41' y=" + y);
514
515 ptmp.next = tsr.test00(1);
516 z += y;
517 System.out.println("After 'test00' p.y=" + ptmp.next.y);
518 ptmp.next = tsr.test01(1);
519 z += y;
520 System.out.println("After 'test01' p.y=" + ptmp.next.y);
521 ptmp.next = tsr.test02(1);
522 z += y;
523 System.out.println("After 'test02' p.y=" + ptmp.next.y);
524 ptmp.next = tsr.test03(1);
525 z += y;
526 System.out.println("After 'test03' p.y=" + ptmp.next.y);
527 ptmp.next = tsr.test04(1);
528 z += y;
529 System.out.println("After 'test04' p.y=" + ptmp.next.y);
530
531 y = tsr.test05(1);
532 z += y;
533 System.out.println("After 'test05' y=" + y);
534
535 y = tsr.test0(0);
536 z += y;
537 System.out.println("After 'test0' y=" + y);
538 y = tsr.test1(0);
539 z += y;
540 System.out.println("After 'test1' y=" + y);
541 y = tsr.test2(0);
542 z += y;
543 System.out.println("After 'test2' y=" + y);
544 y = tsr.test3(0, new Point());
545 z += y;
546 System.out.println("After 'test3' y=" + y);
547 y = tsr.test4(0);
548 z += y;
549 System.out.println("After 'test4' y=" + y);
550 y = tsr.test5(0, new Point());
551 z += y;
552 System.out.println("After 'test5' y=" + y);
553 y = tsr.test6(0);
554 z += y;
555 System.out.println("After 'test6' y=" + y);
556 y = tsr.test7(0, new Point());
557 z += y;
558 System.out.println("After 'test7' y=" + y);
559 y = tsr.test8(0, 1, 0);
560 z += y;
561 System.out.println("After 'test8' y=" + y);
562 y = tsr.test9(0, 1, 0);
563 z += y;
564 System.out.println("After 'test9' y=" + y);
565 y = tsr.test10(0, 1, 0, cls);
566 z += y;
567 System.out.println("After 'test10' y=" + y);
568 y = tsr.test11(0);
569 z += y;
570 System.out.println("After 'test11' y=" + y);
571 y = tsr.test12(0);
572 z += y;
573 System.out.println("After 'test12' y=" + y);
574 System.out.println("Sum of y =" + z);
575 }
576 }

mercurial