1 /*
2  * Copyright (c) 2009, 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 6636138
27  * @summary SuperWord::co_locate_pack(Node_List* p) generates memory graph that leads to memory order violation.
28  *
29  * @run main/othervm -Xbatch
30  *      -XX:CompileCommand=compileonly,compiler.c2.Test6636138_2::shift
31  *      compiler.c2.Test6636138_2
32  */
33 
34 package compiler.c2;
35 
36 public class Test6636138_2 {
37 
init(int src[])38     public static void init(int src[]) {
39         // Initialize the array
40         for (int i = 0; i < src.length; i++)
41             src[i] = i;
42     }
43 
shift(int src[])44     public static void shift(int src[]) {
45         //left-shift the array
46         for (int i = src.length - 1; i > 0; i--) {
47             int tmp = src[i];
48             src[i] = src[i - 1];
49             src[i - 1] = tmp;
50         }
51     }
52 
verify(int src[])53     public static void verify(int src[]) {
54         for (int i = 0; i < src.length; i++) {
55             int value = (i - 1 + src.length) % src.length; // correct value after shifting
56             if (src[i] != value) {
57                 System.out.println("Error: src[" + i + "] should be " + value + " instead of " + src[i]);
58                 System.exit(97);
59             }
60         }
61     }
62 
test()63     public static void test() {
64         int[] src = new int[10];
65         init(src);
66         shift(src);
67         verify(src);
68     }
69 
main(String[] args)70     public static void main(String[] args) {
71         for (int i = 0; i < 2000; i++)
72             test();
73     }
74 }