summaryrefslogtreecommitdiff
path: root/gcc/tree-ssa-copy.c
diff options
context:
space:
mode:
authordnovillo <dnovillo@138bc75d-0d04-0410-961f-82ee72b054a4>2005-01-18 03:54:38 +0000
committerdnovillo <dnovillo@138bc75d-0d04-0410-961f-82ee72b054a4>2005-01-18 03:54:38 +0000
commit97d6b11869fc65a21d62bb925277e4202649a953 (patch)
tree0905041f83c7d584e9670c50b9a13715c323e6d7 /gcc/tree-ssa-copy.c
parentadf432af74e475221bd9f6e50aeb10a25d154c40 (diff)
downloadgcc-97d6b11869fc65a21d62bb925277e4202649a953.tar.gz
PR tree-optimization/19121
* tree-ssa-alias.c (compute_flow_sensitive_aliasing): When adding aliases to a name tag, also add them to the pointer's type tag. * tree-ssa-copy.c (merge_alias_info): Do not merge flow sensitive alias info at all. Only check that the two pointers have compatible pointed-to sets. * tree-ssa.c (verify_name_tags): Verify that the alias set of a pointer's type tag is a superset of the alias set of the pointer's name tag. testsuite/ChangeLog: PR tree-optimization/19121 * gcc.c-torture/compile/pr19121.c: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@93810 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/tree-ssa-copy.c')
-rw-r--r--gcc/tree-ssa-copy.c57
1 files changed, 23 insertions, 34 deletions
diff --git a/gcc/tree-ssa-copy.c b/gcc/tree-ssa-copy.c
index 8a03c2435d1..c679eb221be 100644
--- a/gcc/tree-ssa-copy.c
+++ b/gcc/tree-ssa-copy.c
@@ -178,10 +178,10 @@ merge_alias_info (tree orig, tree new)
tree orig_sym = SSA_NAME_VAR (orig);
var_ann_t new_ann = var_ann (new_sym);
var_ann_t orig_ann = var_ann (orig_sym);
- struct ptr_info_def *orig_ptr_info;
gcc_assert (POINTER_TYPE_P (TREE_TYPE (orig)));
gcc_assert (POINTER_TYPE_P (TREE_TYPE (new)));
+
#if defined ENABLE_CHECKING
gcc_assert (lang_hooks.types_compatible_p (TREE_TYPE (orig),
TREE_TYPE (new)));
@@ -202,41 +202,30 @@ merge_alias_info (tree orig, tree new)
else
gcc_assert (new_ann->type_mem_tag == orig_ann->type_mem_tag);
- orig_ptr_info = SSA_NAME_PTR_INFO (orig);
- if (orig_ptr_info && orig_ptr_info->name_mem_tag)
- {
- struct ptr_info_def *new_ptr_info = get_ptr_info (new);
-
- if (new_ptr_info->name_mem_tag == NULL_TREE)
- {
- /* If ORIG had a name tag, it means that was dereferenced in
- the code, and since pointer NEW will now replace every
- occurrence of ORIG, we have to make sure that NEW has an
- appropriate tag. If, NEW did not have a name tag, get it
- from ORIG. */
- memcpy (new_ptr_info, orig_ptr_info, sizeof (*new_ptr_info));
- new_ptr_info->pt_vars = BITMAP_GGC_ALLOC ();
- bitmap_copy (new_ptr_info->pt_vars, orig_ptr_info->pt_vars);
- new_ptr_info->name_mem_tag = orig_ptr_info->name_mem_tag;
- }
- else
- {
- /* If NEW already had a name tag, nothing needs to be done.
- Note that pointer NEW may actually have a different set of
- pointed-to variables.
-
- However, since NEW is being copy-propagated into ORIG, it must
- always be true that the pointed-to set for pointer NEW is the
- same, or a subset, of the pointed-to set for pointer ORIG. If
- this isn't the case, we shouldn't have been able to do the
- propagation of NEW into ORIG. */
#if defined ENABLE_CHECKING
- if (orig_ptr_info->pt_vars && new_ptr_info->pt_vars)
- gcc_assert (bitmap_intersect_p (new_ptr_info->pt_vars,
- orig_ptr_info->pt_vars));
-#endif
- }
+ {
+ struct ptr_info_def *orig_ptr_info = SSA_NAME_PTR_INFO (orig);
+ struct ptr_info_def *new_ptr_info = SSA_NAME_PTR_INFO (new);
+
+ if (orig_ptr_info
+ && new_ptr_info
+ && orig_ptr_info->name_mem_tag
+ && new_ptr_info->name_mem_tag
+ && orig_ptr_info->pt_vars
+ && new_ptr_info->pt_vars)
+ {
+ /* Note that pointer NEW may actually have a different set of
+ pointed-to variables. However, since NEW is being
+ copy-propagated into ORIG, it must always be true that the
+ pointed-to set for pointer NEW is the same, or a subset, of
+ the pointed-to set for pointer ORIG. If this isn't the case,
+ we shouldn't have been able to do the propagation of NEW into
+ ORIG. */
+ gcc_assert (bitmap_intersect_p (new_ptr_info->pt_vars,
+ orig_ptr_info->pt_vars));
}
+ }
+#endif
}