From ad4a3c047f67d628b607bb6cf4791005affd1d83 Mon Sep 17 00:00:00 2001 From: Richard Biener Date: Mon, 4 Oct 2021 10:02:39 +0200 Subject: [PATCH] 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. --- gcc/internal-fn.c | 3 ++- gcc/testsuite/gcc.target/aarch64/sve/pr102587-1.c | 4 ++++ gcc/testsuite/gcc.target/aarch64/sve/pr102587-2.c | 4 ++++ 3 files changed, 10 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/pr102587-1.c create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/pr102587-2.c 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; } -- 2.47.2