¿Por qué la optimización mata esta función?

Recientemente tuvimos una conferencia en la universidad sobre programas especiales en varios idiomas.

El profesor escribió la siguiente función:

inline u64 Swap_64(u64 x)
{
    u64 tmp;
    (*(u32*)&tmp)       = Swap_32(*(((u32*)&x)+1));
    (*(((u32*)&tmp)+1)) = Swap_32(*(u32*) &x);

    return tmp;
}

Si bien entiendo totalmente que este es también un estilo realmente malo en términos de legibilidad, su punto principal fue que esta parte del código funcionó bien en el código de producción hasta que permitieron un alto nivel de optimización. Entonces, el código simplemente no haría nada.

Dijo que todas las asignaciones a la variable.tmp sería optimizado por el compilador. Pero ¿por qué sucedería esto?

Entiendo que hay circunstancias donde las variables deben ser declaradas.volátil para que el compilador no los toque, incluso si piensa que nunca se leen o escriben, pero no sabría por qué sucedería esto aquí.

Respuestas a la pregunta(3)

Su respuesta a la pregunta