On Fri, Jun 11, 2010 at 2:04 PM, Bingfeng Mei <b...@broadcom.com> wrote:
> Hi,
>
> I am still puzzled by the effect of LTO/-fwhole-program.
> For the following simple tests:
>
> a.c:
>
> #include <stdio.h>
> int v;
>
> extern void bar();
> int main()
> {
>  v = 5;
>  bar();
>
>  printf("v = %d\n", v);
>  return 0;
> }
>
> b.c:
> int v;
> void bar()
> {
>  v = 4;
> }
>
> If I just compile plainly, the output is:
> v = 4
>
> If I compile  as:
> ~/work/install-x86/bin/gcc  a.c -O2 -c -save-temps -flto
> ~/work/install-x86/bin/gcc  b.c -O2 -c -save-temps
> ~/work/install-x86/bin/gcc  a.o b.o -O2 -fuse-linker-plugin -o f -flto 
> -fwhole-program
>
> The output is:
> v = 5
>
> We get two copies of v here. One is converted to static by whole-program 
> optimizer,
> and the other is global. I know I can add externally_visible in a.c to solve
> the issue.  But since compiler is not able to give any warning here, it could 
> make
> program very tricky to debug.
>
> What is the value to convert variables to static ones? I know unreferenced 
> ones can
> be optimized out, but this can be achieved by -fdata-sections & 
> -gc-collection as
> well, I believe.

You make inter-procedural/file data-flow operations possible.

Richard.

> Cheers,
> Bingfeng
>
>
>

Reply via email to