[3/3][aarch64] Add support for vec_widen_shift pattern
Richard Biener
rguenther@suse.de
Fri Nov 13 08:05:36 GMT 2020
On Thu, 12 Nov 2020, Joel Hutton wrote:
> Hi all,
>
> This patch adds support in the aarch64 backend for the vec_widen_shift vect-pattern and makes a minor mid-end fix to support it.
>
> All 3 patches together bootstrapped and regression tested on aarch64.
>
> Ok for stage 1?
diff --git a/gcc/tree-vect-stmts.c b/gcc/tree-vect-stmts.c
index
f12fd158b13656ee24022ec7e445c53444be6554..1f40b59c0560eec675af1d9a0e3e818d47
589de6 100644
--- a/gcc/tree-vect-stmts.c
+++ b/gcc/tree-vect-stmts.c
@@ -4934,8 +4934,13 @@ vectorizable_conversion (vec_info *vinfo,
&vec_oprnds1);
if (code == WIDEN_LSHIFT_EXPR)
{
- vec_oprnds1.create (ncopies * ninputs);
- for (i = 0; i < ncopies * ninputs; ++i)
+ int oprnds_size = ncopies * ninputs;
+ /* In the case of SLP ncopies = 1, so the size of vec_oprnds1
here
+ * should be obtained by the the size of vec_oprnds0. */
You should be able to always use vec_oprnds0.length ()
This hunk is OK with that change.
+ if (slp_node)
+ oprnds_size = vec_oprnds0.length ();
+ vec_oprnds1.create (oprnds_size);
+ for (i = 0; i < oprnds_size; ++i)
vec_oprnds1.quick_push (op1);
}
/* Arguments are ready. Create the new vector stmts. */
>
> gcc/ChangeLog:
>
> 2020-11-12 ?Joel Hutton ?<joel.hutton@arm.com>
>
> ? ? ? ? * config/aarch64/aarch64-simd.md: vec_widen_lshift_hi/lo<mode> patterns
> ? ? ? ? * tree-vect-stmts.c
> ? ? ? ? (vectorizable_conversion): Fix for widen_lshift case
>
> gcc/testsuite/ChangeLog:
>
> 2020-11-12 ?Joel Hutton ?<joel.hutton@arm.com>
>
> ? ? ? ? * gcc.target/aarch64/vect-widen-lshift.c: New test.
>
--
Richard Biener <rguenther@suse.de>
SUSE Software Solutions Germany GmbH, Maxfeldstrasse 5, 90409 Nuernberg,
Germany; GF: Felix Imend
More information about the Gcc-patches
mailing list