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 <[email protected]>
SUSE Software Solutions Germany GmbH,
Frankenstrasse 146, 90461 Nuernberg, Germany;
GF: Ivo Totev, Andrew McDonald, Werner Knoblich; (HRB 36809, AG Nuernberg)