From 8093e31e4e21ea08161587bdac81912d4e8bd7fd Mon Sep 17 00:00:00 2001 From: Nicolas Vasilache Date: Thu, 12 Mar 2020 10:07:16 -0400 Subject: [PATCH] [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 --- mlir/include/mlir/ExecutionEngine/CRunnerUtils.h | 20 +++++++++----------- mlir/lib/ExecutionEngine/CMakeLists.txt | 2 ++ 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/mlir/include/mlir/ExecutionEngine/CRunnerUtils.h b/mlir/include/mlir/ExecutionEngine/CRunnerUtils.h index 0d3b765..c1ab742 100644 --- a/mlir/include/mlir/ExecutionEngine/CRunnerUtils.h +++ b/mlir/include/mlir/ExecutionEngine/CRunnerUtils.h @@ -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 @@ -59,8 +57,8 @@ struct Vector1D { 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 { 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 struct Vector { - constexpr Vector &operator[](unsigned i) { return vector[i]; } - constexpr const Vector &operator[](unsigned i) const { + inline Vector &operator[](unsigned i) { return vector[i]; } + inline const Vector &operator[](unsigned i) const { return vector[i]; } diff --git a/mlir/lib/ExecutionEngine/CMakeLists.txt b/mlir/lib/ExecutionEngine/CMakeLists.txt index 04469a9..a30f987 100644 --- a/mlir/lib/ExecutionEngine/CMakeLists.txt +++ b/mlir/lib/ExecutionEngine/CMakeLists.txt @@ -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) -- 2.7.4