[PATCH] D83477: [Matrix] Tighten LangRef definitions and Verifier checks.

Florian Hahn via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Thu Jul 9 10:07:31 PDT 2020


fhahn added inline comments.


================
Comment at: llvm/docs/LangRef.rst:15574
+matrix, using a stride of %Stride between columns. For two consecutive columns
+A and B, %Stride refers to the distance (the number of elements) between the
+start of column A and the start of column B. The result matrix is linearized
----------------
SjoerdMeijer wrote:
> I am actually now also interested in defining  `%Stride` better. Using our new definition:
> 
> > For a `R x C` matrix, element `i` of column `j` is at index `j * R + i` in its vector, with indices starting at 0.  
> 
> From the description of %Stride it follows that:
> 
>   %Stride = ( (j+1) * R + 0) - (j * R + 0)
>   =>
>   %Stride = R
> 
> So double checking: we can simply the description of %Stride just by saying it is equal to the number of rows, is that correct?
Stride can be > the number of rows. 

For example, if you want to load a 2x2 sub-matrix from a 4x4 matrix, you would use `llvm.matrix.column.major.load(%start, 4, false, 2, 2), where %start points to the first element of the sub-matrix.

The function to compute column addresses has an extensive comment about how things work: https://github.com/llvm/llvm-project/blob/master/llvm/lib/Transforms/Scalar/LowerMatrixIntrinsics.cpp#L92

It boils down to something like: the start address of column I in memory is computed as  ` getelementptr %Start,  I * Stride`.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D83477/new/

https://reviews.llvm.org/D83477





More information about the llvm-commits mailing list