diff options
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 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)) |