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