Confusion while Understanding Notation for Iteration Vectors in Polyhedral Model - OpenScop Documentation


I am entirely new to the realms of LLVM, MLIR, and OpenScop. I was trying to understand how the polyhedral model works and luckily found OpenScop documentation where the author explained very beginner-friendly way.

However, I encountered some confusion at a certain point during my reading, and I am seeking assistance in understanding the specific section that has me puzzled. I couldn’t find an OpenScop forum for queries. So I thought this forum may be the appropriate place to seek guidance.

Here is the documentation link: OpenScop Documentation.

In section 2.2.1 Iteration Domain

pi = 3.14;               // S1
for (i = 0; i < 5; i++)
  A[i] = pi;             // S2

The above code example is used for analysis. Here, one execution of a statement is referred to as a statement instance. This means that each statement, such as S1 and S2, acts like a class, and when a statement is executed once, an instance of that statement is created.

So, the list of statement instances is the following:
pi = 3.14;
A[0] = pi;
A[1] = pi;
A[2] = pi;
A[3] = pi;
A[4] = pi;

My confusion begins regarding notation. To illustrate my confusion, I’d like to directly quote a line from the documentation:

In the polyhedral model we consider statements as functions of the outer loop counters that may produce statement instances: instead of simply “S2”, we use preferably the notation S2(i). For instance we denote the statement instance A[3] = pi; of the previous example as S2(3). This means instance of statement S2 for i = 3.

The above section is clear to me. However, in the subsequent part, they attempt to give a slightly different way of reading the notation using the same example, denoted as S2(3). I am quoting the line that has led to my confusion:

The ordered list of iterators (ordered from the outermost iterator to the innermost iterator) is called the iteration vector . For instance the iteration vector for S3 is (i,j) , for S2 it is (i) , and for S1 it is empty since it has no enclosing loop: (). A more precise reading at the notation S2(3) would show that it denotes the instance of statement S2 for the iteration vector (2) .

Now the question:
The precise notation for S2(3), denotes an instance of S2 for the iteration vector (2). However, I am puzzled as to why it isn’t supposed to be for the iteration vector (3). If the iteration vector is indeed (2), could someone kindly explain how this conclusion is reached? I apologize for this seemingly naive question.

Thanks in advance!

Hi! I believe this is a typo.