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