https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94403

            Bug ID: 94403
           Summary: Missed optimization bswap
           Product: gcc
           Version: 10.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: other
          Assignee: unassigned at gcc dot gnu.org
          Reporter: boris_oncev at hotmail dot com
  Target Milestone: ---

full code:
https://godbolt.org/z/zjNqYV

template <typename T>
auto reverse(T num) {

    // misses optimization when num is int32_t OK for int64_t
    auto* bytes = reinterpret_cast<char*>(&num);

    // misses optimization for both 32 and 64 bit ints
    //auto* bytes = reinterpret_cast<std::byte*>(&num);

    constexpr auto size = sizeof(num);
    for (int i = 0; i < size / 2; i++) {
        std::swap(bytes[i], bytes[size-i-1]);
    }

    return num;
}

Reply via email to