[AArch64] Add TARGET_SCHED_REASSOCIATION_WIDTH
authorWilco Dijkstra <wdijkstr@arm.com>
Tue, 9 Dec 2014 18:26:04 +0000 (18:26 +0000)
committerJiong Wang <jiwang@gcc.gnu.org>
Tue, 9 Dec 2014 18:26:04 +0000 (18:26 +0000)
2014-12-09  Wilco Dijkstra  <wilco.dijkstra@arm.com>

* gcc/config/aarch64/aarch64-protos.h (tune-params): Add reasociation
tuning parameters.
* gcc/config/aarch64/aarch64.c (TARGET_SCHED_REASSOCIATION_WIDTH):
Define.
(aarch64_reassociation_width): New function.
(generic_tunings): Add reassociation tuning parameters.
(cortexa53_tunings): Likewise.
(cortexa57_tunings): Likewise.
(thunderx_tunings): Likewise.

From-SVN: r218526

gcc/ChangeLog
gcc/config/aarch64/aarch64-protos.h
gcc/config/aarch64/aarch64.c

index e680ae9404cf8b9e123dbf172b47ed55db72f329..f6bc21c612d5400966cbccc35c4e5c892d3afa6d 100644 (file)
@@ -1,3 +1,15 @@
+2014-12-09  Wilco Dijkstra  <wilco.dijkstra@arm.com>
+
+       * gcc/config/aarch64/aarch64-protos.h (tune-params): Add reasociation
+       tuning parameters.
+       * gcc/config/aarch64/aarch64.c (TARGET_SCHED_REASSOCIATION_WIDTH):
+       Define.
+       (aarch64_reassociation_width): New function.
+       (generic_tunings): Add reassociation tuning parameters.
+       (cortexa53_tunings): Likewise.
+       (cortexa57_tunings): Likewise.
+       (thunderx_tunings): Likewise.
+
 2014-12-09  Andrew Pinski  apinski@cavium.com
             Kyrylo Tkachov  kyrylo.tkachov@arm.com
 
index ec4157a38fe084372fe8a6bd8e08ac43bbb01278..2a7c30f4d926ea4c51211a777ab6a31ef9b1078b 100644 (file)
@@ -171,6 +171,9 @@ struct tune_params
   const int memmov_cost;
   const int issue_rate;
   const unsigned int fuseable_ops;
+  const int int_reassoc_width;
+  const int fp_reassoc_width;
+  const int vec_reassoc_width;
 };
 
 HOST_WIDE_INT aarch64_initial_elimination_offset (unsigned, unsigned);
index 03f3ac497f89cc208c9d17e011d563069d131241..f2d390bdd00697b6f6592f2bb89473ac625de09c 100644 (file)
@@ -323,7 +323,10 @@ static const struct tune_params generic_tunings =
   &generic_vector_cost,
   NAMED_PARAM (memmov_cost, 4),
   NAMED_PARAM (issue_rate, 2),
-  NAMED_PARAM (fuseable_ops, AARCH64_FUSE_NOTHING)
+  NAMED_PARAM (fuseable_ops, AARCH64_FUSE_NOTHING),
+  2,   /* int_reassoc_width.  */
+  4,   /* fp_reassoc_width.  */
+  1    /* vec_reassoc_width.  */
 };
 
 static const struct tune_params cortexa53_tunings =
@@ -335,7 +338,10 @@ static const struct tune_params cortexa53_tunings =
   NAMED_PARAM (memmov_cost, 4),
   NAMED_PARAM (issue_rate, 2),
   NAMED_PARAM (fuseable_ops, (AARCH64_FUSE_MOV_MOVK | AARCH64_FUSE_ADRP_ADD
-                             | AARCH64_FUSE_MOVK_MOVK | AARCH64_FUSE_ADRP_LDR))
+                             | AARCH64_FUSE_MOVK_MOVK | AARCH64_FUSE_ADRP_LDR)),
+  2,   /* int_reassoc_width.  */
+  4,   /* fp_reassoc_width.  */
+  1    /* vec_reassoc_width.  */
 };
 
 static const struct tune_params cortexa57_tunings =
@@ -346,7 +352,10 @@ static const struct tune_params cortexa57_tunings =
   &cortexa57_vector_cost,
   NAMED_PARAM (memmov_cost, 4),
   NAMED_PARAM (issue_rate, 3),
-  NAMED_PARAM (fuseable_ops, (AARCH64_FUSE_MOV_MOVK | AARCH64_FUSE_ADRP_ADD | AARCH64_FUSE_MOVK_MOVK))
+  NAMED_PARAM (fuseable_ops, (AARCH64_FUSE_MOV_MOVK | AARCH64_FUSE_ADRP_ADD | AARCH64_FUSE_MOVK_MOVK)),
+  2,   /* int_reassoc_width.  */
+  4,   /* fp_reassoc_width.  */
+  1    /* vec_reassoc_width.  */
 };
 
 static const struct tune_params thunderx_tunings =
@@ -357,7 +366,10 @@ static const struct tune_params thunderx_tunings =
   &generic_vector_cost,
   NAMED_PARAM (memmov_cost, 6),
   NAMED_PARAM (issue_rate, 2),
-  NAMED_PARAM (fuseable_ops, AARCH64_FUSE_CMP_BRANCH)
+  NAMED_PARAM (fuseable_ops, AARCH64_FUSE_CMP_BRANCH),
+  2,   /* int_reassoc_width.  */
+  4,   /* fp_reassoc_width.  */
+  1    /* vec_reassoc_width.  */
 };
 
 /* A processor implementing AArch64.  */
@@ -450,6 +462,19 @@ static const char * const aarch64_condition_codes[] =
   "hi", "ls", "ge", "lt", "gt", "le", "al", "nv"
 };
 
+static int
+aarch64_reassociation_width (unsigned opc ATTRIBUTE_UNUSED,
+                            enum machine_mode mode)
+{
+  if (VECTOR_MODE_P (mode))
+    return aarch64_tune_params->vec_reassoc_width;
+  if (INTEGRAL_MODE_P (mode))
+    return aarch64_tune_params->int_reassoc_width;
+  if (FLOAT_MODE_P (mode))
+    return aarch64_tune_params->fp_reassoc_width;
+  return 1;
+}
+
 /* Provide a mapping from gcc register numbers to dwarf register numbers.  */
 unsigned
 aarch64_dbx_register_number (unsigned regno)
@@ -11023,6 +11048,9 @@ aarch64_gen_adjusted_ldpstp (rtx *operands, bool load,
 #undef TARGET_PREFERRED_RELOAD_CLASS
 #define TARGET_PREFERRED_RELOAD_CLASS aarch64_preferred_reload_class
 
+#undef TARGET_SCHED_REASSOCIATION_WIDTH
+#define TARGET_SCHED_REASSOCIATION_WIDTH aarch64_reassociation_width
+
 #undef TARGET_SECONDARY_RELOAD
 #define TARGET_SECONDARY_RELOAD aarch64_secondary_reload