Помогая компилятору оптимизировать разветвленные последовательности кода

У меня есть кодовые последовательности на C / C ++, которые содержат множество ветвей, что-то вроде этого:

if( condition1 )
    return true;
if( condition2 )
    return true;
...
return false;

(что эквивалентно return condition1 || condition2 || ...;)

Оценка каждого из условий требует нескольких обращений к памяти (все только для чтения), но компилятор пропускает важный возможность оптимизации за счет отсутствия перемещения обращений к памяти до оценки предыдущего условия. Причина в том, что доступ к памяти condition2 может быть segfault, когда condition1 истинно. Что ж, я знаю, что они этого не делают, и я бы хотел, чтобы компилятор поступил разумно и смешал некоторые из этих кодовых последовательностей там, где это подходит для производительности, например использовать параллелизм на уровне инструкций. Я также не хочу менять условие на логическое или (не короткое замыкание), потому что одна из ветвей, скорее всего, выскочит.

Есть идеи, как это можно сделать (желательно с помощью gcc)?

Спасибо.

13
задан hans 9 June 2011 в 08:43
поделиться