This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH 2/3] if-convert even when the data dependences cannot be computed.


On Wed, 3 Nov 2010, Sebastian Pop wrote:

> 2010-10-20  Sebastian Pop  <sebastian.pop@amd.com>
> 
> 	* tree-if-conv.c (if_convertible_loop_p_1): Do not call
> 	compute_data_dependences_for_loop.
> 	(if_convertible_loop_p): Do not free refs and ddrs.

This is ok.  Btw, there are some pending bugs in if-conversion,
one which ICEs on SPEC 2k6 tonto with LTO.  It would be nice
if you can address them.

Thanks,
Richard.

> ---
>  gcc/ChangeLog      |    6 ++++++
>  gcc/tree-if-conv.c |   24 +++---------------------
>  2 files changed, 9 insertions(+), 21 deletions(-)
> 
> diff --git a/gcc/ChangeLog b/gcc/ChangeLog
> index 0f58882..3ceb7b6 100644
> --- a/gcc/ChangeLog
> +++ b/gcc/ChangeLog
> @@ -1,5 +1,11 @@
>  2010-10-20  Sebastian Pop  <sebastian.pop@amd.com>
>  
> +	* tree-if-conv.c (if_convertible_loop_p_1): Do not call
> +	compute_data_dependences_for_loop.
> +	(if_convertible_loop_p): Do not free refs and ddrs.
> +
> +2010-10-20  Sebastian Pop  <sebastian.pop@amd.com>
> +
>  	PR tree-optimization/46029
>  	* doc/invoke.texi (-ftree-loop-if-convert-stores): Update description.
>  	* tree-if-conv.c (has_unaligned_memory_refs): New.
> diff --git a/gcc/tree-if-conv.c b/gcc/tree-if-conv.c
> index 9fc6190..5b941af 100644
> --- a/gcc/tree-if-conv.c
> +++ b/gcc/tree-if-conv.c
> @@ -855,24 +855,15 @@ predicate_bbs (loop_p loop)
>  }
>  
>  /* Return true when LOOP is if-convertible.  This is a helper function
> -   for if_convertible_loop_p.  REFS and DDRS are initialized and freed
> -   in if_convertible_loop_p.  */
> +   for if_convertible_loop_p.  */
>  
>  static bool
> -if_convertible_loop_p_1 (struct loop *loop,
> -			 VEC (data_reference_p, heap) **refs,
> -			 VEC (ddr_p, heap) **ddrs)
> +if_convertible_loop_p_1 (struct loop *loop)
>  {
>    bool res;
>    unsigned int i;
>    basic_block exit_bb = NULL;
>  
> -  /* Don't if-convert the loop when the data dependences cannot be
> -     computed: the loop won't be vectorized in that case.  */
> -  res = compute_data_dependences_for_loop (loop, true, refs, ddrs);
> -  if (!res)
> -    return false;
> -
>    calculate_dominance_info (CDI_DOMINATORS);
>  
>    /* Allow statements that can be handled during if-conversion.  */
> @@ -934,9 +925,6 @@ if_convertible_loop_p (struct loop *loop)
>  {
>    edge e;
>    edge_iterator ei;
> -  bool res = false;
> -  VEC (data_reference_p, heap) *refs;
> -  VEC (ddr_p, heap) *ddrs;
>  
>    /* Handle only innermost loop.  */
>    if (!loop || loop->inner)
> @@ -968,13 +956,7 @@ if_convertible_loop_p (struct loop *loop)
>      if (loop_exit_edge_p (loop, e))
>        return false;
>  
> -  refs = VEC_alloc (data_reference_p, heap, 5);
> -  ddrs = VEC_alloc (ddr_p, heap, 25);
> -  res = if_convertible_loop_p_1 (loop, &refs, &ddrs);
> -
> -  free_data_refs (refs);
> -  free_dependence_relations (ddrs);
> -  return res;
> +  return if_convertible_loop_p_1 (loop);
>  }
>  
>  /* Basic block BB has two predecessors.  Using predecessor's bb
> 

-- 
Richard Guenther <rguenther@suse.de>
Novell / SUSE Labs
SUSE LINUX Products GmbH - Nuernberg - AG Nuernberg - HRB 16746 - GF: Markus Rex


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]