Strip GCC5 stuff from PyTorch (#85914)

[This file](https://github.com/pytorch/pytorch/pull/63208/files) indicates that we don't support anything less than GCC 7.5. Given that, let's remove this GCC 5 stuff.
Pull Request resolved: https://github.com/pytorch/pytorch/pull/85914
Approved by: https://github.com/ezyang
This commit is contained in:
Richard Barnes 2022-10-26 00:07:44 +00:00 committed by PyTorch MergeBot
parent 21f7e7d040
commit 85ffbedfb2
5 changed files with 10 additions and 36 deletions

View File

@ -451,15 +451,6 @@ Tensor& orgqr_kernel_impl(Tensor& result, const Tensor& tau) {
return result; return result;
} }
// we use `enum class LapackLstsqDriverType` as keys in an unordered_map.
// Clang5 and Gcc5 do not support std::hash for enum classes, hence
// we provide our own hash function.
struct LapackLstsqDriverTypeHash {
std::size_t operator()(const LapackLstsqDriverType& driver_type) const {
return static_cast<std::size_t>(driver_type);
}
};
/* /*
Solves a least squares problem. That is minimizing ||B - A X||. Solves a least squares problem. That is minimizing ||B - A X||.
@ -490,7 +481,7 @@ void apply_lstsq(const Tensor& A, Tensor& B, Tensor& rank, Tensor& singular_valu
auto lapack_func = lapackLstsq<driver_t::Gelsd, scalar_t, value_t>; auto lapack_func = lapackLstsq<driver_t::Gelsd, scalar_t, value_t>;
static auto driver_type_to_func static auto driver_type_to_func
= std::unordered_map<driver_t, decltype(lapack_func), LapackLstsqDriverTypeHash>({ = std::unordered_map<driver_t, decltype(lapack_func)>({
{driver_t::Gels, lapackLstsq<driver_t::Gels, scalar_t, value_t>}, {driver_t::Gels, lapackLstsq<driver_t::Gels, scalar_t, value_t>},
{driver_t::Gelsy, lapackLstsq<driver_t::Gelsy, scalar_t, value_t>}, {driver_t::Gelsy, lapackLstsq<driver_t::Gelsy, scalar_t, value_t>},
{driver_t::Gelsd, lapackLstsq<driver_t::Gelsd, scalar_t, value_t>}, {driver_t::Gelsd, lapackLstsq<driver_t::Gelsd, scalar_t, value_t>},

View File

@ -119,7 +119,7 @@ Tensor qcat_nhwc_kernel(
c10::nullopt); c10::nullopt);
// N, H, and W are explicitly captured here because there's a bug in GCC5 // N, H, and W are explicitly captured here because there's a bug in GCC5
// which causes an internal compiler error if they're not // and clang5 which causes an internal compiler error if they're not
AT_DISPATCH_QINT_TYPES(output.scalar_type(), "qcat_nhwc", [&, N, H, W]() { AT_DISPATCH_QINT_TYPES(output.scalar_type(), "qcat_nhwc", [&, N, H, W]() {
using Vec = Vectorized<scalar_t>; using Vec = Vectorized<scalar_t>;
at::parallel_for(0, N * H * W, 0, [&](int64_t begin, int64_t end) { at::parallel_for(0, N * H * W, 0, [&](int64_t begin, int64_t end) {

View File

@ -439,15 +439,6 @@ __device__ __attribute__((noinline)) __attribute__((weak)) void __assert_fail(
#define C10_IS_TRIVIALLY_COPYABLE(T) std::is_trivially_copyable<T>::value #define C10_IS_TRIVIALLY_COPYABLE(T) std::is_trivially_copyable<T>::value
#endif #endif
#if !defined(__clang__) && !defined(_MSC_VER) && defined(__GNUC__) && \
__GNUC__ < 6
#define CONSTEXPR_EXCEPT_GCC5
#define IS_NOT_GCC5_CONSTEXPR 0
#else
#define CONSTEXPR_EXCEPT_GCC5 constexpr
#define IS_NOT_GCC5_CONSTEXPR 1
#endif
#if defined(__CUDA_ARCH__) #if defined(__CUDA_ARCH__)
#if defined(_MSC_VER) && defined(__CUDACC__) #if defined(_MSC_VER) && defined(__CUDACC__)
#define CONSTEXPR_EXCEPT_WIN_CUDA const #define CONSTEXPR_EXCEPT_WIN_CUDA const

View File

@ -218,19 +218,17 @@ static_assert(!string_view("hello").empty(), "");
} // namespace test_empty } // namespace test_empty
namespace test_remove_prefix { namespace test_remove_prefix {
CONSTEXPR_EXCEPT_GCC5 string_view remove_prefix(string_view input, size_t len) { constexpr string_view remove_prefix(string_view input, size_t len) {
input.remove_prefix(len); input.remove_prefix(len);
return input; return input;
} }
TEST(StringViewTest, whenRemovingValidPrefix_thenWorks) { TEST(StringViewTest, whenRemovingValidPrefix_thenWorks) {
#if IS_NOT_GCC5_CONSTEXPR
static_assert( static_assert(
remove_prefix(string_view("hello"), 0) == string_view("hello"), ""); remove_prefix(string_view("hello"), 0) == string_view("hello"), "");
static_assert( static_assert(
remove_prefix(string_view("hello"), 1) == string_view("ello"), ""); remove_prefix(string_view("hello"), 1) == string_view("ello"), "");
static_assert(remove_prefix(string_view("hello"), 5) == string_view(""), ""); static_assert(remove_prefix(string_view("hello"), 5) == string_view(""), "");
#endif
EXPECT_EQ(remove_prefix(string_view("hello"), 0), string_view("hello")); EXPECT_EQ(remove_prefix(string_view("hello"), 0), string_view("hello"));
EXPECT_EQ(remove_prefix(string_view("hello"), 1), string_view("ello")); EXPECT_EQ(remove_prefix(string_view("hello"), 1), string_view("ello"));
@ -245,19 +243,17 @@ TEST(StringViewTest, whenRemovingTooLargePrefix_thenThrows) {
} // namespace test_remove_prefix } // namespace test_remove_prefix
namespace test_remove_suffix { namespace test_remove_suffix {
CONSTEXPR_EXCEPT_GCC5 string_view remove_suffix(string_view input, size_t len) { constexpr string_view remove_suffix(string_view input, size_t len) {
input.remove_suffix(len); input.remove_suffix(len);
return input; return input;
} }
TEST(StringViewTest, whenRemovingValidSuffix_thenWorks) { TEST(StringViewTest, whenRemovingValidSuffix_thenWorks) {
#if IS_NOT_GCC5_CONSTEXPR
static_assert( static_assert(
remove_suffix(string_view("hello"), 0) == string_view("hello"), ""); remove_suffix(string_view("hello"), 0) == string_view("hello"), "");
static_assert( static_assert(
remove_suffix(string_view("hello"), 1) == string_view("hell"), ""); remove_suffix(string_view("hello"), 1) == string_view("hell"), "");
static_assert(remove_suffix(string_view("hello"), 5) == string_view(""), ""); static_assert(remove_suffix(string_view("hello"), 5) == string_view(""), "");
#endif
EXPECT_EQ(remove_suffix(string_view("hello"), 0), string_view("hello")); EXPECT_EQ(remove_suffix(string_view("hello"), 0), string_view("hello"));
EXPECT_EQ(remove_suffix(string_view("hello"), 1), string_view("hell")); EXPECT_EQ(remove_suffix(string_view("hello"), 1), string_view("hell"));
@ -272,17 +268,15 @@ TEST(StringViewTest, whenRemovingTooLargeSuffix_thenThrows) {
} // namespace test_remove_suffix } // namespace test_remove_suffix
namespace test_swap_function { namespace test_swap_function {
CONSTEXPR_EXCEPT_GCC5 std::pair<string_view, string_view> get() { constexpr std::pair<string_view, string_view> get() {
string_view first = "first"; string_view first = "first";
string_view second = "second"; string_view second = "second";
swap(first, second); swap(first, second);
return std::make_pair(first, second); return std::make_pair(first, second);
} }
TEST(StringViewTest, testSwapFunction) { TEST(StringViewTest, testSwapFunction) {
#if IS_NOT_GCC5_CONSTEXPR
static_assert(string_view("second") == get().first, ""); static_assert(string_view("second") == get().first, "");
static_assert(string_view("first") == get().second, ""); static_assert(string_view("first") == get().second, "");
#endif
EXPECT_EQ(string_view("second"), get().first); EXPECT_EQ(string_view("second"), get().first);
EXPECT_EQ(string_view("first"), get().second); EXPECT_EQ(string_view("first"), get().second);
@ -290,17 +284,15 @@ TEST(StringViewTest, testSwapFunction) {
} // namespace test_swap_function } // namespace test_swap_function
namespace test_swap_method { namespace test_swap_method {
CONSTEXPR_EXCEPT_GCC5 std::pair<string_view, string_view> get() { constexpr std::pair<string_view, string_view> get() {
string_view first = "first"; string_view first = "first";
string_view second = "second"; string_view second = "second";
first.swap(second); first.swap(second);
return std::make_pair(first, second); return std::make_pair(first, second);
} }
TEST(StringViewTest, testSwapMethod) { TEST(StringViewTest, testSwapMethod) {
#if IS_NOT_GCC5_CONSTEXPR
static_assert(string_view("second") == get().first, ""); static_assert(string_view("second") == get().first, "");
static_assert(string_view("first") == get().second, ""); static_assert(string_view("first") == get().second, "");
#endif
EXPECT_EQ(string_view("second"), get().first); EXPECT_EQ(string_view("second"), get().first);
EXPECT_EQ(string_view("first"), get().second); EXPECT_EQ(string_view("first"), get().second);

View File

@ -179,7 +179,7 @@ class basic_string_view final {
return size() == 0; return size() == 0;
} }
CONSTEXPR_EXCEPT_GCC5 void remove_prefix(size_type n) { constexpr void remove_prefix(size_type n) {
if (n > size()) { if (n > size()) {
throw std::out_of_range( throw std::out_of_range(
"basic_string_view::remove_prefix: out of range. PrefixLength: " + "basic_string_view::remove_prefix: out of range. PrefixLength: " +
@ -189,7 +189,7 @@ class basic_string_view final {
size_ -= n; size_ -= n;
} }
CONSTEXPR_EXCEPT_GCC5 void remove_suffix(size_type n) { constexpr void remove_suffix(size_type n) {
if (n > size()) { if (n > size()) {
throw std::out_of_range( throw std::out_of_range(
"basic_string_view::remove_suffix: out of range. SuffixLength: " + "basic_string_view::remove_suffix: out of range. SuffixLength: " +
@ -198,7 +198,7 @@ class basic_string_view final {
size_ -= n; size_ -= n;
} }
CONSTEXPR_EXCEPT_GCC5 void swap(basic_string_view& sv) noexcept { constexpr void swap(basic_string_view& sv) noexcept {
auto tmp = *this; auto tmp = *this;
*this = sv; *this = sv;
sv = tmp; sv = tmp;
@ -694,7 +694,7 @@ inline std::basic_ostream<CharT>& operator<<(
} }
template <class CharT> template <class CharT>
CONSTEXPR_EXCEPT_GCC5 inline void swap( constexpr inline void swap(
basic_string_view<CharT>& lhs, basic_string_view<CharT>& lhs,
basic_string_view<CharT>& rhs) { basic_string_view<CharT>& rhs) {
lhs.swap(rhs); lhs.swap(rhs);