From 2b32c27d98a24ef789729ded2e0c42108a9ea9e9 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek <jakub@gcc.gnu.org> Date: Fri, 13 Nov 2009 19:38:36 +0100 Subject: [PATCH] re PR middle-end/42029 (ICE with complex data type and openmp for reduction clause) PR middle-end/42029 * gimplify.c (gimplify_omp_atomic): Set DECL_GIMPLE_REG_P on tmp_load if needed. * libgomp.c/pr42029.c: New test. From-SVN: r154161 --- gcc/ChangeLog | 10 ++++++++-- gcc/gimplify.c | 2 ++ libgomp/ChangeLog | 5 +++++ libgomp/testsuite/libgomp.c/pr42029.c | 19 +++++++++++++++++++ 4 files changed, 34 insertions(+), 2 deletions(-) create mode 100644 libgomp/testsuite/libgomp.c/pr42029.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index bb92e10b867c..e5dec6f98a3d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,8 +1,14 @@ +2009-11-13 Jakub Jelinek <jakub@redhat.com> + + PR middle-end/42029 + * gimplify.c (gimplify_omp_atomic): Set DECL_GIMPLE_REG_P on + tmp_load if needed. + 2009-11-13 Uros Bizjak <ubizjak@gmail.com> PR target/41900 - (*call_pop_1, *call_1, *call_value_pop_1, *call_value_1): Use "lsm" - as operand 1 constraint. + * config/i386/i386.md (*call_pop_1, *call_1, *call_value_pop_1, + *call_value_1): Use "lsm" as operand 1 constraint. * config/i386/predicates.md (call_insn_operand): Depend on index_register_operand to avoid %esp register. diff --git a/gcc/gimplify.c b/gcc/gimplify.c index d68aacd04f39..8404e0fd13ae 100644 --- a/gcc/gimplify.c +++ b/gcc/gimplify.c @@ -6231,6 +6231,8 @@ gimplify_omp_atomic (tree *expr_p, gimple_seq *pre_p) tree tmp_load; tmp_load = create_tmp_var (type, NULL); + if (TREE_CODE (type) == COMPLEX_TYPE || TREE_CODE (type) == VECTOR_TYPE) + DECL_GIMPLE_REG_P (tmp_load) = 1; if (goa_stabilize_expr (&rhs, pre_p, addr, tmp_load) < 0) return GS_ERROR; diff --git a/libgomp/ChangeLog b/libgomp/ChangeLog index ba9393ed9608..e36c7e2ca7f7 100644 --- a/libgomp/ChangeLog +++ b/libgomp/ChangeLog @@ -1,3 +1,8 @@ +2009-11-13 Jakub Jelinek <jakub@redhat.com> + + PR middle-end/42029 + * libgomp.c/pr42029.c: New test. + 2009-10-26 Jakub Jelinek <jakub@redhat.com> * acinclude.m4 (LIBGOMP_CHECK_LINKER_FEATURES): Avoid using too many diff --git a/libgomp/testsuite/libgomp.c/pr42029.c b/libgomp/testsuite/libgomp.c/pr42029.c new file mode 100644 index 000000000000..ea7ac2c0986a --- /dev/null +++ b/libgomp/testsuite/libgomp.c/pr42029.c @@ -0,0 +1,19 @@ +/* PR middle-end/42029 */ +/* { dg-do run } */ + +extern void abort (void); + +int +main () +{ + int i; + _Complex int c = 0; + +#pragma omp parallel for private(i) reduction(+:c) + for (i = 0; i < 8; ++i) + c += 1; + + if (c != 8) + abort (); + return 0; +} -- GitLab