The examples in memref.subview operation are misguided in that subview's strides operands mean "memref-rank number of strides that compose multiplicatively with the base memref strides in each dimension.".
So the below examples should be changed from Strides: [64, 4, 1] to Strides: [1, 1, 1]
Before changes
// Subview with constant offsets, sizes and strides. %1 = memref.subview %0[0, 2, 0][4, 4, 4][64, 4, 1] : memref<8x16x4xf32, (d0, d1, d2) -> (d0 * 64 + d1 * 4 + d2)> to memref<4x4x4xf32, (d0, d1, d2) -> (d0 * 64 + d1 * 4 + d2 + 8)>
After changes
// Subview with constant offsets, sizes and strides. %1 = memref.subview %0[0, 2, 0][4, 4, 4][1, 1, 1] : memref<8x16x4xf32, (d0, d1, d2) -> (d0 * 64 + d1 * 4 + d2)> to memref<4x4x4xf32, (d0, d1, d2) -> (d0 * 64 + d1 * 4 + d2 + 8)>
Also I fixed some syntax issues in docs related with memref layout map and added detailed explanation in subview rank reducing case.
Nit: can this be line wrapped?