GCC Middle and Back End API Reference
|
#include <graphite-poly.h>
Data Fields | |
int | id |
int | nb_refs |
void * | compiler_dr |
poly_bb_p | pbb |
enum poly_dr_type | type |
isl_map * | accesses |
isl_set * | extent |
int | dr_base_object_set |
graphite_dim_t | nb_subscripts |
isl_map* poly_dr::accesses |
The access polyhedron contains the polyhedral space this data reference will access.
The polyhedron contains these dimensions:
Do not hardcode the dimensions. Use the following accessor functions:
Example:
| int A[1335][123]; | int *p = malloc (); | | k = ... | for i | { | if (unknown_function ()) | p = A; | ... = p[?][?]; | for j | A[i][j+k] = m; | }
The data access A[i][j+k] in alias set "5" is described like this:
| i j k a s0 s1 1 | 0 0 0 1 0 0 -5 = 0 |-1 0 0 0 1 0 0 = 0 | 0 -1 -1 0 0 1 0 = 0 | 0 0 0 0 1 0 0 >= 0 # The last four lines describe the | 0 0 0 0 0 1 0 >= 0 # array size. | 0 0 0 0 -1 0 1335 >= 0 | 0 0 0 0 0 -1 123 >= 0
The pointer "*p" in alias set "5" and "7" is described as a union of polyhedron:
| i k a s0 1 | 0 0 1 0 -5 = 0 | 0 0 0 1 0 >= 0
"or"
| i k a s0 1 | 0 0 1 0 -7 = 0 | 0 0 0 1 0 >= 0
"*p" accesses all of the object allocated with 'malloc'.
The scalar data access "m" is represented as an array with zero subscript dimensions.
| i j k a 1 | 0 0 0 -1 15 = 0
The difference between the graphite internal format for access data and the OpenSop format is in the order of columns. Instead of having:
| i j k a s0 s1 1 | 0 0 0 1 0 0 -5 = 0 |-1 0 0 0 1 0 0 = 0 | 0 -1 -1 0 0 1 0 = 0 | 0 0 0 0 1 0 0 >= 0 # The last four lines describe the | 0 0 0 0 0 1 0 >= 0 # array size. | 0 0 0 0 -1 0 1335 >= 0 | 0 0 0 0 0 -1 123 >= 0
In OpenScop we have:
| a s0 s1 i j k 1 | 1 0 0 0 0 0 -5 = 0 | 0 1 0 -1 0 0 0 = 0 | 0 0 1 0 -1 -1 0 = 0 | 0 1 0 0 0 0 0 >= 0 # The last four lines describe the | 0 0 1 0 0 0 0 >= 0 # array size. | 0 -1 0 0 0 0 1335 >= 0 | 0 0 -1 0 0 0 123 >= 0
The OpenScop access function is printed as follows:
| 1 # The number of disjunct components in a union of access functions. | R C O I L P # Described bellow. | a s0 s1 i j k 1 | 1 0 0 0 0 0 -5 = 0 | 0 1 0 -1 0 0 0 = 0 | 0 0 1 0 -1 -1 0 = 0 | 0 1 0 0 0 0 0 >= 0 # The last four lines describe the | 0 0 1 0 0 0 0 >= 0 # array size. | 0 -1 0 0 0 0 1335 >= 0 | 0 0 -1 0 0 0 123 >= 0
Where:
In the example, the vector "R C O I L P" is "7 7 3 2 0 1".
void* poly_dr::compiler_dr |
A pointer to compiler's data reference description.
int poly_dr::dr_base_object_set |
Data reference's base object set number, we must assure 2 pdrs are in the same base object set before dependency checking.
isl_set* poly_dr::extent |
int poly_dr::id |
An identifier for this PDR.
int poly_dr::nb_refs |
The number of data refs identical to this one in the PBB.
graphite_dim_t poly_dr::nb_subscripts |
The number of subscripts.
poly_bb_p poly_dr::pbb |
A pointer to the PBB that contains this data reference.
enum poly_dr_type poly_dr::type |