From 8175be9a8330acffdff270d5cad85b0d637e8f49 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Mon, 13 Jan 2014 08:56:40 +0100 Subject: [PATCH] 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 --- gcc/ChangeLog | 6 ++++++ gcc/omp-low.c | 19 ++++++++++++++----- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 5a1f66a1984..5c1769b3f9f 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 05513ee5b9b..5a09b33b2d3 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)) -- 2.30.2