On 20.11.23 15:56, Jakub Jelinek wrote:
On Mon, Nov 20, 2023 at 03:33:31PM +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.
---
gcc/tree-profile.cc | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/gcc/tree-profile.cc b/gcc/tree-profile.cc
index 68db09f6189..54938e1d165 100644
--- a/gcc/tree-profile.cc
+++ b/gcc/tree-profile.cc
@@ -284,7 +284,9 @@ gen_assign_counter_update (gimple_stmt_iterator *gsi, gcall
*call, tree func,
tree tmp = make_temp_ssa_name (result_type, NULL, name);
gimple_set_lhs (call, tmp);
gsi_insert_after (gsi, call, GSI_NEW_STMT);
- gassign *assign = gimple_build_assign (result, tmp);
+ gassign *assign = gimple_build_assign (result,
+ build_int_cst (TREE_TYPE (result),
+ tmp));
This can't be correct.
tmp is a SSA_NAME, so calling build_int_cst on it is not appropriate, the
second argument should be some unsigned HOST_WIDE_INT value.
If result_type is different type from TREE_TYPE (result), but both are
integer types, then you want
gassign *assing = gimple_build_assign (result, NOP_EXPR, tmp);
or so.
I really don't know what I am doing here, so a lot of guess work is
involved from my side. The change fixed at least the failing test case.
When I use the NOP_EXPR
static inline void
gen_assign_counter_update (gimple_stmt_iterator *gsi, gcall *call, tree
func,
tree result, const char *name)
{
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);
gsi_insert_after (gsi, call, GSI_NEW_STMT);
gassign *assign = gimple_build_assign (result, NOP_EXPR, tmp);
gsi_insert_after (gsi, assign, GSI_NEW_STMT);
}
else
gsi_insert_after (gsi, call, GSI_NEW_STMT);
}
I get
gcc -O2 -fopenmp -fprofile-generate
./gcc/testsuite/gcc.dg/gomp/pr27573.c -S -o -
.file "pr27573.c"
./gcc/testsuite/gcc.dg/gomp/pr27573.c: In function ‘main._omp_fn.0’:
./gcc/testsuite/gcc.dg/gomp/pr27573.c:19:1: error: non-register as LHS
of unary operation
19 | }
| ^
# .MEM_19 = VDEF <.MEM_18>
__gcov7.main._omp_fn.0[0] = (long int) PROF_time_profile_12;
during IPA pass: profile
./gcc/testsuite/gcc.dg/gomp/pr27573.c:19:1: internal compiler error:
verify_gimple failed
--
embedded brains GmbH
Herr Sebastian HUBER
Dornierstr. 4
82178 Puchheim
Germany
email: sebastian.hu...@embedded-brains.de
phone: +49-89-18 94 741 - 16
fax: +49-89-18 94 741 - 08
Registergericht: Amtsgericht München
Registernummer: HRB 157899
Vertretungsberechtigte Geschäftsführer: Peter Rasmussen, Thomas Dörfler
Unsere Datenschutzerklärung finden Sie hier:
https://embedded-brains.de/datenschutzerklaerung/