diff options
author | John David Anglin <danglin@gcc.gnu.org> | 2023-11-22 19:47:34 +0000 |
---|---|---|
committer | John David Anglin <danglin@gcc.gnu.org> | 2023-11-22 19:47:34 +0000 |
commit | a89224f819381b77657145fdd8b1d997b989fdc0 (patch) | |
tree | bdb51caa09e38d1f430c196e466d699e07b60da1 | |
parent | 3f266c84a15d63e42bfad46397fea9aff92b0720 (diff) | |
download | gcc-a89224f819381b77657145fdd8b1d997b989fdc0.zip gcc-a89224f819381b77657145fdd8b1d997b989fdc0.tar.gz gcc-a89224f819381b77657145fdd8b1d997b989fdc0.tar.bz2 |
hppa: Fix integer REG+D address reloads
I made a mistake in the previous change to integer_store_memory_operand.
There is no support pa_emit_move sequence to handle secondary reloads of
integer REG+D instructions. Further, the Q constraint is used for some
non-simple instructions (movb and addib). Thus, we need to return true
when reload is in progress.
2023-11-22 John David Anglin <danglin@gcc.gnu.org>
gcc/ChangeLog:
PR target/112617
* config/pa/predicates.md (integer_store_memory_operand): Return
true for REG+D addresses when reload_in_progress is true.
-rw-r--r-- | gcc/config/pa/predicates.md | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/gcc/config/pa/predicates.md b/gcc/config/pa/predicates.md index 1b50020..4c07c0a 100644 --- a/gcc/config/pa/predicates.md +++ b/gcc/config/pa/predicates.md @@ -308,6 +308,13 @@ if (reg_plus_base_memory_operand (op, mode)) { + /* There is no support for handling secondary reloads of integer + REG+D instructions in pa_emit_move_sequence. Further, the Q + constraint is used in more than simple move instructions. So, + we must return true and let reload handle the reload. */ + if (reload_in_progress) + return true; + /* Extract CONST_INT operand. */ if (GET_CODE (op) == SUBREG) op = SUBREG_REG (op); |