gcc -funswitch-циклы и -O3

#loops #gcc #optimization #compiler-optimization

#циклы #gcc #оптимизация #оптимизация компилятора

Вопрос:

Меня интересует опция оптимизации -funswitch-loops отключения переключения в GCC, в частности, что на самом деле ее позволяет. Согласно документации:

Следующие параметры управляют оптимизациями, которые могут повысить производительность, но не включены никакими -O параметрами. В этом разделе представлены экспериментальные варианты, которые могут привести к нарушению кода.

-funswitch-loops

Переместите ветви с условиями, инвариантными к циклу, из цикла, с дубликатами цикла на обеих ветвях (модифицированными в соответствии с результатом условия).

Включено -fprofile-use и -fauto-profile .

Итак, если я еще не использую -fprofile-use или -fauto-profile , кажется, мне нужно явно добавить -funswitch-loops в свой список флагов компилятора, чтобы активировать отключение переключения цикла. Достаточно справедливо. Хотя в другом месте в той же документации мы находим

-O3

Оптимизируйте еще больше. -O3 включает все оптимизации, указанные, -O2 а также включает следующие флаги оптимизации:

-funswitch-loops

Таким образом, в документации, похоже, утверждается, что -funswitch-loops он включен -O3 , но также и то, что он не включен ни одним из -O параметров. Какой из них это?

Ответ №1:

Вы можете скомпилировать с -v -Q , чтобы увидеть список всех действующих параметров оптимизации. -v -Q -O3 Я вижу, что он включен в gcc 10.2 -funswitch-loops .

Таким образом, его список в разделе «не включен никакими -O параметрами», по-видимому, является ошибкой. Вы можете сообщить об этом как об ошибке документации.