From 9b0370aa4bb78d7fb8ba2b3a4ca0487647fbb9f1 Mon Sep 17 00:00:00 2001 From: Walter Lee Date: Mon, 27 Aug 2012 17:27:04 +0000 Subject: [PATCH] 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, atomic_exchange_bare, atomic_fetch__bare): 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, insn_exch, insn_fetchadd, insn_fetchaddgez, insn_fetchand, insn_fetchor): Set type to X1_remote. From-SVN: r190722 --- gcc/ChangeLog | 13 +++++++++++++ gcc/config/tilegx/sync.md | 6 +++--- gcc/config/tilegx/tilegx-generic.md | 4 ++++ gcc/config/tilegx/tilegx.md | 14 +++++++------- 4 files changed, 27 insertions(+), 10 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 703d479f390..bf81a33d9a3 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,16 @@ +2012-08-27 Walter Lee + + * config/tilegx/sync.md (atomic_compare_and_swap_bare, + atomic_exchange_bare, + atomic_fetch__bare): 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, insn_exch, + insn_fetchadd, insn_fetchaddgez, + insn_fetchand, insn_fetchor): Set type to + X1_remote. + 2012-08-27 Andreas Schwab * gdbinit.in: Fix syntax of skip command. diff --git a/gcc/config/tilegx/sync.md b/gcc/config/tilegx/sync.md index e4d1e074f1a..9bf61d17dbe 100644 --- a/gcc/config/tilegx/sync.md +++ b/gcc/config/tilegx/sync.md @@ -72,7 +72,7 @@ UNSPEC_CMPXCHG))] "" "cmpexch\t%0, %1, %r2" - [(set_attr "type" "X1_L2")]) + [(set_attr "type" "X1_remote")]) (define_expand "atomic_exchange" @@ -101,7 +101,7 @@ UNSPEC_XCHG))] "" "exch\t%0, %1, %r2" - [(set_attr "type" "X1_2cycle")]) + [(set_attr "type" "X1_remote")]) (define_expand "atomic_fetch_" @@ -137,7 +137,7 @@ UNSPEC_ATOMIC))] "" "fetch\t%0, %1, %r2" - [(set_attr "type" "X1_2cycle")]) + [(set_attr "type" "X1_remote")]) (define_expand "atomic_fetch_sub" diff --git a/gcc/config/tilegx/tilegx-generic.md b/gcc/config/tilegx/tilegx-generic.md index 970344aacf4..7dea17ab078 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 033d125a99b..1fb6cdc2dd5 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\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\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\t%0, %r1, %r2" - [(set_attr "type" "X1_2cycle")]) + [(set_attr "type" "X1_remote")]) (define_insn "insn_fetchaddgez" [(set (match_operand:I48MODE 0 "register_operand" "=r") @@ -2916,7 +2916,7 @@ UNSPEC_INSN_FETCHADDGEZ))] "" "fetchaddgez\t%0, %r1, %r2" - [(set_attr "type" "X1_2cycle")]) + [(set_attr "type" "X1_remote")]) (define_insn "insn_fetchand" [(set (match_operand:I48MODE 0 "register_operand" "=r") @@ -2928,7 +2928,7 @@ (match_operand:I48MODE 2 "reg_or_0_operand" "rO")))] "" "fetchand\t%0, %r1, %r2" - [(set_attr "type" "X1_2cycle")]) + [(set_attr "type" "X1_remote")]) (define_insn "insn_fetchor" [(set (match_operand:I48MODE 0 "register_operand" "=r") @@ -2940,7 +2940,7 @@ (match_operand:I48MODE 2 "reg_or_0_operand" "rO")))] "" "fetchor\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")] -- 2.30.2