diff options
author | irar <irar@138bc75d-0d04-0410-961f-82ee72b054a4> | 2005-07-25 12:05:07 +0000 |
---|---|---|
committer | irar <irar@138bc75d-0d04-0410-961f-82ee72b054a4> | 2005-07-25 12:05:07 +0000 |
commit | 516849c7cdbe9be15bb886db53588d1cc868e795 (patch) | |
tree | 2c7091212ab12d18c54b6a9e333f0b9450742dab /gcc/tree-vectorizer.h | |
parent | e8089f751c03c2f2d0709b475a22b42e0cc402a2 (diff) | |
download | gcc-516849c7cdbe9be15bb886db53588d1cc868e795.tar.gz |
* expr.c (highest_pow2_factor): Make extern.
* tree-data-ref.c (ptr_decl_may_alias_p): New function.
(ptr_ptr_may_alias_p, may_alias_p, record_ptr_differ_p,
record_array_differ_p, array_ptr_differ_p): Likewise.
(base_object_differ_p): Rename (from array_base_name_differ_p). Support
additional cases. Call the above functions.
(base_addr_differ_p): Moved from tree-vect-analyze.c. Call
base_object_differ_p when there are two base objects. Otherwise, compare
base address and offset. Call may_alias_p.
(dump_data_reference): Use a correct field name.
(analyze_array): Make static. Initialize new data-ref fields.
(analyze_indirect_ref): New function.
(init_data_ref): Initialize new data-ref fields.
(strip_conversion): Moved from tree-vect-analyze.c.
(analyze_offset_expr, get_ptr_offset, address_analysis, object_analysis):
Likewise.
(analyze_offset): New function.
(create_data_ref): Likewise.
(initialize_data_dependence_relation): Call base_addr_differ_p. Compare
dimensions for ARRAY_REFs only.
(build_classic_dist_vector): Make static.
(access_functions_are_affine_or_constant_p): Call macro to get the
address of access functions.
(compute_all_dependences): Add new parameter
compute_self_and_read_read_dependences. Compute self and read-read
dependences if it is true.
(find_data_references_in_loop): Call create_data_ref. Initialize new
data-ref fields.
(compute_data_dependences_for_loop): Add new parameter
compute_self_and_read_read_dependences. Remove parameter nb_loops,
compute nb_loops. Call compute_all_dependences, build_classic_dist_vector
and build_classic_dir_vector with correct parameters.
(analyze_all_data_dependences): Call compute_data_dependences_for_loop with
correct parameters. Compare dimensions for ARRAY_REFs only.
(free_data_refs): Call macro to free access functions.
* tree-data-ref.h (struct first_location_in_loop): New structure. Move
fields from stmt_vinfo.
(struct base_object_info): New structure.
(struct data_reference): Move fields to base_object_info. Add fields
first_location and object_info for above structures. Move fields from
stmt_info: memtag, ptr_info, subvars, misalignment. Add new field aligned_to.
Add macros to access the new fields.
Update functions declarations.
* tree-flow.h (is_aliased_with): Declare.
* tree-loop-linear.c (linear_transform_loops): Call
compute_data_dependences_for_loop with correct parameters.
* tree-ssa-alias.c (is_aliased_with): New function.
* tree-vect-analyze.c (vect_get_ptr_offset): Remove.
(vect_analyze_offset_expr, vect_base_addr_differ_p): Likewise.
(vect_analyze_data_ref_dependence): Get ddr. Remove call to
vect_base_addr_differ_p, compute_subscript_distance and
build_classic_dist_vector. Add printings. Check absolute value of
distance.
(vect_analyze_data_ref_dependences): Go through ddrs instead of data-refs.
(vect_compute_data_ref_alignment): Get the fields of data-ref instead of
stmt. Check aligned_to. Check if the base is aligned. Remove conversion
to bytes. Add printing.
(vect_compute_data_refs_alignment): Go through loads and stores in one loop.
(vect_enhance_data_refs_alignment, vect_analyze_data_refs_alignment,
vect_analyze_data_ref_access): Likewise.
(vect_analyze_pointer_ref_access): Remove.
(vect_address_analysis, vect_object_analysis): Likewise.
(vect_analyze_data_refs): Call compute_data_dependences_for_loop to find
and analyze data-refs in the loop.
* tree-vect-transform.c (vect_create_addr_base_for_vector_ref): Get the
fields of data-ref instead of stmt. Add init to the offset from the base.
(vect_create_data_ref_ptr): Get the fields of data-ref instead of stmt.
(vect_update_init_of_dr): Likewise.
(vect_update_inits_of_drs): Go through loads and stores in one loop.
* tree-vectorizer.c (new_stmt_vec_info): Remove initialization of removed
fields.
(new_loop_vec_info): Initialize new fields.
(destroy_loop_vec_info): Free new fields.
(vect_strip_conversion): Remove.
* tree-vectorizer.h (enum verbosity_levels): Add new verbosity level.
(struct _loop_vec_info): Unify data_ref_writes and data_ref_reads into
datarefs. Add new field ddrs.
Add macros for the new fields access.
(struct _stmt_vec_info): Remove: base_address, initial_offset, step,
base_aligned_p, misalignment, memtag, ptr_info and subvars.
Remove their macros.
* tree.h (highest_pow2_factor): Declare.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@102356 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/tree-vectorizer.h')
-rw-r--r-- | gcc/tree-vectorizer.h | 82 |
1 files changed, 19 insertions, 63 deletions
diff --git a/gcc/tree-vectorizer.h b/gcc/tree-vectorizer.h index 87d3138bcaa..5fdca3d6502 100644 --- a/gcc/tree-vectorizer.h +++ b/gcc/tree-vectorizer.h @@ -73,6 +73,7 @@ enum verbosity_levels { REPORT_VECTORIZED_LOOPS, REPORT_UNVECTORIZED_LOOPS, REPORT_ALIGNMENT, + REPORT_DR_DETAILS, REPORT_BAD_FORM_LOOPS, REPORT_OUTER_LOOPS, REPORT_DETAILS, @@ -116,27 +117,29 @@ typedef struct _loop_vec_info { unaligned_dr. */ int peeling_for_alignment; - /* All data references in the loop that are being written to. */ - varray_type data_ref_writes; + /* All data references in the loop. */ + varray_type datarefs; - /* All data references in the loop that are being read from. */ - varray_type data_ref_reads; + /* All data dependences in the loop. */ + varray_type ddrs; + /* The loop location in the source. */ + LOC loop_line_number; } *loop_vec_info; -/* Access Functions. */ -#define LOOP_VINFO_LOOP(L) (L)->loop -#define LOOP_VINFO_BBS(L) (L)->bbs -#define LOOP_VINFO_EXIT_COND(L) (L)->exit_cond -#define LOOP_VINFO_NITERS(L) (L)->num_iters -#define LOOP_VINFO_VECTORIZABLE_P(L) (L)->vectorizable -#define LOOP_VINFO_VECT_FACTOR(L) (L)->vectorization_factor -#define LOOP_VINFO_DATAREF_WRITES(L) (L)->data_ref_writes -#define LOOP_VINFO_DATAREF_READS(L) (L)->data_ref_reads -#define LOOP_VINFO_INT_NITERS(L) (TREE_INT_CST_LOW ((L)->num_iters)) + /* Access Functions. */ +#define LOOP_VINFO_LOOP(L) (L)->loop +#define LOOP_VINFO_BBS(L) (L)->bbs +#define LOOP_VINFO_EXIT_COND(L) (L)->exit_cond +#define LOOP_VINFO_NITERS(L) (L)->num_iters +#define LOOP_VINFO_VECTORIZABLE_P(L) (L)->vectorizable +#define LOOP_VINFO_VECT_FACTOR(L) (L)->vectorization_factor +#define LOOP_VINFO_DATAREFS(L) (L)->datarefs +#define LOOP_VINFO_DDRS(L) (L)->ddrs +#define LOOP_VINFO_INT_NITERS(L) (TREE_INT_CST_LOW ((L)->num_iters)) #define LOOP_PEELING_FOR_ALIGNMENT(L) (L)->peeling_for_alignment -#define LOOP_VINFO_UNALIGNED_DR(L) (L)->unaligned_dr - +#define LOOP_VINFO_UNALIGNED_DR(L) (L)->unaligned_dr +#define LOOP_VINFO_LOC(L) (L)->loop_line_number #define LOOP_VINFO_NITERS_KNOWN_P(L) \ (host_integerp ((L)->num_iters,0) \ @@ -192,45 +195,6 @@ typedef struct _stmt_vec_info { /* Information about the data-ref (access function, etc). */ struct data_reference *data_ref_info; - /* Aliasing information. This field represents the symbol that - should be aliased by a pointer holding the address of this data - reference. If the original data reference was a pointer - dereference, then this field contains the memory tag that should - be used by the new vector-pointer. */ - tree memtag; - struct ptr_info_def *ptr_info; - subvar_t subvars; - - /** The following fields are used to store the information about - data-reference. {base_address + initial_offset} is the first location - accessed by data-ref in the loop, and step is the stride of data-ref in - the loop in bytes; - e.g.: - - Example 1 Example 2 - data-ref a[j].b[i][j] a + 4B (a is int*) - - base_address &a a - initial_offset j_0*D_j + i_0*D_i + C 4 - step D_j 4 - - data-reference structure info: - base_name a NULL - access_fn <access_fns of indexes of b> (0, +, 1) - - **/ - /* The above base_address, offset and step. */ - tree base_address; - tree initial_offset; - tree step; - - /* Alignment information. Whether the base of the data-reference is aligned - to vectype. */ - bool base_aligned_p; - /* Alignment information. The offset of the data-reference from its base - in bytes. */ - tree misalignment; - /* List of datarefs that are known to have the same alignment as the dataref of this stmt. */ VEC(dr_p,heap) *same_align_refs; @@ -249,14 +213,6 @@ typedef struct _stmt_vec_info { #define STMT_VINFO_VECTYPE(S) (S)->vectype #define STMT_VINFO_VEC_STMT(S) (S)->vectorized_stmt #define STMT_VINFO_DATA_REF(S) (S)->data_ref_info -#define STMT_VINFO_MEMTAG(S) (S)->memtag -#define STMT_VINFO_PTR_INFO(S) (S)->ptr_info -#define STMT_VINFO_SUBVARS(S) (S)->subvars -#define STMT_VINFO_VECT_DR_BASE_ADDRESS(S)(S)->base_address -#define STMT_VINFO_VECT_INIT_OFFSET(S) (S)->initial_offset -#define STMT_VINFO_VECT_STEP(S) (S)->step -#define STMT_VINFO_VECT_BASE_ALIGNED_P(S) (S)->base_aligned_p -#define STMT_VINFO_VECT_MISALIGNMENT(S) (S)->misalignment #define STMT_VINFO_SAME_ALIGN_REFS(S) (S)->same_align_refs #define STMT_VINFO_DEF_TYPE(S) (S)->def_type |