test/compiler/6934604/TestFloatBoxing.java

Mon, 28 Jul 2014 15:06:38 -0700

author
fzhinkin
date
Mon, 28 Jul 2014 15:06:38 -0700
changeset 6997
dbb05f6d93c4
parent 0
f90c822e73f8
permissions
-rw-r--r--

8051344: JVM crashed in Compile::start() during method parsing w/ UseRTMDeopt turned on
Summary: call rtm_deopt() only if there were no compilation bailouts before.
Reviewed-by: kvn

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

mercurial