//===----------------------------------------------------------------------===//
//
// 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.
//
//===----------------------------------------------------------------------===//
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>
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];
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];
// 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];
}
${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)