From c794d7381e300af2b0e33fcfa014731b3f613f80 Mon Sep 17 00:00:00 2001 From: spop Date: Fri, 31 Jul 2009 02:37:11 +0000 Subject: [PATCH] Add a new driver to data reference analysis. 2009-07-30 Sebastian Pop * tree-data-ref.c (graphite_find_data_references_in_stmt): New. * tree-data-ref.h (graphite_find_data_references_in_stmt): Declared. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@150297 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 5 +++++ gcc/tree-data-ref.c | 31 +++++++++++++++++++++++++++++++ gcc/tree-data-ref.h | 2 ++ 3 files changed, 38 insertions(+) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 23613f6..c15abd7 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,10 @@ 2009-07-30 Sebastian Pop + * tree-data-ref.c (graphite_find_data_references_in_stmt): New. + * tree-data-ref.h (graphite_find_data_references_in_stmt): Declared. + +2009-07-30 Sebastian Pop + * tree-data-ref.c (debug_data_references): New. (debug_data_reference): New. * tree-data-ref.h (debug_data_references): Declared. diff --git a/gcc/tree-data-ref.c b/gcc/tree-data-ref.c index 2e515bf..ae0a068 100644 --- a/gcc/tree-data-ref.c +++ b/gcc/tree-data-ref.c @@ -4158,6 +4158,37 @@ find_data_references_in_stmt (struct loop *nest, gimple stmt, return ret; } +/* Stores the data references in STMT to DATAREFS. If there is an unanalyzable + reference, returns false, otherwise returns true. NEST is the outermost + loop of the loop nest in which the references should be analyzed. */ + +bool +graphite_find_data_references_in_stmt (struct loop *nest, gimple stmt, + VEC (data_reference_p, heap) **datarefs) +{ + unsigned i; + VEC (data_ref_loc, heap) *references; + data_ref_loc *ref; + bool ret = true; + data_reference_p dr; + + if (get_references_in_stmt (stmt, &references)) + { + VEC_free (data_ref_loc, heap, references); + return false; + } + + for (i = 0; VEC_iterate (data_ref_loc, references, i, ref); i++) + { + dr = create_data_ref (nest, *ref->pos, stmt, ref->is_read); + gcc_assert (dr != NULL); + VEC_safe_push (data_reference_p, heap, *datarefs, dr); + } + + VEC_free (data_ref_loc, heap, references); + return ret; +} + /* Search the data references in LOOP, and record the information into DATAREFS. Returns chrec_dont_know when failing to analyze a difficult case, returns NULL_TREE otherwise. */ diff --git a/gcc/tree-data-ref.h b/gcc/tree-data-ref.h index ce604e3..fe79fae 100644 --- a/gcc/tree-data-ref.h +++ b/gcc/tree-data-ref.h @@ -405,6 +405,8 @@ extern void free_data_ref (data_reference_p); extern void free_data_refs (VEC (data_reference_p, heap) *); extern bool find_data_references_in_stmt (struct loop *, gimple, VEC (data_reference_p, heap) **); +extern bool graphite_find_data_references_in_stmt (struct loop *, gimple, + VEC (data_reference_p, heap) **); struct data_reference *create_data_ref (struct loop *, tree, gimple, bool); extern bool find_loop_nest (struct loop *, VEC (loop_p, heap) **); extern void compute_all_dependences (VEC (data_reference_p, heap) *, -- 2.7.4