[hsa] Fail in presence of atomic operations in private segment
authorjamborm <jamborm@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 26 Feb 2016 17:39:11 +0000 (17:39 +0000)
committerjamborm <jamborm@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 26 Feb 2016 17:39:11 +0000 (17:39 +0000)
2016-02-26  Martin Jambor  <mjambor@suse.cz>

* hsa-gen.c (gen_hsa_ternary_atomic_for_builtin): Fail in presence of
atomic operations in private segment.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@233748 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/hsa-gen.c

index 7ce5fdc..de2189a 100644 (file)
@@ -1,5 +1,10 @@
 2016-02-26  Martin Jambor  <mjambor@suse.cz>
 
+       * hsa-gen.c (gen_hsa_ternary_atomic_for_builtin): Fail in presence of
+       atomic operations in private segment.
+
+2016-02-26  Martin Jambor  <mjambor@suse.cz>
+
        * omp-low.c (grid_find_ungridifiable_statement): Store problematic
        statements to wi->info.  Also disallow omp simd constructs.
        (grid_target_follows_gridifiable_pattern): Use wi.info to dump reason
index 8e2144c..7a7ec41 100644 (file)
@@ -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);