Patch attached for commit as I don't have write access.

ChangeLog:
2014-09-11  Wilco Dijkstra  <wdijk...@arm.com>

        * gcc/config/aarch64/aarch64.c (aarch64_register_move_cost):
        Fix Q register move handling.  (generic_regmove_cost): Undo raised 
        FP2FP move cost as Q register moves are now handled correctly.

> -----Original Message-----
> From: Marcus Shawcroft [mailto:marcus.shawcr...@gmail.com]
> Sent: 04 September 2014 16:54
> To: Wilco Dijkstra
> Cc: gcc-patches@gcc.gnu.org
> Subject: Re: [PATCH 2/4] AArch64: Fix cost for Q register moves
> 
> On 4 September 2014 16:41, Wilco Dijkstra <wdijk...@arm.com> wrote:
> >> From: Marcus Shawcroft [mailto:marcus.shawcr...@gmail.com]
> >> > -  NAMED_PARAM (FP2FP, 4)
> >> > +  NAMED_PARAM (FP2FP, 2)
> >>
> >> This is not directly related to the change below and it is missing
> >> from the ChangeLog.   Originally this number had to be > 2 in order
> >> for secondary reload to kick in.  See the comment above the second
> >> hunk of this patch.  Why is it OK to lower this number ?
> >
> > It is related because the GET_MODE_SIZE bug means it never returns the
> > correct cost, but instead returns the FP2FP cost. So the FP2FP cost had
> > to be artificially increased. With the fix this is no longer required.
> 
> Yep, I read the code again, I understand.  You still need to fix the
> ChangeLog.  OK to commit with a fixed ChangeLog.
> 
> Cheers
> 
> /Marcus
---
 gcc/config/aarch64/aarch64.c | 7 ++-----
 1 file changed, 2 insertions(+), 5 deletions(-)

diff --git a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c
index 56b8eda..62b0168 100644
--- a/gcc/config/aarch64/aarch64.c
+++ b/gcc/config/aarch64/aarch64.c
@@ -215,10 +215,7 @@ static const struct cpu_regmove_cost generic_regmove_cost =
   NAMED_PARAM (GP2GP, 1),
   NAMED_PARAM (GP2FP, 2),
   NAMED_PARAM (FP2GP, 2),
-  /* We currently do not provide direct support for TFmode Q->Q move.
-     Therefore we need to raise the cost above 2 in order to have
-     reload handle the situation.  */
-  NAMED_PARAM (FP2FP, 4)
+  NAMED_PARAM (FP2FP, 2)
 };
 
 /* Generic costs for vector insn classes.  */
@@ -5961,7 +5958,7 @@ aarch64_register_move_cost (enum machine_mode mode,
      secondary reload.  A general register is used as a scratch to move
      the upper DI value and the lower DI value is moved directly,
      hence the cost is the sum of three moves. */
-  if (! TARGET_SIMD && GET_MODE_SIZE (mode) == 128)
+  if (! TARGET_SIMD && GET_MODE_SIZE (mode) == 16)
     return regmove_cost->GP2FP + regmove_cost->FP2GP + regmove_cost->FP2FP;
 
   return regmove_cost->FP2FP;
-- 
1.9.1

Reply via email to