Jonathan Wright <jonathan.wri...@arm.com> writes: > Hi, > > 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. > > Bootstrapped and regression tested on aarch64-none-linux-gnu and > x86_64-pc-linux-gnu - no issues. > > Ok for master? > > Thanks, > Jonathan > > [1] https://gcc.gnu.org/pipermail/gcc-patches/2003-April/102099.html > > --- > > gcc/ChangeLog: > > 2021-10-11 Jonathan Wright <jonathan.wri...@arm.com> > > * expr.c (emit_group_load_1): Remove historic workaround.
OK, thanks. Richard > diff --git a/gcc/expr.c b/gcc/expr.c > index > e0bcbccd9053df168c2e861414729fc7cf017f85..62446118b7beb725933ec6f7b0386e7e4b84fa90 > 100644 > --- a/gcc/expr.c > +++ b/gcc/expr.c > @@ -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);