aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-data-ref.h
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/tree-data-ref.h')
-rw-r--r--gcc/tree-data-ref.h31
1 files changed, 16 insertions, 15 deletions
diff --git a/gcc/tree-data-ref.h b/gcc/tree-data-ref.h
index 15bae6b..d983c8c 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))