On Tue, 19 Sep 2023, Tamar Christina wrote:

> Hi All,
> 
> As requested later on, this replaces the C++ sort with vec::qsort.
> 
> Bootstrapped Regtested on aarch64-none-linux-gnu and no issues.
> 
> Ok for master?

OK.

> Thanks,
> Tamar
> 
> gcc/ChangeLog:
> 
>       PR tree-optimization/109154
>       * tree-if-conv.cc (INCLUDE_ALGORITHM): Remove.
>       (cmp_arg_entry): New.
>       (predicate_scalar_phi): Use it.
> 
> --- inline copy of patch -- 
> diff --git a/gcc/tree-if-conv.cc b/gcc/tree-if-conv.cc
> index 
> 799f071965e5c41eb352b5530cf1d9c7ecf7bf25..0d7ac82986f399f1c5ff91c04ddb524813ab27de
>  100644
> --- a/gcc/tree-if-conv.cc
> +++ b/gcc/tree-if-conv.cc
> @@ -80,7 +80,6 @@ along with GCC; see the file COPYING3.  If not see
>       <L18>:;
>  */
>  
> -#define INCLUDE_ALGORITHM
>  #include "config.h"
>  #include "system.h"
>  #include "coretypes.h"
> @@ -2045,6 +2044,28 @@ gen_phi_nest_statement (gphi *phi, 
> gimple_stmt_iterator *gsi,
>    return lhs;
>  }
>  
> +typedef std::pair <tree, std::pair <unsigned, unsigned>> ArgEntry;
> +static int
> +cmp_arg_entry (const void *p1, const void *p2)
> +{
> +  const ArgEntry sval1 = *(const ArgEntry *)p1;
> +  const ArgEntry sval2 = *(const ArgEntry *)p2;
> +  auto x1 = sval1.second;
> +  auto x2 = sval2.second;
> +
> +  if (x1.first < x2.first)
> +    return -1;
> +  else if (x1.first > x2.first)
> +    return 1;
> +
> +  if (x1.second < x2.second)
> +    return -1;
> +  else if (x1.second > x2.second)
> +    return 1;
> +
> +  return 0;
> +}
> +
>  /* Replace a scalar PHI node with a COND_EXPR using COND as condition.
>     This routine can handle PHI nodes with more than two arguments.
>  
> @@ -2186,7 +2207,6 @@ predicate_scalar_phi (gphi *phi, gimple_stmt_iterator 
> *gsi)
>    /* Determine element with max number of occurrences and complexity.  
> Looking at only
>       number of occurrences as a measure for complexity isn't enough as all 
> usages can
>       be unique but the comparisons to reach the PHI node differ per branch.  
> */
> -  typedef std::pair <tree, std::pair <unsigned, unsigned>> ArgEntry;
>    auto_vec<ArgEntry> argsKV;
>    for (i = 0; i < args.length (); i++)
>      {
> @@ -2204,10 +2224,7 @@ predicate_scalar_phi (gphi *phi, gimple_stmt_iterator 
> *gsi)
>      }
>  
>    /* Sort elements based on rankings ARGS.  */
> -  std::sort(argsKV.begin(), argsKV.end(), [](const ArgEntry &left,
> -                                          const ArgEntry &right) {
> -    return left.second < right.second;
> -  });
> +  argsKV.qsort (cmp_arg_entry);
>  
>    for (i = 0; i < args.length (); i++)
>      args[i] = argsKV[i].first;
> 
> 
> 
> 
> 

-- 
Richard Biener <rguent...@suse.de>
SUSE Software Solutions Germany GmbH,
Frankenstrasse 146, 90461 Nuernberg, Germany;
GF: Ivo Totev, Andrew McDonald, Werner Knoblich; (HRB 36809, AG Nuernberg)

Reply via email to