From: Jakub Jelinek Date: Mon, 13 Jan 2014 07:56:40 +0000 (+0100) Subject: re PR libgomp/59194 (tsan detects race for real variables in an OMP reduction clause) X-Git-Tag: releases/gcc-4.9.0~1692 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=8175be9a8330acffdff270d5cad85b0d637e8f49;p=thirdparty%2Fgcc.git re PR libgomp/59194 (tsan detects race for real variables in an OMP reduction clause) PR libgomp/59194 * omp-low.c (expand_omp_atomic_pipeline): Expand the initial load as __atomic_load_N if possible. From-SVN: r206572 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 5a1f66a19843..5c1769b3f9f2 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2014-01-13 Jakub Jelinek + + PR libgomp/59194 + * omp-low.c (expand_omp_atomic_pipeline): Expand the initial + load as __atomic_load_N if possible. + 2014-01-11 David Edelsohn * config/rs6000/rs6000.c (rs6000_expand_mtfsf_builtin): Remove diff --git a/gcc/omp-low.c b/gcc/omp-low.c index 05513ee5b9bd..5a09b33b2d3d 100644 --- a/gcc/omp-low.c +++ b/gcc/omp-low.c @@ -7536,12 +7536,21 @@ expand_omp_atomic_pipeline (basic_block load_bb, basic_block store_bb, loadedi = loaded_val; } + fncode = (enum built_in_function) (BUILT_IN_ATOMIC_LOAD_N + index + 1); + tree loaddecl = builtin_decl_explicit (fncode); + if (loaddecl) + initial + = fold_convert (TREE_TYPE (TREE_TYPE (iaddr)), + build_call_expr (loaddecl, 2, iaddr, + build_int_cst (NULL_TREE, + MEMMODEL_RELAXED))); + else + initial = build2 (MEM_REF, TREE_TYPE (TREE_TYPE (iaddr)), iaddr, + build_int_cst (TREE_TYPE (iaddr), 0)); + initial - = force_gimple_operand_gsi (&si, - build2 (MEM_REF, TREE_TYPE (TREE_TYPE (iaddr)), - iaddr, - build_int_cst (TREE_TYPE (iaddr), 0)), - true, NULL_TREE, true, GSI_SAME_STMT); + = force_gimple_operand_gsi (&si, initial, true, NULL_TREE, true, + GSI_SAME_STMT); /* Move the value to the LOADEDI temporary. */ if (gimple_in_ssa_p (cfun))