Spec-Zone.ru › GCC 11

Далее: Параметры, зависящие от машины, Предыдущее: Параметры для соглашений о генерации кода, Вверх: Параметры командной строки GCC [Оглавление][Индекс]

3.18 Параметры GCC для разработчиков ¶

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

Многие параметры для разработчиков, которые заставляют GCC выводить данные в файл, принимают необязательное суффиксное значение ‘=имя_файла’. Вы можете указать ‘stdout’ или ‘-’, чтобы вывести данные в стандартный вывод, и ‘stderr’ для стандартного потока ошибок.

Если ‘=имя_файла’ опущено, имя файла дампов строится по умолчанию, объединяя базовое имя файла дампов, номер прохода, букву фазы и имя прохода. Базовое имя файла дампов — это имя выходного файла, сгенерированного компилятором, если оно указано явно и не является исполняемым файлом; в противном случае это имя исходного файла. Номер прохода определяется порядком регистрации проходов в менеджере проходов компилятора. Как правило, это соответствует порядку выполнения, но проходы, зарегистрированные плагинами, целевыми проходами или проходами, зарегистрированными позднее, имеют больший номер, чем проход с именем ‘final’, даже если они выполняются раньше. Буква фазы — одна из ‘i’ (межпроцедурный анализ), ‘l’ (специфический для языка), ‘r’ (RTL) или ‘t’ (дерево). Файлы создаются в каталоге выходного файла.

-fcallgraph-info
-fcallgraph-info=MARKERS

Создаёт информацию о вызове графа для программы компилятором на основе каждого файла с объектами. Информация генерируется в общем формате VCG. Она может быть дополнена дополнительной информацией о узлах и/или рёбрах, если дополнительно указан список маркеров, разделённых запятыми. При указании маркера su, граф вызовов дополняется информацией об использовании стека; он эквивалентен -fstack-usage. При указании маркера da, граф вызовов дополняется информацией о динамически выделенных объектах.

При компиляции с -flto информация о графе вызовов не выводится вместе с файлом объекта. На этапе связывания LTO, -fcallgraph-info может генерировать несколько файлов с информацией о графе вызовов рядом с промежуточными файлами вывода LTO.

-dletters
-fdump-rtl-pass
-fdump-rtl-pass=filename

Создаёт дампы отладки во время компиляции в моменты, указанные символами letters. Это используется для отладки проходов компилятора, основанных на RTL.

Некоторые переключатели -dletters имеют разное значение, когда используется -E для предварительной обработки. Смотрите Параметры, управляющие предварительной обработкой для получения информации о параметрах дампов, специфичных для предварительной обработки.

Дампы отладки можно включить с помощью переключателя -fdump-rtl или некоторых параметров -d letters. Вот возможные буквы для использования в pass и letters, и их значения:

-fdump-rtl-alignments

Дамп после вычисления выравнивания ветвей.

-fdump-rtl-asmcons

Дамп после исправления инструкций rtl, у которых есть неудовлетворённые ограничения входных/выходных данных.

-fdump-rtl-auto_inc_dec

Дамп после обнаружения auto-inc-dec. Этот проход выполняется только на архитектурах, которые имеют инструкции auto inc или auto dec.

-fdump-rtl-barriers

Дамп после очистки инструкций барьеров.

-fdump-rtl-bbpart

Дамп после разделения горячих и холодных базовых блоков.

-fdump-rtl-bbro

Дамп после переупорядочивания блоков.

-fdump-rtl-btl1
-fdump-rtl-btl2

-fdump-rtl-btl1 и -fdump-rtl-btl2 включают дампы после двух проходов оптимизации загрузки целевого адреса ветвления.

-fdump-rtl-bypass

Дамп после прохода обхода переходов и оптимизации потоков управления.

-fdump-rtl-combine

Дамп после прохода объединения инструкций RTL.

-fdump-rtl-compgotos

Дамп после дублирования вычисленных переходов.

-fdump-rtl-ce1
-fdump-rtl-ce2
-fdump-rtl-ce3

-fdump-rtl-ce1, -fdump-rtl-ce2 и -fdump-rtl-ce3 включают дампы после трёх проходов преобразования инструкций if.

-fdump-rtl-cprop_hardreg

Дамп после распространения копирования жёстких регистров.

-fdump-rtl-csa

Дамп после объединения корректировок стека.

-fdump-rtl-cse1
-fdump-rtl-cse2

-fdump-rtl-cse1 и -fdump-rtl-cse2 включают дампы после двух проходов устранения общих подвыражений.

-fdump-rtl-dce

Дамп после проходов устранения мёртвого кода отдельно.

-fdump-rtl-dbr

Дамп после планирования задержки ветвлений.

-fdump-rtl-dce1
-fdump-rtl-dce2

-fdump-rtl-dce1 и -fdump-rtl-dce2 включают дампы после двух проходов устранения мёртвых хранений.

-fdump-rtl-eh

Дамп после завершения обработки исключений.

-fdump-rtl-eh_ranges

Дамп после преобразования областей обработки исключений.

-fdump-rtl-expand

Дамп после генерации RTL.

-fdump-rtl-fwprop1
-fdump-rtl-fwprop2

-fdump-rtl-fwprop1 и -fdump-rtl-fwprop2 включают дампы после двух проходов распространения вперёд.

-fdump-rtl-gcse1
-fdump-rtl-gcse2

-fdump-rtl-gcse1 и -fdump-rtl-gcse2 включают дампы после глобального устранения общих подвыражений.

-fdump-rtl-init-regs

Дамп после инициализации регистров.

-fdump-rtl-initvals

Дамп после вычисления начальных наборов значений.

-fdump-rtl-into_cfglayout

Дамп после перехода в режим cfglayout.

-fdump-rtl-ira

Дамп после итеративной регистровой аллокации.

-fdump-rtl-jump

Дамп после второй оптимизации переходов.

-fdump-rtl-loop2

-fdump-rtl-loop2 включает дамп после проходов оптимизации циклов rtl.

-fdump-rtl-mach

Дамп после выполнения прохода реорганизации, зависящего от машины, если такой проход существует.

-fdump-rtl-mode_sw

Дамп после удаления избыточных переключений режимов.

-fdump-rtl-rnreg

Дамп после переприсвоения номеров регистров.

-fdump-rtl-outof_cfglayout

Дамп после перехода из режима cfglayout.

-fdump-rtl-peephole2

Дамп после прохода peephole.

-fdump-rtl-postreload

Дамп после оптимизаций после загрузки.

-fdump-rtl-pro_and_epilogue

Дамп после генерации пролога и эпилога функций.

-fdump-rtl-sched1
-fdump-rtl-sched2

-fdump-rtl-sched1 и -fdump-rtl-sched2 включают дампы после проходов планирования базовых блоков.

-fdump-rtl-ree

Дамп после устранения расширения знака/нуля.

-fdump-rtl-seqabstr

Дамп после обнаружения общих последовательностей.

-fdump-rtl-shorten

Дамп после укорочения ветвей.

-fdump-rtl-sibling

Дамп после оптимизаций вызовов-сиблингов.

-fdump-rtl-split1
-fdump-rtl-split2
-fdump-rtl-split3
-fdump-rtl-split4
-fdump-rtl-split5

Эти параметры включают дампы после пяти раундов разделения инструкций.

-fdump-rtl-sms

Дамп после модульного планирования. Этот проход выполняется только на некоторых архитектурах.

-fdump-rtl-stack

Дамп после преобразования регистров GCC «плоского регистра» в стековые регистры x87. Этот проход выполняется только на вариантах x86.

-fdump-rtl-subreg1
-fdump-rtl-subreg2

-fdump-rtl-subreg1 и -fdump-rtl-subreg2 включают дампы после двух проходов расширения subreg.

-fdump-rtl-unshare

Дамп после того, как все rtl были разделены.

-fdump-rtl-vartrack

Дамп после отслеживания переменных.

-fdump-rtl-vregs

Дамп после преобразования виртуальных регистров в жёсткие регистры.

-fdump-rtl-web

Дамп после разделения диапазонов жизни.

-fdump-rtl-regclass
-fdump-rtl-subregs_of_mode_init
-fdump-rtl-subregs_of_mode_finish
-fdump-rtl-dfinit
-fdump-rtl-dfinish

Эти дампы определены, но всегда создают пустые файлы.

-da
-fdump-rtl-all

Создаёт все вышеперечисленные дампы.

-dA

Добавляет в выходной файл ассемблера различную отладочную информацию.

-dD

Выводит все определения макросов в конце предварительной обработки, помимо обычного вывода.

-dH

Создаёт дамп ядра при возникновении ошибки.

-dp

Добавляет в выходной файл ассемблера комментарий, указывающий, какой шаблон и альтернатива используются. Также выводится длина и стоимость каждой инструкции.

-dP

Выводит RTL в выходной файл ассемблера как комментарий перед каждой инструкцией. Также включает аннотацию -dp.

-dx

Генерирует RTL для функции вместо её компиляции. Обычно используется с -fdump-rtl-expand.

-fdump-debug

Выводит информацию отладки, сгенерированную на стадии генерации отладки.

-fdump-earlydebug

Выводит информацию отладки, сгенерированную на ранней стадии генерации отладки.

-fdump-noaddr

При выполнении дампов отладки подавляет вывод адресов. Это позволяет использовать diff для сравнения дампов отладки для вызовов компилятора с различными бинарниками компилятора и/или различными начальными значениями текста/bss/data/кучи/стека/dso.

-freport-bug

Собирает и выводит информацию отладки в временный файл при возникновении внутренней ошибки компилятора (ICE).

-fdump-unnumbered

При выполнении дампов отладки подавляет вывод номеров инструкций и адресов. Это позволяет использовать diff для сравнения дампов отладки для вызовов компилятора с различными параметрами, в частности, с -g и без него.

-fdump-unnumbered-links

При выполнении дампов отладки (см. параметр -d выше) подавляет вывод номеров инструкций для ссылок на предыдущую и следующую инструкции в последовательности.

-fdump-ipa-switch
-fdump-ipa-switch-options

Управляет выводом дампов на различных этапах анализа межпроцедурного языка в файл. Имя файла генерируется путём добавления постфикса, специфичного для переключателя, к имени исходного файла, а файл создаётся в той же директории, что и выходной файл. Возможны следующие дампы:

‘all’

Включает все дампы межпроцедурного анализа.

‘cgraph’

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

‘inline’

Дамп после встраивания функций.

Кроме того, могут быть указаны параметры -optimized, -missed, -note и -all с тем же значением, что и для -fopt-info, по умолчанию используется -optimized.

Например, -fdump-ipa-inline-optimized-missed выведет информацию о местах вызова, которые были встроены, вместе с местами вызова, которые не были встроены.

По умолчанию дамп будет содержать сообщения об успешных оптимизациях (эквивалентно -optimized) вместе с подробными сведениями о низкого уровня анализа.

-fdump-lang

Выгрузка информации, специфичной для языка. Имя файла формируется путём добавления .lang к имени исходного файла.

-fdump-lang-all
-fdump-lang-switch
-fdump-lang-switch-options
-fdump-lang-switch-options=filename

Управление выгрузкой информации, специфичной для языка. Части options и filename ведут себя так же, как описано в опции -fdump-tree. Принимаются следующие значения switch:

‘all’

Включить все выгрузки, специфичные для языка.

‘class’

Выгрузить информацию о иерархии классов. Информация о виртуальных таблицах выводится, если не указано ’slim’. Данная опция применима только к C++.

‘module’

Выгрузить информацию о модуле. Опции lineno (позиции), graph (достижимость), blocks (кластеры), uid (сериализация), alias (сливаемый), asmname (Elrond), eh (mapper) и vops (макросы) могут предоставить дополнительную информацию. Данная опция применима только к C++.

‘raw’

Выгрузить данные исходного дерева.

-fdump-passes

Вывести на stderr список оптимизационных проходов, включенных и выключенных текущими опциями командной строки.

-fdump-statistics-option

Включить и управлять выгрузкой статистики проходов в отдельный файл. Имя файла формируется путем добавления суффикса, заканчивающегося на ‘.statistics’, к имени исходного файла, и файл создаётся в той же директории, что и выходной файл. Если используется форма ‘-option’, ‘-stats’ суммирует счётчики по всему модулю компиляции, а ‘-details’ выгружает каждое событие по мере их генерации проходами. По умолчанию, без опций, суммируются счётчики для каждой компилируемой функции.

-fdump-tree-all
-fdump-tree-switch
-fdump-tree-switch-options
-fdump-tree-switch-options=filename

Управление выгрузкой на различных стадиях обработки дерева промежуточного языка в файл. Если используется форма ‘-options’, options — список опций, разделённых символом ‘-’, которые управляют подробностями выгрузки. Не все опции применимы ко всем выгрузкам; те, которые не имеют смысла, игнорируются. Доступны следующие опции:

‘address’

Вывести адрес каждого узла. Обычно это не имеет смысла, так как он изменяется в зависимости от среды и исходного файла. Его основное назначение — привязка файла выгрузки к среде отладки.

‘asmname’

Если для данного объявления было установлено значение DECL_ASSEMBLER_NAME, его использовать в выгрузке вместо DECL_NAME. Основное назначение — простота работы при обратном анализе от искажённых имён в файле ассемблера.

‘slim’

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

При выгрузке красиво отформатированных деревьев эта опция запрещает выгрузку тел управляющих конструкций.

При выгрузке RTL выводить RTL в сжатом (компактном) формате вместо стандартного представления, похожего на LISP.

‘raw’

Вывести необработанное представление дерева. По умолчанию деревья выводятся в формате, похожем на C.

‘details’

Включить более подробные выгрузки (не поддерживаются каждой опцией выгрузки). Также включить информацию из оптимизационных проходов.

‘stats’

Включить выгрузку различных статистических данных о проходе (не поддерживается каждой опцией выгрузки).

‘blocks’

Включить отображение границ базовых блоков (выключено в необработанных выгрузках).

‘graph’

Для каждого из указанных файлов выгрузки (-fdump-rtl-pass) вывести представление графа потока управления, подходящего для просмотра с помощью GraphViz, в файл file.passid.pass.dot. Каждая функция в файле красиво форматируется как подграф, чтобы GraphViz мог отобразить их все на одном графике.

Эта опция в настоящее время работает только для выгрузок RTL, и RTL всегда выгружается в сжатом формате.

‘vops’

Включить отображение виртуальных операндов для каждого оператора.

‘lineno’

Включить отображение номеров строк для операторов.

‘uid’

Включить отображение уникального идентификатора (DECL_UID) для каждой переменной.

‘verbose’

Включить выгрузку дерева для каждого оператора.

‘eh’

Включить отображение номера области EH, содержащей каждый оператор.

‘scev’

Включить отображение подробностей анализа скалярной эволюции.

‘optimized’

Включить отображение оптимизационной информации (доступно только в определённых проходах).

‘missed’

Включить отображение информации об упущенных оптимизациях (доступно только в определённых проходах).

‘note’

Включить другую подробную оптимизационную информацию (доступно только в определённых проходах).

‘all’

Включить все опции, за исключением raw, slim, verbose и lineno.

‘optall’

Включить все оптимизационные опции, т.е. optimized, missed и note.

Чтобы определить доступные выгрузки дерева или найти выгрузку для интересующего прохода, выполните следующие шаги.

  1. Вызовите GCC с -fdump-passes и в выводе stderr найдите код, соответствующий интересующему проходу. Например, коды tree-evrp, tree-vrp1, и tree-vrp2 соответствуют трём проходам Value Range Propagation. Цифра в конце отличает разные вызовы одного и того же прохода.
  2. Чтобы включить создание файла выгрузки, добавьте код прохода к префиксу опции -fdump- и вызовите GCC с ним. Например, чтобы включить выгрузку из прохода Early Value Range Propagation, вызовите GCC с опцией -fdump-tree-evrp. По желанию, можно указать имя файла выгрузки. Если вы его не укажете, GCC создаст его, как описано ниже.
  3. Найдите выгрузку прохода в файле, имя которого состоит из трёх компонентов, разделённых точкой: имя исходного файла, вызываемого GCC, числовой суффикс, указывающий номер прохода, за которым следует буква ‘t’ для проходов дерева (и буква ‘r’ для проходов RTL), и, наконец, код прохода. Например, выгрузка прохода Early VRP может находиться в файле с именем myfile.c.038t.evrp в текущей рабочей директории. Обратите внимание, что числовые коды нестабильны и могут меняться в разных версиях GCC.
-fopt-info
-fopt-info-options
-fopt-info-options=filename

Управляет выводом оптимизационных дампов из различных оптимизационных проходов. Если используется форма ‘-options’, options представляет собой список ключевых слов опций, разделённых символом ‘-’, для выбора деталей дампа и оптимизаций.

options можно разделить на три группы:

  1. опции, описывающие типы сообщений, которые должны быть выведены,
  2. опции, описывающие подробность дампа, и
  3. опции, описывающие, какие оптимизации должны быть включены.

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

Следующие опции управляют тем, какие типы сообщений должны быть выведены:

‘optimized’

Выводит информацию, когда оптимизация успешно применена. Отдельный проход решает, какая информация является релевантной. Например, проходы векторизации печатают расположение в исходном коде циклов, которые успешно векторизированы.

‘missed’

Выводит информацию об упущенных оптимизациях. Отдельные проходы контролируют, какая информация должна быть включена в вывод.

‘note’

Выводит подробную информацию об оптимизациях, такую как определённые преобразования, более подробные сообщения о принятых решениях и т.д.

‘all’

Выводит подробную информацию об оптимизациях. Это включает ‘optimized’, ‘missed’ и ‘note’.

Следующая опция управляет подробностью дампа:

‘internals’

По умолчанию выводятся только сообщения высокого уровня. Эта опция включает дополнительные, более подробные сообщения, которые, вероятно, будут интересны только разработчикам GCC.

Для описания группы оптимизаций можно использовать одну или несколько следующих ключевых слов опций:

‘ipa’

Включает дампы всех межпроцедурных оптимизаций.

‘loop’

Включает дампы всех оптимизаций циклов.

‘inline’

Включает дампы всех оптимизаций встраивания.

‘omp’

Включает дампы всех оптимизаций OMP (Offloading and Multi Processing).

‘vec’

Включает дампы всех оптимизаций векторизации.

‘optall’

Включает дампы всех оптимизаций. Это супермножество перечисленных выше групп оптимизаций.

Если options опущена, она по умолчанию устанавливается в ‘optimized-optall’, что означает вывод сообщений об успешных оптимизациях всех проходов, исключая сообщения, рассматриваемые как «внутренние».

Если указан filename, то дампы от всех применимых оптимизаций конкатенируются в filename. В противном случае дамп выводится в stderr. Хотя несколько опций -fopt-info принимаются, только одна из них может включать filename. Если указаны другие имена файлов, то все, кроме первого, игнорируются.

Обратите внимание, что выходной filename перезаписывается в случае нескольких единиц трансляции. Если требуется комбинированный вывод из нескольких единиц трансляции, вместо этого следует использовать stderr.

В следующем примере информация об оптимизации выводится в stderr:

gcc -O3 -fopt-info

Этот пример:

gcc -O3 -fopt-info-missed=missed.all

выводит отчёт об упущенных оптимизациях от всех проходов в missed.all, а этот:

gcc -O2 -ftree-vectorize -fopt-info-vec-missed

выводит информацию об упущенных возможностях оптимизации из проходов векторизации в stderr. Обратите внимание, что -fopt-info-vec-missed эквивалентно -fopt-info-missed-vec. Порядок имён групп оптимизаций и типов сообщений, указанных после -fopt-info, не имеет значения.

В качестве ещё одного примера,

gcc -O3 -fopt-info-inline-optimized-missed=inline.txt

выводит информацию об упущенных оптимизациях, а также об оптимизированных местоположениях из всех проходов встраивания в inline.txt.

Наконец, рассмотрим:

gcc -fopt-info-vec-missed=vec.miss -fopt-info-loop-optimized=loop.opt

Здесь два выходных имени файлов vec.miss и loop.opt конфликтуют, так как разрешено только один выходной файл. В этом случае действует только первая опция, а последующие опции игнорируются. Таким образом, генерируется только vec.miss, который содержит дампы векторизатора об упущенных возможностях.

-fsave-optimization-record

Записывает файл SRCFILE.opt-record.json.gz, содержащий детализацию выполненных оптимизаций для тех оптимизаций, которые поддерживают -fopt-info.

Эта опция экспериментальная, и формат данных в сжатом JSON-файле может меняться.

Она примерно эквивалентна машиночитаемой версии -fopt-info-all как набор сообщений с именем файла, номером строки и номером столбца, с дополнительными данными для каждого сообщения:

  • количество выполнений оптимизируемого кода, а также метаданные о том, было ли это получено из реальных данных профилирования или это просто оценка, что позволяет потребителям упорядочивать сообщения по частоте использования кода,
  • имя функции оптимизируемого кода, если применимо,
  • «цепь встраивания» для оптимизируемого кода, так что при встраивании функции в несколько различных мест (которые сами могут быть встроены), читатель может различать копии,
  • объекты, идентифицирующие части сообщения, которые относятся к выражениям, операторам или узлам таблицы символов, к какой категории они относятся и, при наличии, их местоположение в исходном коде,
  • проход GCC, который вывел сообщение, и
  • местоположение в собственном коде GCC, из которого было выведено сообщение

Кроме того, некоторые сообщения логически вложены внутри других, отражая детали реализации оптимизационных проходов.

-fsched-verbose=n

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

Для n больше нуля, -fsched-verbose выводит такую же информацию, как -fdump-rtl-sched1 и -fdump-rtl-sched2. Для n больше единицы, он также выводит вероятности базовых блоков, подробную информацию о готовом списке и информацию об устройстве/инструкции. Для n больше двух, он включает RTL в точке прерывания, информацию о потоке управления и областях. А для n больше четырёх, -fsched-verbose также включает информацию о зависимостях.

-fenable-kind-pass
-fdisable-kind-pass=range-list

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

-fdisable-ipa-pass

Отключает проход IPA pass. pass — имя прохода. Если один и тот же проход статически вызывается в компиляторе несколько раз, к имени прохода следует добавить порядковый номер, начиная с 1.

-fdisable-rtl-pass
-fdisable-rtl-pass=range-list

Отключает проход RTL pass. pass — имя прохода. Если один и тот же проход статически вызывается в компиляторе несколько раз, к имени прохода следует добавить порядковый номер, начиная с 1. range-list — список, разделённый запятыми, диапазонов функций или имён ассемблерных команд. Каждый диапазон — это пара чисел, разделённых двоеточием. Диапазон включающий в обе стороны. Если диапазон тривиален, пару чисел можно упростить до одного числа. Если узел узла вызова функции в графе вызова находится в одном из указанных диапазонов, проход pass отключается для этой функции. uid показан в заголовке функции файла дампа, а имена проходов можно вывести, используя опцию -fdump-passes.

-fdisable-tree-pass
-fdisable-tree-pass=range-list

Отключает проход дерева pass. См. -fdisable-rtl для описания аргументов опции.

-fenable-ipa-pass

Включает проход IPA pass. pass — имя прохода. Если один и тот же проход статически вызывается в компиляторе несколько раз, к имени прохода следует добавить порядковый номер, начиная с 1.

-fenable-rtl-pass
-fenable-rtl-pass=range-list

Включает проход RTL pass. См. -fdisable-rtl для описания аргументов опции и примеров.

-fenable-tree-pass
-fenable-tree-pass=range-list

Включает проход дерева pass. См. -fdisable-rtl для описания аргументов опции.

Вот несколько примеров использования этих опций.

# disable ccp1 for all functions
   -fdisable-tree-ccp1
# disable complete unroll for function whose cgraph node uid is 1
   -fenable-tree-cunroll=1
# disable gcse2 for functions at the following ranges [1,1],
# [300,400], and [400,1000]
# disable gcse2 for functions foo and foo2
   -fdisable-rtl-gcse2=foo,foo2
# disable early inlining
   -fdisable-tree-einline
# disable ipa inlining
   -fdisable-ipa-inline
# enable tree full unroll
   -fenable-tree-unroll
-fchecking
-fchecking=n

Включает проверку внутренней согласованности. По умолчанию зависит от конфигурации компилятора. -fchecking=2 включает дополнительную проверку внутренней согласованности, которая может повлиять на генерацию кода.

-frandom-seed=string

Эта опция предоставляет начальное значение, которое GCC использует вместо случайных чисел при генерации некоторых имён символов, которые должны быть разными в каждом скомпилированном файле. Она также используется для помещения уникальных меток в файлы данных покрытия и объектные файлы, которые их генерируют. Вы можете использовать опцию -frandom-seed для создания воспроизводимых идентичных объектных файлов.

Значение string может быть числом (десятичным, восьмеричным или шестнадцатеричным) или произвольной строкой (в этом случае оно преобразуется в число путём вычисления CRC32).

Значение string должно быть разным для каждого файла, который вы компилируете.

-save-temps

Постоянно хранить обычные «временные» промежуточные файлы; именовать их как вспомогательные выходные файлы, как указано в описании под -dumpbase и -dumpdir.

При использовании в сочетании с параметром командной строки -x, -save-temps достаточно разумно, чтобы избежать перезаписи входного исходного файла тем же расширением, что и промежуточный файл. Соответствующий промежуточный файл можно получить, переименовав исходный файл перед использованием -save-temps.

-save-temps=cwd

Эквивалентно -save-temps -dumpdir ./.

-save-temps=obj

Эквивалентно -save-temps -dumpdir outdir/, где outdir/ — это директория выходного файла, указанного после параметра -o, включая все разделители директорий. Если параметр -o не используется, переключатель -save-temps=obj ведет себя как -save-temps=cwd.

-time[=file]

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

Без указания выходного файла вывод выглядит так:

# cc1 0.12 0.01
# as 0.00 0.01

Первое число в каждой строке — это «время пользователя», то есть время, затраченное на выполнение самой программы. Второе число — «время системы», время, затраченное на выполнение системных процедур от имени программы. Оба числа — в секундах.

При указании выходного файла вывод добавляется в указанный файл, и он выглядит так:

0.12 0.01 cc1 options
0.00 0.01 as options

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

-fdump-final-insns[=file]

Вывести окончательное внутреннее представление (RTL) в file. Если необязательный аргумент опущен (или если file .), имя файла вывода определяется путем добавления .gkd к имени базового файла вывода, см. -dumpbase.

-fcompare-debug[=opts]

Если во время компиляции не произошло ошибок, повторно запустить компилятор, добавив opts и -fcompare-debug-second к аргументам, переданным во вторую компиляцию. Вывести окончательное внутреннее представление в обеих компиляция, и вывести ошибку, если они отличаются.

Если знак равенства опущен, используется значение по умолчанию -gtoggle.

Переменная среды GCC_COMPARE_DEBUG, если она определена, непуста и не равна нулю, неявным образом включает -fcompare-debug. Если GCC_COMPARE_DEBUG определена строкой, начинающейся с дефиса, то она используется для opts, в противном случае используется значение по умолчанию -gtoggle.

-fcompare-debug=, со знаком равенства, но без opts, эквивалентно -fno-compare-debug, что отключает вывод окончательного представления и вторую компиляцию, препятствуя даже GCC_COMPARE_DEBUG от действия.

Для проверки полного охвата при тестировании с -fcompare-debug установите GCC_COMPARE_DEBUG в значение -fcompare-debug-not-overridden, который GCC отклоняет как некорректный параметр в любой фактической компиляции (а не в предварительной обработке, сборке или компоновке). Для получения просто предупреждения, установка GCC_COMPARE_DEBUG в ‘-w%n-fcompare-debug not overridden’ подойдет.

-fcompare-debug-second

Этот параметр неявно передается компилятору для второй компиляции, запрошенной -fcompare-debug, вместе с параметрами для отключения предупреждений и опущением других параметров, которые могут привести к выводу компилятора в файлы или в стандартный вывод в качестве побочного эффекта. Файлы вывода и сохраненные временные файлы переименовываются таким образом, чтобы содержать .gk дополнительное расширение во время второй компиляции, чтобы избежать перезаписи файлов, созданных во время первой.

Когда этот параметр передается драйверу компилятора, это приводит к пропуску первой компиляции, что делает его полезным в основном для отладки самого компилятора.

-gtoggle

Отключить создание отладочной информации, если без этого параметра она генерируется, или включить ее на уровне 2 в противном случае. Позиция этого аргумента в командной строке не имеет значения; он вступает в силу после обработки всех других параметров и действует только один раз, независимо от того, сколько раз он задан. В основном он предназначен для использования с -fcompare-debug.

-fvar-tracking-assignments-toggle

Переключить -fvar-tracking-assignments так же, как -gtoggle переключает -g.

-Q

Заставляет компилятор выводить имя каждой функции по мере её компиляции и выводить некоторую статистику о каждом проходе по завершении.

-ftime-report

Заставляет компилятор выводить некоторую статистику о времени, затраченном каждым проходом, по его завершении.

-ftime-report-details

Записывать время, затраченное частями инфраструктуры отдельно для каждого прохода.

-fira-verbose=n

Управлять подробностью файла вывода для интегрированного регистрового аллокатора. Значение по умолчанию — 5. Если значение n больше или равно 10, вывод вывода отправляется в stderr в том же формате, что и n минус 10.

-flto-report

Выводит отчет с внутренними подробностями работы оптимизатора на этапе компоновки. Содержимое этого отчета меняется от версии к версии. Он предназначен для использования разработчикам GCC при обработке объектных файлов в режиме LTO (через -flto).

Отключено по умолчанию.

-flto-report-wpa

Как -flto-report, но выводить только для фазы WPA оптимизации на этапе компоновки.

-fmem-report

Заставляет компилятор выводить некоторую статистику об выделении постоянной памяти по завершении.

-fmem-report-wpa

Заставляет компилятор выводить некоторую статистику об выделении постоянной памяти только для фазы WPA.

-fpre-ipa-mem-report
-fpost-ipa-mem-report

Заставляет компилятор выводить некоторую статистику об выделении постоянной памяти до или после межпроцедурной оптимизации.

-fprofile-report

Заставляет компилятор выводить некоторую статистику о согласованности (оцененного) профиля и влияния отдельных проходов.

-fstack-usage

Заставляет компилятор выводить информацию об использовании стека для программы, на основе каждой функции. Имя файла для вывода создается путем добавления .su к auxname. auxname генерируется из имени выходного файла, если он явно указан и не является исполняемым файлом, в противном случае это имя файла исходного кода без пути. Запись состоит из трех полей:

  • Имя функции.
  • Количество байтов.
  • Один или несколько квалификаторов: static, dynamic, bounded.

Квалификатор static означает, что функция манипулирует стеком статически: фиксированное количество байтов выделяется для кадра при входе в функцию и освобождается при выходе из функции; другие корректировки стека в функции не выполняются. Второе поле — это это фиксированное количество байтов.

Квалификатор dynamic означает, что функция динамически манипулирует стеком: помимо статического выделения, описанного выше, в теле функции выполняются корректировки стека, например, для помещения/извлечения аргументов вокруг вызовов функций. Если также присутствует квалификатор bounded, количество этих корректировок ограничено во время компиляции, и второе поле — это верхняя граница общего объёма стека, используемого функцией. Если он отсутствует, количество этих корректировок не ограничено во время компиляции, и второе поле представляет только ограниченную часть.

-fstats

Выдать статистику о обработке фронтенда по завершению компиляции. Этот параметр поддерживается только фронтендом C++, и информация, как правило, полезна только команде разработчиков G++.

-fdbg-cnt-list

Напечатать имя и верхнюю границу счётчика для всех отладочных счётчиков.

-fdbg-cnt=counter-value-list

Установить нижнюю и верхнюю границы внутреннего отладочного счётчика. counter-value-list — это список, разделённый запятыми, из кортежей name:lower_bound1-upper_bound1 [:lower_bound2-upper_bound2...] которые устанавливают имя счётчика и список замкнутых интервалов. lower_bound — необязателен и инициализируется нулём, если не задан. Например, с -fdbg-cnt=dce:2-4:10-11,tail_call:10, dbg_cnt(dce) возвращает true только для второго, третьего, четвёртого, десятого и одиннадцатого вызова. Для dbg_cnt(tail_call) true возвращается для первых 10 вызовов.

-print-file-name=library

Вывести полное абсолютное имя файла библиотеки library, который будет использоваться при компоновке, — и ничего больше не делать. С этим параметром GCC не компилирует и не компонует ничего; он просто выводит имя файла.

-print-multi-directory

Вывести имя директории, соответствующей выбранному многоязыковым вариантом с помощью других параметров командной строки. Эта директория должна существовать в GCC_EXEC_PREFIX.

-print-multi-lib

Вывести сопоставление между именами директорий многоязыковых вариантов и параметрами компилятора, которые их включают. Имя директории отделяется от параметров символом ‘;’, а каждый параметр начинается с символа ‘@’ вместо ‘-’, без пробелов между параметрами.

-print-multi-os-directory

Вывести путь к библиотекам ОС для выбранного многоязыкового варианта, относительно подкаталога lib. Если библиотеки ОС присутствуют в подкаталоге lib и не используются многоязыковые варианты, это обычно просто ., если библиотеки ОС присутствуют в каталогах-сёстрах libsuffix, это выводит, например, ../lib64, ../lib или ../lib32, или если библиотеки ОС присутствуют в подкаталогах lib/subdir, это выводит, например, amd64, sparcv9 или ev6.

-print-multiarch

Вывести путь к библиотекам ОС для выбранного multiarch, относительно некоторого подкаталога lib.

-print-prog-name=program

Подобно -print-file-name, но ищет программу, например, cpp.

-print-libgcc-file-name

То же самое, что и -print-file-name=libgcc.a.

Это полезно, когда вы используете -nostdlib или -nodefaultlibs, но хотите связаться с libgcc.a. Вы можете сделать так:

gcc -nostdlib files… `gcc -print-libgcc-file-name`
-print-search-dirs

Вывести имя настроенного каталога установки и список каталогов программ и библиотек, в которых gcc ищет—и не делать ничего больше.

Это полезно, когда gcc выводит сообщение об ошибке ‘installation problem, cannot exec cpp0: No such file or directory’. Чтобы решить эту проблему, вам нужно либо поместить cpp0 и другие компоненты компилятора туда, где gcc ожидает их найти, либо установить переменную окружения GCC_EXEC_PREFIX в каталог, где вы их установили. Не забудьте заключительный ‘/’. См. Переменные среды, влияющие на GCC.

-print-sysroot

Вывести целевой каталог sysroot, используемый во время компиляции. Это целевой sysroot, указанный либо во время настройки, либо с помощью параметра --sysroot, возможно, с дополнительным суффиксом, который зависит от опций компиляции. Если целевой sysroot не указан, опция ничего не выводит.

-print-sysroot-headers-suffix

Вывести суффикс, добавляемый к целевому sysroot при поиске заголовков, или выдать ошибку, если компилятор не настроен с таким суффиксом—и не делать ничего больше.

-dumpmachine

Вывести целевую машину компилятора (например, ‘i686-pc-linux-gnu’)—и не делать ничего больше.

-dumpversion

Вывести версию компилятора (например, 3.0, 6.3.0 или 7 )—и не делать ничего больше. Это версия компилятора, используемая в путях и спецификациях файловой системы. В зависимости от того, как был настроен компилятор, это может быть просто одно число (главная версия), два числа, разделенных точкой (главная и второстепенная версия), или три числа, разделенных точками (главная, второстепенная и версия исправления).

-dumpfullversion

Вывести полную версию компилятора—и не делать ничего больше. Вывод всегда состоит из трех чисел, разделенных точками, основной, дополнительной и версией исправления.

-dumpspecs

Вывести встроенные спецификации компилятора—и не делать ничего больше. (Это используется при построении самого GCC.) См. Указание подпроцессов и переключателей, которые нужно передать им.

Далее: Параметры, зависящие от машины, Предыдущий: Параметры для соглашений о генерации кода, Вверх: Параметры командной строки GCC [Оглавление][Индекс]

© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-11.4.0/gcc/Developer-Options.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API