in functorch/csrc/PointwiseOperatorCompileCache.cpp [195:220]
void initDimflags(c10::IntArrayRef sizes, c10::IntArrayRef strides,
int64_t ndims) {
// Pack all the properties for each dimension into a uint8.
for (int64_t dim = 0; dim < MAX_DIMS; ++dim) {
if (dim < ndims) {
uint8_t flag = (sizes[dim] == 1 ? SIZE_ONE : SIZE_OTHER);
if (strides[dim] == 0) {
flag |= STRIDE_ZERO;
} else if (strides[dim] == 1) {
flag |= STRIDE_ONE;
} else if (dim + 1 < (int64_t)sizes.size() &&
strides[dim] == strides[dim + 1] * sizes[dim + 1]) {
flag |= STRIDE_CONTIGUOUS;
} else if (dim > 0 &&
strides[dim] == strides[dim - 1] * sizes[dim - 1] &&
(dimflags_[dim - 1] & STRIDE_CONTIGUOUS) == 0) {
flag |= STRIDE_TRANSPOSED_CONTIGUOUS;
} else {
flag |= STRIDE_AS_ARG;
}
dimflags_[dim] = flag;
} else {
dimflags_[dim] = SIZE_MISSING | STRIDE_ZERO;
}
}
}