This is an automated email from the ASF dual-hosted git repository. andrewzhaoluo pushed a commit to branch aluo/rebase-08312022-autotensorization-fq2i-changes in repository https://gitbox.apache.org/repos/asf/tvm.git
commit 46e9243f676222822bbb1ef3e794171de77d6d54 Author: Andrew Zhao Luo <[email protected]> AuthorDate: Fri Sep 2 14:03:58 2022 -0700 old string without stringview --- include/tvm/runtime/container/string.h | 35 +++++++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/include/tvm/runtime/container/string.h b/include/tvm/runtime/container/string.h index 5ecd89e9f5..28b0358014 100644 --- a/include/tvm/runtime/container/string.h +++ b/include/tvm/runtime/container/string.h @@ -36,9 +36,36 @@ #include <initializer_list> #include <memory> #include <string> +#include <unordered_map> +#include <utility> +// We use c++14 std::experimental::string_view for optimizing hash computation +// only right now, its usage is limited in this file. Any broader usage of +// std::experiment in our core codebase is discouraged and needs community +// discussion for each use case. Reference for feature test macros of +// string_view: +// https://isocpp.org/std/standing-documents/sd-6-sg10-feature-test-recommendations +// https://en.cppreference.com/w/User:D41D8CD98F/feature_testing_macros +#if defined(__cpp_lib_experimental_string_view) && __cpp_lib_experimental_string_view >= 201411 +#define TVM_USE_CXX14_STRING_VIEW_HASH 1 +#else +#define TVM_USE_CXX14_STRING_VIEW_HASH 0 +#endif + +// Tested with clang version 9.0.1 and c++17. It will detect string_view support +// correctly. +#if defined(__cpp_lib_string_view) && __cpp_lib_string_view >= 201606 +#define TVM_USE_CXX17_STRING_VIEW_HASH 1 +#else +#define TVM_USE_CXX17_STRING_VIEW_HASH 0 +#endif + +#if TVM_USE_CXX17_STRING_VIEW_HASH #include <string_view> +#elif TVM_USE_CXX14_STRING_VIEW_HASH +#include <experimental/string_view> +#endif + #include <type_traits> -#include <unordered_map> #include <utility> #include <vector> @@ -250,7 +277,13 @@ class String : public ObjectRef { static size_t HashBytes(const char* data, size_t size) { // This function falls back to string copy with c++11 compiler and is // recommended to be compiled with c++14 +#if TVM_USE_CXX17_STRING_VIEW_HASH return std::hash<std::string_view>()(std::string_view(data, size)); +#elif TVM_USE_CXX14_STRING_VIEW_HASH + return std::hash<std::experimental::string_view>()(std::experimental::string_view(data, size)); +#else + return std::hash<std::string>()(std::string(data, size)); +#endif } TVM_DEFINE_NOTNULLABLE_OBJECT_REF_METHODS(String, ObjectRef, StringObj);
