On Sun, Jun 03, 2007 at 11:07:46PM +0200, qboosh wrote:
> Author: qboosh                       Date: Sun Jun  3 21:07:46 2007 GMT
> Module: SOURCES                       Tag: HEAD
> ---- Log message:
> - hidden visibility for _stdio_init causes non-NULL check to be optimized 
> away on x86

> +-extern void weak_function _stdio_init(void) attribute_hidden;
> ++extern void weak_function _stdio_init(void);

visibility("hidden") ma prawo w ten sposób wpływać na optymalizację, czy
to problem z gcc (4.1.2 i 4.2.0)?

weak_function to __attribute__((weak))

sprawdzany warunek:

# define likely(x)      __builtin_expect((!!(x)),1)
    if (likely(_stdio_init != NULL))
        _stdio_init();

no i jak jest hidden, to porówanie znika.

W samodzielnym programie efektu nie zaobserwowałem (próbowałem -Os,
-O2):

#include <stdlib.h>

extern void __attribute__((weak)) func(void) 
__attribute__((visibility("hidden")));

# define likely(x)      __builtin_expect((!!(x)),1)

int main()
{
  if(likely(func != NULL))
    func();
}


-- 
Jakub Bogusz    http://qboosh.pl/
_______________________________________________
pld-devel-pl mailing list
[email protected]
http://lists.pld-linux.org/mailman/listinfo/pld-devel-pl

Odpowiedź listem elektroniczym