Попробуйте следующие аргументы в командной строке gcc:
-fno-if-conversion -fno-if-conversion2 -fno-tree-loop-if-convert
Это сработало для меня, и уловка была последним аргументом, который необходим в некоторых случаях, когда ifs преобразуются в условные перемещения внутри циклов, и эти два случая не охватываются двумя другими аргументами.
Я обнаружил это на основе этого разговора из списков рассылки gcc:
--- Комментарий № 1 от Эндрю Пински --- Я не думаю, что -fno-if-translation и -fno-if-translation2 разработаны
отключить все предикатные инструкции.
Примечание. -O3 включает -ftree-loop-if-convert, что также вызывает производство
предикатных инструкций (предикатных ходов).