Почему оптимизация убивает эту функцию?

Недавно в университете мы читали лекцию о специальностях программирования на нескольких языках.

Лектор записал следующую функцию:

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

    return tmp;
}

Хотя я полностью понимаю, что это также очень плохой стиль с точки зрения читабельности, его главная мысль заключалась в том, что эта часть кода прекрасно работала в производственном коде, пока не был достигнут высокий уровень оптимизации. Тогда код просто ничего не сделает.

Он сказал, что все присвоения переменнойtmp будет оптимизирован компилятором. Но почему это случилось?

Я понимаю, что существуют обстоятельства, когда переменные должны быть объявленылетучий так что компилятор не трогает их, даже если он думает, что они никогда не читаются и не пишутся, но я не знаю, почему это произошло бы здесь.

Ответы на вопрос(3)

Ваш ответ на вопрос