GCC Middle and Back End API Reference
tree-data-ref.h File Reference

Go to the source code of this file.

Data Structures

struct  innermost_loop_behavior
struct  indices
struct  dr_alias
struct  access_matrix
struct  data_reference
struct  conflict_function
struct  subscript
struct  data_dependence_relation
struct  rdg_vertex
struct  rdg_edge
struct  rdg_component

Macros

#define AM_LOOP_NEST(M)   (M)->loop_nest
#define AM_NB_INDUCTION_VARS(M)   (M)->nb_induction_vars
#define AM_PARAMETERS(M)   (M)->parameters
#define AM_MATRIX(M)   (M)->matrix
#define AM_NB_PARAMETERS(M)   (AM_PARAMETERS(M)).length ()
#define AM_CONST_COLUMN_INDEX(M)   (AM_NB_INDUCTION_VARS (M) + AM_NB_PARAMETERS (M))
#define AM_NB_COLUMNS(M)   (AM_NB_INDUCTION_VARS (M) + AM_NB_PARAMETERS (M) + 1)
#define AM_GET_SUBSCRIPT_ACCESS_VECTOR(M, I)   AM_MATRIX (M)[I]
#define AM_GET_ACCESS_MATRIX_ELEMENT(M, I, J)   AM_GET_SUBSCRIPT_ACCESS_VECTOR (M, I)[J]
#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)   DR_ACCESS_FNS (DR)[I]
#define DR_NUM_DIMENSIONS(DR)   DR_ACCESS_FNS (DR).length ()
#define DR_IS_READ(DR)   (DR)->is_read
#define DR_IS_WRITE(DR)   (!DR_IS_READ (DR))
#define DR_BASE_ADDRESS(DR)   (DR)->innermost.base_address
#define DR_OFFSET(DR)   (DR)->innermost.offset
#define DR_INIT(DR)   (DR)->innermost.init
#define DR_STEP(DR)   (DR)->innermost.step
#define DR_PTR_INFO(DR)   (DR)->alias.ptr_info
#define DR_ALIGNED_TO(DR)   (DR)->innermost.aligned_to
#define DR_ACCESS_MATRIX(DR)   (DR)->access_matrix
#define MAX_DIM   2
#define NO_DEPENDENCE   0
#define NOT_KNOWN   (MAX_DIM + 1)
#define CF_NONTRIVIAL_P(CF)   ((CF)->n != NO_DEPENDENCE && (CF)->n != NOT_KNOWN)
#define CF_NOT_KNOWN_P(CF)   ((CF)->n == NOT_KNOWN)
#define CF_NO_DEPENDENCE_P(CF)   ((CF)->n == NO_DEPENDENCE)
#define SUB_CONFLICTS_IN_A(SUB)   SUB->conflicting_iterations_in_a
#define SUB_CONFLICTS_IN_B(SUB)   SUB->conflicting_iterations_in_b
#define SUB_LAST_CONFLICT(SUB)   SUB->last_conflict
#define SUB_DISTANCE(SUB)   SUB->distance
#define DDR_A(DDR)   DDR->a
#define DDR_B(DDR)   DDR->b
#define DDR_AFFINE_P(DDR)   DDR->affine_p
#define DDR_ARE_DEPENDENT(DDR)   DDR->are_dependent
#define DDR_SUBSCRIPTS(DDR)   DDR->subscripts
#define DDR_SUBSCRIPT(DDR, I)   DDR_SUBSCRIPTS (DDR)[I]
#define DDR_NUM_SUBSCRIPTS(DDR)   DDR_SUBSCRIPTS (DDR).length ()
#define DDR_LOOP_NEST(DDR)   DDR->loop_nest
#define DDR_NB_LOOPS(DDR)   (DDR_LOOP_NEST (DDR).length ())
#define DDR_INNER_LOOP(DDR)   DDR->inner_loop
#define DDR_SELF_REFERENCE(DDR)   DDR->self_reference_p
#define DDR_DIST_VECTS(DDR)   ((DDR)->dist_vects)
#define DDR_DIR_VECTS(DDR)   ((DDR)->dir_vects)
#define DDR_NUM_DIST_VECTS(DDR)   (DDR_DIST_VECTS (DDR).length ())
#define DDR_NUM_DIR_VECTS(DDR)   (DDR_DIR_VECTS (DDR).length ())
#define DDR_DIR_VECT(DDR, I)   DDR_DIR_VECTS (DDR)[I]
#define DDR_DIST_VECT(DDR, I)   DDR_DIST_VECTS (DDR)[I]
#define DDR_REVERSED_P(DDR)   DDR->reversed_p
#define RDGV_STMT(V)   ((struct rdg_vertex *) ((V)->data))->stmt
#define RDGV_DATAREFS(V)   ((struct rdg_vertex *) ((V)->data))->datarefs
#define RDGV_HAS_MEM_WRITE(V)   ((struct rdg_vertex *) ((V)->data))->has_mem_write
#define RDGV_HAS_MEM_READS(V)   ((struct rdg_vertex *) ((V)->data))->has_mem_reads
#define RDG_STMT(RDG, I)   RDGV_STMT (&(RDG->vertices[I]))
#define RDG_DATAREFS(RDG, I)   RDGV_DATAREFS (&(RDG->vertices[I]))
#define RDG_MEM_WRITE_STMT(RDG, I)   RDGV_HAS_MEM_WRITE (&(RDG->vertices[I]))
#define RDG_MEM_READS_STMT(RDG, I)   RDGV_HAS_MEM_READS (&(RDG->vertices[I]))
#define RDGE_TYPE(E)   ((struct rdg_edge *) ((E)->data))->type
#define RDGE_LEVEL(E)   ((struct rdg_edge *) ((E)->data))->level
#define RDGE_RELATION(E)   ((struct rdg_edge *) ((E)->data))->relation

Typedefs

typedef int * lambda_vector
typedef lambda_vectorlambda_matrix
typedef struct data_referencedata_reference_p
typedef vec< treeaffine_fn
typedef struct subscriptsubscript_p
typedef struct
data_dependence_relation
ddr_p
typedef struct rdg_vertexrdg_vertex_p
typedef struct rdg_edgerdg_edge_p
typedef struct rdg_componentrdgc

Enumerations

enum  data_dependence_direction {
  dir_positive, dir_negative, dir_equal, dir_positive_or_negative,
  dir_positive_or_equal, dir_negative_or_equal, dir_star, dir_independent
}
enum  rdg_dep_type { flow_dd = 'f', anti_dd = 'a', output_dd = 'o', input_dd = 'i' }

Functions

static int am_vector_index_for_loop ()
bool dr_analyze_innermost (struct data_reference *, struct loop *)
bool compute_data_dependences_for_loop (struct loop *, bool, vec< loop_p > *, vec< data_reference_p > *, vec< ddr_p > *)
bool compute_data_dependences_for_bb (basic_block, bool, vec< data_reference_p > *, vec< ddr_p > *)
void debug_ddrs (vec< ddr_p >)
void dump_data_reference (FILE *, struct data_reference *)
void debug (data_reference &ref)
void debug (data_reference *ptr)
void debug_data_reference (struct data_reference *)
void debug_data_references (vec< data_reference_p >)
void debug (vec< data_reference_p > &ref)
void debug (vec< data_reference_p > *ptr)
void debug_data_dependence_relation (struct data_dependence_relation *)
void dump_data_dependence_relations (FILE *, vec< ddr_p >)
void debug (vec< ddr_p > &ref)
void debug (vec< ddr_p > *ptr)
void debug_data_dependence_relations (vec< ddr_p >)
void free_dependence_relation (struct data_dependence_relation *)
void free_dependence_relations (vec< ddr_p >)
void free_data_ref (data_reference_p)
void free_data_refs (vec< data_reference_p >)
bool find_data_references_in_stmt (struct loop *, gimple, vec< data_reference_p > *)
bool graphite_find_data_references_in_stmt (loop_p, loop_p, gimple, vec< data_reference_p > *)
tree find_data_references_in_loop (struct loop *, vec< data_reference_p > *)
struct data_referencecreate_data_ref (loop_p, loop_p, tree, gimple, bool)
bool find_loop_nest (struct loop *, vec< loop_p > *)
struct data_dependence_relationinitialize_data_dependence_relation (struct data_reference *, struct data_reference *, vec< loop_p >)
void compute_affine_dependence (struct data_dependence_relation *, loop_p)
void compute_self_dependence (struct data_dependence_relation *)
bool compute_all_dependences (vec< data_reference_p >, vec< ddr_p > *, vec< loop_p >, bool)
tree find_data_references_in_bb (struct loop *, basic_block, vec< data_reference_p > *)
bool dr_may_alias_p (const struct data_reference *, const struct data_reference *, bool)
bool dr_equal_offsets_p (struct data_reference *, struct data_reference *)
static bool same_data_refs_base_objects ()
static bool same_data_refs ()
static bool same_access_functions ()
static bool ddr_is_anti_dependent ()
static bool ddrs_have_anti_deps ()
static unsigned dependence_level ()
static unsigned ddr_dependence_level ()
void debug_rdg_vertex (struct graph *, int)
void debug_rdg_component (struct graph *, int)
void dump_rdg (FILE *, struct graph *)
void debug_rdg (struct graph *)
int rdg_vertex_for_stmt (struct graph *, gimple)
struct graphbuild_rdg (struct loop *, vec< loop_p > *, vec< ddr_p > *, vec< data_reference_p > *)
struct graphbuild_empty_rdg (int)
void free_rdg (struct graph *)
static int index_in_loop_nest ()
bool rdg_defs_used_in_other_loops_p (struct graph *, int)
static bool adjacent_dr_p ()
void split_constant_offset (tree, tree *, tree *)
static int lambda_vector_gcd ()
static lambda_vector lambda_vector_new ()
static void lambda_vector_clear ()
static bool lambda_vector_lexico_pos (lambda_vector v, unsigned n)
static bool lambda_vector_zerop ()
static lambda_matrix lambda_matrix_new ()

Macro Definition Documentation

#define AM_CONST_COLUMN_INDEX (   M)    (AM_NB_INDUCTION_VARS (M) + AM_NB_PARAMETERS (M))
#define AM_GET_ACCESS_MATRIX_ELEMENT (   M,
  I,
 
)    AM_GET_SUBSCRIPT_ACCESS_VECTOR (M, I)[J]
#define AM_GET_SUBSCRIPT_ACCESS_VECTOR (   M,
 
)    AM_MATRIX (M)[I]
#define AM_LOOP_NEST (   M)    (M)->loop_nest
#define AM_MATRIX (   M)    (M)->matrix
#define AM_NB_COLUMNS (   M)    (AM_NB_INDUCTION_VARS (M) + AM_NB_PARAMETERS (M) + 1)
#define AM_NB_INDUCTION_VARS (   M)    (M)->nb_induction_vars
#define AM_NB_PARAMETERS (   M)    (AM_PARAMETERS(M)).length ()
#define AM_PARAMETERS (   M)    (M)->parameters
#define CF_NO_DEPENDENCE_P (   CF)    ((CF)->n == NO_DEPENDENCE)
#define CF_NONTRIVIAL_P (   CF)    ((CF)->n != NO_DEPENDENCE && (CF)->n != NOT_KNOWN)
#define CF_NOT_KNOWN_P (   CF)    ((CF)->n == NOT_KNOWN)
#define DDR_DIR_VECT (   DDR,
 
)    DDR_DIR_VECTS (DDR)[I]
#define DDR_NUM_DIR_VECTS (   DDR)    (DDR_DIR_VECTS (DDR).length ())
#define DDR_SELF_REFERENCE (   DDR)    DDR->self_reference_p
#define DDR_SUBSCRIPTS (   DDR)    DDR->subscripts
#define DR_ACCESS_MATRIX (   DR)    (DR)->access_matrix
#define DR_ALIGNED_TO (   DR)    (DR)->innermost.aligned_to
#define DR_PTR_INFO (   DR)    (DR)->alias.ptr_info
#define DR_UNCONSTRAINED_BASE (   DR)    (DR)->indices.unconstrained_base
#define MAX_DIM   2
The description of the grid of iterations that overlap.  At most
   two loops are considered at the same time just now, hence at most
   two functions are needed.  For each of the functions, we store
   the vector of coefficients, f[0] + x * f[1] + y * f[2] + ...,
   where x, y, ... are variables.   

Referenced by conflict_fn().

#define NO_DEPENDENCE   0
Special values of N.   

Referenced by conflict_fn_no_dependence(), and dump_conflict_function().

#define NOT_KNOWN   (MAX_DIM + 1)
#define RDG_DATAREFS (   RDG,
 
)    RDGV_DATAREFS (&(RDG->vertices[I]))
#define RDG_MEM_READS_STMT (   RDG,
 
)    RDGV_HAS_MEM_READS (&(RDG->vertices[I]))
#define RDG_STMT (   RDG,
 
)    RDGV_STMT (&(RDG->vertices[I]))
#define RDGE_LEVEL (   E)    ((struct rdg_edge *) ((E)->data))->level

Referenced by create_rdg_edge_for_ddr().

#define RDGE_RELATION (   E)    ((struct rdg_edge *) ((E)->data))->relation
#define RDGE_TYPE (   E)    ((struct rdg_edge *) ((E)->data))->type
#define RDGV_DATAREFS (   V)    ((struct rdg_vertex *) ((V)->data))->datarefs

Referenced by create_rdg_vertices(), and free_rdg().

#define RDGV_HAS_MEM_READS (   V)    ((struct rdg_vertex *) ((V)->data))->has_mem_reads

Referenced by create_rdg_vertices().

#define RDGV_HAS_MEM_WRITE (   V)    ((struct rdg_vertex *) ((V)->data))->has_mem_write

Referenced by create_rdg_vertices().

#define RDGV_STMT (   V)    ((struct rdg_vertex *) ((V)->data))->stmt
#define SUB_CONFLICTS_IN_A (   SUB)    SUB->conflicting_iterations_in_a
#define SUB_CONFLICTS_IN_B (   SUB)    SUB->conflicting_iterations_in_b
#define SUB_DISTANCE (   SUB)    SUB->distance
#define SUB_LAST_CONFLICT (   SUB)    SUB->last_conflict

Typedef Documentation

typedef vec<tree> affine_fn
An integer matrix.  A matrix consists of m vectors of length n (IE
   all vectors are the same length).   
typedef int* lambda_vector
An integer vector.  A vector formally consists of an element of a vector
   space. A vector space is a set that is closed under vector addition
   and scalar multiplication.  In this vector space, an element is a list of
   integers.   
typedef struct rdg_edge * rdg_edge_p
Dependence information attached to an edge of the RDG.   
typedef struct rdg_vertex * rdg_vertex_p
A Reduced Dependence Graph (RDG) vertex representing a statement.   
typedef struct rdg_component * rdgc
Strongly connected components of the reduced data dependence graph.   
typedef struct subscript* subscript_p

Enumeration Type Documentation

Enumerator:
dir_positive 
dir_negative 
dir_equal 
dir_positive_or_negative 
dir_positive_or_equal 
dir_negative_or_equal 
dir_star 
dir_independent 
Data dependence type.   
Enumerator:
flow_dd 
anti_dd 
output_dd 
input_dd 

Function Documentation

static bool adjacent_dr_p ( )
inlinestatic
Returns true when the data reference DR the form "A[i] = ..."
   with a stride equal to its unit type size.   

References DR_REF, DR_STEP, and tree_int_cst_equal().

Referenced by classify_partition().

static int am_vector_index_for_loop ( )
inlinestatic
Return the column in the access matrix of LOOP_NUM.   

References AM_LOOP_NEST, and loop::num.

struct graph* build_empty_rdg ( int  )
read
struct graph* build_rdg ( struct loop loop,
vec< loop_p > *  loop_nest,
vec< ddr_p > *  dependence_relations,
vec< data_reference_p > *  datarefs 
)
read
Build the Reduced Dependence Graph (RDG) with one vertex per
   statement of the loop nest, and one edge per data dependence or
   scalar dependence.   

References build_empty_rdg(), compute_data_dependences_for_loop(), create_rdg_edges(), create_rdg_vertices(), known_dependences_p(), and stmts_from_loop().

Referenced by distribute_loop().

void compute_affine_dependence ( struct data_dependence_relation ,
loop_p   
)
bool compute_all_dependences ( vec< data_reference_p datarefs,
vec< ddr_p > *  dependence_relations,
vec< loop_p loop_nest,
bool  compute_self_and_rr 
)
Compute in DEPENDENCE_RELATIONS the data dependence graph for all
   the data references in DATAREFS, in the LOOP_NEST.  When
   COMPUTE_SELF_AND_RR is FALSE, don't compute read-read and self
   relations.  Return true when successful, i.e. data references number
   is small enough to be handled.   

References compute_affine_dependence(), DR_IS_WRITE, and initialize_data_dependence_relation().

Referenced by compute_data_dependences_for_bb(), compute_data_dependences_for_loop(), cond_if_else_store_replacement(), determine_loop_nest_reuse(), vect_analyze_data_ref_dependences(), and vect_slp_analyze_data_ref_dependences().

bool compute_data_dependences_for_bb ( basic_block  bb,
bool  compute_self_and_read_read_dependences,
vec< data_reference_p > *  datarefs,
vec< ddr_p > *  dependence_relations 
)
Returns true when the data dependences for the basic block BB have been
   computed, false otherwise.
   DATAREFS is initialized to all the array elements contained in this basic
   block, DEPENDENCE_RELATIONS contains the relations between the data
   references. Compute read-read and self relations if
   COMPUTE_SELF_AND_READ_READ_DEPENDENCES is TRUE.   

References chrec_dont_know, compute_all_dependences(), find_data_references_in_bb(), and vNULL.

bool compute_data_dependences_for_loop ( struct loop loop,
bool  compute_self_and_read_read_dependences,
vec< loop_p > *  loop_nest,
vec< data_reference_p > *  datarefs,
vec< ddr_p > *  dependence_relations 
)
void compute_self_dependence ( struct data_dependence_relation )
struct data_reference* create_data_ref ( loop_p  nest,
loop_p  loop,
tree  memref,
gimple  stmt,
bool  is_read 
)
read
Analyzes memory reference MEMREF accessed in STMT.  The reference
   is read if IS_READ is true, write otherwise.  Returns the
   data_reference description of MEMREF.  NEST is the outermost loop
   in which the reference should be instantiated, LOOP is the loop in
   which the data reference should be analyzed.   

References DR_ACCESS_FN, DR_ALIGNED_TO, dr_analyze_alias(), dr_analyze_indices(), dr_analyze_innermost(), DR_BASE_ADDRESS, DR_BASE_OBJECT, DR_INIT, DR_IS_READ, DR_NUM_DIMENSIONS, DR_OFFSET, DR_REF, DR_STEP, DR_STMT, dump_file, dump_flags, data_reference::is_read, print_generic_expr(), print_generic_stmt(), and data_reference::stmt.

Referenced by create_rdg_vertices(), determine_loop_nest_reuse(), find_data_references_in_stmt(), graphite_find_data_references_in_stmt(), and vect_analyze_data_refs().

static unsigned ddr_dependence_level ( )
inlinestatic
Return the dependence level for the DDR relation.   

References DDR_DIST_VECT, DDR_DIST_VECTS, DDR_NB_LOOPS, DDR_NUM_DIST_VECTS, dependence_level(), and vector.

Referenced by create_rdg_edge_for_ddr().

static bool ddr_is_anti_dependent ( )
inlinestatic
Return true when DDR is an anti-dependence relation.   

References DDR_A, DDR_ARE_DEPENDENT, DDR_B, DR_IS_READ, DR_IS_WRITE, and same_access_functions().

Referenced by ddrs_have_anti_deps().

static bool ddrs_have_anti_deps ( )
inlinestatic
Return true when DEPENDENCE_RELATIONS contains an anti-dependence.   

References ddr_is_anti_dependent().

void debug ( data_reference ref)
void debug ( data_reference ptr)
void debug ( vec< data_reference_p > &  ref)
void debug ( vec< data_reference_p > *  ptr)
void debug ( vec< ddr_p > &  ref)
void debug ( vec< ddr_p > *  ptr)
void debug_data_dependence_relation ( struct data_dependence_relation )
void debug_data_dependence_relations ( vec< ddr_p )
void debug_data_reference ( struct data_reference )
void debug_data_references ( vec< data_reference_p )
void debug_ddrs ( vec< ddr_p )
void debug_rdg ( struct graph )
void debug_rdg_component ( struct graph ,
int   
)
void debug_rdg_vertex ( struct graph ,
int   
)
static unsigned dependence_level ( )
inlinestatic
Returns the dependence level for a vector DIST of size LENGTH.
   LEVEL = 0 means a lexicographic dependence, i.e. a dependence due
   to the sequence of statements, not carried by any loop.   

Referenced by ddr_dependence_level().

bool dr_analyze_innermost ( struct data_reference ,
struct loop  
)
bool dr_equal_offsets_p ( struct data_reference dra,
struct data_reference drb 
)
Check if DRA and DRB have equal offsets.   

References dr_equal_offsets_p1(), and DR_OFFSET.

Referenced by dr_group_sort_cmp(), vect_analyze_data_ref_accesses(), and vect_slp_analyze_data_ref_dependence().

bool dr_may_alias_p ( const struct data_reference a,
const struct data_reference b,
bool  loop_nest 
)
void dump_data_dependence_relations ( FILE *  file,
vec< ddr_p ddrs 
)
void dump_data_reference ( FILE *  outf,
struct data_reference dr 
)
void dump_rdg ( FILE *  ,
struct graph  
)
tree find_data_references_in_bb ( struct loop loop,
basic_block  bb,
vec< data_reference_p > *  datarefs 
)
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.   

References chrec_dont_know, find_data_references_in_stmt(), gsi_end_p(), gsi_next(), gsi_start_bb(), and gsi_stmt().

Referenced by compute_data_dependences_for_bb(), cond_if_else_store_replacement(), and find_data_references_in_loop().

tree find_data_references_in_loop ( struct loop loop,
vec< data_reference_p > *  datarefs 
)
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.

   TODO: This function should be made smarter so that it can handle address
   arithmetic as if they were array accesses, etc.   

References chrec_dont_know, find_data_references_in_bb(), free(), get_loop_body_in_dom_order(), and loop::num_nodes.

Referenced by compute_data_dependences_for_loop(), and vect_analyze_data_refs().

bool find_data_references_in_stmt ( struct loop nest,
gimple  stmt,
vec< data_reference_p > *  datarefs 
)
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.   

References create_data_ref(), get_references_in_stmt(), data_ref_loc_d::is_read, loop_containing_stmt(), and data_ref_loc_d::pos.

Referenced by find_data_references_in_bb(), and vect_analyze_data_refs().

bool find_loop_nest ( struct loop ,
vec< loop_p > *   
)
void free_data_ref ( data_reference_p  )
void free_data_refs ( vec< data_reference_p )
void free_dependence_relation ( struct data_dependence_relation )
void free_dependence_relations ( vec< ddr_p )
void free_rdg ( struct graph )
bool graphite_find_data_references_in_stmt ( loop_p  nest,
loop_p  loop,
gimple  stmt,
vec< data_reference_p > *  datarefs 
)
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 instantiated, LOOP is the loop in which the references
   should be analyzed.   

References create_data_ref(), get_references_in_stmt(), data_ref_loc_d::is_read, and data_ref_loc_d::pos.

Referenced by analyze_drs_in_stmts(), stmt_has_simple_data_refs_p(), and try_generate_gimple_bb().

static int index_in_loop_nest ( )
inlinestatic
struct data_dependence_relation* initialize_data_dependence_relation ( struct data_reference a,
struct data_reference b,
vec< loop_p loop_nest 
)
read
static lambda_matrix lambda_matrix_new ( )
inlinestatic
Allocate a matrix of M rows x  N cols.   

References lambda_vector_new().

Referenced by analyze_subscript_affine_affine(), and lambda_trans_matrix_new().

static void lambda_vector_clear ( )
inlinestatic
Clear out vector VEC1 of length SIZE.   

References memset().

Referenced by lambda_matrix_vector_mult(), and lambda_vector_mult_const().

static int lambda_vector_gcd ( )
inlinestatic
Compute the greatest common divisor of a VECTOR of SIZE numbers.   

References gcd().

Referenced by omega_setup_subscript().

static bool lambda_vector_lexico_pos ( lambda_vector  v,
unsigned  n 
)
inlinestatic
Returns true when the vector V is lexicographically positive, in
   other words, when the first nonzero element is positive.   

Referenced by build_classic_dist_vector(), and lambda_transform_legal_p().

static bool lambda_vector_zerop ( )
inlinestatic
Return true if vector VEC1 of length SIZE is the zero vector.   

Referenced by determine_loop_nest_reuse().

bool rdg_defs_used_in_other_loops_p ( struct graph ,
int   
)
int rdg_vertex_for_stmt ( struct graph ,
gimple   
)
static bool same_access_functions ( )
inlinestatic
Return true when the DDR contains two data references that have the
   same access functions.   

References DDR_A, DDR_B, DDR_NUM_SUBSCRIPTS, DR_ACCESS_FN, and eq_evolutions_p().

Referenced by build_classic_dist_vector(), ddr_is_anti_dependent(), and init_omega_for_ddr().

static bool same_data_refs ( )
inlinestatic
Return true when the data references A and B are accessing the same
   memory object with the same access functions.   

References DR_ACCESS_FN, DR_NUM_DIMENSIONS, DR_REF, eq_evolutions_p(), operand_equal_p(), and same_data_refs_base_objects().

static bool same_data_refs_base_objects ( )
inlinestatic
Return true when the base objects of data references A and B are
   the same memory object.   

References DR_BASE_OBJECT, DR_NUM_DIMENSIONS, and operand_equal_p().

Referenced by same_data_refs(), and write_memrefs_written_at_least_once().

void split_constant_offset ( tree  ,
tree ,
tree  
)
In tree-data-ref.c