aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authormeissner <meissner@138bc75d-0d04-0410-961f-82ee72b054a4>2019-10-15 23:13:28 +0000
committermeissner <meissner@138bc75d-0d04-0410-961f-82ee72b054a4>2019-10-15 23:13:28 +0000
commit1027a9a38e9b6973613cbf6cad1d912690f08d0d (patch)
tree79eeb234a53daaaf9d42e5b041360642eb2268ae /gcc
parent09b435e8a68dab65884b471eb22e93be4af3b61a (diff)
Redo patch #3
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/ibm/pcrel-trunk@277020 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc')
-rw-r--r--gcc/config/rs6000/predicates.md8
1 files changed, 8 insertions, 0 deletions
diff --git a/gcc/config/rs6000/predicates.md b/gcc/config/rs6000/predicates.md
index 345d9c337af..5ef505bb1c4 100644
--- a/gcc/config/rs6000/predicates.md
+++ b/gcc/config/rs6000/predicates.md
@@ -932,6 +932,14 @@
return false;
addr = XEXP (inner, 0);
+
+ /* The LWA instruction uses the DS-form instruction format which requires
+ that the bottom two bits of the offset must be 0. The prefixed PLWA does
+ not have this restriction. While the actual load from memory is 32-bits,
+ we pass in DImode here to test for using a DS instruction. */
+ if (address_is_prefixed (addr, DImode, NON_PREFIXED_DS))
+ return true;
+
if (GET_CODE (addr) == PRE_INC
|| GET_CODE (addr) == PRE_DEC
|| (GET_CODE (addr) == PRE_MODIFY