Enable max_issue for AArch32 and AArch64
authorMaxim Kuvyrkov <maxim.kuvyrkov@linaro.org>
Sat, 17 Jan 2015 01:06:17 +0000 (01:06 +0000)
committerMaxim Kuvyrkov <mkuvyrkov@gcc.gnu.org>
Sat, 17 Jan 2015 01:06:17 +0000 (01:06 +0000)
Enable max_issue for AArch32 and AArch64
* config/aarch64/aarch64.c
(aarch64_sched_first_cycle_multipass_dfa_lookahead): Implement hook.
(TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD): Define.
* config/arm/arm.c
(arm_first_cycle_multipass_dfa_lookahead): Implement hook.
(TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD): Define.

From-SVN: r219787

gcc/ChangeLog
gcc/config/aarch64/aarch64.c
gcc/config/arm/arm.c

index aa60d5ddbe2d298b981f3ed9976ffcfb207cbf63..1d20442f3abc19fad64ec0ab8b619a22f7012409 100644 (file)
@@ -1,3 +1,12 @@
+2015-01-17  Maxim Kuvyrkov  <maxim.kuvyrkov@linaro.org>
+
+       * config/aarch64/aarch64.c
+       (aarch64_sched_first_cycle_multipass_dfa_lookahead): Implement hook.
+       (TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD): Define.
+       * config/arm/arm.c
+       (arm_first_cycle_multipass_dfa_lookahead): Implement hook.
+       (TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD): Define.
+
 2015-01-17  Alan Modra  <amodra@gmail.com>
 
        * cprop.c (do_local_cprop): Disallow replacement of fixed
index fdb0116048a355d920a66fb8896f58ddc4ddb947..a89bb417ede1e26a5eabfbb84e63d68d5369be16 100644 (file)
@@ -94,6 +94,7 @@
 #include "builtins.h"
 #include "rtl-iter.h"
 #include "tm-constrs.h"
+#include "sched-int.h"
 
 /* Defined for convenience.  */
 #define POINTER_BYTES (POINTER_SIZE / BITS_PER_UNIT)
@@ -6499,6 +6500,14 @@ aarch64_sched_issue_rate (void)
   return aarch64_tune_params->issue_rate;
 }
 
+static int
+aarch64_sched_first_cycle_multipass_dfa_lookahead (void)
+{
+  int issue_rate = aarch64_sched_issue_rate ();
+
+  return issue_rate > 1 && !sched_fusion ? issue_rate : 0;
+}
+
 /* Vectorizer cost model target hooks.  */
 
 /* Implement targetm.vectorize.builtin_vectorization_cost.  */
@@ -11387,6 +11396,10 @@ aarch64_gen_adjusted_ldpstp (rtx *operands, bool load,
 #undef TARGET_SCHED_ISSUE_RATE
 #define TARGET_SCHED_ISSUE_RATE aarch64_sched_issue_rate
 
+#undef TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD
+#define TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD \
+  aarch64_sched_first_cycle_multipass_dfa_lookahead
+
 #undef TARGET_TRAMPOLINE_INIT
 #define TARGET_TRAMPOLINE_INIT aarch64_trampoline_init
 
index c1068436907918b6f9dd053c7f771a25e535a74b..337a69b43e00179fd8944e19920781b1dd706039 100644 (file)
@@ -268,6 +268,7 @@ static unsigned HOST_WIDE_INT arm_shift_truncation_mask (machine_mode);
 static bool arm_macro_fusion_p (void);
 static bool arm_cannot_copy_insn_p (rtx_insn *);
 static int arm_issue_rate (void);
+static int arm_first_cycle_multipass_dfa_lookahead (void);
 static void arm_output_dwarf_dtprel (FILE *, int, rtx) ATTRIBUTE_UNUSED;
 static bool arm_output_addr_const_extra (FILE *, rtx);
 static bool arm_allocate_stack_slots_for_args (void);
@@ -624,6 +625,10 @@ static const struct attribute_spec arm_attribute_table[] =
 #undef TARGET_SCHED_ISSUE_RATE
 #define TARGET_SCHED_ISSUE_RATE arm_issue_rate
 
+#undef TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD
+#define TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD \
+  arm_first_cycle_multipass_dfa_lookahead
+
 #undef TARGET_MANGLE_TYPE
 #define TARGET_MANGLE_TYPE arm_mangle_type
 
@@ -27138,6 +27143,16 @@ arm_issue_rate (void)
     }
 }
 
+/* Return how many instructions should scheduler lookahead to choose the
+   best one.  */
+static int
+arm_first_cycle_multipass_dfa_lookahead (void)
+{
+  int issue_rate = arm_issue_rate ();
+
+  return issue_rate > 1 && !sched_fusion ? issue_rate : 0;
+}
+
 const char *
 arm_mangle_type (const_tree type)
 {