Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mobile
Path: blob/master/test/hotspot/jtreg/compiler/eliminateAutobox/TestLongBoxing.java
41149 views
1
/*
2
* Copyright (c) 2013, 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 6934604
27
* @summary enable parts of EliminateAutoBox by default
28
*
29
* @run main/othervm -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:+EliminateAutoBox
30
* compiler.eliminateAutobox.TestLongBoxing
31
* @run main/othervm -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:+EliminateAutoBox
32
* -XX:CompileCommand=exclude,compiler.eliminateAutobox.TestLongBoxing::dummy
33
* -XX:CompileCommand=exclude,compiler.eliminateAutobox.TestLongBoxing::foo
34
* -XX:CompileCommand=exclude,compiler.eliminateAutobox.TestLongBoxing::foob
35
* compiler.eliminateAutobox.TestLongBoxing
36
* @run main/othervm -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:-EliminateAutoBox
37
* -XX:CompileCommand=exclude,compiler.eliminateAutobox.TestLongBoxing::dummy
38
* -XX:CompileCommand=exclude,compiler.eliminateAutobox.TestLongBoxing::foo
39
* -XX:CompileCommand=exclude,compiler.eliminateAutobox.TestLongBoxing::foob
40
* compiler.eliminateAutobox.TestLongBoxing
41
*/
42
43
package compiler.eliminateAutobox;
44
45
public class TestLongBoxing {
46
47
static final Long ibc = new Long(1);
48
49
//===============================================
50
// Non-inlined methods to test deoptimization info
51
static void dummy() { }
52
static long foo(long i) { return i; }
53
static Long foob(long i) { return Long.valueOf(i); }
54
55
56
static long simple(long i) {
57
Long ib = new Long(i);
58
return ib;
59
}
60
61
static long simpleb(long i) {
62
Long ib = Long.valueOf(i);
63
return ib;
64
}
65
66
static long simplec() {
67
Long ib = ibc;
68
return ib;
69
}
70
71
static long simplef(long i) {
72
Long ib = foob(i);
73
return ib;
74
}
75
76
static long simplep(Long ib) {
77
return ib;
78
}
79
80
static long simple2(long i) {
81
Long ib1 = new Long(i);
82
Long ib2 = new Long(i+1);
83
return ib1 + ib2;
84
}
85
86
static long simpleb2(long i) {
87
Long ib1 = Long.valueOf(i);
88
Long ib2 = Long.valueOf(i+1);
89
return ib1 + ib2;
90
}
91
92
static long simplem2(long i) {
93
Long ib1 = new Long(i);
94
Long ib2 = Long.valueOf(i+1);
95
return ib1 + ib2;
96
}
97
98
static long simplep2(long i, Long ib1) {
99
Long ib2 = Long.valueOf(i+1);
100
return ib1 + ib2;
101
}
102
103
static long simplec2(long i) {
104
Long ib1 = ibc;
105
Long ib2 = Long.valueOf(i+1);
106
return ib1 + ib2;
107
}
108
109
//===============================================
110
static long test(long i) {
111
Long ib = new Long(i);
112
if ((i&1) == 0)
113
ib = i+1;
114
return ib;
115
}
116
117
static long testb(long i) {
118
Long ib = i;
119
if ((i&1) == 0)
120
ib = (i+1);
121
return ib;
122
}
123
124
static long testm(long i) {
125
Long ib = i;
126
if ((i&1) == 0)
127
ib = new Long(i+1);
128
return ib;
129
}
130
131
static long testp(long i, Long ib) {
132
if ((i&1) == 0)
133
ib = new Long(i+1);
134
return ib;
135
}
136
137
static long testc(long i) {
138
Long ib = ibc;
139
if ((i&1) == 0)
140
ib = new Long(i+1);
141
return ib;
142
}
143
144
static long test2(long i) {
145
Long ib1 = new Long(i);
146
Long ib2 = new Long(i+1);
147
if ((i&1) == 0) {
148
ib1 = new Long(i+1);
149
ib2 = new Long(i+2);
150
}
151
return ib1+ib2;
152
}
153
154
static long testb2(long i) {
155
Long ib1 = i;
156
Long ib2 = i+1;
157
if ((i&1) == 0) {
158
ib1 = (i+1);
159
ib2 = (i+2);
160
}
161
return ib1+ib2;
162
}
163
164
static long testm2(long i) {
165
Long ib1 = new Long(i);
166
Long ib2 = i+1;
167
if ((i&1) == 0) {
168
ib1 = new Long(i+1);
169
ib2 = (i+2);
170
}
171
return ib1+ib2;
172
}
173
174
static long testp2(long i, Long ib1) {
175
Long ib2 = i+1;
176
if ((i&1) == 0) {
177
ib1 = new Long(i+1);
178
ib2 = (i+2);
179
}
180
return ib1+ib2;
181
}
182
183
static long testc2(long i) {
184
Long ib1 = ibc;
185
Long ib2 = i+1;
186
if ((i&1) == 0) {
187
ib1 = (ibc+1);
188
ib2 = (i+2);
189
}
190
return ib1+ib2;
191
}
192
193
//===============================================
194
static long sum(long[] a) {
195
long result = 1;
196
for (Long i : a)
197
result += i;
198
return result;
199
}
200
201
static long sumb(long[] a) {
202
Long result = 1l;
203
for (Long i : a)
204
result += i;
205
return result;
206
}
207
208
static long sumc(long[] a) {
209
Long result = ibc;
210
for (Long i : a)
211
result += i;
212
return result;
213
}
214
215
static long sumf(long[] a) {
216
Long result = foob(1);
217
for (Long i : a)
218
result += i;
219
return result;
220
}
221
222
static long sump(long[] a, Long result) {
223
for (Long i : a)
224
result += i;
225
return result;
226
}
227
228
static long sum2(long[] a) {
229
long result1 = 1;
230
long result2 = 1;
231
for (Long i : a) {
232
result1 += i;
233
result2 += i + 1;
234
}
235
return result1 + result2;
236
}
237
238
static long sumb2(long[] a) {
239
Long result1 = 1l;
240
Long result2 = 1l;
241
for (Long i : a) {
242
result1 += i;
243
result2 += i + 1;
244
}
245
return result1 + result2;
246
}
247
248
static long summ2(long[] a) {
249
Long result1 = 1l;
250
Long result2 = new Long(1);
251
for (Long i : a) {
252
result1 += i;
253
result2 += new Long(i + 1);
254
}
255
return result1 + result2;
256
}
257
258
static long sump2(long[] a, Long result2) {
259
Long result1 = 1l;
260
for (Long i : a) {
261
result1 += i;
262
result2 += i + 1;
263
}
264
return result1 + result2;
265
}
266
267
static long sumc2(long[] a) {
268
Long result1 = 1l;
269
Long result2 = ibc;
270
for (Long i : a) {
271
result1 += i;
272
result2 += i + ibc;
273
}
274
return result1 + result2;
275
}
276
277
//===============================================
278
static long remi_sum() {
279
Long j = new Long(1);
280
for (int i = 0; i< 1000; i++) {
281
j = new Long(j + 1);
282
}
283
return j;
284
}
285
286
static long remi_sumb() {
287
Long j = Long.valueOf(1);
288
for (int i = 0; i< 1000; i++) {
289
j = j + 1;
290
}
291
return j;
292
}
293
294
static long remi_sumf() {
295
Long j = foob(1);
296
for (int i = 0; i< 1000; i++) {
297
j = j + 1;
298
}
299
return j;
300
}
301
302
static long remi_sump(Long j) {
303
for (int i = 0; i< 1000; i++) {
304
j = new Long(j + 1);
305
}
306
return j;
307
}
308
309
static long remi_sumc() {
310
Long j = ibc;
311
for (int i = 0; i< 1000; i++) {
312
j = j + ibc;
313
}
314
return j;
315
}
316
317
static long remi_sum2() {
318
Long j1 = new Long(1);
319
Long j2 = new Long(1);
320
for (int i = 0; i< 1000; i++) {
321
j1 = new Long(j1 + 1);
322
j2 = new Long(j2 + 2);
323
}
324
return j1 + j2;
325
}
326
327
static long remi_sumb2() {
328
Long j1 = Long.valueOf(1);
329
Long j2 = Long.valueOf(1);
330
for (int i = 0; i< 1000; i++) {
331
j1 = j1 + 1;
332
j2 = j2 + 2;
333
}
334
return j1 + j2;
335
}
336
337
static long remi_summ2() {
338
Long j1 = new Long(1);
339
Long j2 = Long.valueOf(1);
340
for (int i = 0; i< 1000; i++) {
341
j1 = new Long(j1 + 1);
342
j2 = j2 + 2;
343
}
344
return j1 + j2;
345
}
346
347
static long remi_sump2(Long j1) {
348
Long j2 = Long.valueOf(1);
349
for (int i = 0; i< 1000; i++) {
350
j1 = new Long(j1 + 1);
351
j2 = j2 + 2;
352
}
353
return j1 + j2;
354
}
355
356
static long remi_sumc2() {
357
Long j1 = ibc;
358
Long j2 = Long.valueOf(1);
359
for (int i = 0; i< 1000; i++) {
360
j1 = j1 + ibc;
361
j2 = j2 + 2;
362
}
363
return j1 + j2;
364
}
365
366
367
//===============================================
368
// Safepointa and debug info for deoptimization
369
static long simple_deop(long i) {
370
Long ib = new Long(foo(i));
371
dummy();
372
return ib;
373
}
374
375
static long simpleb_deop(long i) {
376
Long ib = Long.valueOf(foo(i));
377
dummy();
378
return ib;
379
}
380
381
static long simplef_deop(long i) {
382
Long ib = foob(i);
383
dummy();
384
return ib;
385
}
386
387
static long simplep_deop(Long ib) {
388
dummy();
389
return ib;
390
}
391
392
static long simplec_deop(long i) {
393
Long ib = ibc;
394
dummy();
395
return ib;
396
}
397
398
static long test_deop(long i) {
399
Long ib = new Long(foo(i));
400
if ((i&1) == 0)
401
ib = foo(i+1);
402
dummy();
403
return ib;
404
}
405
406
static long testb_deop(long i) {
407
Long ib = foo(i);
408
if ((i&1) == 0)
409
ib = foo(i+1);
410
dummy();
411
return ib;
412
}
413
414
static long testf_deop(long i) {
415
Long ib = foob(i);
416
if ((i&1) == 0)
417
ib = foo(i+1);
418
dummy();
419
return ib;
420
}
421
422
static long testp_deop(long i, Long ib) {
423
if ((i&1) == 0)
424
ib = foo(i+1);
425
dummy();
426
return ib;
427
}
428
429
static long testc_deop(long i) {
430
Long ib = ibc;
431
if ((i&1) == 0)
432
ib = foo(i+1);
433
dummy();
434
return ib;
435
}
436
437
static long sum_deop(long[] a) {
438
long result = 1;
439
for (Long i : a)
440
result += foo(i);
441
dummy();
442
return result;
443
}
444
445
static long sumb_deop(long[] a) {
446
Long result = 1l;
447
for (Long i : a)
448
result += foo(i);
449
dummy();
450
return result;
451
}
452
453
static long sumf_deop(long[] a) {
454
Long result = 1l;
455
for (Long i : a)
456
result += foob(i);
457
dummy();
458
return result;
459
}
460
461
static long sump_deop(long[] a, Long result) {
462
for (Long i : a)
463
result += foob(i);
464
dummy();
465
return result;
466
}
467
468
static long sumc_deop(long[] a) {
469
Long result = ibc;
470
for (Long i : a)
471
result += foo(i);
472
dummy();
473
return result;
474
}
475
476
static long remi_sum_deop() {
477
Long j = new Long(foo(1));
478
for (int i = 0; i< 1000; i++) {
479
j = new Long(foo(j + 1));
480
}
481
dummy();
482
return j;
483
}
484
485
static long remi_sumb_deop() {
486
Long j = Long.valueOf(foo(1));
487
for (int i = 0; i< 1000; i++) {
488
j = foo(j + 1);
489
}
490
dummy();
491
return j;
492
}
493
494
static long remi_sumf_deop() {
495
Long j = foob(1);
496
for (int i = 0; i< 1000; i++) {
497
j = foo(j + 1);
498
}
499
dummy();
500
return j;
501
}
502
503
static long remi_sump_deop(Long j) {
504
for (int i = 0; i< 1000; i++) {
505
j = foo(j + 1);
506
}
507
dummy();
508
return j;
509
}
510
511
static long remi_sumc_deop() {
512
Long j = ibc;
513
for (int i = 0; i< 1000; i++) {
514
j = foo(j + 1);
515
}
516
dummy();
517
return j;
518
}
519
520
//===============================================
521
// Conditional increment
522
static long remi_sum_cond() {
523
Long j = new Long(1);
524
for (int i = 0; i< 1000; i++) {
525
if ((i&1) == 0) {
526
j = new Long(j + 1);
527
}
528
}
529
return j;
530
}
531
532
static long remi_sumb_cond() {
533
Long j = Long.valueOf(1);
534
for (int i = 0; i< 1000; i++) {
535
if ((i&1) == 0) {
536
j = j + 1;
537
}
538
}
539
return j;
540
}
541
542
static long remi_sumf_cond() {
543
Long j = foob(1);
544
for (int i = 0; i< 1000; i++) {
545
if ((i&1) == 0) {
546
j = j + 1;
547
}
548
}
549
return j;
550
}
551
552
static long remi_sump_cond(Long j) {
553
for (int i = 0; i< 1000; i++) {
554
if ((i&1) == 0) {
555
j = j + 1;
556
}
557
}
558
return j;
559
}
560
561
static long remi_sumc_cond() {
562
Long j = ibc;
563
for (int i = 0; i< 1000; i++) {
564
if ((i&1) == 0) {
565
j = j + ibc;
566
}
567
}
568
return j;
569
}
570
571
static long remi_sum2_cond() {
572
Long j1 = new Long(1);
573
Long j2 = new Long(1);
574
for (int i = 0; i< 1000; i++) {
575
if ((i&1) == 0) {
576
j1 = new Long(j1 + 1);
577
} else {
578
j2 = new Long(j2 + 2);
579
}
580
}
581
return j1 + j2;
582
}
583
584
static long remi_sumb2_cond() {
585
Long j1 = Long.valueOf(1);
586
Long j2 = Long.valueOf(1);
587
for (int i = 0; i< 1000; i++) {
588
if ((i&1) == 0) {
589
j1 = j1 + 1;
590
} else {
591
j2 = j2 + 2;
592
}
593
}
594
return j1 + j2;
595
}
596
597
static long remi_summ2_cond() {
598
Long j1 = new Long(1);
599
Long j2 = Long.valueOf(1);
600
for (int i = 0; i< 1000; i++) {
601
if ((i&1) == 0) {
602
j1 = new Long(j1 + 1);
603
} else {
604
j2 = j2 + 2;
605
}
606
}
607
return j1 + j2;
608
}
609
610
static long remi_sump2_cond(Long j1) {
611
Long j2 = Long.valueOf(1);
612
for (int i = 0; i< 1000; i++) {
613
if ((i&1) == 0) {
614
j1 = new Long(j1 + 1);
615
} else {
616
j2 = j2 + 2;
617
}
618
}
619
return j1 + j2;
620
}
621
622
static long remi_sumc2_cond() {
623
Long j1 = ibc;
624
Long j2 = Long.valueOf(1);
625
for (int i = 0; i< 1000; i++) {
626
if ((i&1) == 0) {
627
j1 = j1 + ibc;
628
} else {
629
j2 = j2 + 2;
630
}
631
}
632
return j1 + j2;
633
}
634
635
636
public static void main(String[] args) {
637
final int ntests = 70;
638
639
String[] test_name = new String[] {
640
"simple", "simpleb", "simplec", "simplef", "simplep",
641
"simple2", "simpleb2", "simplec2", "simplem2", "simplep2",
642
"simple_deop", "simpleb_deop", "simplec_deop", "simplef_deop", "simplep_deop",
643
"test", "testb", "testc", "testm", "testp",
644
"test2", "testb2", "testc2", "testm2", "testp2",
645
"test_deop", "testb_deop", "testc_deop", "testf_deop", "testp_deop",
646
"sum", "sumb", "sumc", "sumf", "sump",
647
"sum2", "sumb2", "sumc2", "summ2", "sump2",
648
"sum_deop", "sumb_deop", "sumc_deop", "sumf_deop", "sump_deop",
649
"remi_sum", "remi_sumb", "remi_sumc", "remi_sumf", "remi_sump",
650
"remi_sum2", "remi_sumb2", "remi_sumc2", "remi_summ2", "remi_sump2",
651
"remi_sum_deop", "remi_sumb_deop", "remi_sumc_deop", "remi_sumf_deop", "remi_sump_deop",
652
"remi_sum_cond", "remi_sumb_cond", "remi_sumc_cond", "remi_sumf_cond", "remi_sump_cond",
653
"remi_sum2_cond", "remi_sumb2_cond", "remi_sumc2_cond", "remi_summ2_cond", "remi_sump2_cond"
654
};
655
656
final long[] val = new long[] {
657
71994000, 71994000, 12000, 71994000, 71994000,
658
144000000, 144000000, 72018000, 144000000, 144000000,
659
71994000, 71994000, 12000, 71994000, 71994000,
660
72000000, 72000000, 36006000, 72000000, 72000000,
661
144012000, 144012000, 72030000, 144012000, 144012000,
662
72000000, 72000000, 36006000, 72000000, 72000000,
663
499501, 499501, 499501, 499501, 499501,
664
1000002, 1000002, 1000002, 1000002, 1000002,
665
499501, 499501, 499501, 499501, 499501,
666
1001, 1001, 1001, 1001, 1001,
667
3002, 3002, 3002, 3002, 3002,
668
1001, 1001, 1001, 1001, 1001,
669
501, 501, 501, 501, 501,
670
1502, 1502, 1502, 1502, 1502
671
};
672
673
long[] res = new long[ntests];
674
for (int i = 0; i < ntests; i++) {
675
res[i] = 0;
676
}
677
678
679
for (long i = 0; i < 12000; i++) {
680
res[0] += simple(i);
681
res[1] += simpleb(i);
682
res[2] += simplec();
683
res[3] += simplef(i);
684
res[4] += simplep(i);
685
686
res[5] += simple2(i);
687
res[6] += simpleb2(i);
688
res[7] += simplec2(i);
689
res[8] += simplem2(i);
690
res[9] += simplep2(i, i);
691
692
res[10] += simple_deop(i);
693
res[11] += simpleb_deop(i);
694
res[12] += simplec_deop(i);
695
res[13] += simplef_deop(i);
696
res[14] += simplep_deop(i);
697
698
res[15] += test(i);
699
res[16] += testb(i);
700
res[17] += testc(i);
701
res[18] += testm(i);
702
res[19] += testp(i, i);
703
704
res[20] += test2(i);
705
res[21] += testb2(i);
706
res[22] += testc2(i);
707
res[23] += testm2(i);
708
res[24] += testp2(i, i);
709
710
res[25] += test_deop(i);
711
res[26] += testb_deop(i);
712
res[27] += testc_deop(i);
713
res[28] += testf_deop(i);
714
res[29] += testp_deop(i, i);
715
}
716
717
long[] ia = new long[1000];
718
for (int i = 0; i < 1000; i++) {
719
ia[i] = i;
720
}
721
722
for (int i = 0; i < 100; i++) {
723
res[30] = sum(ia);
724
res[31] = sumb(ia);
725
res[32] = sumc(ia);
726
res[33] = sumf(ia);
727
res[34] = sump(ia, (long)1);
728
729
res[35] = sum2(ia);
730
res[36] = sumb2(ia);
731
res[37] = sumc2(ia);
732
res[38] = summ2(ia);
733
res[39] = sump2(ia, (long)1);
734
735
res[40] = sum_deop(ia);
736
res[41] = sumb_deop(ia);
737
res[42] = sumc_deop(ia);
738
res[43] = sumf_deop(ia);
739
res[44] = sump_deop(ia, (long)1);
740
741
res[45] = remi_sum();
742
res[46] = remi_sumb();
743
res[47] = remi_sumc();
744
res[48] = remi_sumf();
745
res[49] = remi_sump((long)1);
746
747
res[50] = remi_sum2();
748
res[51] = remi_sumb2();
749
res[52] = remi_sumc2();
750
res[53] = remi_summ2();
751
res[54] = remi_sump2((long)1);
752
753
res[55] = remi_sum_deop();
754
res[56] = remi_sumb_deop();
755
res[57] = remi_sumc_deop();
756
res[58] = remi_sumf_deop();
757
res[59] = remi_sump_deop((long)1);
758
759
res[60] = remi_sum_cond();
760
res[61] = remi_sumb_cond();
761
res[62] = remi_sumc_cond();
762
res[63] = remi_sumf_cond();
763
res[64] = remi_sump_cond((long)1);
764
765
res[65] = remi_sum2_cond();
766
res[66] = remi_sumb2_cond();
767
res[67] = remi_sumc2_cond();
768
res[68] = remi_summ2_cond();
769
res[69] = remi_sump2_cond((long)1);
770
}
771
772
int failed = 0;
773
for (int i = 0; i < ntests; i++) {
774
if (res[i] != val[i]) {
775
System.err.println(test_name[i] + ": " + res[i] + " != " + val[i]);
776
failed++;
777
}
778
}
779
if (failed > 0) {
780
System.err.println("Failed " + failed + " tests.");
781
throw new InternalError();
782
} else {
783
System.out.println("Passed.");
784
}
785
}
786
}
787
788