Hi all,

This patch models the latency of moves between FP and GP registers on the A15 and A57 a bit more accurately by splitting the reservations for FP->GP and GP->FP moves and adding an appropriate bypass.

Bootstrapped and tested on arm-none-linux-gnueabihf and aarch64-none-linux-gnu.

Ok for trunk?

Thanks,
Kyrill

2014-11-11  Kyrylo Tkachov  <kyrylo.tkac...@arm.com>

    * config/arm/cortex-a15-neon.md (cortex_a15_vfp_to_from_gp):
    Split into...
    (cortex_a15_gp_to_vfp): ...This.
    (cortex_a15_fp_to_gp): ...And this.
    Define and comment bypass from vfp operations to fp->gp moves.
commit c176d3e691f470598a02507fa75a8294da954c3f
Author: Kyrylo Tkachov <kyrylo.tkac...@arm.com>
Date:   Fri Jun 13 11:11:16 2014 +0100

    [ARM/AArch64] Model FP->GP move stalls

diff --git a/gcc/config/arm/cortex-a15-neon.md b/gcc/config/arm/cortex-a15-neon.md
index 02d4a53..bc09cd6 100644
--- a/gcc/config/arm/cortex-a15-neon.md
+++ b/gcc/config/arm/cortex-a15-neon.md
@@ -655,10 +655,20 @@ (define_insn_reservation "cortex_a15_vfp_cpys" 4
        (eq_attr "type" "fmov"))
   "ca15_issue1,ca15_cx_perm")
 
-(define_insn_reservation "cortex_a15_vfp_to_from_gp" 5
+(define_insn_reservation "cortex_a15_gp_to_vfp" 5
   (and (eq_attr "tune" "cortexa15")
-       (eq_attr "type" "f_mcr, f_mcrr, f_mrc, f_mrrc"))
-  "ca15_issue1,ca15_ls1+ca15_ls2")
+       (eq_attr "type" "f_mcr, f_mcrr"))
+  "ca15_issue1,ca15_ls")
+
+(define_insn_reservation "cortex_a15_mov_vfp_to_gp" 5
+  (and (eq_attr "tune" "cortexa15")
+       (eq_attr "type" "f_mrc, f_mrrc"))
+  "ca15_issue1,ca15_ls")
+
+;; Moves from floating point registers to general purpose registers
+;; induce additional latency.
+(define_bypass 10 "cortex_a15_vfp*, cortex_a15_neon*, cortex_a15_gp_to_vfp" "cortex_a15_mov_vfp_to_gp")
+
 
 (define_insn_reservation "cortex_a15_vfp_ariths" 7
   (and (eq_attr "tune" "cortexa15")

Reply via email to