diff options
author | Ramana Radhakrishnan <ramana.radhakrishnan@arm.com> | 2014-03-03 08:09:14 +0000 |
---|---|---|
committer | Ramana Radhakrishnan <ramana@gcc.gnu.org> | 2014-03-03 08:09:14 +0000 |
commit | 3416dd87b9f43d990ed3f02a413bbe656ef5298a (patch) | |
tree | 7e57f183883dfec47488ffefff4ab6ae69c13332 | |
parent | b3bdf019b761cc75d967e1330f3e90cd4c94e116 (diff) | |
download | gcc-3416dd87b9f43d990ed3f02a413bbe656ef5298a.zip gcc-3416dd87b9f43d990ed3f02a413bbe656ef5298a.tar.gz gcc-3416dd87b9f43d990ed3f02a413bbe656ef5298a.tar.bz2 |
[ARM] Legitimize addresses for movmisalign<mode> for Neon.
2014-03-03 Ramana Radhakrishnan <ramana.radhakrishnan@arm.com>
* config/arm/neon.md (*movmisalign<mode>): Legitimize addresses
not handled by recognizers.
From-SVN: r208269
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/config/arm/neon.md | 11 |
2 files changed, 16 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 93effc9..551e134 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2014-03-03 Ramana Radhakrishnan <ramana.radhakrishnan@arm.com> + + * config/arm/neon.md (*movmisalign<mode>): Legitimize addresses + not handled by recognizers. + 2014-03-03 Jakub Jelinek <jakub@redhat.com> PR middle-end/60175 diff --git a/gcc/config/arm/neon.md b/gcc/config/arm/neon.md index 2f06e42..aad420c 100644 --- a/gcc/config/arm/neon.md +++ b/gcc/config/arm/neon.md @@ -245,12 +245,23 @@ UNSPEC_MISALIGNED_ACCESS))] "TARGET_NEON && !BYTES_BIG_ENDIAN && unaligned_access" { + rtx adjust_mem; /* This pattern is not permitted to fail during expansion: if both arguments are non-registers (e.g. memory := constant, which can be created by the auto-vectorizer), force operand 1 into a register. */ if (!s_register_operand (operands[0], <MODE>mode) && !s_register_operand (operands[1], <MODE>mode)) operands[1] = force_reg (<MODE>mode, operands[1]); + + if (s_register_operand (operands[0], <MODE>mode)) + adjust_mem = operands[1]; + else + adjust_mem = operands[0]; + + /* Legitimize address. */ + if (!neon_vector_mem_operand (adjust_mem, 2, true)) + XEXP (adjust_mem, 0) = force_reg (Pmode, XEXP (adjust_mem, 0)); + }) (define_insn "*movmisalign<mode>_neon_store" |