Вы можете использовать атрибут функции "__attribute__ ((optimize 0))", чтобы установить оптимизацию для одной функции, или "#pragma GCC optimize" для блока кода. Это только для GCC 4.4, хотя, я думаю - проверьте ваше руководство по GCC. Если они не поддерживаются, разделение источника - ваш единственный выбор.
Я бы также сказал, что если ваш код завершится неудачно с включенной оптимизацией, скорее всего, ваш код просто неправильный, особенно если вы пытаетесь сделать что-то, что в корне очень сложно. Процессор потенциально выполнит переупорядочение вашего кода (в пределах последовательной согласованности), поэтому любой переупорядочивание, которое вы получаете с помощью GCC, может произойти в любом случае.