On 21/10/14 04:31, Maxim Kuvyrkov wrote:
> Hi Ramana,
> Hi Marcus,
> 
> This patch enables max_issue multipass lookahead scheduling for 2nd scheduler 
> pass (or, more pedantically, whenever register-pressure scheduling is not in 
> use).
> 
> Multipass lookahead scheduling is being enabled for cores that can issue 2 or 
> more instructions per cycle, and it allows scheduler to better exploit 
> multi-issue pipelines.  This patch also provides foundation for [upcoming] 
> auto-prefetcher model in the scheduler, which is handled via max_issue.
> 
> This change requires benchmarking, which I can't easily do at the moment.  I 
> would appreciate any benchmarking results that you can share.
> 
> Bootstrap on aarch64-linux-gnu is in progress.  OK to apply, provided no 
> performance or correctness regressions?
> 
> Thank you,
> 

OK.

R.

> --
> Maxim Kuvyrkov
> www.linaro.org
> 
> 
> 0005-Enable-max_issue-for-AArch32-and-AArch64.patch
> 
> 
> From bf51463edee1d161ff8e03cf0af0c3ff8b258305 Mon Sep 17 00:00:00 2001
> From: Maxim Kuvyrkov <maxim.kuvyr...@linaro.org>
> Date: Sat, 29 Mar 2014 07:12:52 +1300
> Subject: [PATCH 5/8] 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.
> 
> ---
>  gcc/config/aarch64/aarch64.c |   12 ++++++++++++
>  gcc/config/arm/arm.c         |   15 +++++++++++++++
>  2 files changed, 27 insertions(+)
> 
> diff --git a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c
> index 2ad5c28..1512418 100644
> --- a/gcc/config/aarch64/aarch64.c
> +++ b/gcc/config/aarch64/aarch64.c
> @@ -6077,6 +6077,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 ? issue_rate : 0;
> +}
> +
>  /* Vectorizer cost model target hooks.  */
>  
>  /* Implement targetm.vectorize.builtin_vectorization_cost.  */
> @@ -10136,6 +10144,10 @@ aarch64_asan_shadow_offset (void)
>  #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
>  
> diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c
> index 1ee0eb3..0f15c99 100644
> --- a/gcc/config/arm/arm.c
> +++ b/gcc/config/arm/arm.c
> @@ -246,6 +246,7 @@ static void arm_option_override (void);
>  static unsigned HOST_WIDE_INT arm_shift_truncation_mask (enum machine_mode);
>  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);
> @@ -591,6 +592,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
>  
> @@ -29888,6 +29893,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 ? issue_rate : 0;
> +}
> +
>  /* A table and a function to perform ARM-specific name mangling for
>     NEON vector types in order to conform to the AAPCS (see "Procedure
>     Call Standard for the ARM Architecture", Appendix A).  To qualify
> 


Reply via email to