У меня есть последовательности кода в C/С++, которые содержат много ветки, что-то вроде этого:
if( condition1 )
return true;
if( condition2 )
return true;
...
return false;
(что эквивалентно условию возврата 1 || условие2 ||...;)
Оценка каждого из условий требует нескольких обращений к памяти (только для чтения), но компилятор пропускает важную возможность оптимизации, не перемещая обращения к памяти до того, как будет оценено предыдущее условие. Причина в том, что доступ к памяти состояния2 может быть segfault, когда условие 1 истинно. Ну, я знаю, что они этого не делают, и я хотел бы, чтобы компилятор делал разумную вещь и смешивал некоторые из этих кодовых последовательностей, когда это уместно для производительности, например. для использования уровня инструкций - parallelism. Я также не хочу менять условие на логическое или (не короткое замыкание), потому что одна из ветвей, скорее всего, выскочит.
Любые идеи о том, как это можно сделать (желательно использовать gcc)?
Спасибо.