diff options
author | Jonathan Wright <jonathan.wright@arm.com> | 2021-10-11 18:37:32 +0100 |
---|---|---|
committer | Jonathan Wright <jonathan.wright@arm.com> | 2021-11-04 14:50:55 +0000 |
commit | 2fc20260619b9f68044b7a3eb042726a382b5002 (patch) | |
tree | 953d804f181780777925d5ca4867a95272f10e1a /gcc/expr.c | |
parent | 8197ab94b47c814632d758dd36a121ad4114ff70 (diff) | |
download | gcc-2fc20260619b9f68044b7a3eb042726a382b5002.zip gcc-2fc20260619b9f68044b7a3eb042726a382b5002.tar.gz gcc-2fc20260619b9f68044b7a3eb042726a382b5002.tar.bz2 |
gcc/expr.c: Remove historic workaround for broken SIMD subreg
A long time ago, using a parallel to take a subreg of a SIMD register
was broken. This temporary fix[1] (from 2003) spilled these registers
to memory and reloaded the appropriate part to obtain the subreg.
The fix initially existed for the benefit of the PowerPC E500 - a
platform for which GCC removed support a number of years ago.
Regardless, a proper mechanism for taking a subreg of a SIMD register
exists now anyway.
This patch removes the workaround thus preventing SIMD registers
being dumped to memory unnecessarily - which sometimes can't be fixed
by later passes.
[1] https://gcc.gnu.org/pipermail/gcc-patches/2003-April/102099.html
gcc/ChangeLog:
2021-10-11 Jonathan Wright <jonathan.wright@arm.com>
* expr.c (emit_group_load_1): Remove historic workaround.
Diffstat (limited to 'gcc/expr.c')
-rw-r--r-- | gcc/expr.c | 13 |
1 files changed, 0 insertions, 13 deletions
@@ -2508,19 +2508,6 @@ emit_group_load_1 (rtx *tmps, rtx dst, rtx orig_src, tree type, NULL); } } - /* FIXME: A SIMD parallel will eventually lead to a subreg of a - SIMD register, which is currently broken. While we get GCC - to emit proper RTL for these cases, let's dump to memory. */ - else if (VECTOR_MODE_P (GET_MODE (dst)) - && REG_P (src)) - { - poly_uint64 slen = GET_MODE_SIZE (GET_MODE (src)); - rtx mem; - - mem = assign_stack_temp (GET_MODE (src), slen); - emit_move_insn (mem, src); - tmps[i] = adjust_address (mem, mode, bytepos); - } else if (CONSTANT_P (src) && GET_MODE (dst) != BLKmode && XVECLEN (dst, 0) > 1) tmps[i] = simplify_gen_subreg (mode, src, GET_MODE (dst), bytepos); |