hotspot/test/compiler/loopopts/superword/SumRed_Int.java
changeset 40059 c2304140ed64
parent 36057 867e857daf84
child 41705 332239c052cc
equal deleted inserted replaced
40058:b4441f6cfe79 40059:c2304140ed64
    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 }