On Tue, Nov 21, 2023 at 11:29:58AM +0100, Sebastian Huber wrote:
> This change fixes issues like this:
> 
>   gcc.dg/gomp/pr27573.c: In function ‘main._omp_fn.0’:
>   gcc.dg/gomp/pr27573.c:19:1: error: non-trivial conversion in ‘ssa_name’
>      19 | }
>         | ^
>   long int
>   long unsigned int
>   # .MEM_19 = VDEF <.MEM_18>
>   __gcov7.main._omp_fn.0[0] = PROF_time_profile_12;
>   during IPA pass: profile
>   gcc.dg/gomp/pr27573.c:19:1: internal compiler error: verify_gimple failed
> 
> gcc/ChangeLog:
> 
>       PR middle-end/112634
> 
>       * tree-profile.cc (gen_assign_counter_update): Cast the unsigned result 
> type of
>       __atomic_add_fetch() to the signed counter type.
>       (gen_counter_update): Fix formatting.

> --- a/gcc/tree-profile.cc
> +++ b/gcc/tree-profile.cc
> @@ -281,10 +281,13 @@ gen_assign_counter_update (gimple_stmt_iterator *gsi, 
> gcall *call, tree func,
>    if (result)
>      {
>        tree result_type = TREE_TYPE (TREE_TYPE (func));
> -      tree tmp = make_temp_ssa_name (result_type, NULL, name);
> -      gimple_set_lhs (call, tmp);
> +      tree tmp1 = make_temp_ssa_name (result_type, NULL, name);
> +      gimple_set_lhs (call, tmp1);
>        gsi_insert_after (gsi, call, GSI_NEW_STMT);
> -      gassign *assign = gimple_build_assign (result, tmp);
> +      tree tmp2 = make_ssa_name (TREE_TYPE (result));
> +      gassign *assign = gimple_build_assign (tmp2, NOP_EXPR, tmp1);
> +      gsi_insert_after (gsi, assign, GSI_NEW_STMT);
> +      assign = gimple_build_assign (result, gimple_assign_lhs (assign));

When you use a temporary tmp2 for the lhs of the conversion, you can just
use it here,
      assign = gimple_build_assign (result, tmp2);

Ok for trunk with that change.

>        gsi_insert_after (gsi, assign, GSI_NEW_STMT);
>      }
>    else
> @@ -309,8 +312,8 @@ gen_counter_update (gimple_stmt_iterator *gsi, tree 
> counter, tree result,
>      {
>        /* __atomic_fetch_add (&counter, 1, MEMMODEL_RELAXED); */
>        tree f = builtin_decl_explicit (TYPE_PRECISION (type) > 32
> -                                   ? BUILT_IN_ATOMIC_ADD_FETCH_8:
> -                                   BUILT_IN_ATOMIC_ADD_FETCH_4);
> +                                   ? BUILT_IN_ATOMIC_ADD_FETCH_8
> +                                   : BUILT_IN_ATOMIC_ADD_FETCH_4);
>        gcall *call = gimple_build_call (f, 3, addr, one, relaxed);
>        gen_assign_counter_update (gsi, call, f, result, name);
>      }

        Jakub

Reply via email to