On Wed, Oct 21, 2020 at 07:30:46PM +0200, Rainer Orth wrote:
> this broke sparc-sun-solaris2.11 bootstrap
> 
> /vol/gcc/src/hg/master/local/gcc/tree-ssa-phiopt.c: In function 'bool 
> cond_removal_in_popcount_clz_ctz_pattern(basic_block, basic_block, edge, 
> edge, gimple*, tree, tree)':
> /vol/gcc/src/hg/master/local/gcc/tree-ssa-phiopt.c:1858:27: error: variable 
> 'mode' set but not used [-Werror=unused-but-set-variable]
>  1858 |           scalar_int_mode mode = SCALAR_INT_TYPE_MODE (TREE_TYPE 
> (arg));
>       |                           ^~~~
> 
> 
> and doubtlessly several other targets that use the defaults.h definition of
> 
> #define CTZ_DEFINED_VALUE_AT_ZERO(MODE, VALUE)  0

Ugh, seems many of those macros do not evaluate the first argument.
This got broken by the change to direct_internal_fn_supported_p, previously
it used mode also in the optab test.

Anyway, I think this should fix it, I'll bootstrap/regtest it tonight:

2020-10-21  Jakub Jelinek  <ja...@redhat.com>

        * tree-ssa-phiopt.c (cond_removal_in_popcount_clz_ctz_pattern):
        For CLZ and CTZ tests, use type temporary instead of mode.

--- gcc/tree-ssa-phiopt.c.jj    2020-10-21 19:33:12.358042645 +0200
+++ gcc/tree-ssa-phiopt.c       2020-10-21 19:35:18.113213095 +0200
@@ -1842,10 +1842,10 @@ cond_removal_in_popcount_clz_ctz_pattern
     CASE_CFN_CLZ:
       if (INTEGRAL_TYPE_P (TREE_TYPE (arg)))
        {
-         scalar_int_mode mode = SCALAR_INT_TYPE_MODE (TREE_TYPE (arg));
-         if (direct_internal_fn_supported_p (IFN_CLZ, TREE_TYPE (arg),
-                                             OPTIMIZE_FOR_BOTH)
-             && CLZ_DEFINED_VALUE_AT_ZERO (mode, val) == 2)
+         tree type = TREE_TYPE (arg);
+         if (direct_internal_fn_supported_p (IFN_CLZ, type, OPTIMIZE_FOR_BOTH)
+             && CLZ_DEFINED_VALUE_AT_ZERO (SCALAR_INT_TYPE_MODE (type),
+                                           val) == 2)
            {
              ifn = IFN_CLZ;
              break;
@@ -1855,10 +1855,10 @@ cond_removal_in_popcount_clz_ctz_pattern
     CASE_CFN_CTZ:
       if (INTEGRAL_TYPE_P (TREE_TYPE (arg)))
        {
-         scalar_int_mode mode = SCALAR_INT_TYPE_MODE (TREE_TYPE (arg));
-         if (direct_internal_fn_supported_p (IFN_CTZ, TREE_TYPE (arg),
-                                             OPTIMIZE_FOR_BOTH)
-             && CTZ_DEFINED_VALUE_AT_ZERO (mode, val) == 2)
+         tree type = TREE_TYPE (arg);
+         if (direct_internal_fn_supported_p (IFN_CTZ, type, OPTIMIZE_FOR_BOTH)
+             && CTZ_DEFINED_VALUE_AT_ZERO (SCALAR_INT_TYPE_MODE (type),
+                                           val) == 2)
            {
              ifn = IFN_CTZ;
              break;


        Jakub

Reply via email to