aboutsummaryrefslogtreecommitdiff
path: root/gcc/hsa-gen.c
diff options
context:
space:
mode:
authorMartin Jambor <mjambor@suse.cz>2016-05-16 19:49:44 +0200
committerMartin Jambor <jamborm@gcc.gnu.org>2016-05-16 19:49:44 +0200
commit51d9ed489006f5693cb3d1bddaba431a98aa86c6 (patch)
tree5ed5bcd7d4b7df31c135b193a9f9d59d92b00c1b /gcc/hsa-gen.c
parent538374e1396abe947817191a4da34ecc0ad3fb19 (diff)
downloadgcc-51d9ed489006f5693cb3d1bddaba431a98aa86c6.zip
gcc-51d9ed489006f5693cb3d1bddaba431a98aa86c6.tar.gz
gcc-51d9ed489006f5693cb3d1bddaba431a98aa86c6.tar.bz2
[hsa] Increase hsa symbol alignment to natural one
2016-05-16 Martin Jambor <mjambor@suse.cz> * hsa-gen.c (fillup_for_decl): Increase alignment to natural one. (get_symbol_for_decl): Sorry if a global symbol in under-aligned. libgomp/ * testsuite/libgomp.hsa.c/complex-align-2.c: New test. From-SVN: r236295
Diffstat (limited to 'gcc/hsa-gen.c')
-rw-r--r--gcc/hsa-gen.c19
1 files changed, 15 insertions, 4 deletions
diff --git a/gcc/hsa-gen.c b/gcc/hsa-gen.c
index 5baf607..697d599 100644
--- a/gcc/hsa-gen.c
+++ b/gcc/hsa-gen.c
@@ -203,9 +203,13 @@ hsa_symbol::fillup_for_decl (tree decl)
{
m_decl = decl;
m_type = hsa_type_for_tree_type (TREE_TYPE (decl), &m_dim, false);
-
if (hsa_seen_error ())
- m_seen_error = true;
+ {
+ m_seen_error = true;
+ return;
+ }
+
+ m_align = MAX (m_align, hsa_natural_alignment (m_type));
}
/* Constructor of class representing global HSA function/kernel information and
@@ -929,6 +933,14 @@ get_symbol_for_decl (tree decl)
BRIG_LINKAGE_PROGRAM, true,
BRIG_ALLOCATION_PROGRAM, align);
hsa_cfun->m_global_symbols.safe_push (sym);
+ sym->fillup_for_decl (decl);
+ if (sym->m_align > align)
+ {
+ sym->m_seen_error = true;
+ HSA_SORRY_ATV (EXPR_LOCATION (decl),
+ "HSA specification requires that %E is at least "
+ "naturally aligned", decl);
+ }
}
else
{
@@ -944,12 +956,11 @@ get_symbol_for_decl (tree decl)
sym = new hsa_symbol (BRIG_TYPE_NONE, BRIG_SEGMENT_PRIVATE,
BRIG_LINKAGE_FUNCTION);
sym->m_align = align;
+ sym->fillup_for_decl (decl);
hsa_cfun->m_private_variables.safe_push (sym);
}
- sym->fillup_for_decl (decl);
sym->m_name = hsa_get_declaration_name (decl);
-
*slot = sym;
return sym;
}