From b86923f0cd190c2be56575e634a7c0d16f6df134 Mon Sep 17 00:00:00 2001 From: James Greenhalgh Date: Fri, 6 Sep 2013 13:39:57 +0000 Subject: [PATCH] [Patch ARM AARCH64] Split "type" attributes: fdiv gcc/ * config/arm/types.md: Split fdiv as fsqrt, fdiv. * config/arm/arm.md (core_cycles): Remove fdiv. * config/arm/vfp.md: (*sqrtsf2_vfp): Update for attribute changes. (*sqrtdf2_vfp): Likewise. * config/aarch64/aarch64.md: (sqrt2): Update for attribute changes. * config/arm/arm1020e.md: Update with new attributes. * config/arm/cortex-a15-neon.md: Update with new attributes. * config/arm/cortex-a5.md: Update with new attributes. * config/arm/cortex-a53.md: Update with new attributes. * config/arm/cortex-a7.md: Update with new attributes. * config/arm/cortex-a8-neon.md: Update with new attributes. * config/arm/cortex-a9.md: Update with new attributes. * config/arm/cortex-m4-fpu.md: Update with new attributes. * config/arm/cortex-r4f.md: Update with new attributes. * config/arm/marvell-pj4.md: Update with new attributes. * config/arm/vfp11.md: Update with new attributes. From-SVN: r202329 --- gcc/ChangeLog | 21 +++++++++++++++++++++ gcc/config/aarch64/aarch64.md | 2 +- gcc/config/arm/arm.md | 1 - gcc/config/arm/arm1020e.md | 4 ++-- gcc/config/arm/cortex-a15-neon.md | 4 ++-- gcc/config/arm/cortex-a5.md | 4 ++-- gcc/config/arm/cortex-a53.md | 4 ++-- gcc/config/arm/cortex-a7.md | 4 ++-- gcc/config/arm/cortex-a8-neon.md | 4 ++-- gcc/config/arm/cortex-a9.md | 4 ++-- gcc/config/arm/cortex-m4-fpu.md | 2 +- gcc/config/arm/cortex-r4f.md | 4 ++-- gcc/config/arm/marvell-pj4.md | 4 ++-- gcc/config/arm/types.md | 3 +++ gcc/config/arm/vfp.md | 4 ++-- gcc/config/arm/vfp11.md | 4 ++-- 16 files changed, 48 insertions(+), 25 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index d70d0e4e5b8..6df6ca45532 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,24 @@ +2013-09-06 James Greenhalgh + + * config/arm/types.md: Split fdiv as fsqrt, fdiv. + * config/arm/arm.md (core_cycles): Remove fdiv. + * config/arm/vfp.md: + (*sqrtsf2_vfp): Update for attribute changes. + (*sqrtdf2_vfp): Likewise. + * config/aarch64/aarch64.md: + (sqrt2): Update for attribute changes. + * config/arm/arm1020e.md: Update with new attributes. + * config/arm/cortex-a15-neon.md: Update with new attributes. + * config/arm/cortex-a5.md: Update with new attributes. + * config/arm/cortex-a53.md: Update with new attributes. + * config/arm/cortex-a7.md: Update with new attributes. + * config/arm/cortex-a8-neon.md: Update with new attributes. + * config/arm/cortex-a9.md: Update with new attributes. + * config/arm/cortex-m4-fpu.md: Update with new attributes. + * config/arm/cortex-r4f.md: Update with new attributes. + * config/arm/marvell-pj4.md: Update with new attributes. + * config/arm/vfp11.md: Update with new attributes. + 2013-09-06 James Greenhalgh * config/arm/types.md diff --git a/gcc/config/aarch64/aarch64.md b/gcc/config/aarch64/aarch64.md index 6a4a975bb89..ded37efb4c8 100644 --- a/gcc/config/aarch64/aarch64.md +++ b/gcc/config/aarch64/aarch64.md @@ -3903,7 +3903,7 @@ "TARGET_FLOAT" "fsqrt\\t%0, %1" [(set_attr "v8type" "fsqrt") - (set_attr "type" "fdiv") + (set_attr "type" "fsqrt") (set_attr "mode" "")] ) diff --git a/gcc/config/arm/arm.md b/gcc/config/arm/arm.md index 5ed8ee7dc62..6c0fbf44288 100644 --- a/gcc/config/arm/arm.md +++ b/gcc/config/arm/arm.md @@ -335,7 +335,6 @@ alus_shift_imm, alus_shift_reg, bfm, csel, rev, logic_imm, logic_reg,\ logic_shift_imm, logic_shift_reg, logics_imm, logics_reg,\ logics_shift_imm, logics_shift_reg, extend, shift_imm, float, fcsel,\ - fdivd, fdivs,\ wmmx_wor, wmmx_wxor, wmmx_wand, wmmx_wandn, wmmx_wmov, wmmx_tmcrr,\ wmmx_tmrrc, wmmx_wldr, wmmx_wstr, wmmx_tmcr, wmmx_tmrc, wmmx_wadd,\ wmmx_wsub, wmmx_wmul, wmmx_wmac, wmmx_wavg2, wmmx_tinsr, wmmx_textrm,\ diff --git a/gcc/config/arm/arm1020e.md b/gcc/config/arm/arm1020e.md index e16e862c1f4..8cf0890d930 100644 --- a/gcc/config/arm/arm1020e.md +++ b/gcc/config/arm/arm1020e.md @@ -299,12 +299,12 @@ (define_insn_reservation "v10_fdivs" 18 (and (eq_attr "vfp10" "yes") - (eq_attr "type" "fdivs")) + (eq_attr "type" "fdivs, fsqrts")) "1020a_e+v10_ds*14") (define_insn_reservation "v10_fdivd" 32 (and (eq_attr "vfp10" "yes") - (eq_attr "type" "fdivd")) + (eq_attr "type" "fdivd, fsqrtd")) "1020a_e+v10_fmac+v10_ds*28") (define_insn_reservation "v10_floads" 4 diff --git a/gcc/config/arm/cortex-a15-neon.md b/gcc/config/arm/cortex-a15-neon.md index b5d14e7f7f9..057507a762a 100644 --- a/gcc/config/arm/cortex-a15-neon.md +++ b/gcc/config/arm/cortex-a15-neon.md @@ -501,12 +501,12 @@ (define_insn_reservation "cortex_a15_vfp_divs" 10 (and (eq_attr "tune" "cortexa15") - (eq_attr "type" "fdivs")) + (eq_attr "type" "fdivs, fsqrts")) "ca15_issue1,ca15_cx_ik") (define_insn_reservation "cortex_a15_vfp_divd" 18 (and (eq_attr "tune" "cortexa15") - (eq_attr "type" "fdivd")) + (eq_attr "type" "fdivd, fsqrtd")) "ca15_issue1,ca15_cx_ik") ;; Define bypasses. diff --git a/gcc/config/arm/cortex-a5.md b/gcc/config/arm/cortex-a5.md index 54c8c420324..03d3cc99106 100644 --- a/gcc/config/arm/cortex-a5.md +++ b/gcc/config/arm/cortex-a5.md @@ -233,14 +233,14 @@ (define_insn_reservation "cortex_a5_fdivs" 14 (and (eq_attr "tune" "cortexa5") - (eq_attr "type" "fdivs")) + (eq_attr "type" "fdivs, fsqrts")) "cortex_a5_ex1, cortex_a5_fp_div_sqrt * 13") ;; ??? Similarly for fdivd. (define_insn_reservation "cortex_a5_fdivd" 29 (and (eq_attr "tune" "cortexa5") - (eq_attr "type" "fdivd")) + (eq_attr "type" "fdivd, fsqrtd")) "cortex_a5_ex1, cortex_a5_fp_div_sqrt * 28") ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; diff --git a/gcc/config/arm/cortex-a53.md b/gcc/config/arm/cortex-a53.md index e84b9ea1a71..e52f4377c62 100644 --- a/gcc/config/arm/cortex-a53.md +++ b/gcc/config/arm/cortex-a53.md @@ -239,12 +239,12 @@ (define_insn_reservation "cortex_a53_fdivs" 14 (and (eq_attr "tune" "cortexa53") - (eq_attr "type" "fdivs")) + (eq_attr "type" "fdivs, fsqrts")) "cortex_a53_slot0, cortex_a53_fp_div_sqrt * 13") (define_insn_reservation "cortex_a53_fdivd" 29 (and (eq_attr "tune" "cortexa53") - (eq_attr "type" "fdivd")) + (eq_attr "type" "fdivd, fsqrtd")) "cortex_a53_slot0, cortex_a53_fp_div_sqrt * 28") ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; diff --git a/gcc/config/arm/cortex-a7.md b/gcc/config/arm/cortex-a7.md index 6d7b43685a3..97b4cadb7c8 100644 --- a/gcc/config/arm/cortex-a7.md +++ b/gcc/config/arm/cortex-a7.md @@ -288,12 +288,12 @@ (define_insn_reservation "cortex_a7_fdivs" 16 (and (eq_attr "tune" "cortexa7") - (eq_attr "type" "fdivs")) + (eq_attr "type" "fdivs, fsqrts")) "cortex_a7_ex1+cortex_a7_fp_div_sqrt, cortex_a7_fp_div_sqrt * 13") (define_insn_reservation "cortex_a7_fdivd" 31 (and (eq_attr "tune" "cortexa7") - (eq_attr "type" "fdivd")) + (eq_attr "type" "fdivd, fsqrtd")) "cortex_a7_ex1+cortex_a7_fp_div_sqrt, cortex_a7_fp_div_sqrt * 28") ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; diff --git a/gcc/config/arm/cortex-a8-neon.md b/gcc/config/arm/cortex-a8-neon.md index 6953a9590a5..ad3dd773bf8 100644 --- a/gcc/config/arm/cortex-a8-neon.md +++ b/gcc/config/arm/cortex-a8-neon.md @@ -159,12 +159,12 @@ (define_insn_reservation "cortex_a8_vfp_divs" 37 (and (eq_attr "tune" "cortexa8") - (eq_attr "type" "fdivs")) + (eq_attr "type" "fdivs, fsqrts")) "cortex_a8_vfp,cortex_a8_vfplite*36") (define_insn_reservation "cortex_a8_vfp_divd" 65 (and (eq_attr "tune" "cortexa8") - (eq_attr "type" "fdivd")) + (eq_attr "type" "fdivd, fsqrtd")) "cortex_a8_vfp,cortex_a8_vfplite*64") ;; Comparisons can actually take 7 cycles sometimes instead of four, diff --git a/gcc/config/arm/cortex-a9.md b/gcc/config/arm/cortex-a9.md index a66481807cf..32514686bb0 100644 --- a/gcc/config/arm/cortex-a9.md +++ b/gcc/config/arm/cortex-a9.md @@ -271,12 +271,12 @@ cortex_a9_store3_4, cortex_a9_store1_2, cortex_a9_load3_4") ;; Division pipeline description. (define_insn_reservation "cortex_a9_fdivs" 15 (and (eq_attr "tune" "cortexa9") - (eq_attr "type" "fdivs")) + (eq_attr "type" "fdivs, fsqrts")) "ca9fp_ds1 + ca9_issue_vfp_neon, nothing*14") (define_insn_reservation "cortex_a9_fdivd" 25 (and (eq_attr "tune" "cortexa9") - (eq_attr "type" "fdivd")) + (eq_attr "type" "fdivd, fsqrtd")) "ca9fp_ds1 + ca9_issue_vfp_neon, nothing*24") ;; Include Neon pipeline description diff --git a/gcc/config/arm/cortex-m4-fpu.md b/gcc/config/arm/cortex-m4-fpu.md index 81c12b74f65..e130cf7d5fc 100644 --- a/gcc/config/arm/cortex-m4-fpu.md +++ b/gcc/config/arm/cortex-m4-fpu.md @@ -30,7 +30,7 @@ ;; Integer instructions following VDIV or VSQRT complete out-of-order. (define_insn_reservation "cortex_m4_fdivs" 15 (and (eq_attr "tune" "cortexm4") - (eq_attr "type" "fdivs")) + (eq_attr "type" "fdivs, fsqrts")) "cortex_m4_ex_v,cortex_m4_v*13") (define_insn_reservation "cortex_m4_vmov_1" 1 diff --git a/gcc/config/arm/cortex-r4f.md b/gcc/config/arm/cortex-r4f.md index 06e061e2b14..8f357da1061 100644 --- a/gcc/config/arm/cortex-r4f.md +++ b/gcc/config/arm/cortex-r4f.md @@ -68,7 +68,7 @@ (define_insn_reservation "cortex_r4_fdivs" 17 (and (eq_attr "tune_cortexr4" "yes") - (eq_attr "type" "fdivs")) + (eq_attr "type" "fdivs, fsqrts")) "cortex_r4_issue_ab+cortex_r4_v1,cortex_r4_issue_a+cortex_r4_v1") (define_insn_reservation "cortex_r4_floads" 2 @@ -131,7 +131,7 @@ ;; out of order. Chances are this is not a pipelined operation. (define_insn_reservation "cortex_r4_fdivd" 97 (and (eq_attr "tune_cortexr4" "yes") - (eq_attr "type" "fdivd")) + (eq_attr "type" "fdivd, fsqrtd")) "cortex_r4_single_issue*3") (define_insn_reservation "cortex_r4_ffarithd" 2 diff --git a/gcc/config/arm/marvell-pj4.md b/gcc/config/arm/marvell-pj4.md index d9cf8d4b6b5..a2a9785b5f2 100644 --- a/gcc/config/arm/marvell-pj4.md +++ b/gcc/config/arm/marvell-pj4.md @@ -193,11 +193,11 @@ (define_insn_reservation "pj4_vfp_divs" 20 (and (eq_attr "tune" "marvell_pj4") - (eq_attr "type" "fdivs")) "pj4_is,nothing*2,vissue,vdiv*18,nothing") + (eq_attr "type" "fdivs, fsqrts")) "pj4_is,nothing*2,vissue,vdiv*18,nothing") (define_insn_reservation "pj4_vfp_divd" 34 (and (eq_attr "tune" "marvell_pj4") - (eq_attr "type" "fdivd")) "pj4_is,nothing*2,vissue,vdiv*32,nothing") + (eq_attr "type" "fdivd, fsqrtd")) "pj4_is,nothing*2,vissue,vdiv*32,nothing") (define_insn_reservation "pj4_vfp_mac" 9 (and (eq_attr "tune" "marvell_pj4") diff --git a/gcc/config/arm/types.md b/gcc/config/arm/types.md index de817634ec9..bf5fae79d98 100644 --- a/gcc/config/arm/types.md +++ b/gcc/config/arm/types.md @@ -79,6 +79,7 @@ ; float floating point arithmetic operation. ; fmac[d,s] double/single floating point multiply-accumulate. ; fmul[d,s] double/single floating point multiply. +; fsqrt[d,s] double/single precision floating point square root. ; load_acq load-acquire. ; load_byte load byte(s) from memory to arm registers. ; load1 load 1 word from memory to arm registers. @@ -349,6 +350,8 @@ fmacs,\ fmuld,\ fmuls,\ + fsqrts,\ + fsqrtd,\ load_acq,\ load_byte,\ load1,\ diff --git a/gcc/config/arm/vfp.md b/gcc/config/arm/vfp.md index 0e61c6eff00..3001751e749 100644 --- a/gcc/config/arm/vfp.md +++ b/gcc/config/arm/vfp.md @@ -1077,7 +1077,7 @@ "fsqrts%?\\t%0, %1" [(set_attr "predicable" "yes") (set_attr "predicable_short_it" "no") - (set_attr "type" "fdivs")] + (set_attr "type" "fsqrts")] ) (define_insn "*sqrtdf2_vfp" @@ -1087,7 +1087,7 @@ "fsqrtd%?\\t%P0, %P1" [(set_attr "predicable" "yes") (set_attr "predicable_short_it" "no") - (set_attr "type" "fdivd")] + (set_attr "type" "fsqrtd")] ) diff --git a/gcc/config/arm/vfp11.md b/gcc/config/arm/vfp11.md index 3cc343e0186..8b76ce198f0 100644 --- a/gcc/config/arm/vfp11.md +++ b/gcc/config/arm/vfp11.md @@ -67,12 +67,12 @@ (define_insn_reservation "vfp_fdivs" 19 (and (eq_attr "generic_vfp" "yes") - (eq_attr "type" "fdivs")) + (eq_attr "type" "fdivs, fsqrts")) "ds*15") (define_insn_reservation "vfp_fdivd" 33 (and (eq_attr "generic_vfp" "yes") - (eq_attr "type" "fdivd")) + (eq_attr "type" "fdivd, fsqrtd")) "fmac+ds*29") ;; Moves to/from arm regs also use the load/store pipeline. -- 2.30.2