2013-08-14 3 views
8

Я пытаюсь выяснить, какие параметры компилятора включены для GCC (4.7.3, Установка Macports в Mac OS X 10.6.8). Я знаю, что одним из следующих способов:Параметры компилятора GCC: какой набор разрешенных опций является правильным?

  1. Использование опции -Q с помощью простого входного файла, как было предложено GCC 4.3.3 compiler options enabled:

    gcc -Q -v -o hello hello.c 
    
  2. Использование -Q --help = х комбинированную (для значений х, см GCC documentation), например:

    gcc -Q --help=target 
    
  3. Чтобы увидеть включены устанавливает:

    echo "" | gcc -E -dM - | sort 
    

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

$ gcc -Q -v -O3 -march=native -o hello hello.c 

GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 
options passed: -v -D__DYNAMIC__ hello.c -march=corei7-avx -mcx16 -msahf 
-mno-movbe -maes -mpclmul -mpopcnt -mno-abm -mno-lwp -mno-fma -mno-fma4 
-mno-xop -mno-bmi -mno-bmi2 -mno-tbm -mavx -mno-avx2 -msse4.2 -msse4.1 
-mno-lzcnt -mno-rdrnd -mno-f16c -mno-fsgsbase --param l1-cache-size=32 
--param l1-cache-line-size=64 --param l2-cache-size=6144 -mtune=corei7-avx 
-fPIC -mmacosx-version-min=10.6.8 -O3 
options enabled: -Wnonportable-cfstrings -fPIC -falign-labels 
-fasynchronous-unwind-tables -fauto-inc-dec -fbranch-count-reg 
-fcaller-saves -fcombine-stack-adjustments -fcommon -fcompare-elim 
-fcprop-registers -fcrossjumping -fcse-follow-jumps -fdebug-types-section 
-fdefer-pop -fdelete-null-pointer-checks -fdevirtualize -fearly-inlining 
... 

тогда

$ gcc -Q -O3 -march=native --help=optimizers 

-falign-functions     [enabled] 
-falign-jumps      [enabled] 
-falign-labels      [enabled] 
-falign-loops      [enabled] 
-fasynchronous-unwind-tables  [enabled] 
-fbranch-count-reg     [enabled] 
-fbranch-probabilities    [disabled] 
-fbranch-target-load-optimize  [disabled] 
-fbranch-target-load-optimize2  [disabled] 
-fbtr-bb-exclusive     [disabled] 
-fcaller-saves      [enabled] 
-fcombine-stack-adjustments   [enabled] 
-fcommon       [enabled] 
-fcompare-elim      [enabled] 
-fconserve-stack     [disabled] 
-fcprop-registers     [enabled] 
-fcrossjumping      [enabled] 
-fcse-follow-jumps     [enabled] 
-fcx-fortran-rules     [disabled] 
-fcx-limited-range     [disabled] 
-fdata-sections      [disabled] 
-fdce        [enabled] 
-fdefer-pop       [enabled] 
-fdelayed-branch     [disabled] 
-fdelete-null-pointer-checks  [enabled] 
-fdevirtualize      [enabled] 
-fdse        [enabled] 
-fearly-inlining     [enabled] 
... 

Глядя на вариантах -falign-функцию, -falign-прыжки, -falign-метку и -falign-петля Способа 2 претензии все они включены, в то время как метод 1 говорит включены только -falign-метки. Также опции -fdce и -fdse активируются в соответствии с методом 2, но не в соответствии с методом 1.

Вопрос: На каком методе я должен доверять?

Боковое примечание: список метода 2 является неполным, поскольку параметры сгруппированы и перечислены только группы (группы), запрошенные с параметром --help =. Чтобы увидеть всех параметров в методе 2 прогона:

$ gcc -Q -O3 -march=native --help=optimizers --help=target --help=c 
--help=common --help=warnings | sort 

ответ

1

От НКУ документации:

--help = {класс | [^]} квалификатор [...] Печать (на стандартный вывод) описание параметров командной строки, понятых компилятору , которые вписываются во все указанные классы и квалификаторы.

тогда

Если в командной строке перед --help = опции появится опция -Q, то описательный текст, отображаемый --help = изменяется. Вместо описания отображаемых опций указывается как : включена ли опция, отключена или установлена ​​на определенное значение (предполагается, что компилятор знает это в точке, где используется опция --help = )

оказывается, что --help просто показывает, какие опции один может включить, а -Q позволяет увидеть, если это на самом деле включена.Также:

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

+0

Действительно, -Q изменяет выход, чтобы показать, какие опции включены и используется как в способе 1 и 2 Однако возникает вопрос, почему результаты отличаются при поставке простого исходного файла C (метод 1) или -help (метод 2). Является ли метод 1 просто неполным? – zan

Смежные вопросы