From: Ramana Radhakrishnan Date: Mon, 3 Mar 2014 08:09:14 +0000 (+0000) Subject: [ARM] Legitimize addresses for movmisalign for Neon. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=3416dd87b9f43d990ed3f02a413bbe656ef5298a;p=gcc.git [ARM] Legitimize addresses for movmisalign for Neon. 2014-03-03 Ramana Radhakrishnan * config/arm/neon.md (*movmisalign): Legitimize addresses not handled by recognizers. From-SVN: r208269 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 93effc9fae2..551e134e064 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2014-03-03 Ramana Radhakrishnan + + * config/arm/neon.md (*movmisalign): Legitimize addresses + not handled by recognizers. + 2014-03-03 Jakub Jelinek PR middle-end/60175 diff --git a/gcc/config/arm/neon.md b/gcc/config/arm/neon.md index 2f06e42ed31..aad420ce785 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) && !s_register_operand (operands[1], mode)) operands[1] = force_reg (mode, operands[1]); + + if (s_register_operand (operands[0], 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_neon_store"