https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116098
--- Comment #7 from Richard Biener <rguenth at gcc dot gnu.org> --- Ah, it's the code that makes SRA widen bit-precision values to size-precision integers. That said, I don't see why the V_C_E should not be moveable. value$8_11 = MEM <unsigned char> [(struct Value *)&s_value + 8B]; _8 = VIEW_CONVERT_EXPR<_Bool>(value$8_11); is exactly what RTL expansion will create - we're not truncating the result to bit-precision on _Bool loads.