From 02108bb58c6905cc74eb4833067f39f92f5c9a6e Mon Sep 17 00:00:00 2001 From: Martin Jambor Date: Fri, 26 Feb 2016 18:39:11 +0100 Subject: [PATCH] [hsa] Fail in presence of atomic operations in private segment 2016-02-26 Martin Jambor * hsa-gen.c (gen_hsa_ternary_atomic_for_builtin): Fail in presence of atomic operations in private segment. From-SVN: r233748 --- gcc/ChangeLog | 5 +++++ gcc/hsa-gen.c | 9 +++++++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 7ce5fdcc2954..de2189a84078 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2016-02-26 Martin Jambor + + * hsa-gen.c (gen_hsa_ternary_atomic_for_builtin): Fail in presence of + atomic operations in private segment. + 2016-02-26 Martin Jambor * omp-low.c (grid_find_ungridifiable_statement): Store problematic diff --git a/gcc/hsa-gen.c b/gcc/hsa-gen.c index 8e2144c339a3..7a7ec41ab801 100644 --- a/gcc/hsa-gen.c +++ b/gcc/hsa-gen.c @@ -4557,8 +4557,13 @@ gen_hsa_ternary_atomic_for_builtin (bool ret_orig, hsa_op_address *addr; addr = get_address_from_value (gimple_call_arg (stmt, 0), hbb); - /* TODO: Warn if addr has private segment, because the finalizer will not - accept that (and it does not make much sense). */ + if (addr->m_symbol && addr->m_symbol->m_segment == BRIG_SEGMENT_PRIVATE) + { + HSA_SORRY_AT (gimple_location (stmt), + "HSA does not implement atomic operations in private " + "segment"); + return; + } hsa_op_base *op = hsa_reg_or_immed_for_gimple_op (gimple_call_arg (stmt, 1), hbb);