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