Hi!

This patch attempts to optimize VEC_BASE if we know
that offsetof of base is 0 (unless the compiler is doing something
strange, it is true).
It doesn't have a clear code size effect, some .text sections
grew, supposedly because of more inlining, some .text sections shrunk.

Bootstrapped/regtested on x86_64-linux and i686-linux.

2011-11-07  Jakub Jelinek  <ja...@redhat.com>

        * vec.h (VEC_BASE): If base is at offset 0 in the structure,
        use &(P)->base even if P is NULL.

--- gcc/vec.h.jj        2011-09-08 11:21:10.000000000 +0200
+++ gcc/vec.h   2011-11-07 18:45:33.000000000 +0100
@@ -549,7 +549,12 @@ typedef struct VEC(T,A)                                    
                  \
 } VEC(T,A)
 
 /* Convert to base type.  */
+#if GCC_VERSION >= 4000
+#define VEC_BASE(P) \
+  ((offsetof (__typeof (*P), base) == 0 || (P)) ? &(P)->base : 0)
+#else
 #define VEC_BASE(P)  ((P) ? &(P)->base : 0)
+#endif
 
 /* Vector of integer-like object.  */
 #define DEF_VEC_I(T)                                                     \

        Jakub

Reply via email to