aboutsummaryrefslogtreecommitdiff
path: root/gcc/config
diff options
context:
space:
mode:
authorAndrew Pinski <apinski@cavium.com>2015-01-13 13:55:23 +0000
committerAndrew Pinski <pinskia@gcc.gnu.org>2015-01-13 05:55:23 -0800
commitbf84ac44f9679285d95ac0c96c0e2e83b7ef038f (patch)
tree72d0176b51caf8fb006310c09a11bc0a61bd61fc /gcc/config
parent08cb0abc7c107f5114ad1fb6b35bc8402b4cc589 (diff)
downloadgcc-bf84ac44f9679285d95ac0c96c0e2e83b7ef038f.zip
gcc-bf84ac44f9679285d95ac0c96c0e2e83b7ef038f.tar.gz
gcc-bf84ac44f9679285d95ac0c96c0e2e83b7ef038f.tar.bz2
[multiple changes]
2015-01-13 Andrew Pinski <apinski@cavium.com> * config/aarch64/aarch64.c (aarch64_operands_ok_for_ldpstp): Reject volatile mems. (aarch64_operands_adjust_ok_for_ldpstp): Likewise. 2015-01-13 Andrew Pinski <apinski@cavium.com> * gcc.target/aarch64/volatileloadpair-1.c: New testcase. * gcc.target/aarch64/volatileloadpair-2.c: New testcase. From-SVN: r219530
Diffstat (limited to 'gcc/config')
-rw-r--r--gcc/config/aarch64/aarch64.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c
index 5100532..3b6c67a 100644
--- a/gcc/config/aarch64/aarch64.c
+++ b/gcc/config/aarch64/aarch64.c
@@ -10630,6 +10630,10 @@ aarch64_operands_ok_for_ldpstp (rtx *operands, bool load,
reg_2 = operands[3];
}
+ /* The mems cannot be volatile. */
+ if (MEM_VOLATILE_P (mem_1) || MEM_VOLATILE_P (mem_2))
+ return false;
+
/* Check if the addresses are in the form of [base+offset]. */
extract_base_offset_in_addr (mem_1, &base_1, &offset_1);
if (base_1 == NULL_RTX || offset_1 == NULL_RTX)
@@ -10737,6 +10741,11 @@ aarch64_operands_adjust_ok_for_ldpstp (rtx *operands, bool load,
if (!MEM_P (mem_1) || aarch64_mem_pair_operand (mem_1, mode))
return false;
+ /* The mems cannot be volatile. */
+ if (MEM_VOLATILE_P (mem_1) || MEM_VOLATILE_P (mem_2)
+ || MEM_VOLATILE_P (mem_3) ||MEM_VOLATILE_P (mem_4))
+ return false;
+
/* Check if the addresses are in the form of [base+offset]. */
extract_base_offset_in_addr (mem_1, &base_1, &offset_1);
if (base_1 == NULL_RTX || offset_1 == NULL_RTX)