< prev index next >

test/hotspot/jtreg/compiler/loopopts/superword/TestMulAddS2I.java

Print this page

148 
149     @Test
150     @IR(applyIfCPUFeature = {"sse2", "true"},
151         applyIfPlatform = {"64-bit", "true"},
152         counts = {IRNode.MUL_ADD_S2I, "> 0", IRNode.MUL_ADD_VS2VI, "> 0"})
153     @IR(applyIfCPUFeature = {"asimd", "true"},
154         applyIf = {"MaxVectorSize", "16"}, // AD file requires vector_length = 16
155         counts = {IRNode.MUL_ADD_S2I, "> 0", IRNode.MUL_ADD_VS2VI, "> 0"})
156     @IR(applyIfCPUFeature = {"avx512_vnni", "true"},
157         counts = {IRNode.MUL_ADD_S2I, "> 0", IRNode.MUL_ADD_VS2VI_VNNI, "> 0"})
158     public static int[] testc(int[] out) {
159         for (int i = 0; i < ITER; i++) {
160             out[i] += ((sArr1[2*i] * sArr2[2*i]) + (sArr1[2*i+1] * sArr2[2*i+1]));
161         }
162         return out;
163     }
164 
165     @Test
166     @IR(applyIfCPUFeature = {"sse2", "true"},
167         applyIfPlatform = {"64-bit", "true"},
168         applyIfOr = { "UseCompactObjectHeaders", "false", "AlignVector", "false" },
169         counts = {IRNode.MUL_ADD_S2I, "> 0", IRNode.MUL_ADD_VS2VI, "> 0"})
170     @IR(applyIfCPUFeature = {"asimd", "true"},
171         applyIfAnd = {"MaxVectorSize", "16", "UseCompactObjectHeaders", "false"}, // AD file requires vector_length = 16
172         counts = {IRNode.MUL_ADD_S2I, "> 0", IRNode.MUL_ADD_VS2VI, "> 0"})
173     @IR(applyIfCPUFeature = {"avx512_vnni", "true"},
174         applyIfOr = { "UseCompactObjectHeaders", "false", "AlignVector", "false" },
175         counts = {IRNode.MUL_ADD_S2I, "> 0", IRNode.MUL_ADD_VS2VI_VNNI, "> 0"})
176     public static int[] testd(int[] out) {
177         for (int i = 0; i < ITER-2; i+=2) {
178             // Unrolled, with the same structure.
179             out[i+0] += ((sArr1[2*i+0] * sArr2[2*i+0]) + (sArr1[2*i+1] * sArr2[2*i+1]));
180             out[i+1] += ((sArr1[2*i+2] * sArr2[2*i+2]) + (sArr1[2*i+3] * sArr2[2*i+3]));
181             // Hand-unrolling can mess with AlignVector and UseCompactObjectHeaders.
182             // We need all addresses 8-byte aligned.
183             //
184             // out:
185             //   adr = base + UNSAFE.ARRAY_INT_BASE_OFFSET + 8*iter
186             //                = 16 (or 12 if UseCompactObjectHeaders=true)
187             // -> never aligned!
188         }
189         return out;
190     }
191 
192     @Test
193     @IR(applyIfCPUFeature = {"sse2", "true"},
194         applyIfPlatform = {"64-bit", "true"},
195         applyIfOr = { "UseCompactObjectHeaders", "false", "AlignVector", "false" },
196         counts = {IRNode.MUL_ADD_S2I, "> 0", IRNode.MUL_ADD_VS2VI, "> 0"})
197     @IR(applyIfCPUFeature = {"asimd", "true"},
198         applyIfAnd = {"MaxVectorSize", "16", "UseCompactObjectHeaders", "false" }, // AD file requires vector_length = 16
199         counts = {IRNode.MUL_ADD_S2I, "> 0", IRNode.MUL_ADD_VS2VI, "> 0"})
200     @IR(applyIfCPUFeature = {"avx512_vnni", "true"},
201         applyIfOr = { "UseCompactObjectHeaders", "false", "AlignVector", "false" },
202         counts = {IRNode.MUL_ADD_S2I, "> 0", IRNode.MUL_ADD_VS2VI_VNNI, "> 0"})
203     public static int[] teste(int[] out) {
204         for (int i = 0; i < ITER-2; i+=2) {
205             // Unrolled, with some swaps.
206             out[i+0] += ((sArr1[2*i+0] * sArr2[2*i+0]) + (sArr1[2*i+1] * sArr2[2*i+1]));
207             out[i+1] += ((sArr2[2*i+2] * sArr1[2*i+2]) + (sArr1[2*i+3] * sArr2[2*i+3])); // swap(1 2)
208             // Hand-unrolling can mess with AlignVector and UseCompactObjectHeaders.
209             // We need all addresses 8-byte aligned.
210             //
211             // out:
212             //   adr = base + UNSAFE.ARRAY_INT_BASE_OFFSET + 8*iter
213             //                = 16 (or 12 if UseCompactObjectHeaders=true)
214             // -> never aligned!
215         }
216         return out;
217     }
218 
219     @Test
220     @IR(applyIfCPUFeature = {"sse2", "true"},
221         applyIfPlatform = {"64-bit", "true"},
222         applyIfOr = { "UseCompactObjectHeaders", "false", "AlignVector", "false" },
223         counts = {IRNode.MUL_ADD_S2I, "> 0", IRNode.MUL_ADD_VS2VI, "> 0"})
224     @IR(applyIfCPUFeature = {"asimd", "true"},
225         applyIfAnd = {"MaxVectorSize", "16", "UseCompactObjectHeaders", "false" }, // AD file requires vector_length = 16
226         counts = {IRNode.MUL_ADD_S2I, "> 0", IRNode.MUL_ADD_VS2VI, "> 0"})
227     @IR(applyIfCPUFeature = {"avx512_vnni", "true"},
228         applyIfOr = { "UseCompactObjectHeaders", "false", "AlignVector", "false" },
229         counts = {IRNode.MUL_ADD_S2I, "> 0", IRNode.MUL_ADD_VS2VI_VNNI, "> 0"})
230     public static int[] testf(int[] out) {
231         for (int i = 0; i < ITER-2; i+=2) {
232             // Unrolled, with some swaps.
233             out[i+0] += ((sArr1[2*i+0] * sArr2[2*i+0]) + (sArr1[2*i+1] * sArr2[2*i+1]));
234             out[i+1] += ((sArr2[2*i+2] * sArr1[2*i+2]) + (sArr2[2*i+3] * sArr1[2*i+3])); // swap(1 2), swap(3 4)
235             // Hand-unrolling can mess with AlignVector and UseCompactObjectHeaders.
236             // We need all addresses 8-byte aligned.
237             //
238             // out:
239             //   adr = base + UNSAFE.ARRAY_INT_BASE_OFFSET + 8*iter
240             //                = 16 (or 12 if UseCompactObjectHeaders=true)
241             // -> never aligned!
242         }
243         return out;
244     }
245 
246     @Test
247     @IR(applyIfCPUFeature = {"sse2", "true"},
248         applyIfPlatform = {"64-bit", "true"},
249         applyIfOr = { "UseCompactObjectHeaders", "false", "AlignVector", "false" },
250         counts = {IRNode.MUL_ADD_S2I, "> 0", IRNode.MUL_ADD_VS2VI, "> 0"})
251     @IR(applyIfCPUFeature = {"asimd", "true"},
252         applyIfAnd = {"MaxVectorSize", "16", "UseCompactObjectHeaders", "false" }, // AD file requires vector_length = 16
253         counts = {IRNode.MUL_ADD_S2I, "> 0", IRNode.MUL_ADD_VS2VI, "> 0"})
254     @IR(applyIfCPUFeature = {"avx512_vnni", "true"},
255         applyIfOr = { "UseCompactObjectHeaders", "false", "AlignVector", "false" },
256         counts = {IRNode.MUL_ADD_S2I, "> 0", IRNode.MUL_ADD_VS2VI_VNNI, "> 0"})
257     public static int[] testg(int[] out) {
258         for (int i = 0; i < ITER-2; i+=2) {
259             // Unrolled, with some swaps.
260             out[i+0] += ((sArr1[2*i+0] * sArr2[2*i+0]) + (sArr1[2*i+1] * sArr2[2*i+1]));
261             out[i+1] += ((sArr1[2*i+3] * sArr2[2*i+3]) + (sArr1[2*i+2] * sArr2[2*i+2])); // swap(1 3), swap(2 4)
262             // Hand-unrolling can mess with AlignVector and UseCompactObjectHeaders.
263             // We need all addresses 8-byte aligned.
264             //
265             // out:
266             //   adr = base + UNSAFE.ARRAY_INT_BASE_OFFSET + 8*iter
267             //                = 16 (or 12 if UseCompactObjectHeaders=true)
268             // -> never aligned!
269         }
270         return out;
271     }
272 
273     @Test
274     @IR(applyIfCPUFeature = {"sse2", "true"},
275         applyIfPlatform = {"64-bit", "true"},
276         applyIfOr = { "UseCompactObjectHeaders", "false", "AlignVector", "false" },
277         counts = {IRNode.MUL_ADD_S2I, "> 0", IRNode.MUL_ADD_VS2VI, "> 0"})
278     @IR(applyIfCPUFeature = {"asimd", "true"},
279         applyIfAnd = {"MaxVectorSize", "16", "UseCompactObjectHeaders", "false" }, // AD file requires vector_length = 16
280         counts = {IRNode.MUL_ADD_S2I, "> 0", IRNode.MUL_ADD_VS2VI, "> 0"})
281     @IR(applyIfCPUFeature = {"avx512_vnni", "true"},
282         applyIfOr = { "UseCompactObjectHeaders", "false", "AlignVector", "false" },
283         counts = {IRNode.MUL_ADD_S2I, "> 0", IRNode.MUL_ADD_VS2VI_VNNI, "> 0"})
284     public static int[] testh(int[] out) {
285         for (int i = 0; i < ITER-2; i+=2) {
286             // Unrolled, with some swaps.
287             out[i+0] += ((sArr1[2*i+0] * sArr2[2*i+0]) + (sArr1[2*i+1] * sArr2[2*i+1]));
288             out[i+1] += ((sArr2[2*i+3] * sArr1[2*i+3]) + (sArr2[2*i+2] * sArr1[2*i+2])); // swap(1 4), swap(2 3)
289             // Hand-unrolling can mess with AlignVector and UseCompactObjectHeaders.
290             // We need all addresses 8-byte aligned.
291             //
292             // out:
293             //   adr = base + UNSAFE.ARRAY_INT_BASE_OFFSET + 8*iter
294             //                = 16 (or 12 if UseCompactObjectHeaders=true)
295             // -> never aligned!
296         }
297         return out;
298     }
299 
300     @Test
301     @IR(counts = {IRNode.MUL_ADD_S2I, "> 0"},
302         applyIfCPUFeatureOr = {"sse2", "true", "asimd", "true"})
303     @IR(counts = {IRNode.MUL_ADD_VS2VI, "= 0"})
304     public static int[] testi(int[] out) {
305         for (int i = 0; i < ITER-2; i+=2) {
306             // Unrolled, with some swaps that prevent vectorization.
307             out[i+0] += ((sArr1[2*i+0] * sArr2[2*i+0]) + (sArr1[2*i+1] * sArr2[2*i+1])); // ok
308             out[i+1] += ((sArr1[2*i+2] * sArr2[2*i+3]) + (sArr1[2*i+3] * sArr2[2*i+2])); // bad
309         }
310         return out;
311     }
312 
313     @Test
314     @IR(counts = {IRNode.MUL_ADD_S2I, "> 0"},
315         applyIfCPUFeatureOr = {"sse2", "true", "asimd", "true"})

148 
149     @Test
150     @IR(applyIfCPUFeature = {"sse2", "true"},
151         applyIfPlatform = {"64-bit", "true"},
152         counts = {IRNode.MUL_ADD_S2I, "> 0", IRNode.MUL_ADD_VS2VI, "> 0"})
153     @IR(applyIfCPUFeature = {"asimd", "true"},
154         applyIf = {"MaxVectorSize", "16"}, // AD file requires vector_length = 16
155         counts = {IRNode.MUL_ADD_S2I, "> 0", IRNode.MUL_ADD_VS2VI, "> 0"})
156     @IR(applyIfCPUFeature = {"avx512_vnni", "true"},
157         counts = {IRNode.MUL_ADD_S2I, "> 0", IRNode.MUL_ADD_VS2VI_VNNI, "> 0"})
158     public static int[] testc(int[] out) {
159         for (int i = 0; i < ITER; i++) {
160             out[i] += ((sArr1[2*i] * sArr2[2*i]) + (sArr1[2*i+1] * sArr2[2*i+1]));
161         }
162         return out;
163     }
164 
165     @Test
166     @IR(applyIfCPUFeature = {"sse2", "true"},
167         applyIfPlatform = {"64-bit", "true"},

168         counts = {IRNode.MUL_ADD_S2I, "> 0", IRNode.MUL_ADD_VS2VI, "> 0"})
169     @IR(applyIfCPUFeature = {"asimd", "true"},
170         applyIf = {"MaxVectorSize", "16"}, // AD file requires vector_length = 16
171         counts = {IRNode.MUL_ADD_S2I, "> 0", IRNode.MUL_ADD_VS2VI, "> 0"})
172     @IR(applyIfCPUFeature = {"avx512_vnni", "true"},

173         counts = {IRNode.MUL_ADD_S2I, "> 0", IRNode.MUL_ADD_VS2VI_VNNI, "> 0"})
174     public static int[] testd(int[] out) {
175         for (int i = 0; i < ITER-2; i+=2) {
176             // Unrolled, with the same structure.
177             out[i+0] += ((sArr1[2*i+0] * sArr2[2*i+0]) + (sArr1[2*i+1] * sArr2[2*i+1]));
178             out[i+1] += ((sArr1[2*i+2] * sArr2[2*i+2]) + (sArr1[2*i+3] * sArr2[2*i+3]));







179         }
180         return out;
181     }
182 
183     @Test
184     @IR(applyIfCPUFeature = {"sse2", "true"},
185         applyIfPlatform = {"64-bit", "true"},

186         counts = {IRNode.MUL_ADD_S2I, "> 0", IRNode.MUL_ADD_VS2VI, "> 0"})
187     @IR(applyIfCPUFeature = {"asimd", "true"},
188         applyIf = {"MaxVectorSize", "16"}, // AD file requires vector_length = 16
189         counts = {IRNode.MUL_ADD_S2I, "> 0", IRNode.MUL_ADD_VS2VI, "> 0"})
190     @IR(applyIfCPUFeature = {"avx512_vnni", "true"},

191         counts = {IRNode.MUL_ADD_S2I, "> 0", IRNode.MUL_ADD_VS2VI_VNNI, "> 0"})
192     public static int[] teste(int[] out) {
193         for (int i = 0; i < ITER-2; i+=2) {
194             // Unrolled, with some swaps.
195             out[i+0] += ((sArr1[2*i+0] * sArr2[2*i+0]) + (sArr1[2*i+1] * sArr2[2*i+1]));
196             out[i+1] += ((sArr2[2*i+2] * sArr1[2*i+2]) + (sArr1[2*i+3] * sArr2[2*i+3])); // swap(1 2)







197         }
198         return out;
199     }
200 
201     @Test
202     @IR(applyIfCPUFeature = {"sse2", "true"},
203         applyIfPlatform = {"64-bit", "true"},

204         counts = {IRNode.MUL_ADD_S2I, "> 0", IRNode.MUL_ADD_VS2VI, "> 0"})
205     @IR(applyIfCPUFeature = {"asimd", "true"},
206         applyIf = {"MaxVectorSize", "16"}, // AD file requires vector_length = 16
207         counts = {IRNode.MUL_ADD_S2I, "> 0", IRNode.MUL_ADD_VS2VI, "> 0"})
208     @IR(applyIfCPUFeature = {"avx512_vnni", "true"},

209         counts = {IRNode.MUL_ADD_S2I, "> 0", IRNode.MUL_ADD_VS2VI_VNNI, "> 0"})
210     public static int[] testf(int[] out) {
211         for (int i = 0; i < ITER-2; i+=2) {
212             // Unrolled, with some swaps.
213             out[i+0] += ((sArr1[2*i+0] * sArr2[2*i+0]) + (sArr1[2*i+1] * sArr2[2*i+1]));
214             out[i+1] += ((sArr2[2*i+2] * sArr1[2*i+2]) + (sArr2[2*i+3] * sArr1[2*i+3])); // swap(1 2), swap(3 4)







215         }
216         return out;
217     }
218 
219     @Test
220     @IR(applyIfCPUFeature = {"sse2", "true"},
221         applyIfPlatform = {"64-bit", "true"},

222         counts = {IRNode.MUL_ADD_S2I, "> 0", IRNode.MUL_ADD_VS2VI, "> 0"})
223     @IR(applyIfCPUFeature = {"asimd", "true"},
224         applyIf = {"MaxVectorSize", "16"}, // AD file requires vector_length = 16
225         counts = {IRNode.MUL_ADD_S2I, "> 0", IRNode.MUL_ADD_VS2VI, "> 0"})
226     @IR(applyIfCPUFeature = {"avx512_vnni", "true"},

227         counts = {IRNode.MUL_ADD_S2I, "> 0", IRNode.MUL_ADD_VS2VI_VNNI, "> 0"})
228     public static int[] testg(int[] out) {
229         for (int i = 0; i < ITER-2; i+=2) {
230             // Unrolled, with some swaps.
231             out[i+0] += ((sArr1[2*i+0] * sArr2[2*i+0]) + (sArr1[2*i+1] * sArr2[2*i+1]));
232             out[i+1] += ((sArr1[2*i+3] * sArr2[2*i+3]) + (sArr1[2*i+2] * sArr2[2*i+2])); // swap(1 3), swap(2 4)







233         }
234         return out;
235     }
236 
237     @Test
238     @IR(applyIfCPUFeature = {"sse2", "true"},
239         applyIfPlatform = {"64-bit", "true"},

240         counts = {IRNode.MUL_ADD_S2I, "> 0", IRNode.MUL_ADD_VS2VI, "> 0"})
241     @IR(applyIfCPUFeature = {"asimd", "true"},
242         applyIf = {"MaxVectorSize", "16"}, // AD file requires vector_length = 16
243         counts = {IRNode.MUL_ADD_S2I, "> 0", IRNode.MUL_ADD_VS2VI, "> 0"})
244     @IR(applyIfCPUFeature = {"avx512_vnni", "true"},

245         counts = {IRNode.MUL_ADD_S2I, "> 0", IRNode.MUL_ADD_VS2VI_VNNI, "> 0"})
246     public static int[] testh(int[] out) {
247         for (int i = 0; i < ITER-2; i+=2) {
248             // Unrolled, with some swaps.
249             out[i+0] += ((sArr1[2*i+0] * sArr2[2*i+0]) + (sArr1[2*i+1] * sArr2[2*i+1]));
250             out[i+1] += ((sArr2[2*i+3] * sArr1[2*i+3]) + (sArr2[2*i+2] * sArr1[2*i+2])); // swap(1 4), swap(2 3)







251         }
252         return out;
253     }
254 
255     @Test
256     @IR(counts = {IRNode.MUL_ADD_S2I, "> 0"},
257         applyIfCPUFeatureOr = {"sse2", "true", "asimd", "true"})
258     @IR(counts = {IRNode.MUL_ADD_VS2VI, "= 0"})
259     public static int[] testi(int[] out) {
260         for (int i = 0; i < ITER-2; i+=2) {
261             // Unrolled, with some swaps that prevent vectorization.
262             out[i+0] += ((sArr1[2*i+0] * sArr2[2*i+0]) + (sArr1[2*i+1] * sArr2[2*i+1])); // ok
263             out[i+1] += ((sArr1[2*i+2] * sArr2[2*i+3]) + (sArr1[2*i+3] * sArr2[2*i+2])); // bad
264         }
265         return out;
266     }
267 
268     @Test
269     @IR(counts = {IRNode.MUL_ADD_S2I, "> 0"},
270         applyIfCPUFeatureOr = {"sse2", "true", "asimd", "true"})
< prev index next >