https://gcc.gnu.org/bugzilla/show_bug.cgi?id=110792
--- Comment #2 from Andrew Pinski <pinskia at gcc dot gnu.org> --- It seems like it is one of these which is causing the miscompile: const uint64_t s0 = WHIRL_S[get_byte<0>(x0)]; const uint64_t s1 = WHIRL_S[get_byte<1>(x1)]; const uint64_t s2 = WHIRL_S[get_byte<2>(x2)]; const uint64_t s3 = WHIRL_S[get_byte<3>(x3)]; const uint64_t s4 = WHIRL_S[get_byte<4>(x4)]; const uint64_t s5 = WHIRL_S[get_byte<5>(x5)]; const uint64_t s6 = WHIRL_S[get_byte<6>(x6)]; const uint64_t s7 = WHIRL_S[get_byte<7>(x7)]; not inlining get_byte (via gnu::noinline) allows it to run without a seg fault.