https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68273
--- Comment #31 from Richard Biener <rguenth at gcc dot gnu.org> ---
eipa_sra introduces the remaining SSA name with non-default alignment via
#0 make_ssa_name_fn (fn=0x7ffff68bb5e8,
var=<parm_decl 0x7ffff69bc700 ISRA.81>, stmt=<gimple_nop 0x7ffff68bcf50>)
at /space/rguenther/src/svn/trunk3/gcc/tree-ssanames.c:311
#1 0x0000000000e203d1 in get_or_create_ssa_default_def (fn=0x7ffff68bb5e8,
var=<parm_decl 0x7ffff69bc700 ISRA.81>)
at /space/rguenther/src/svn/trunk3/gcc/tree-dfa.c:360
#2 0x0000000000e6638e in get_reaching_def (
var=<parm_decl 0x7ffff69bc700 ISRA.81>)
at /space/rguenther/src/svn/trunk3/gcc/tree-into-ssa.c:1168
#3 0x0000000000e67855 in maybe_replace_use (use_p=0x7ffff6a17810)
at /space/rguenther/src/svn/trunk3/gcc/tree-into-ssa.c:1753
#4 0x0000000000e67eb9 in rewrite_update_stmt (
stmt=<gimple_assign 0x7ffff6966f50>, gsi=...)
at /space/rguenther/src/svn/trunk3/gcc/tree-into-ssa.c:1950
#5 0x0000000000e685f4 in rewrite_update_dom_walker::before_dom_children (
this=0x7fffffffd580, bb=<basic_block 0x7ffff6491f08 (2)>)
at /space/rguenther/src/svn/trunk3/gcc/tree-into-ssa.c:2130
#6 0x00000000013e0993 in dom_walker::walk (this=0x7fffffffd580,
bb=<basic_block 0x7ffff6491f08 (2)>)
at /space/rguenther/src/svn/trunk3/gcc/domwalk.c:265
thus SSA rewrite. ISRA.81 is a PARM_DECL built in ipa_modify_formal_parameters
from an access present in the IL created by early SRA.
Index: gcc/tree-sra.c
===================================================================
--- gcc/tree-sra.c (revision 233418)
+++ gcc/tree-sra.c (working copy)
@@ -933,7 +933,7 @@ create_access (tree expr, gimple *stmt,
access = create_access_1 (base, offset, size);
access->expr = expr;
- access->type = TREE_TYPE (expr);
+ access->type = TYPE_MAIN_VARIANT (TREE_TYPE (expr));
access->write = write;
access->grp_unscalarizable_region = unscalarizable_region;
access->stmt = stmt;
@@ -1088,7 +1088,7 @@ scalarize_elem (tree base, HOST_WIDE_INT
{
struct access *access = create_access_1 (base, pos, size);
access->expr = ref;
- access->type = type;
+ access->type = TYPE_MAIN_VARIANT (type);
access->grp_total_scalarization = 1;
access->reverse = reverse;
/* Accesses for intraprocedural SRA can have their stmt NULL. */
@@ -1108,7 +1108,7 @@ create_total_scalarization_access (tree
access = create_access_1 (var, 0, size);
access->expr = var;
- access->type = TREE_TYPE (var);
+ access->type = TYPE_MAIN_VARIANT (TREE_TYPE (var));
access->grp_total_scalarization = 1;
}
fixes the IL checking below and thus hopefully the testcase.
Index: tree-ssa.c
===================================================================
--- tree-ssa.c (revision 233418)
+++ tree-ssa.c (working copy)
@@ -936,6 +936,29 @@ verify_ssa (bool check_modified_stmt, bo
name, stmt, virtual_operand_p (name)))
goto err;
}
+
+ if (TYPE_ALIGN (TREE_TYPE (name))
+ != TYPE_ALIGN (TYPE_MAIN_VARIANT (TREE_TYPE (name))))
+ {
+ error ("type with non-default alignment");
+ goto err;
+ }
+
it would be nice to see this IL checking on trunk and thus results from
testing on affected targets - I'll give it a try in x86_64.