]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Properly set the latency of atomic ops to the approximate latency of a remote memory...
authorWalter Lee <walt@tilera.com>
Mon, 27 Aug 2012 17:27:04 +0000 (17:27 +0000)
committerWalter Lee <walt@gcc.gnu.org>
Mon, 27 Aug 2012 17:27:04 +0000 (17:27 +0000)
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

gcc/ChangeLog
gcc/config/tilegx/sync.md
gcc/config/tilegx/tilegx-generic.md
gcc/config/tilegx/tilegx.md

index 703d479f3906a6114375848bee604fc27bd4b3a6..bf81a33d9a36faeb1696012f2b9465e42bb6e433 100644 (file)
@@ -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.
index e4d1e074f1acd33c9d0a2f29a694ed4ba9d4ae6f..9bf61d17dbe8c0bfceb516911c6c8c53bf4b88d3 100644 (file)
@@ -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>"
         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>"
           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>"
index 970344aacf41aa49a8c350b4d0e201f48dd53367..7dea17ab07809429e7af4d71da797a4835c4f202 100644 (file)
   (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")
index 033d125a99b6e97d13013dd180722740a587b97f..1fb6cdc2dd515b16dde5015da3039c3a6f379446 100644 (file)
 
 ;; 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" ""
         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")
         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")
                       (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")
                         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")
                      (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")
                      (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")]