diff options
author | Georg-Johann Lay <avr@gjlay.de> | 2024-07-05 13:22:12 +0200 |
---|---|---|
committer | Georg-Johann Lay <avr@gjlay.de> | 2024-07-05 13:38:44 +0200 |
commit | 9f5620aed3976716e20e13c285dade56578d5bab (patch) | |
tree | 964bf4d833972d09e8033d731e5b04991b16d035 /configure.in | |
parent | a633e413642e14d4ff5f0927817c5d9a7a8b4817 (diff) | |
download | gcc-9f5620aed3976716e20e13c285dade56578d5bab.zip gcc-9f5620aed3976716e20e13c285dade56578d5bab.tar.gz gcc-9f5620aed3976716e20e13c285dade56578d5bab.tar.bz2 |
AVR: target/87376 - Use nop_general_operand for DImode inputs.
The avr-dimode.md expanders have code like emit_move_insn(acc_a, operands[1])
where acc_a is a hard register and operands[1] might be a non-generic
address-space memory reference. Such loads may clobber hard regs since
some of them are implemented as libgcc calls /and/ 64-moves are
expanded as eight byte-moves, so that acc_a or acc_b might be clobbered
by such a load.
This patch simply denies non-generic address-space references by using
nop_general_operand for all avr-dimode.md input predicates.
With the patch, all memory loads that require library calls are issued
before the expander codes from avr-dimode.md are run.
PR target/87376
gcc/
* config/avr/avr-dimode.md: Use "nop_general_operand" instead
of "general_operand" as predicate for all input operands.
gcc/testsuite/
* gcc.target/avr/torture/pr87376.c: New test.
(cherry picked from commit 23a0935262d6817097406578b1c70563f424804b)
Diffstat (limited to 'configure.in')
0 files changed, 0 insertions, 0 deletions