diff --git a/apps/hexagon_api/CMakeLists.txt b/apps/hexagon_api/CMakeLists.txt index 5234be3c1a15..aa971c875307 100644 --- a/apps/hexagon_api/CMakeLists.txt +++ b/apps/hexagon_api/CMakeLists.txt @@ -45,7 +45,7 @@ ExternalProject_Add(x86_tvm_runtime_rpc "-DCMAKE_C_COMPILER_LAUNCHER=${CMAKE_C_COMPILER_LAUNCHER}" "-DCMAKE_CXX_COMPILER_LAUNCHER=${CMAKE_CXX_COMPILER_LAUNCHER}" "-DUSE_HEXAGON_TOOLCHAIN=${USE_HEXAGON_TOOLCHAIN}" - "-DCMAKE_CXX_STANDARD=14" + "-DCMAKE_CXX_STANDARD=17" "-DUSE_LIBBACKTRACE=OFF" "-DUSE_RPC=ON" "-DUSE_CPP_RPC=ON" @@ -79,7 +79,7 @@ ExternalProject_Add(android_tvm_runtime_rpc "-DANDROID_ABI=${ANDROID_ABI}" "-DUSE_HEXAGON_SDK=${USE_HEXAGON_SDK}" "-DUSE_HEXAGON_ARCH=${USE_HEXAGON_ARCH}" - "-DCMAKE_CXX_STANDARD=14" + "-DCMAKE_CXX_STANDARD=17" "-DUSE_LIBBACKTRACE=OFF" "-DUSE_RPC=ON" "-DUSE_CPP_RPC=ON" @@ -123,6 +123,7 @@ ExternalProject_Add(hexagon_tvm_runtime_rpc "-DCMAKE_CXX_COMPILER=${USE_HEXAGON_TOOLCHAIN}/bin/hexagon-clang++" "-DUSE_HEXAGON_SDK=${USE_HEXAGON_SDK}" "-DUSE_HEXAGON_ARCH=${USE_HEXAGON_ARCH}" + "-DCMAKE_CXX_STANDARD=17" "-DUSE_LIBBACKTRACE=OFF" "-DUSE_RPC=OFF" "-DUSE_HEXAGON=ON" diff --git a/apps/hexagon_launcher/cmake/android/CMakeLists.txt b/apps/hexagon_launcher/cmake/android/CMakeLists.txt index 69334a3b690b..84ff4add284b 100644 --- a/apps/hexagon_launcher/cmake/android/CMakeLists.txt +++ b/apps/hexagon_launcher/cmake/android/CMakeLists.txt @@ -73,7 +73,7 @@ ExternalProject_Add(android_tvm_runtime CMAKE_ARGS "-DANDROID_ABI=${ANDROID_ABI}" "-DANDROID_PLATFORM=${ANDROID_PLATFORM}" - "-DCMAKE_CXX_STANDARD=14" + "-DCMAKE_CXX_STANDARD=17" "-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}" "-DUSE_HEXAGON=ON" "-DUSE_GRAPH_EXECUTOR=OFF" diff --git a/apps/hexagon_launcher/cmake/hexagon/CMakeLists.txt b/apps/hexagon_launcher/cmake/hexagon/CMakeLists.txt index 0e7abb532fd7..fa17dcb4778b 100644 --- a/apps/hexagon_launcher/cmake/hexagon/CMakeLists.txt +++ b/apps/hexagon_launcher/cmake/hexagon/CMakeLists.txt @@ -82,7 +82,7 @@ ExternalProject_Add(static_hexagon_tvm_runtime "-DBUILD_STATIC_RUNTIME=ON" "-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}" "-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}" - "-DCMAKE_CXX_STANDARD=14" + "-DCMAKE_CXX_STANDARD=17" "-DUSE_HEXAGON=ON" "-DUSE_HEXAGON_ARCH=${USE_HEXAGON_ARCH}" "-DUSE_HEXAGON_SDK=${USE_HEXAGON_SDK}" diff --git a/conda/recipe/build.sh b/conda/recipe/build.sh index bfae99f77944..0131fd65a48e 100755 --- a/conda/recipe/build.sh +++ b/conda/recipe/build.sh @@ -26,7 +26,7 @@ MACOS_OPT="" if [ "$target_platform" == "osx-64" ]; then # macOS 64 bits GPU_OPT="-DUSE_METAL=ON" - MACOS_OPT="-DCMAKE_OSX_DEPLOYMENT_TARGET=10.12" + MACOS_OPT="-DCMAKE_OSX_DEPLOYMENT_TARGET=10.13" elif [ "$target_platform" == "linux-64" ]; then TOOLCHAIN_OPT="-DCMAKE_TOOLCHAIN_FILE=${RECIPE_DIR}/cross-linux.cmake" fi diff --git a/src/relay/transforms/fold_explicit_padding.cc b/src/relay/transforms/fold_explicit_padding.cc index 37385f80c1c9..794bcfd3d07d 100644 --- a/src/relay/transforms/fold_explicit_padding.cc +++ b/src/relay/transforms/fold_explicit_padding.cc @@ -22,7 +22,6 @@ * \brief A pass for folding explicit pads into other ops. */ -#include #include #include #include @@ -32,6 +31,10 @@ #include #include +#include +#include +#include + #include "../op/tensor/transform.h" #include "pattern_utils.h" @@ -180,10 +183,10 @@ class SimplifyExplicitPad { return attrs; } - static const Optional> get_padding(const PadAttrs* param, - std::string data_layout) { + static const std::optional> get_padding(const PadAttrs* param, + std::string data_layout) { // Gets spatial axes padding from the given PadAttrs `param`. If padding - // is non-zero on non-spatial axes, return NullOpt. + // is non-zero on non-spatial axes, return std::nullopt. ICHECK(param); ICHECK(data_layout.size() == param->pad_width.size()) << "Data Layout and padding attributes should have the same extent"; @@ -196,7 +199,7 @@ class SimplifyExplicitPad { if (!image_dims.count(data_layout[i])) { for (size_t j = 0; j < param->pad_width[i].size(); ++j) { if (param->pad_width[i][j] != 0) { - return NullOpt; + return std::nullopt; } } } diff --git a/src/relay/transforms/pattern_utils.h b/src/relay/transforms/pattern_utils.h index f71d84434dbb..d05d39b733d3 100644 --- a/src/relay/transforms/pattern_utils.h +++ b/src/relay/transforms/pattern_utils.h @@ -27,7 +27,6 @@ #define TVM_RELAY_TRANSFORMS_PATTERN_UTILS_H_ #include -#include #include #include #include @@ -40,6 +39,7 @@ #include #include +#include #include #include #include @@ -405,48 +405,47 @@ inline bool IsEqualScalar(const Expr& a, const Expr& b) { * \param i element index * \return Converted scalar value, or None if conversion failed */ -static inline dmlc::optional TryToScalar(const runtime::NDArray& array, size_t i = 0) { +static inline std::optional TryToScalar(const runtime::NDArray& array, size_t i = 0) { if (array->dtype.code == kDLInt) { if (array->dtype.bits == 8) { - return dmlc::optional(reinterpret_cast(array->data)[i]); + return std::optional(reinterpret_cast(array->data)[i]); } else if (array->dtype.bits == 16) { - return dmlc::optional(reinterpret_cast(array->data)[i]); + return std::optional(reinterpret_cast(array->data)[i]); } else if (array->dtype.bits == 32) { - return dmlc::optional(reinterpret_cast(array->data)[i]); + return std::optional(reinterpret_cast(array->data)[i]); } else if (array->dtype.bits == 64) { - return dmlc::optional(reinterpret_cast(array->data)[i]); + return std::optional(reinterpret_cast(array->data)[i]); } } else if (array->dtype.code == kDLUInt) { if (array->dtype.bits == 1) { // bool - return dmlc::optional(reinterpret_cast(array->data)[i]); + return std::optional(reinterpret_cast(array->data)[i]); } else if (array->dtype.bits == 8) { - return dmlc::optional(reinterpret_cast(array->data)[i]); + return std::optional(reinterpret_cast(array->data)[i]); } else if (array->dtype.bits == 16) { - return dmlc::optional(reinterpret_cast(array->data)[i]); + return std::optional(reinterpret_cast(array->data)[i]); } else if (array->dtype.bits == 32) { - return dmlc::optional(reinterpret_cast(array->data)[i]); + return std::optional(reinterpret_cast(array->data)[i]); } else if (array->dtype.bits == 64) { - return dmlc::optional(reinterpret_cast(array->data)[i]); + return std::optional(reinterpret_cast(array->data)[i]); } } else if (array->dtype.code == kDLFloat) { if (array->dtype.bits == 16) { - return dmlc::optional( + return std::optional( __extendXfYf2__( reinterpret_cast(array->data)[i])); } if (array->dtype.bits == 32) { - return dmlc::optional(reinterpret_cast(array->data)[i]); + return std::optional(reinterpret_cast(array->data)[i]); } else if (array->dtype.bits == 64) { - return dmlc::optional(reinterpret_cast(array->data)[i]); + return std::optional(reinterpret_cast(array->data)[i]); } } else if (array->dtype.code == kDLBfloat) { if (array->dtype.bits == 16) { - return dmlc::optional( - __extendXfYf2__( - reinterpret_cast(array->data)[i])); + return std::optional(__extendXfYf2__( + reinterpret_cast(array->data)[i])); } } - return dmlc::optional(); + return std::nullopt; } /*! diff --git a/src/runtime/hexagon/rpc/simulator/session.cc b/src/runtime/hexagon/rpc/simulator/session.cc index 0469ad5e6e1a..8943c0b4bfe5 100644 --- a/src/runtime/hexagon/rpc/simulator/session.cc +++ b/src/runtime/hexagon/rpc/simulator/session.cc @@ -18,7 +18,6 @@ */ #include -#include #include #include // POSIX includes @@ -31,6 +30,7 @@ #include #include #include +#include #include #include #include @@ -55,19 +55,6 @@ using string_list = std::deque; namespace detail { -// An "Optional" class, originally a replacement for llvm::Optional, then an -// extension of dmlc::optional to make it compatible with C++17's std::optional. -template -struct Optional : public dmlc::optional { - using dmlc::optional::optional; - using dmlc::optional::operator=; - Optional(const T& val) : dmlc::optional(val) {} // NOLINT(*) - Optional() = default; - - T* operator->() { return &this->operator*(); } - const T* operator->() const { return &this->operator*(); } -}; - // Replacement for llvm::StringSwitch. template class StringSwitch { @@ -94,10 +81,10 @@ class StringSwitch { private: const std::string key; std::map map; - Optional def_val; + std::optional def_val; }; -using MaybeString = Optional; +using MaybeString = std::optional; MaybeString front(const string_list& deq) { return !deq.empty() ? MaybeString(deq.front()) : MaybeString(); @@ -112,65 +99,60 @@ MaybeString pop_front(string_list& deq) { // NOLINT(*) // Functions used when parsing the argument string. -Optional to_int(const MaybeString& str) { - auto none = Optional(); +std::optional to_int(const MaybeString& str) { if (str.has_value()) { try { size_t pos; int64_t val = std::stoll(*str, &pos, 0); - return pos == str->size() ? Optional(val) : none; + return pos == str->size() ? std::optional(val) : std::nullopt; } catch (std::invalid_argument&) { } } - return none; + return std::nullopt; } -Optional to_uint(const MaybeString& str) { - auto none = Optional(); +std::optional to_uint(const MaybeString& str) { if (str.has_value()) { try { size_t pos; uint64_t val = std::stoull(*str, &pos, 0); - return pos == str->size() ? Optional(val) : none; + return pos == str->size() ? std::optional(val) : std::nullopt; } catch (std::invalid_argument&) { } } - return none; + return std::nullopt; } -Optional to_float(const MaybeString& str) { - auto none = Optional(); +std::optional to_float(const MaybeString& str) { if (str.has_value()) { try { size_t pos; float val = std::stof(*str, &pos); - return pos == str->size() ? Optional(val) : none; + return pos == str->size() ? std::optional(val) : std::nullopt; } catch (std::invalid_argument&) { } } - return none; + return std::nullopt; } -Optional to_bool(const MaybeString& str) { - auto none = Optional(); +std::optional to_bool(const MaybeString& str) { if (auto num = to_int(str)) { if (*num == 0) return false; if (*num == 1) return true; - return none; + return std::nullopt; } if (str) { if (*str == "true" || *str == "TRUE") return true; if (*str == "false" || *str == "FALSE") return false; } - return none; + return std::nullopt; } template -using MaybeRange = Optional>; +using MaybeRange = std::optional>; -template Parse(const MaybeString&)> +template Parse(const MaybeString&)> MaybeRange to_range(const MaybeString& str) { - auto none = MaybeRange(); if (str && !str->empty()) { auto n = str->find('-', 1); if (n != std::string::npos) { @@ -181,7 +163,7 @@ MaybeRange to_range(const MaybeString& str) { } } } - return none; + return std::nullopt; } } // namespace detail @@ -227,7 +209,7 @@ class SimulatorRPCChannel final : public RPCChannel { static HEX_8u_t PassVirtAddrCallback(void* handle, int threadno, HEX_8u_t RssV, HEX_8u_t RttV, HEX_8u_t RxxV, HEX_1u_t imm); - detail::Optional GetCPU(const detail::MaybeString& cpu_str); + std::optional GetCPU(const detail::MaybeString& cpu_str); // File name templates for mkstemps. #define SUFFIX ".cfg" @@ -306,17 +288,17 @@ class SimulatorRPCChannel final : public RPCChannel { bool HandleV2PTranslation(string_list& rest); // NOLINT(*) bool HandleVerbose(string_list& rest); // NOLINT(*) - using MaybeUInt64 = detail::Optional; + using MaybeUInt64 = std::optional; using MaybeUIntRange = std::pair; bool should_parse_next(const string_list& rest); - detail::Optional to_interval(const detail::MaybeString& str); - detail::Optional to_timingmode(const detail::MaybeString& str); - detail::Optional to_verbosemode(const detail::MaybeString& str); - detail::Optional to_nullptr(const detail::MaybeString& str); + std::optional to_interval(const detail::MaybeString& str); + std::optional to_timingmode(const detail::MaybeString& str); + std::optional to_verbosemode(const detail::MaybeString& str); + std::optional to_nullptr(const detail::MaybeString& str); MaybeUIntRange ahb_, axi2_; - detail::Optional debug_port_; + std::optional debug_port_; using OptionHandler = bool (SimulatorRPCChannel::*)(string_list&); static std::map opt_map_; @@ -556,15 +538,14 @@ HEX_8u_t SimulatorRPCChannel::PassVirtAddrCallback(void* handle, int threadno, H return RssV; } -detail::Optional SimulatorRPCChannel::GetCPU(const detail::MaybeString& cpu_str) { - auto none = detail::Optional(); - if (!cpu_str) return none; - return detail::StringSwitch>(*cpu_str) +std::optional SimulatorRPCChannel::GetCPU(const detail::MaybeString& cpu_str) { + if (!cpu_str) return std::nullopt; + return detail::StringSwitch>(*cpu_str) .Case("v65", HEX_CPU_V65) .Case("v66", HEX_CPU_V66) .Case("v68", HEX_CPU_V68) .Case("v69", HEX_CPU_V69) - .Default(none); + .Default(std::nullopt); } SimulatorRPCChannel::SimulatorRPCChannel(int stack_size, std::string args) { @@ -1265,9 +1246,8 @@ bool SimulatorRPCChannel::should_parse_next(const string_list& rest) { return false; } -detail::Optional SimulatorRPCChannel::to_interval(const detail::MaybeString& str) { - auto none = detail::Optional(); - if (!str) return none; +std::optional SimulatorRPCChannel::to_interval(const detail::MaybeString& str) { + if (!str) return std::nullopt; if (auto val = detail::to_int(*str)) { switch (*val) { @@ -1280,19 +1260,18 @@ detail::Optional SimulatorRPCChannel::to_interval(const detail: } } - return detail::StringSwitch>(*str) + return detail::StringSwitch>(*str) .Case("MILLISEC", HEX_MILLISEC) .Case("MICROSEC", HEX_MICROSEC) .Case("NANOSEC", HEX_NANOSEC) .Case("PICOSEC", HEX_PICOSEC) .Case("PCYCLE", HEX_PCYCLE) - .Default(none); + .Default(std::nullopt); } -detail::Optional SimulatorRPCChannel::to_timingmode( +std::optional SimulatorRPCChannel::to_timingmode( const detail::MaybeString& str) { - auto none = detail::Optional(); - if (!str) return none; + if (!str) return std::nullopt; if (auto val = detail::to_int(*str)) { switch (*val) { @@ -1304,18 +1283,17 @@ detail::Optional SimulatorRPCChannel::to_timingmode( } } - return detail::StringSwitch>(*str) + return detail::StringSwitch>(*str) .Case("NOTIMING", HEX_NOTIMING) .Case("TIMING_NODBC", HEX_TIMING_NODBC) .Case("TIMING", HEX_TIMING) .Case("TIMING_COHERENCY", HEX_TIMING_COHERENCY) - .Default(none); + .Default(std::nullopt); } -detail::Optional SimulatorRPCChannel::to_verbosemode( +std::optional SimulatorRPCChannel::to_verbosemode( const detail::MaybeString& str) { - auto none = detail::Optional(); - if (!str) return none; + if (!str) return std::nullopt; if (auto val = detail::to_int(*str)) { switch (*val) { @@ -1328,18 +1306,17 @@ detail::Optional SimulatorRPCChannel::to_verbosemode( } } - return detail::StringSwitch>(*str) + return detail::StringSwitch>(*str) .Case("SILENT", HEX_SILENT) .Case("QUIET", HEX_QUIET) .Case("NORMAL", HEX_NORMAL) .Case("VERBOSE", HEX_VERBOSE) .Case("REALLY_VERBOSE", HEX_REALLY_VERBOSE) - .Default(none); + .Default(std::nullopt); } -detail::Optional SimulatorRPCChannel::to_nullptr(const detail::MaybeString& str) { - auto none = detail::Optional(); - if (!str) return none; +std::optional SimulatorRPCChannel::to_nullptr(const detail::MaybeString& str) { + if (!str) return std::nullopt; if (auto val = detail::to_int(*str)) { switch (*val) { @@ -1351,12 +1328,12 @@ detail::Optional SimulatorRPCChannel::to_nullptr(const detail::M } } - return detail::StringSwitch>(*str) + return detail::StringSwitch>(*str) .Case("IGNORE", HEX_NULLPTR_IGNORE) .Case("WARN", HEX_NULLPTR_WARN) .Case("FATAL", HEX_NULLPTR_FATAL) .Case("PCZERO", HEX_NULLPTR_PCZERO) - .Default(none); + .Default(std::nullopt); } TVM_REGISTER_GLOBAL("tvm.contrib.hexagon.create_hexagon_session") diff --git a/src/runtime/vm/profiler/vm.cc b/src/runtime/vm/profiler/vm.cc index 0ace910b5c53..db8a3f5dc2c4 100644 --- a/src/runtime/vm/profiler/vm.cc +++ b/src/runtime/vm/profiler/vm.cc @@ -73,7 +73,7 @@ PackedFunc VirtualMachineDebug::GetFunction(const std::string& name, invoke(arg_name); prof_.operator*().Stop(); auto report = prof_.operator*().Report(); - prof_ = dmlc::optional(); // releases hardware counters + prof_ = std::nullopt; // releases hardware counters return report; }); } else if (name == "profile_rpc") { diff --git a/src/runtime/vm/profiler/vm.h b/src/runtime/vm/profiler/vm.h index 0c9e94c0ddd6..f0374c75a767 100644 --- a/src/runtime/vm/profiler/vm.h +++ b/src/runtime/vm/profiler/vm.h @@ -25,11 +25,11 @@ #ifndef TVM_RUNTIME_VM_PROFILER_VM_H_ #define TVM_RUNTIME_VM_PROFILER_VM_H_ -#include #include #include #include +#include #include #include #include @@ -55,7 +55,7 @@ class VirtualMachineDebug : public VirtualMachine { void OpStopHook() final; std::unordered_map packed_index_map_; - dmlc::optional prof_; + std::optional prof_; }; } // namespace vm diff --git a/src/te/autodiff/ad_simplify.cc b/src/te/autodiff/ad_simplify.cc index 240adf14b31d..28f57c77da70 100644 --- a/src/te/autodiff/ad_simplify.cc +++ b/src/te/autodiff/ad_simplify.cc @@ -44,7 +44,6 @@ * Due to TVM's restriction, we also lift the reduction to the top of the compute stage. * */ -#include #include #include #include @@ -54,6 +53,7 @@ #include #include +#include #include #include "ad_utils.h" @@ -629,9 +629,9 @@ class EliminateDivModMutator : public ExprMutator { } private: - dmlc::optional> AddNewVarPair(const PrimExpr& e, const PrimExpr& mut, - int64_t val, DivMode mode) { - using tresult = dmlc::optional>; + std::optional> AddNewVarPair(const PrimExpr& e, const PrimExpr& mut, + int64_t val, DivMode mode) { + using tresult = std::optional>; // Try to find the variables using the mutated expressions if (!e.same_as(mut)) { diff --git a/src/tir/transforms/common_subexpr_elim_tools.h b/src/tir/transforms/common_subexpr_elim_tools.h index fcd29fddc0a1..0871fd009149 100644 --- a/src/tir/transforms/common_subexpr_elim_tools.h +++ b/src/tir/transforms/common_subexpr_elim_tools.h @@ -33,12 +33,11 @@ #include #include // For the class StmtExprVisitor +#include #include // For the hashtable datatype #include // For pairs datatype #include -#include "../../../3rdparty/dmlc-core/include/dmlc/optional.h" - namespace tvm { namespace tir { @@ -177,7 +176,7 @@ class UsesVarName : public StmtExprVisitor { */ void PrintComputationTable(const ComputationTable& table); -using MaybeValue = dmlc::optional; +using MaybeValue = std::optional; bool EqualTerms(const PrimExpr& a, const PrimExpr& b); // Used for deciding the (decidable) equivalence relation