diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2023-11-20 15:26:38 +0100 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2023-11-21 11:42:50 +0100 |
commit | 41aacdea55c5d795a7aa195357d966645845d00e (patch) | |
tree | 8b1aa27013faae6e5ff836873fa5a667ea874e1c | |
parent | 4649c079409ec6cb67cd2cca0df81877e53c78b4 (diff) | |
download | gcc-41aacdea55c5d795a7aa195357d966645845d00e.zip gcc-41aacdea55c5d795a7aa195357d966645845d00e.tar.gz gcc-41aacdea55c5d795a7aa195357d966645845d00e.tar.bz2 |
gcov: Fix integer types in gen_counter_update()
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.
-rw-r--r-- | gcc/tree-profile.cc | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/gcc/tree-profile.cc b/gcc/tree-profile.cc index f12b374..1ac0fdb 100644 --- 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_temp_ssa_name (TREE_TYPE (result), NULL, name); + gassign *assign = gimple_build_assign (tmp2, NOP_EXPR, tmp1); + gsi_insert_after (gsi, assign, GSI_NEW_STMT); + assign = gimple_build_assign (result, tmp2); 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); } |