https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104151
Barnabás Pőcze <pobrn at protonmail dot com> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |pobrn at protonmail dot com --- Comment #15 from Barnabás Pőcze <pobrn at protonmail dot com> --- Sorry, I haven't found a better issue. But I think the example below exhibits the same or a very similar issue. I would expect the following code void f(unsigned char *p, std::uint32_t x, std::uint32_t y) { p[0] = x >> 24; p[1] = x >> 16; p[2] = x >> 8; p[3] = x >> 0; p[4] = y >> 24; p[5] = y >> 16; p[6] = y >> 8; p[7] = y >> 0; } to be compiled to something along the lines of f(unsigned char*, unsigned int, unsigned int): bswap esi bswap edx mov DWORD PTR [rdi], esi mov DWORD PTR [rdi+4], edx ret however, I get scores of bitwise operations instead if `-fno-tree-vectorize` is not specified. https://gcc.godbolt.org/z/z51K6qorv