diff options
author | Michael Matz <matz@suse.de> | 2011-08-23 14:38:24 +0000 |
---|---|---|
committer | Michael Matz <matz@gcc.gnu.org> | 2011-08-23 14:38:24 +0000 |
commit | d466b40756ea5ed503f7d5c43bddf9f5cf57b859 (patch) | |
tree | 9806909655076506baa134e3fa62aed610a37357 /gcc | |
parent | bfcbe068860c133c2bc4a48dbc476d4085aa93fd (diff) | |
download | gcc-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/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cfgexpand.c | 27 |
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) |