]> git.ipfire.org Git - thirdparty/gcc.git/commit
middle-end/117433 - ICE with gimple BLKmode reg copy
authorRichard Biener <rguenther@suse.de>
Mon, 4 Nov 2024 10:39:05 +0000 (11:39 +0100)
committerRichard Biener <rguenth@gcc.gnu.org>
Tue, 5 Nov 2024 07:28:53 +0000 (08:28 +0100)
commit2fc25a21820001c67258d30f0960ac9cd0f268cf
treea3212a576ab7c3a9ea5844b82c544a2674aff977
parent1cc2c454033dae2dfa4ba2dc3882399cca669cb0
middle-end/117433 - ICE with gimple BLKmode reg copy

When we end up expanding a SSA name copy with BLKmode regs which can
happen for vectors, possibly wrapped in a NOP-conversion or
a PAREN_EXPR and we are not optimizing we can end up with two
BLKmode MEMs that expand_gimple_stmt_1 doesn't properly handle
when expanding, trying to emit_move_insn them.  Looking at store_expr
which what expand_gimple_stmt_1 is really doing reveals a lot of
magic that's missing.  It eventually falls back to emit_block_move
(store_expr isn't exported), so this is what I ended up using here
given I think we'll only have BLKmode "registers" for vectors.

PR middle-end/117433
* cfgexpand.cc (expand_gimple_stmt_1): Use emit_block_move
when moving temp to BLKmode target.

* gcc.dg/pr117433.c: New testcase.
gcc/cfgexpand.cc
gcc/testsuite/gcc.dg/pr117433.c [new file with mode: 0644]