GCC Middle and Back End API Reference
access Struct Reference
Collaboration diagram for access:

Data Fields

tree base
tree expr
tree type
gimple stmt
struct accessnext_grp
struct accessgroup_representative
struct accessfirst_child
struct accessnext_sibling
struct assign_linkfirst_link
struct assign_linklast_link
struct accessnext_queued
tree replacement_decl
unsigned write: 1
unsigned non_addressable: 1
unsigned grp_queued: 1
unsigned grp_write: 1
unsigned grp_read: 1
unsigned grp_assignment_read: 1
unsigned grp_assignment_write: 1
unsigned grp_scalar_read: 1
unsigned grp_scalar_write: 1
unsigned grp_total_scalarization: 1
unsigned grp_hint: 1
unsigned grp_covered: 1
unsigned grp_unscalarizable_region: 1
unsigned grp_unscalarized_data: 1
unsigned grp_partial_lhs: 1
unsigned grp_to_be_replaced: 1
unsigned grp_to_be_debug_replaced: 1
unsigned grp_no_warning: 1
unsigned grp_maybe_modified: 1
unsigned grp_scalar_ptr: 1
unsigned grp_not_necessarilly_dereferenced: 1

Detailed Description

   ACCESS represents each access to an aggregate variable (as a whole or a
   part).  It can also represent a group of accesses that refer to exactly the
   same fragment of an aggregate (i.e. those that have exactly the same offset
   and size).  Such representatives for a single aggregate, once determined,
   are linked in a linked list and have the group fields set.

   Moreover, when doing intraprocedural SRA, a tree is built from those
   representatives (by the means of first_child and next_sibling pointers), in
   which all items in a subtree are "within" the root, i.e. their offset is
   greater or equal to offset of the root and offset+size is smaller or equal
   to offset+size of the root.  Children of an access are sorted by offset.

   Note that accesses to parts of vector and complex number types always
   represented by an access to the whole complex number or a vector.  It is a
   duty of the modifying functions to replace them appropriately.  

Field Documentation

tree access::expr
     Expression.  It is context dependent so do not use it to create new
     expressions to access the original aggregate.  See PR 42154 for a

Referenced by generate_subtree_copies(), make_fancy_name(), and propagate_dereference_distances().

struct access* access::first_child
     If this access has any children (in terms of the definition above), this
     points to the first one.  

Referenced by contains_vce_or_bfcref_p(), dump_access(), dump_access_tree_1(), and generate_subtree_copies().

struct assign_link* access::first_link
     Pointers to the first and last element in the linked list of assign

Referenced by child_would_conflict_in_lacc().

struct access* access::group_representative
     Pointer to the group representative.  Pointer to itself if the struct is
     the representative.  

Referenced by child_would_conflict_in_lacc().

unsigned access::grp_assignment_read
     Does this group contain a read access that comes from an assignment
     statement?  This flag is propagated down the access tree.  

Referenced by build_access_from_expr_1(), expr_with_var_bounded_array_refs_p(), and reject().

unsigned access::grp_assignment_write
     Does this group contain a write access that comes from an assignment
     statement?  This flag is propagated down the access tree.  

Referenced by build_access_from_expr_1(), and reject().

unsigned access::grp_covered
     Is the subtree rooted in this access fully covered by scalar

Referenced by get_access_replacement().

unsigned access::grp_hint
     Other passes of the analysis use this bit to make function
     analyze_access_subtree create scalar replacements for this group if
unsigned access::grp_maybe_modified
     Is it possible that the group refers to data which might be (directly or
     otherwise) modified?  

Referenced by make_pass_sra().

unsigned access::grp_no_warning
     Should TREE_NO_WARNING of a replacement be set?  
unsigned access::grp_not_necessarilly_dereferenced
     Set when we discover that this pointer is not safe to dereference in the
unsigned access::grp_partial_lhs
     Does this access and/or group contain a write access through a

Referenced by generate_subtree_copies(), and sra_modify_expr().

unsigned access::grp_queued
     Is this access currently in the work queue?  

Referenced by get_first_repr_for_decl(), and get_var_base_offset_size_access().

unsigned access::grp_read
     Does this group contain a read access?  This flag is propagated down the
     access tree.  

Referenced by reject().

unsigned access::grp_scalar_ptr
     Set when this is a representative of a pointer to scalar (i.e. by
     reference) parameter which we consider for turning into a plain scalar
     (i.e. a by value parameter).  
unsigned access::grp_scalar_read
     Does this group contain a read access through a scalar type?  This flag is
     not propagated in the access tree in any direction.  

Referenced by expr_with_var_bounded_array_refs_p(), and reject().

unsigned access::grp_scalar_write
     Does this group contain a write access through a scalar type?  This flag
     is not propagated in the access tree in any direction.  

Referenced by reject().

unsigned access::grp_to_be_debug_replaced
     Set when we want a replacement for the sole purpose of having it in
     generated debug statements.  

Referenced by expr_with_var_bounded_array_refs_p(), generate_subtree_copies(), and load_assign_lhs_subreplacements().

unsigned access::grp_to_be_replaced
     Set when a scalar replacement should be created for this variable.  

Referenced by generate_subtree_copies(), load_assign_lhs_subreplacements(), and sra_modify_expr().

unsigned access::grp_total_scalarization
     Is this access an artificial one created to scalarize some record

Referenced by get_access_replacement().

unsigned access::grp_unscalarizable_region
     If set to true, this access and all below it in an access tree must not be

Referenced by build_access_from_expr_1().

unsigned access::grp_unscalarized_data
     Whether data have been written to parts of the aggregate covered by this
     access which is not to be scalarized.  This flag is propagated up in the
     access tree.  

Referenced by get_access_replacement().

unsigned access::grp_write
     Does this group contain a write access?  This flag is propagated down the
     access tree.  

Referenced by reject().

struct assign_link * access::last_link
struct access* access::next_grp
     Next group representative for this aggregate. 

Referenced by access_has_children_p(), analyze_caller_dereference_legality(), and is_unused_scalar_param().

struct access* access::next_queued
     Pointer to the next access in the work queue.  

Referenced by get_first_repr_for_decl(), and get_var_base_offset_size_access().

struct access* access::next_sibling
     In intraprocedural SRA, pointer to the next sibling in the access tree as
     described above.  In IPA-SRA this is a pointer to the next access
     belonging to the same group (having the same representative).  

Referenced by dump_access_tree_1().

unsigned access::non_addressable
     Is this access an access to a non-addressable field? 

Referenced by analyze_caller_dereference_legality().

HOST_WIDE_INT access::offset
     Values returned by  `get_ref_base_and_extent' for each component reference
     If EXPR isn't a component reference  just set `BASE = EXPR', `OFFSET = 0',
     `SIZE = TREE_SIZE (TREE_TYPE (expr))'.  

Referenced by access_has_children_p(), analyze_access_subtree(), dump_access_tree_1(), generate_subtree_copies(), get_access_replacement(), init_subtree_with_zero(), and sra_modify_expr().

tree access::replacement_decl
     Replacement variable for this access "region."  Never to be accessed
     directly, always only by the means of get_access_replacement() and only
     when grp_to_be_replaced flag is set.  

Referenced by expr_with_var_bounded_array_refs_p(), and load_assign_lhs_subreplacements().

gimple access::stmt
     The statement this access belongs to.  

Referenced by generate_subtree_copies(), propagate_dereference_distances(), and sra_modify_expr().

unsigned access::write
     Is this particular access write access? 

Referenced by propagate_dereference_distances(), and reject().

The documentation for this struct was generated from the following file: