aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorMichael Matz <matz@suse.de>2011-08-23 14:38:24 +0000
committerMichael Matz <matz@gcc.gnu.org>2011-08-23 14:38:24 +0000
commitd466b40756ea5ed503f7d5c43bddf9f5cf57b859 (patch)
tree9806909655076506baa134e3fa62aed610a37357 /gcc
parentbfcbe068860c133c2bc4a48dbc476d4085aa93fd (diff)
downloadgcc-d466b40756ea5ed503f7d5c43bddf9f5cf57b859.zip
gcc-d466b40756ea5ed503f7d5c43bddf9f5cf57b859.tar.gz
gcc-d466b40756ea5ed503f7d5c43bddf9f5cf57b859.tar.bz2
cfgexpand.c (expand_one_register_var): Use get_pointer_alignment.
* cfgexpand.c (expand_one_register_var): Use get_pointer_alignment. (gimple_expand_cfg): Merge alignment info for coalesced pointer SSA names. From-SVN: r177989
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/cfgexpand.c27
2 files changed, 32 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 5ab9d0c..3bb9318 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2011-08-12 Michael Matz <matz@suse.de>
+
+ * cfgexpand.c (expand_one_register_var): Use get_pointer_alignment.
+ (gimple_expand_cfg): Merge alignment info for coalesced pointer
+ SSA names.
+
2011-08-23 Richard Guenther <rguenther@suse.de>
* Makefile.in (tree-data-ref.o): Add tree-affine.h dependency.
diff --git a/gcc/cfgexpand.c b/gcc/cfgexpand.c
index f87308c..03a4409 100644
--- a/gcc/cfgexpand.c
+++ b/gcc/cfgexpand.c
@@ -909,7 +909,7 @@ expand_one_register_var (tree var)
mark_user_reg (x);
if (POINTER_TYPE_P (type))
- mark_reg_pointer (x, TYPE_ALIGN (TREE_TYPE (type)));
+ mark_reg_pointer (x, get_pointer_alignment (var));
}
/* A subroutine of expand_one_var. Called to assign rtl to a VAR_DECL that
@@ -4265,6 +4265,31 @@ gimple_expand_cfg (void)
}
}
+ /* If we have a class containing differently aligned pointers
+ we need to merge those into the corresponding RTL pointer
+ alignment. */
+ for (i = 1; i < num_ssa_names; i++)
+ {
+ tree name = ssa_name (i);
+ int part;
+ rtx r;
+
+ if (!name
+ || !POINTER_TYPE_P (TREE_TYPE (name))
+ /* We might have generated new SSA names in
+ update_alias_info_with_stack_vars. They will have a NULL
+ defining statements, and won't be part of the partitioning,
+ so ignore those. */
+ || !SSA_NAME_DEF_STMT (name))
+ continue;
+ part = var_to_partition (SA.map, name);
+ if (part == NO_PARTITION)
+ continue;
+ r = SA.partition_to_pseudo[part];
+ if (REG_P (r))
+ mark_reg_pointer (r, get_pointer_alignment (name));
+ }
+
/* If this function is `main', emit a call to `__main'
to run global initializers, etc. */
if (DECL_NAME (current_function_decl)