[mlir][CRunnerUtils] Enable compilation with C++11 toolchain on microcontroller platf...
authorNicolas Vasilache <ntv@google.com>
Thu, 12 Mar 2020 14:07:16 +0000 (10:07 -0400)
committerNicolas Vasilache <ntv@google.com>
Thu, 12 Mar 2020 14:18:56 +0000 (10:18 -0400)
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

mlir/include/mlir/ExecutionEngine/CRunnerUtils.h
mlir/lib/ExecutionEngine/CMakeLists.txt

index 0d3b765..c1ab742 100644 (file)
@@ -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];
   }
 
index 04469a9..a30f987 100644 (file)
@@ -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)