This document contains the newgen structures for Manjunathaiah M complementary sections.
External Pvecteur
Import reference from "ri.newgen"
Import action from "ri.newgen"
simple_section = context:context_info x dad:dad_struct
A simple section has two parts. a) context information and b) the section descriptor
context_info = line:int x rank:int x nest:int
Context includes the line number of the source, the dimensionality of the array(denoted as rank) and the scope of the array reference
dad_struct = rtemps:ref_temp* x shape:bound_pair*
The descriptor is a two tuple. The first element is used when applying translation algorithm. The second element describes the access shape a.k.a convex polyhedron.
ref_temp = index:int x rtype
Actually we want an array of ints of size = Rank. Hence a partial function index -¿ rtype. I don’t like this roundabout but I don’t have the time to look at different options.
rtype = nonlinear:unit + linvariant:unit + lininvariant:unit
The different values that each element of reftemps can hold. I would have prefered enumerated types.
bound_pair = index:int x lb:Pvecteur x ub:Pvecteur
Again a partial function to simulate arrays.
comp_sec = hull:simple_section x complements:simple_section*
A complementary section is a list of simple sections. It is structured as a pair (E,C) for conceptual reasons. If the second element of this pair is empty then Compsec = simple section!
comp_desc = persistant reference x action x section:comp_sec
A descriptor includes the array entity and the section information
comp_desc_set = comp_descs:comp_desc*
And finally the set of descriptors.