Commit 8093e31e authored by Nicolas Vasilache's avatar Nicolas Vasilache
Browse files

[mlir][CRunnerUtils] Enable compilation with C++11 toolchain on microcontroller platforms.

Summary:
The C runner utils API was still not vanilla enough for certain use
cases on embedded ARM SDKs, this enables such cases.

Adding people more widely for historical Windows related build issues.

Differential Revision: https://reviews.llvm.org/D76031
parent 46b9f14d
Loading
Loading
Loading
Loading
+9 −11
Original line number Diff line number Diff line
@@ -7,8 +7,8 @@
//===----------------------------------------------------------------------===//
//
// This file declares basic classes and functions to manipulate structured MLIR
// types at runtime. Entities in this file are must be retargetable, including
// on targets without a C++ runtime.
// types at runtime. Entities in this file must be compliant with C++11 and be
// retargetable, including on targets without a C++ runtime.
//
//===----------------------------------------------------------------------===//

@@ -45,9 +45,7 @@ namespace detail {
constexpr bool isPowerOf2(int N) { return (!(N & (N - 1))); }

constexpr unsigned nextPowerOf2(int N) {
  if (N <= 1)
    return 1;
  return isPowerOf2(N) ? N : 2 * nextPowerOf2((N + 1) / 2);
  return (N <= 1) ? 1 : (isPowerOf2(N) ? N : (2 * nextPowerOf2((N + 1) / 2)));
}

template <typename T, int Dim, bool IsPowerOf2>
@@ -59,8 +57,8 @@ struct Vector1D<T, Dim, /*IsPowerOf2=*/true> {
    static_assert(detail::nextPowerOf2(sizeof(T[Dim])) == sizeof(T[Dim]),
                  "size error");
  }
  constexpr T &operator[](unsigned i) { return vector[i]; }
  constexpr const T &operator[](unsigned i) const { return vector[i]; }
  inline T &operator[](unsigned i) { return vector[i]; }
  inline const T &operator[](unsigned i) const { return vector[i]; }

private:
  T vector[Dim];
@@ -76,8 +74,8 @@ struct Vector1D<T, Dim, /*IsPowerOf2=*/false> {
    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]; }
  inline T &operator[](unsigned i) { return vector[i]; }
  inline const T &operator[](unsigned i) const { return vector[i]; }

private:
  T vector[Dim];
@@ -88,8 +86,8 @@ private:
// 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 {
  inline Vector<T, Dims...> &operator[](unsigned i) { return vector[i]; }
  inline const Vector<T, Dims...> &operator[](unsigned i) const {
    return vector[i];
  }

+2 −0
Original line number Diff line number Diff line
@@ -36,7 +36,9 @@ target_link_libraries(MLIRExecutionEngine
  ${outlibs})

add_llvm_library(mlir_c_runner_utils SHARED CRunnerUtils.cpp)
set_property(TARGET mlir_c_runner_utils PROPERTY CXX_STANDARD 11)
add_llvm_library(mlir_c_runner_utils_static CRunnerUtils.cpp)
set_property(TARGET mlir_c_runner_utils_static PROPERTY CXX_STANDARD 11)
target_compile_definitions(mlir_c_runner_utils PRIVATE mlir_c_runner_utils_EXPORTS)

add_llvm_library(mlir_runner_utils SHARED RunnerUtils.cpp)