Commit e4595969 authored by Eric Christopher's avatar Eric Christopher
Browse files

Temporarily Revert "[mlir] Add padding to 1-D Vector in CRunnerUtils.h"

as it broke the Werror build:

.../sources/llvm-project/mlir/include/mlir/ExecutionEngine/CRunnerUtils.h:85:16: error: zero size arrays are an extension [-Werror,-Wzero-length-array]
  char padding[detail::nextPowerOf2<sizeof(T[Dim])>() - sizeof(T[Dim])];
               ^~~~~~~~~~~~~~~

This reverts commit 78f9e5d0.
parent 7049cf64
Loading
Loading
Loading
Loading
+2 −38
Original line number Diff line number Diff line
@@ -39,50 +39,14 @@ template <int N> void dropFront(int64_t arr[N], int64_t *res) {
//===----------------------------------------------------------------------===//
// Codegen-compatible structures for Vector type.
//===----------------------------------------------------------------------===//
namespace detail {
  template <unsigned N>
  constexpr unsigned nextPowerOf2();
  template <>
  constexpr unsigned nextPowerOf2<0>() {
    return 1;
  }
  template <>
  constexpr unsigned nextPowerOf2<1>() {
    return 1;
  }
  template <unsigned N>
  constexpr unsigned nextPowerOf2() {
    return (!(N & (N - 1))) ? N : 2 * nextPowerOf2<(N + 1) / 2>();
  }
} // end namespace detail

// N-D vectors recurse down to 1-D.
template <typename T, int Dim, int... Dims>
struct Vector {
  constexpr Vector<T, Dims...> &operator[](unsigned i) { return vector[i]; }
  constexpr const Vector<T, Dims...> &operator[](unsigned i) const {
    return vector[i];
  }

private:
  Vector<T, Dims...> vector[Dim];
};

// 1-D vectors in LLVM are automatically padded to the next power of 2.
// We insert explicit padding in to account for this.
template <typename T, int Dim> struct Vector<T, Dim> {
  Vector() {
    static_assert(detail::nextPowerOf2<sizeof(T[Dim])>() >= sizeof(T[Dim]),
                  "size error");
    static_assert(detail::nextPowerOf2<sizeof(T[Dim])>() < 2 * sizeof(T[Dim]),
                  "size error");
  }
  constexpr T &operator[](unsigned i) { return vector[i]; }
  constexpr const T &operator[](unsigned i) const { return vector[i]; }

private:
template <typename T, int Dim>
struct Vector<T, Dim> {
  T vector[Dim];
  char padding[detail::nextPowerOf2<sizeof(T[Dim])>() - sizeof(T[Dim])];
};

template <int D1, typename T>
+3 −3
Original line number Diff line number Diff line
@@ -92,7 +92,7 @@ void VectorDataPrinter<T, M, Dims...>::print(std::ostream &os,
  static_assert(sizeof(val) == M * StaticSizeMult<Dims...>::value * sizeof(T),
                "Incorrect vector size!");
  // First
  os << "(" << val[0];
  os << "(" << val.vector[0];
  if (M > 1)
    os << ", ";
  if (sizeof...(Dims) > 1)
@@ -100,14 +100,14 @@ void VectorDataPrinter<T, M, Dims...>::print(std::ostream &os,
  // Kernel
  for (unsigned i = 1; i + 1 < M; ++i) {
    printSpace(os, 2 * sizeof...(Dims));
    os << val[i] << ", ";
    os << val.vector[i] << ", ";
    if (sizeof...(Dims) > 1)
      os << "\n";
  }
  // Last
  if (M > 1) {
    printSpace(os, sizeof...(Dims));
    os << val[M - 1];
    os << val.vector[M - 1];
  }
  os << ")";
}