]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
sparc.c (niagara2_costs): Adjust integer divide costs.
authorDavid S. Miller <davem@davemloft.net>
Sun, 18 Sep 2011 01:36:55 +0000 (01:36 +0000)
committerDavid S. Miller <davem@gcc.gnu.org>
Sun, 18 Sep 2011 01:36:55 +0000 (18:36 -0700)
* gcc/config/sparc/sparc.c (niagara2_costs): Adjust integer
divide costs.
(niagara3_costs): New.
(sparc_option_override): Use it.
* gcc/config/sparc/niagara2.md: Adjust with more accurate
Niagara-3 reservations.

From-SVN: r178938

gcc/ChangeLog
gcc/config/sparc/niagara2.md
gcc/config/sparc/sparc.c

index 201d17c6444b26bcec6b8773ae2093deefd5810c..e948bdb3ce5640d9cff0e30095358b786d83ef2e 100644 (file)
        __vis_fpack32): Fix types.
        * doc/extend.texi: Document new 'edge' VIS intrinsics.
 
+       * gcc/config/sparc/sparc.c (niagara2_costs): Adjust integer
+       divide costs.
+       (niagara3_costs): New.
+       (sparc_option_override): Use it.
+       * gcc/config/sparc/niagara2.md: Adjust with more accurate
+       Niagara-3 reservations.
+
 2011-09-17  Jakub Jelinek  <jakub@redhat.com>
 
        * config/i386/sse.md (VIMAX_AVX2): Change V4DI to V2TI.
index 999e13beaa485d47ef2c408c3c0915ce0cb19d40..d53be84e0965a800590bfb4a8d4ab0afbf90bcc0 100644 (file)
  "niag2_pipe")
 
 (define_insn_reservation "niag2_imul" 5
- (and (eq_attr "cpu" "niagara2,niagara3")
+ (and (eq_attr "cpu" "niagara2")
    (eq_attr "type" "imul"))
  "niag2_pipe*5")
 
-(define_insn_reservation "niag2_idiv" 31
- (and (eq_attr "cpu" "niagara2,niagara3")
+(define_insn_reservation "niag3_imul" 9
+ (and (eq_attr "cpu" "niagara3")
+   (eq_attr "type" "imul"))
+ "niag2_pipe*9")
+
+(define_insn_reservation "niag2_idiv" 26
+ (and (eq_attr "cpu" "niagara2")
+   (eq_attr "type" "idiv"))
+ "niag2_pipe*26")
+
+(define_insn_reservation "niag3_idiv" 31
+ (and (eq_attr "cpu" "niagara3")
    (eq_attr "type" "idiv"))
  "niag2_pipe*31")
 
     (eq_attr "type" "store,fpstore"))
   "niag2_pipe")
 
-(define_insn_reservation "niag2_fp" 3
-  (and (eq_attr "cpu" "niagara2,niagara3")
+(define_insn_reservation "niag2_fp" 6
+  (and (eq_attr "cpu" "niagara2")
     (eq_attr "type" "fpmove,fpcmove,fpcrmove,fpcmp,fpmul"))
-  "niag2_pipe*3")
+  "niag2_pipe*6")
+
+(define_insn_reservation "niag3_fp" 9
+  (and (eq_attr "cpu" "niagara3")
+    (eq_attr "type" "fpmove,fpcmove,fpcrmove,fpcmp,fpmul"))
+  "niag2_pipe*9")
 
 (define_insn_reservation "niag2_fdivs" 19
-  (and (eq_attr "cpu" "niagara2,niagara3")
+  (and (eq_attr "cpu" "niagara2")
     (eq_attr "type" "fpdivs"))
   "niag2_pipe*19")
 
+(define_insn_reservation "niag3_fdivs" 23
+  (and (eq_attr "cpu" "niagara3")
+    (eq_attr "type" "fpdivs"))
+  "niag2_pipe*23")
+
 (define_insn_reservation "niag2_fdivd" 33
-  (and (eq_attr "cpu" "niagara2,niagara3")
+  (and (eq_attr "cpu" "niagara2")
     (eq_attr "type" "fpdivd"))
   "niag2_pipe*33")
 
+(define_insn_reservation "niag3_fdivd" 37
+  (and (eq_attr "cpu" "niagara3")
+    (eq_attr "type" "fpdivd"))
+  "niag2_pipe*37")
+
 (define_insn_reservation "niag2_vis" 6
-  (and (eq_attr "cpu" "niagara2,niagara3")
+  (and (eq_attr "cpu" "niagara2")
     (eq_attr "type" "fga,fgm_pack,fgm_mul,fgm_cmp,fgm_pdist,edge"))
   "niag2_pipe*6")
+
+(define_insn_reservation "niag3_vis" 9
+  (and (eq_attr "cpu" "niagara3")
+    (eq_attr "type" "fga,fgm_pack,fgm_mul,fgm_cmp,fgm_pdist,edge"))
+  "niag2_pipe*9")
index 7e124a0eb15cc60e9ab37be8705c0cd4f0e23185..6ccc97b7416cdf633d6936c76c37876fe6d00bde 100644 (file)
@@ -269,8 +269,32 @@ struct processor_costs niagara2_costs = {
   COSTS_N_INSNS (5), /* imul */
   COSTS_N_INSNS (5), /* imulX */
   0, /* imul bit factor */
-  COSTS_N_INSNS (31), /* idiv, average of 12 - 41 cycle range */
-  COSTS_N_INSNS (31), /* idivX, average of 12 - 41 cycle range */
+  COSTS_N_INSNS (26), /* idiv, average of 12 - 41 cycle range */
+  COSTS_N_INSNS (26), /* idivX, average of 12 - 41 cycle range */
+  COSTS_N_INSNS (1), /* movcc/movr */
+  0, /* shift penalty */
+};
+
+static const
+struct processor_costs niagara3_costs = {
+  COSTS_N_INSNS (3), /* int load */
+  COSTS_N_INSNS (3), /* int signed load */
+  COSTS_N_INSNS (3), /* int zeroed load */
+  COSTS_N_INSNS (3), /* float load */
+  COSTS_N_INSNS (9), /* fmov, fneg, fabs */
+  COSTS_N_INSNS (9), /* fadd, fsub */
+  COSTS_N_INSNS (9), /* fcmp */
+  COSTS_N_INSNS (9), /* fmov, fmovr */
+  COSTS_N_INSNS (9), /* fmul */
+  COSTS_N_INSNS (23), /* fdivs */
+  COSTS_N_INSNS (37), /* fdivd */
+  COSTS_N_INSNS (23), /* fsqrts */
+  COSTS_N_INSNS (37), /* fsqrtd */
+  COSTS_N_INSNS (9), /* imul */
+  COSTS_N_INSNS (9), /* imulX */
+  0, /* imul bit factor */
+  COSTS_N_INSNS (31), /* idiv, average of 17 - 45 cycle range */
+  COSTS_N_INSNS (30), /* idivX, average of 16 - 44 cycle range */
   COSTS_N_INSNS (1), /* movcc/movr */
   0, /* shift penalty */
 };
@@ -917,9 +941,11 @@ sparc_option_override (void)
       sparc_costs = &niagara_costs;
       break;
     case PROCESSOR_NIAGARA2:
+      sparc_costs = &niagara2_costs;
+      break;
     case PROCESSOR_NIAGARA3:
     case PROCESSOR_NIAGARA4:
-      sparc_costs = &niagara2_costs;
+      sparc_costs = &niagara3_costs;
       break;
     case PROCESSOR_NATIVE:
       gcc_unreachable ();