aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn David Anglin <danglin@gcc.gnu.org>2023-11-22 19:47:34 +0000
committerJohn David Anglin <danglin@gcc.gnu.org>2023-11-22 19:47:34 +0000
commita89224f819381b77657145fdd8b1d997b989fdc0 (patch)
treebdb51caa09e38d1f430c196e466d699e07b60da1
parent3f266c84a15d63e42bfad46397fea9aff92b0720 (diff)
downloadgcc-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.md7
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);