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 /**
26 * @test
27 * @bug 8076276
28 * @summary Add C2 x86 Superword support for scalar sum reduction optimizations : long test
29 * @requires os.arch=="x86" | os.arch=="i386" | os.arch=="amd64" | os.arch=="x86_64"
30 *
31 * @run main/othervm -XX:+IgnoreUnrecognizedVMOptions -XX:+SuperWordReductions -XX:LoopUnrollLimit=250 -XX:LoopMaxUnroll=4 -XX:CompileThresholdScaling=0.1 SumRed_Long
32 * @run main/othervm -XX:+IgnoreUnrecognizedVMOptions -XX:-SuperWordReductions -XX:LoopUnrollLimit=250 -XX:LoopMaxUnroll=4 -XX:CompileThresholdScaling=0.1 SumRed_Long
33 *
34 * @run main/othervm -XX:+IgnoreUnrecognizedVMOptions -XX:+SuperWordReductions -XX:LoopUnrollLimit=250 -XX:LoopMaxUnroll=8 -XX:CompileThresholdScaling=0.1 SumRed_Long
35 * @run main/othervm -XX:+IgnoreUnrecognizedVMOptions -XX:-SuperWordReductions -XX:LoopUnrollLimit=250 -XX:LoopMaxUnroll=8 -XX:CompileThresholdScaling=0.1 SumRed_Long
36 *
37 */
38
39 public class SumRed_Long
40 {
41 public static void main(String[] args) throws Exception {
42 long[] a = new long[256*1024];
43 long[] b = new long[256*1024];
44 long[] c = new long[256*1024];
45 long[] d = new long[256*1024];
46 sumReductionInit(a,b,c);
47 long total = 0;
48 long valid = 262144000;
49 for(int j = 0; j < 2000; j++) {
50 total = sumReductionImplement(a,b,c,d,total);
51 }
52 total = (int)total;
53 if(total == valid) {
54 System.out.println("Success");
55 } else {
56 System.out.println("Invalid sum of elements variable in total: " + total);
57 System.out.println("Expected value = " + valid);
58 throw new Exception("Failed");
59 }
60 }
61
62 public static void sumReductionInit(
63 long[] a,
64 long[] b,
65 long[] c)
66 {
67 for(int j = 0; j < 1; j++)
68 {
69 for(int i = 0; i < a.length; i++)
70 {
71 a[i] = i * 1 + j;
72 b[i] = i * 1 - j;
73 c[i] = i + j;
74 }
75 }
76 }
77
78 public static long sumReductionImplement(
79 long[] a,
80 long[] b,
81 long[] c,
82 long[] d,
83 long total)
84 {
85 for(int i = 0; i < a.length; i++)
86 {
87 d[i]= (a[i] * b[i]) + (a[i] * c[i]) + (b[i] * c[i]);
88 total += d[i];
89 }
90 return total;
91 }
92
93 }
|
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 /**
26 * @test
27 * @bug 8076276
28 * @summary Add C2 x86 Superword support for scalar sum reduction optimizations : long test
29 * @requires os.arch=="x86" | os.arch=="i386" | os.arch=="amd64" | os.arch=="x86_64"
30 *
31 * @run main/othervm -XX:+IgnoreUnrecognizedVMOptions -XX:LoopUnrollLimit=250
32 * -XX:CompileThresholdScaling=0.1
33 * -XX:+SuperWordReductions
34 * -XX:LoopMaxUnroll=4
35 * compiler.loopopts.superword.SumRed_Long
36 * @run main/othervm -XX:+IgnoreUnrecognizedVMOptions -XX:LoopUnrollLimit=250
37 * -XX:CompileThresholdScaling=0.1
38 * -XX:-SuperWordReductions
39 * -XX:LoopMaxUnroll=4
40 * compiler.loopopts.superword.SumRed_Long
41 *
42 * @run main/othervm -XX:+IgnoreUnrecognizedVMOptions -XX:LoopUnrollLimit=250
43 * -XX:CompileThresholdScaling=0.1
44 * -XX:+SuperWordReductions
45 * -XX:LoopMaxUnroll=8
46 * compiler.loopopts.superword.SumRed_Long
47 * @run main/othervm -XX:+IgnoreUnrecognizedVMOptions -XX:LoopUnrollLimit=250
48 * -XX:CompileThresholdScaling=0.1
49 * -XX:-SuperWordReductions
50 * -XX:LoopMaxUnroll=8
51 * compiler.loopopts.superword.SumRed_Long
52 */
53
54 package compiler.loopopts.superword;
55
56 public class SumRed_Long {
57 public static void main(String[] args) throws Exception {
58 long[] a = new long[256 * 1024];
59 long[] b = new long[256 * 1024];
60 long[] c = new long[256 * 1024];
61 long[] d = new long[256 * 1024];
62 sumReductionInit(a, b, c);
63 long total = 0;
64 long valid = 262144000;
65 for (int j = 0; j < 2000; j++) {
66 total = sumReductionImplement(a, b, c, d, total);
67 }
68 total = (int) total;
69 if (total == valid) {
70 System.out.println("Success");
71 } else {
72 System.out.println("Invalid sum of elements variable in total: " + total);
73 System.out.println("Expected value = " + valid);
74 throw new Exception("Failed");
75 }
76 }
77
78 public static void sumReductionInit(
79 long[] a,
80 long[] b,
81 long[] c) {
82 for (int j = 0; j < 1; j++) {
83 for (int i = 0; i < a.length; i++) {
84 a[i] = i * 1 + j;
85 b[i] = i * 1 - j;
86 c[i] = i + j;
87 }
88 }
89 }
90
91 public static long sumReductionImplement(
92 long[] a,
93 long[] b,
94 long[] c,
95 long[] d,
96 long total) {
97 for (int i = 0; i < a.length; i++) {
98 d[i] = (a[i] * b[i]) + (a[i] * c[i]) + (b[i] * c[i]);
99 total += d[i];
100 }
101 return total;
102 }
103
104 }
|