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