Re: compile warning

Поиск
Список
Период
Сортировка
Искать
От
Andrew Dunstan
Тема
Re: compile warning
Дата
Msg-id
3F870786.3030309@dunslane.net
Ответ на
Re: compile warning (Bruce Momjian)
Список
Дерево обсуждения
compile warning Alvaro Herrera <alvherre@dcc.uchile.cl>
Re: compile warning Bruce Momjian <pgman@candle.pha.pa.us>
Re: compile warning Alvaro Herrera <alvherre@dcc.uchile.cl>
Re: compile warning Bruce Momjian <pgman@candle.pha.pa.us>
Re: compile warning Andrew Dunstan <andrew@dunslane.net>
Re: compile warning Manfred Spraul <manfred@colorfullife.com>
Bruce Momjian wrote:

>This seems to be a bug in gcc-3.3.1.  -fstrict-aliasing is enabled by
>-O2 or higher optimization in gcc 3.3.1.
>
>Now that I think of it, they might be talking about an optimization
>called register aliasing, where they are taking the structure and
>mapping it to a CPU register for some optimization, and what we are
>doing is to store a different structure in there that will not fit in a
>register.  A Node will fit in a register (it is only an enum) but the
>TriggerData structure will not, meaning the code has to spill the
>register to memory, then access the full structure, or something like
>that.
>
>
>  
>

Did you mean register renaming? If so, it is only turned on by -O3. But I can see that strict aliasing does help the compiler make the right guess as to which registers to use for what, even without register renaming.


http://gcc.gnu.org/onlinedocs/gcc-3.3.1/gcc/Optimize-Options.html#Optimize%20Options 
says:

|-O|

|-O1|   Optimize. Optimizing compilation takes somewhat more time, and a lot   more memory for a large function.
   With |-O|, the compiler tries to reduce code size and execution   time, without performing any optimizations that take a great deal of   compilation time.
   |-O| turns on the following optimization flags:
         -fdefer-pop          -fmerge-constants          -fthread-jumps          -floop-optimize          -fcrossjumping          -fif-conversion          -fif-conversion2          -fdelayed-branch          -fguess-branch-probability          -fcprop-registers         
   |-O| also turns on |-fomit-frame-pointer| on machines where doing so   does not interfere with debugging.

|-O2|   Optimize even more. GCC performs nearly all supported optimizations   that do not involve a space-speed tradeoff. The compiler does not   perform loop unrolling or function inlining when you specify |-O2|.   As compared to |-O|, this option increases both compilation time and   the performance of the generated code.
   |-O2| turns on all optimization flags specified by |-O|. It also   turns on the following optimization flags:
         -fforce-mem          -foptimize-sibling-calls          -fstrength-reduce          -fcse-follow-jumps  -fcse-skip-blocks          -frerun-cse-after-loop  -frerun-loop-opt          -fgcse   -fgcse-lm   -fgcse-sm          -fdelete-null-pointer-checks          -fexpensive-optimizations          -fregmove          -fschedule-insns  -fschedule-insns2          -fsched-interblock -fsched-spec          -fcaller-saves          -fpeephole2          -freorder-blocks  -freorder-functions          -fstrict-aliasing          -falign-functions  -falign-jumps          -falign-loops  -falign-labels         
   Please note the warning under |-fgcse| about invoking |-O2| on   programs that use computed gotos.

|-O3|   Optimize yet more. |-O3| turns on all optimizations specified by   |-O2| and also turns on the |-finline-functions| and   |-frename-registers| options.
   In the Linux kernel, you can see this in include/linux/tcp.h:
   /*    *  The union cast uses a gcc extension to avoid aliasing problems    *  (union is compatible to any of its members)    *  This means this part of the code is -fstrict-aliasing safe now.    */   union tcp_word_hdr {       struct tcphdr hdr;       __u32         words[5];   };
   #define tcp_flag_word(tp) ( ((union tcp_word_hdr *)(tp))->words [3])


   Maybe this gives us a clue.
   cheers
   andrew


В списке pgsql-hackers по дате отправления
От: Andrew Sullivan
Дата:
Сообщение: Re: 2-phase commit
От: Satoshi Nagayasu
Дата:
Сообщение: Re: 2-phase commit
FAQ