From: Richard Biener Date: Mon, 4 Oct 2021 08:02:39 +0000 (+0200) Subject: middle-end/102587 - avoid auto-init for VLA vectors X-Git-Tag: basepoints/gcc-13~4175 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ad4a3c047f67d628b607bb6cf4791005affd1d83;p=thirdparty%2Fgcc.git middle-end/102587 - avoid auto-init for VLA vectors This avoids ICEing for VLA vector auto-init by not initializing. 2021-10-04 Richard Biener PR middle-end/102587 * internal-fn.c (expand_DEFERRED_INIT): Guard register initialization path an avoid initializing VLA registers with it. * gcc.target/aarch64/sve/pr102587-1.c: New testcase. * gcc.target/aarch64/sve/pr102587-2.c: Likewise. --- diff --git a/gcc/internal-fn.c b/gcc/internal-fn.c index 8312d08aab2a..ef5dc90db561 100644 --- a/gcc/internal-fn.c +++ b/gcc/internal-fn.c @@ -3035,7 +3035,8 @@ expand_DEFERRED_INIT (internal_fn, gcall *stmt) /* Expand this memset call. */ expand_builtin_memset (m_call, NULL_RTX, TYPE_MODE (var_type)); } - else + /* ??? Deal with poly-int sized registers. */ + else if (tree_fits_uhwi_p (TYPE_SIZE_UNIT (var_type))) { /* If this variable is in a register, use expand_assignment might generate better code. */ diff --git a/gcc/testsuite/gcc.target/aarch64/sve/pr102587-1.c b/gcc/testsuite/gcc.target/aarch64/sve/pr102587-1.c new file mode 100644 index 000000000000..2b9a68b0b59c --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve/pr102587-1.c @@ -0,0 +1,4 @@ +/* { dg-do compile } */ +/* { dg-options "-ftrivial-auto-var-init=zero" } */ + +void foo() { __SVFloat64_t f64; } diff --git a/gcc/testsuite/gcc.target/aarch64/sve/pr102587-2.c b/gcc/testsuite/gcc.target/aarch64/sve/pr102587-2.c new file mode 100644 index 000000000000..4cdb90560029 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve/pr102587-2.c @@ -0,0 +1,4 @@ +/* { dg-do compile } */ +/* { dg-options "-ftrivial-auto-var-init=pattern" } */ + +void foo() { __SVFloat64_t f64; }