diff options
author | rguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2012-03-02 14:58:55 +0000 |
---|---|---|
committer | rguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2012-03-02 14:58:55 +0000 |
commit | 95539e1deabbaa9dbc84b1d81ce6d0c8e7156a0f (patch) | |
tree | c3a4354f21d2707459cf46ca8b2154966b514eb4 /gcc/tree-data-ref.h | |
parent | 7b8df29d95dd58f94e956c30866f5fac49bb98ea (diff) | |
download | gcc-95539e1deabbaa9dbc84b1d81ce6d0c8e7156a0f.tar.gz |
2012-03-02 Richard Guenther <rguenther@suse.de>
PR tree-optimization/52406
* tree-data-ref.h: Update documentation about DR_BASE_OBJECT.
(struct indices): Add unconstrained_base member.
(struct dr_alias): Remove unused vops member.
(DR_UNCONSTRAINED_BASE): New define.
* tree-data-ref.c (dr_analyze_indices): For COMPONENT_REFs
add indices to allow their disambiguation. Make DR_BASE_OBJECT
be an artificial access that covers the whole indexed object,
or mark it with DR_UNCONSTRAINED_BASE if we cannot do so. Canonicalize
plain decl base-objects to their MEM_REF variant.
(dr_may_alias_p): When the base-object of either data reference
has unknown size use only points-to information.
(compute_affine_dependence): Make dumps easier to read and
more verbose.
* tree-vect-data-ref.c (vector_alignment_reachable_p): Use
DR_REF when looking for packed references.
(vect_supportable_dr_alignment): Likewise.
* gcc.dg/torture/pr52406.c: New testcase.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@184789 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/tree-data-ref.h')
-rw-r--r-- | gcc/tree-data-ref.h | 31 |
1 files changed, 16 insertions, 15 deletions
diff --git a/gcc/tree-data-ref.h b/gcc/tree-data-ref.h index 15bae6b43cb..d983c8cda45 100644 --- a/gcc/tree-data-ref.h +++ b/gcc/tree-data-ref.h @@ -60,16 +60,17 @@ struct innermost_loop_behavior }; /* Describes the evolutions of indices of the memory reference. The indices - are indices of the ARRAY_REFs and the operands of INDIRECT_REFs. - For ARRAY_REFs, BASE_OBJECT is the reference with zeroed indices - (note that this reference does not have to be valid, if zero does not - belong to the range of the array; hence it is not recommended to use - BASE_OBJECT in any code generation). For INDIRECT_REFs, the address is - set to the loop-invariant part of the address of the object, except for - the constant offset. For the examples above, - - base_object: a[0].b[0][0] *(p + x + 4B * j_0) + are indices of the ARRAY_REFs, indexes in artificial dimensions + added for member selection of records and the operands of MEM_REFs. + BASE_OBJECT is the part of the reference that is loop-invariant + (note that this reference does not have to cover the whole object + being accessed, in which case UNCONSTRAINED_BASE is set; hence it is + not recommended to use BASE_OBJECT in any code generation). + For the examples above, + + base_object: a *(p + x + 4B * j_0) indices: {j_0, +, 1}_2 {16, +, 4}_2 + 4 {i_0, +, 1}_1 {j_0, +, 1}_2 */ @@ -81,18 +82,17 @@ struct indices /* A list of chrecs. Access functions of the indices. */ VEC(tree,heap) *access_fns; + + /* Whether BASE_OBJECT is an access representing the whole object + or whether the access could not be constrained. */ + bool unconstrained_base; }; struct dr_alias { /* The alias information that should be used for new pointers to this - location. SYMBOL_TAG is either a DECL or a SYMBOL_MEMORY_TAG. */ + location. */ struct ptr_info_def *ptr_info; - - /* The set of virtual operands corresponding to this memory reference, - serving as a description of the alias information for the memory - reference. This could be eliminated if we had alias oracle. */ - bitmap vops; }; /* An integer vector. A vector formally consists of an element of a vector @@ -201,6 +201,7 @@ struct data_reference #define DR_STMT(DR) (DR)->stmt #define DR_REF(DR) (DR)->ref #define DR_BASE_OBJECT(DR) (DR)->indices.base_object +#define DR_UNCONSTRAINED_BASE(DR) (DR)->indices.unconstrained_base #define DR_ACCESS_FNS(DR) (DR)->indices.access_fns #define DR_ACCESS_FN(DR, I) VEC_index (tree, DR_ACCESS_FNS (DR), I) #define DR_NUM_DIMENSIONS(DR) VEC_length (tree, DR_ACCESS_FNS (DR)) |