Короче говоря, что делает опция GCC -fipa-pta?

Согласно руководству GCC, -fipa-pta оптимизация делает:

-fipa-pta: Выполнить межпроцедурный анализ указателя, а также межпроцедурную модификацию и эталонный анализ. Эта опция может вызвать чрезмерную
использование памяти и времени компиляции на больших единицах компиляции. Это не
включен по умолчанию на любом уровне оптимизации.

Я предполагаю, что GCC пытается дифференцировать изменчивые и неизменные данные на основе указателей и ссылок, используемых в процедуре. Может кто-то с более глубокими знаниями GCC объяснить, что -fipa-pta делает?

6

Решение

Я думаю, что слово «межпроцедурный» является ключевым здесь.

Я не очень хорошо знаком с оптимизатором gcc, но раньше работал над оптимизацией компиляторов. Следующее является несколько умозрительным; возьмите его с небольшим количеством соли или подтвердите это кому-то, кто знает внутренности gcc.

Оптимизирующий компилятор обычно выполняет анализ и оптимизацию только внутри каждой отдельной функции (или подпрограммы, или процедуры, в зависимости от языка). Например, данный код похож на этот надуманный пример:

double *ptr = ...;

void foo(void) {
...
*ptr = 123.456;
some_other_function();
printf("*ptr = %f\n", *ptr);
}

оптимизатор не сможет определить, является ли значение *ptr был изменен при вызове some_other_function(),

Если межпроцедурного анализ включен, тогда оптимизатор может анализировать поведение some_other_function()и может быть в состоянии доказать, что он не может изменить *ptr, Учитывая такой анализ, он может определить, что выражение *ptr должен еще оценить 123.456и в принципе это могло бы даже заменить printf позвонить с puts("ptr = 123.456");,

(На самом деле, с небольшой программой, похожей на приведенный выше фрагмент кода, я получил такой же сгенерированный код с -O3 а также -O3 -fipa-ptaтак что я наверное что-то упустил.)

Поскольку типичная программа содержит большое количество функций, с огромный Количество возможных последовательностей вызовов, этот вид анализа может быть очень дорогим.

5

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector