GCC Middle and Back End API Reference
datadep_stats Struct Reference

Data Fields

int num_dependence_tests
int num_dependence_dependent
int num_dependence_independent
int num_dependence_undetermined
int num_subscript_tests
int num_subscript_undetermined
int num_same_subscript_function
int num_ziv
int num_ziv_independent
int num_ziv_dependent
int num_ziv_unimplemented
int num_siv
int num_siv_independent
int num_siv_dependent
int num_siv_unimplemented
int num_miv
int num_miv_independent
int num_miv_dependent
int num_miv_unimplemented

Detailed Description

Data references and dependences detectors. Copyright (C) 2003-2013 Free Software Foundation, Inc. Contributed by Sebastian Pop pop@c.nosp@m.ri.e.nosp@m.nsmp..nosp@m.fr

This file is part of GCC.

GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version.

GCC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with GCC; see the file COPYING3. If not see http://www.gnu.org/licenses/. This pass walks a given loop structure searching for array references. The information about the array accesses is recorded in DATA_REFERENCE structures.

The basic test for determining the dependences is: given two access functions chrec1 and chrec2 to a same array, and x and y two vectors from the iteration domain, the same element of the array is accessed twice at iterations x and y if and only if: | chrec1 (x) == chrec2 (y).

The goals of this analysis are:

  • to determine the independence: the relation between two independent accesses is qualified with the chrec_known (this information allows a loop parallelization),
  • when two data references access the same data, to qualify the dependence relation with classic dependence representations:

    • distance vectors
    • direction vectors
    • loop carried level dependence
    • polyhedron dependence or with the chains of recurrences based representation,
  • to define a knowledge base for storing the data dependence information,
  • to define an interface to access this data.

Definitions:

  • subscript: given two array accesses a subscript is the tuple composed of the access functions for a given dimension. Example: Given A[f1][f2][f3] and B[g1][g2][g3], there are three subscripts: (f1, g1), (f2, g2), (f3, g3).
  • Diophantine equation: an equation whose coefficients and solutions are integer constants, for example the equation | 3*x + 2*y = 1 has an integer solution x = 1 and y = -1.

References:

  • "Loop Transformations for Restructuring Compilers - The Foundations" by Utpal Banerjee.

Field Documentation

int datadep_stats::num_dependence_dependent
int datadep_stats::num_dependence_independent
int datadep_stats::num_dependence_tests
int datadep_stats::num_dependence_undetermined
int datadep_stats::num_miv
int datadep_stats::num_miv_dependent
int datadep_stats::num_miv_independent
int datadep_stats::num_miv_unimplemented
int datadep_stats::num_same_subscript_function

Referenced by analyze_miv_subscript().

int datadep_stats::num_siv
int datadep_stats::num_siv_dependent
int datadep_stats::num_siv_independent
int datadep_stats::num_siv_unimplemented
int datadep_stats::num_subscript_tests
int datadep_stats::num_subscript_undetermined
int datadep_stats::num_ziv
int datadep_stats::num_ziv_dependent
int datadep_stats::num_ziv_independent
int datadep_stats::num_ziv_unimplemented

The documentation for this struct was generated from the following file: