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