Commit 0efe7d87 by Andre Simoes Dias Vieira Committed by Andre Vieira

gcc, Arm: Fix MVE move from GPR -> GPR

This patch fixes the pattern mve_mov for the case where both MVE vectors are in
R registers and the move does not get optimized away.  I use the same approach
as we do for NEON, where we use four register moves.

gcc/ChangeLog:
2020-03-20  Andre Vieira  <andre.simoesdiasvieira@arm.com>

	* config/arm/mve.md (mve_mov<mode>): Fix R->R case.

gcc/testsuite/ChangeLog:
2020-03-20  Andre Vieira  <andre.simoesdiasvieira@arm.com>

	* gcc.target/arm/mve/intrinsics/mve_move_gpr_to_gpr.c: New test.
parent 4119cd69
2020-03-20 Andre Vieira <andre.simoesdiasvieira@arm.com>
* config/arm/mve.md (mve_mov<mode>): Fix R->R case.
2020-03-20 Jakub Jelinek <jakub@redhat.com> 2020-03-20 Jakub Jelinek <jakub@redhat.com>
PR tree-optimization/94224 PR tree-optimization/94224
......
...@@ -663,7 +663,7 @@ ...@@ -663,7 +663,7 @@
else else
return "vldrb.8 %q0, %E1"; return "vldrb.8 %q0, %E1";
case 5: case 5:
return output_move_neon (operands); return output_move_quad (operands);
case 7: case 7:
return "vstrb.8 %q1, %E0"; return "vstrb.8 %q1, %E0";
default: default:
...@@ -671,7 +671,7 @@ ...@@ -671,7 +671,7 @@
return ""; return "";
} }
} }
[(set_attr "type" "mve_move,mve_move,mve_move,mve_move,mve_load,mve_move,mve_move,mve_store") [(set_attr "type" "mve_move,mve_move,mve_move,mve_move,mve_load,multiple,mve_move,mve_store")
(set_attr "length" "4,8,8,4,8,8,4,4") (set_attr "length" "4,8,8,4,8,8,4,4")
(set_attr "thumb2_pool_range" "*,*,*,*,1018,*,*,*") (set_attr "thumb2_pool_range" "*,*,*,*,1018,*,*,*")
(set_attr "neg_pool_range" "*,*,*,*,996,*,*,*")]) (set_attr "neg_pool_range" "*,*,*,*,996,*,*,*")])
......
2020-03-20 Andre Vieira <andre.simoesdiasvieira@arm.com>
* gcc.target/arm/mve/intrinsics/mve_move_gpr_to_gpr.c: New test.
2020-03-20 Jakub Jelinek <jakub@redhat.com> 2020-03-20 Jakub Jelinek <jakub@redhat.com>
PR tree-optimization/94224 PR tree-optimization/94224
......
/* { dg-do compile } */
/* { dg-require-effective-target arm_v8_1m_mve_fp_ok } */
/* { dg-add-options arm_v8_1m_mve_fp } */
/* { dg-additional-options "-O2 -mfloat-abi=softfp" } */
#include "arm_mve.h"
extern int bar (float16x8_t, float16_t);
extern void foobar (float16_t);
int
foo (float16x8_t a, float16_t b)
{
foobar (b);
return bar (a, b);
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment