diff options
author | Walter Lee <walt@tilera.com> | 2012-08-27 17:27:04 +0000 |
---|---|---|
committer | Walter Lee <walt@gcc.gnu.org> | 2012-08-27 17:27:04 +0000 |
commit | 9b0370aa4bb78d7fb8ba2b3a4ca0487647fbb9f1 (patch) | |
tree | 3dc6ee6adb05e3e6c1085bc2753027848a296a2c /gcc | |
parent | 865ea646b4a8bc3b7891c2c3094f6c9267c2859f (diff) | |
download | gcc-9b0370aa4bb78d7fb8ba2b3a4ca0487647fbb9f1.zip gcc-9b0370aa4bb78d7fb8ba2b3a4ca0487647fbb9f1.tar.gz gcc-9b0370aa4bb78d7fb8ba2b3a4ca0487647fbb9f1.tar.bz2 |
Properly set the latency of atomic ops to the approximate latency of a remote memory operation.
Properly set the latency of atomic ops to the approximate latency of a
remote memory operation.
* config/tilegx/sync.md (atomic_compare_and_swap_bare<mode>,
atomic_exchange_bare<mode>,
atomic_fetch_<fetchop_name>_bare<mode>): Set type to X1_remote.
* config/tilegx/tilegx-generic.md (X1_remote): New
insn_reservation.
* config/tilegx/tilegx.md (type): Add X1_remove.
(insn_cmpexch<four_if_si>, insn_exch<four_if_si>,
insn_fetchadd<four_if_si>, insn_fetchaddgez<four_if_si>,
insn_fetchand<four_if_si>, insn_fetchor<four_if_si>): Set type to
X1_remote.
From-SVN: r190722
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 13 | ||||
-rw-r--r-- | gcc/config/tilegx/sync.md | 6 | ||||
-rw-r--r-- | gcc/config/tilegx/tilegx-generic.md | 4 | ||||
-rw-r--r-- | gcc/config/tilegx/tilegx.md | 14 |
4 files changed, 27 insertions, 10 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 703d479..bf81a33 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,16 @@ +2012-08-27 Walter Lee <walt@tilera.com> + + * config/tilegx/sync.md (atomic_compare_and_swap_bare<mode>, + atomic_exchange_bare<mode>, + atomic_fetch_<fetchop_name>_bare<mode>): Set type to X1_remote. + * config/tilegx/tilegx-generic.md (X1_remote): New + insn_reservation. + * config/tilegx/tilegx.md (type): Add X1_remove. + (insn_cmpexch<four_if_si>, insn_exch<four_if_si>, + insn_fetchadd<four_if_si>, insn_fetchaddgez<four_if_si>, + insn_fetchand<four_if_si>, insn_fetchor<four_if_si>): Set type to + X1_remote. + 2012-08-27 Andreas Schwab <schwab@linux-m68k.org> * gdbinit.in: Fix syntax of skip command. diff --git a/gcc/config/tilegx/sync.md b/gcc/config/tilegx/sync.md index e4d1e07..9bf61d1 100644 --- a/gcc/config/tilegx/sync.md +++ b/gcc/config/tilegx/sync.md @@ -72,7 +72,7 @@ UNSPEC_CMPXCHG))] "" "cmpexch<four_if_si>\t%0, %1, %r2" - [(set_attr "type" "X1_L2")]) + [(set_attr "type" "X1_remote")]) (define_expand "atomic_exchange<mode>" @@ -101,7 +101,7 @@ UNSPEC_XCHG))] "" "exch<four_if_si>\t%0, %1, %r2" - [(set_attr "type" "X1_2cycle")]) + [(set_attr "type" "X1_remote")]) (define_expand "atomic_fetch_<fetchop_name><mode>" @@ -137,7 +137,7 @@ UNSPEC_ATOMIC))] "" "fetch<fetchop_name><four_if_si>\t%0, %1, %r2" - [(set_attr "type" "X1_2cycle")]) + [(set_attr "type" "X1_remote")]) (define_expand "atomic_fetch_sub<mode>" diff --git a/gcc/config/tilegx/tilegx-generic.md b/gcc/config/tilegx/tilegx-generic.md index 970344a..7dea17a 100644 --- a/gcc/config/tilegx/tilegx-generic.md +++ b/gcc/config/tilegx/tilegx-generic.md @@ -51,6 +51,10 @@ (eq_attr "type" "X1_L2") "X1") +(define_insn_reservation "X1_remote" 50 + (eq_attr "type" "X1_remote") + "X1") + (define_insn_reservation "X1_miss" 80 (eq_attr "type" "X1_miss") "X1") diff --git a/gcc/config/tilegx/tilegx.md b/gcc/config/tilegx/tilegx.md index 033d125..1fb6cdc 100644 --- a/gcc/config/tilegx/tilegx.md +++ b/gcc/config/tilegx/tilegx.md @@ -250,7 +250,7 @@ ;; Define an insn type attribute. This defines what pipes things can go in. (define_attr "type" - "X0,X0_2cycle,X1,X1_branch,X1_2cycle,X1_L2,X1_miss,X01,Y0,Y0_2cycle,Y1,Y2,Y2_2cycle,Y2_L2,Y2_miss,Y01,cannot_bundle,cannot_bundle_3cycle,cannot_bundle_4cycle,nothing" + "X0,X0_2cycle,X1,X1_branch,X1_2cycle,X1_L2,X1_remote,X1_miss,X01,Y0,Y0_2cycle,Y1,Y2,Y2_2cycle,Y2_L2,Y2_miss,Y01,cannot_bundle,cannot_bundle_3cycle,cannot_bundle_4cycle,nothing" (const_string "Y01")) (define_attr "length" "" @@ -2679,7 +2679,7 @@ UNSPEC_INSN_CMPEXCH))] "" "cmpexch<four_if_si>\t%0, %r1, %r2" - [(set_attr "type" "X1_L2")]) + [(set_attr "type" "X1_remote")]) (define_insn "insn_cmul" [(set (match_operand:DI 0 "register_operand" "=r") @@ -2817,7 +2817,7 @@ UNSPEC_INSN_EXCH))] "" "exch<four_if_si>\t%0, %r1, %r2" - [(set_attr "type" "X1_2cycle")]) + [(set_attr "type" "X1_remote")]) (define_insn "insn_fdouble_add_flags" [(set (match_operand:DI 0 "register_operand" "=r") @@ -2903,7 +2903,7 @@ (match_operand:I48MODE 2 "reg_or_0_operand" "rO")))] "" "fetchadd<four_if_si>\t%0, %r1, %r2" - [(set_attr "type" "X1_2cycle")]) + [(set_attr "type" "X1_remote")]) (define_insn "insn_fetchaddgez<four_if_si>" [(set (match_operand:I48MODE 0 "register_operand" "=r") @@ -2916,7 +2916,7 @@ UNSPEC_INSN_FETCHADDGEZ))] "" "fetchaddgez<four_if_si>\t%0, %r1, %r2" - [(set_attr "type" "X1_2cycle")]) + [(set_attr "type" "X1_remote")]) (define_insn "insn_fetchand<four_if_si>" [(set (match_operand:I48MODE 0 "register_operand" "=r") @@ -2928,7 +2928,7 @@ (match_operand:I48MODE 2 "reg_or_0_operand" "rO")))] "" "fetchand<four_if_si>\t%0, %r1, %r2" - [(set_attr "type" "X1_2cycle")]) + [(set_attr "type" "X1_remote")]) (define_insn "insn_fetchor<four_if_si>" [(set (match_operand:I48MODE 0 "register_operand" "=r") @@ -2940,7 +2940,7 @@ (match_operand:I48MODE 2 "reg_or_0_operand" "rO")))] "" "fetchor<four_if_si>\t%0, %r1, %r2" - [(set_attr "type" "X1_2cycle")]) + [(set_attr "type" "X1_remote")]) (define_insn "insn_finv" [(unspec_volatile:VOID [(match_operand 0 "pointer_operand" "rO")] |