From 0b3f639dba8d8de709f155e4281e709ddb3b0070 Mon Sep 17 00:00:00 2001 From: dberlin Date: Wed, 15 Feb 2006 22:09:45 +0000 Subject: 2006-02-15 Daniel Berlin * tree.c (init_ttree): Add STRUCT_FIELD_TAG handling. (tree_code_size): Ditto. * tree.h (struct tree_memory_tag): Remove parent_var. (struct tree_struct_field_tag): New. (SFT_OFFSET): New. (SFT_SIZE): New. (union tree_node): Add sft member. * tree-ssa-alias.c (get_tmt_for): Don't handle TYPE_READONLY specially here. (create_sft): Add size and offset argument, set SFT_OFFSET and SFT_SIZE. (create_overlap_variables_for): Update for SFT_OFFSET/SFT_SIZE. * treestruct.def: Add TS_STRUCT_FIELD_TAG. * tree-flow-inline.h (get_subvar_at): Update for SFT_OFFSET/SFT_SIZE. (var_can_have_subvars): Ditto. (overlap_subvar): Ditto. * print-tree.c (print_node): Print out interesting things for SFT's. * tree-flow.h (struct subvar): Remove offset and size members. * tree-ssa-operands.c (get_expr_operands): Update for get_indirect_ref_operands changes. (get_indirect_ref_operands): Call add_virtual_operand instead of add_stmt_operand. Only recurse on base var if requested. (access_can_touch_variable): New function. (add_stmt_operand): Split virtual operand handling into ... (add_virtual_operand): Here. Add offset, size, and for_clobber arguments. Prune alias sets. (add_call_clobber_ops): Call add_virtual_operand. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@111120 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/tree-flow-inline.h | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) (limited to 'gcc/tree-flow-inline.h') diff --git a/gcc/tree-flow-inline.h b/gcc/tree-flow-inline.h index 1abf556fccf..6a37b863c4c 100644 --- a/gcc/tree-flow-inline.h +++ b/gcc/tree-flow-inline.h @@ -1450,7 +1450,7 @@ get_subvar_at (tree var, unsigned HOST_WIDE_INT offset) subvar_t sv; for (sv = get_subvars_for_var (var); sv; sv = sv->next) - if (sv->offset == offset) + if (SFT_OFFSET (sv->var) == offset) return sv->var; return NULL_TREE; @@ -1491,7 +1491,7 @@ var_can_have_subvars (tree v) static inline bool overlap_subvar (unsigned HOST_WIDE_INT offset, unsigned HOST_WIDE_INT size, - subvar_t sv, bool *exact) + tree sv, bool *exact) { /* There are three possible cases of overlap. 1. We can have an exact overlap, like so: @@ -1511,17 +1511,19 @@ overlap_subvar (unsigned HOST_WIDE_INT offset, unsigned HOST_WIDE_INT size, if (exact) *exact = false; - if (offset == sv->offset && size == sv->size) + if (offset == SFT_OFFSET (sv) && size == SFT_SIZE (sv)) { if (exact) *exact = true; return true; } - else if (offset >= sv->offset && offset < (sv->offset + sv->size)) + else if (offset >= SFT_OFFSET (sv) + && offset < (SFT_OFFSET (sv) + SFT_SIZE (sv))) { return true; } - else if (offset < sv->offset && (size > sv->offset - offset)) + else if (offset < SFT_OFFSET (sv) + && (size > SFT_OFFSET (sv) - offset)) { return true; } -- cgit v1.2.3