2013-08-14 4 views
8

J'essaye de comprendre quelles options de compilateur sont activées pour GCC (4.7.3, installation de Macports sous Mac OS X 10.6.8). Je sais que des méthodes suivantes:Options du compilateur GCC: quel ensemble d'options activées est correct?

  1. En utilisant l'option -Q avec un fichier d'entrée simple, comme suggéré par GCC 4.3.3 compiler options enabled:

    gcc -Q -v -o hello hello.c 
    
  2. Utilisation du -Q --help = x combinaison (pour les valeurs de x, voir GCC documentation) par exemple:

    gcc -Q --help=target 
    
  3. Pour voir activé: définit

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

Cependant, quand je lance la méthode 1 et 2 avec le même ensemble d'options d'optimisation, je reçois deux ensembles différents d'options activées/désactivées.

$ 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 
... 

alors

$ 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] 
... 

Vous cherchez des options -falign-fonctions, -falign-sauts, -falign-étiquettes et -falign-boucles Méthode 2 elles sont toutes réclamations activées, tandis que la méthode 1 dit only -falign-labels est activé. Les options -fdce et -fdse sont également activées selon la méthode 2, mais pas selon la méthode 1.

Question: Quelle méthode devrais-je faire confiance? Side note: la liste de la méthode 2 est incomplète, car les options sont groupées et seuls les groupes demandés avec l'option --help = sont listés. Pour voir toutes options Méthode 2: course

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

Répondre

1

De la documentation GCC:

--help = {class | qualificatif [^]} [, ...] Imprimer (sur la sortie standard) une description des options de ligne de commande comprises par le compilateur qui correspondent à toutes les classes et qualificatifs spécifiés.

alors

Si l'option -Q apparaît sur la ligne de commande avant l'option --help = , le texte descriptif affiché par --help = est modifié. Au lieu de décrire les options affichées, indique si l'option est activée, désactivée ou définie sur une valeur spécifique (en supposant que le compilateur le sache au point où l'option --help = est utilisée)

il semble que --help montre simplement les options d'un peuvent permettre, tout en -Q permet de voir si elle est réellement activée.Aussi:

La sortie est sensible aux effets de la ligne de commande précédente Options

+0

En effet, -Q modifie la sortie pour montrer quelles options sont activées et il est utilisé dans la méthode 1 et 2 La question est, cependant, de savoir pourquoi les résultats diffèrent lorsqu'on fournit un simple fichier source C (méthode 1) ou --help (méthode 2). La méthode 1 est-elle simplement incomplète? – zan

Questions connexes