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