2613N/A/*
2613N/A * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
2613N/A * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
2613N/A *
2613N/A * This code is free software; you can redistribute it and/or modify it
2613N/A * under the terms of the GNU General Public License version 2 only, as
2613N/A * published by the Free Software Foundation.
2613N/A *
2613N/A * This code is distributed in the hope that it will be useful, but WITHOUT
2613N/A * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
2613N/A * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
2613N/A * version 2 for more details (a copy is included in the LICENSE file that
2613N/A * accompanied this code).
2613N/A *
2613N/A * You should have received a copy of the GNU General Public License version
2613N/A * 2 along with this work; if not, write to the Free Software Foundation,
2613N/A * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
2613N/A *
2613N/A * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
2613N/A * or visit www.oracle.com if you need additional information or have any
2613N/A * questions.
2613N/A *
2613N/A */
2613N/A
2613N/A/**
2613N/A * @test
2613N/A * @bug 7044738
2613N/A * @summary Loop unroll optimization causes incorrect result
2613N/A *
2613N/A * @run main/othervm -Xbatch Test7044738
2613N/A */
2613N/A
2613N/Apublic class Test7044738 {
2613N/A
2613N/A private static final int INITSIZE = 10000;
2613N/A public int d[] = { 1, 2, 3, 4 };
2613N/A public int i, size;
2613N/A
2613N/A private static int iter = 5;
2613N/A
2613N/A boolean done() { return (--iter > 0); }
2613N/A
2613N/A public static void main(String args[]) {
2613N/A Test7044738 t = new Test7044738();
2613N/A t.test();
2613N/A }
2613N/A
2613N/A int test() {
2613N/A
2613N/A while (done()) {
2613N/A size = INITSIZE;
2613N/A
2613N/A for (i = 0; i < size; i++) {
2613N/A d[0] = d[1]; // 2
2613N/A d[1] = d[2]; // 3
2613N/A d[2] = d[3]; // 4
2613N/A d[3] = d[0]; // 2
2613N/A
2613N/A d[0] = d[1]; // 3
2613N/A d[1] = d[2]; // 4
2613N/A d[2] = d[3]; // 2
2613N/A d[3] = d[0]; // 3
2613N/A
2613N/A d[0] = d[1]; // 4
2613N/A d[1] = d[2]; // 2
2613N/A d[2] = d[3]; // 3
2613N/A d[3] = d[0]; // 4
2613N/A
2613N/A d[0] = d[1]; // 2
2613N/A d[1] = d[2]; // 3
2613N/A d[2] = d[3]; // 4
2613N/A d[3] = d[0]; // 2
2613N/A
2613N/A d[0] = d[1]; // 3
2613N/A d[1] = d[2]; // 4
2613N/A d[2] = d[3]; // 2
2613N/A d[3] = d[0]; // 3
2613N/A
2613N/A d[0] = d[1]; // 4
2613N/A d[1] = d[2]; // 2
2613N/A d[2] = d[3]; // 3
2613N/A d[3] = d[0]; // 4
2613N/A
2613N/A d[0] = d[1]; // 2
2613N/A d[1] = d[2]; // 3
2613N/A d[2] = d[3]; // 4
2613N/A d[3] = d[0]; // 2
2613N/A
2613N/A d[0] = d[1]; // 3
2613N/A d[1] = d[2]; // 4
2613N/A d[2] = d[3]; // 2
2613N/A d[3] = d[0]; // 3
2613N/A }
2613N/A
2613N/A // try to defeat dead code elimination
2613N/A if (d[0] == d[1]) {
2613N/A System.out.println("test failed: iter=" + iter + " i=" + i + " d[] = { " + d[0] + ", " + d[1] + ", " + d[2] + ", " + d[3] + " } ");
2613N/A System.exit(97);
2613N/A }
2613N/A }
2613N/A return d[3];
2613N/A }
2613N/A
2613N/A}