aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorSegher Boessenkool <segher@kernel.crashing.org>2017-04-12 10:31:40 +0200
committerSegher Boessenkool <segher@gcc.gnu.org>2017-04-12 10:31:40 +0200
commitba6bf284a5a10ba6eba18135c6df05c479aac5ca (patch)
treefd2bdcde16172d9d03e5905abff5869393599a46 /gcc
parent350792ffaed9b3506582b471bf133459d7ea64ab (diff)
downloadgcc-ba6bf284a5a10ba6eba18135c6df05c479aac5ca.zip
gcc-ba6bf284a5a10ba6eba18135c6df05c479aac5ca.tar.gz
gcc-ba6bf284a5a10ba6eba18135c6df05c479aac5ca.tar.bz2
rs6000: Enforce quad_address_p in TImode atomic_load/store (PR80382)
Whatever expand expands to should be valid instructions. The defined instructions here have a quad_memory_operand predicate, which boils down to quad_address_p on the address, so let's test for that instead of only disallowing indexed addresses. * config/rs6000/sync.md (atomic_load<mode>, atomic_store<mode): Test for quad_address_p for TImode, instead of just not indexed_address. From-SVN: r246867
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/config/rs6000/sync.md6
2 files changed, 7 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 91a3e45..ba4ae5f 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2017-04-12 Segher Boessenkool <segher@kernel.crashing.org>
+
+ * config/rs6000/sync.md (atomic_load<mode>, atomic_store<mode): Test
+ for quad_address_p for TImode, instead of just not indexed_address.
+
2017-04-12 Richard Biener <rguenther@suse.de>
Bernd Edlinger <bernd.edlinger@hotmail.de>
diff --git a/gcc/config/rs6000/sync.md b/gcc/config/rs6000/sync.md
index 160713a..2a1828e 100644
--- a/gcc/config/rs6000/sync.md
+++ b/gcc/config/rs6000/sync.md
@@ -157,8 +157,7 @@
rtx op1 = operands[1];
rtx pti_reg = gen_reg_rtx (PTImode);
- // Can't have indexed address for 'lq'
- if (indexed_address (XEXP (op1, 0), TImode))
+ if (!quad_address_p (XEXP (op1, 0), TImode, false))
{
rtx old_addr = XEXP (op1, 0);
rtx new_addr = force_reg (Pmode, old_addr);
@@ -231,8 +230,7 @@
rtx op1 = operands[1];
rtx pti_reg = gen_reg_rtx (PTImode);
- // Can't have indexed address for 'stq'
- if (indexed_address (XEXP (op0, 0), TImode))
+ if (!quad_address_p (XEXP (op0, 0), TImode, false))
{
rtx old_addr = XEXP (op0, 0);
rtx new_addr = force_reg (Pmode, old_addr);