diff options
author | Richard Biener <rguenther@suse.de> | 2021-10-04 10:02:39 +0200 |
---|---|---|
committer | Richard Biener <rguenther@suse.de> | 2021-10-04 10:57:23 +0200 |
commit | ad4a3c047f67d628b607bb6cf4791005affd1d83 (patch) | |
tree | e782349ea19d8a9054f582e6701233808254a52c /gcc | |
parent | 5e0367dd64f4946d76477a8545d7abf3c0802806 (diff) | |
download | gcc-ad4a3c047f67d628b607bb6cf4791005affd1d83.zip gcc-ad4a3c047f67d628b607bb6cf4791005affd1d83.tar.gz gcc-ad4a3c047f67d628b607bb6cf4791005affd1d83.tar.bz2 |
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 <rguenther@suse.de>
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.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/internal-fn.c | 3 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/aarch64/sve/pr102587-1.c | 4 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/aarch64/sve/pr102587-2.c | 4 |
3 files changed, 10 insertions, 1 deletions
diff --git a/gcc/internal-fn.c b/gcc/internal-fn.c index 8312d08..ef5dc90 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 0000000..2b9a68b --- /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 0000000..4cdb905 --- /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; } |