void initDimflags()

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;
      }
    }
  }