Due to the inliner change (in google/main), a couple of test cases under gcc.dg/matrix starts to fail (ICE in matrix reorg). The problem can be reproduced in gcc46 with increases inline limit (but not in trunk -- the problem is either fixed or inline behavior is still different). The following workaround will be checked in to google/main. Along with the patch is a change in LIPO. When forming the name for local labels in function, to avoid conflict, both module id and funcdef_no is used. The new change increase one bit to allow more functions (256k funcs per module), and a total of 16k modules -- we saw cases where funcdef_no is greater than 128k in a module leading to overflow and conflict.
2011-05-21 David Li <davi...@google.com> * testsuite/gcc.dg/matrix/transpose-1.c: Do not inline mem_init. * testsuite/gcc.dg/matrix/transpose-2.c: Ditto. * testsuite/gcc.dg/matrix/transpose-3.c: Ditto. * testsuite/gcc.dg/matrix/transpose-4.c: Ditto. * testsuite/gcc.dg/matrix/transpose-5.c: Ditto. * testsuite/gcc.dg/matrix/transpose-6.c: Ditto. Index: function.h =================================================================== --- function.h (revision 174024) +++ function.h (working copy) @@ -673,7 +673,7 @@ struct GTY(()) function { GEN_FUNC_GLOBAL_ID (FUNC_DECL_MODULE_ID (func), FUNC_DECL_FUNC_ID (func)) /* 32 bit wide unique id used for asm label (limit: 30k modules, 128k funcs per module. */ -#define FUNC_LABEL_ID(func) ((FUNC_DECL_MODULE_ID (func) << 17) +\ +#define FUNC_LABEL_ID(func) ((FUNC_DECL_MODULE_ID (func) << 18) +\ (func)->funcdef_no) /* Add the decl D to the local_decls list of FUN. */ Index: testsuite/gcc.dg/matrix/transpose-1.c =================================================================== --- testsuite/gcc.dg/matrix/transpose-1.c (revision 174024) +++ testsuite/gcc.dg/matrix/transpose-1.c (working copy) @@ -52,7 +52,7 @@ main (int argc, char **argv) /*--------------------------------------------------------------------------*/ /* Dynamic memory allocations and initializations */ -void +__attribute__((noinline)) void mem_init (void) { @@ -95,4 +95,3 @@ mem_init (void) /* { dg-final-use { scan-ipa-dump-times "Flattened 3 dimensions" 1 "matrix-reorg" } } */ /* { dg-final-use { scan-ipa-dump-times "Transposed" 3 "matrix-reorg" } } */ /* { dg-final-use { cleanup-ipa-dump "matrix-reorg" } } */ - Index: testsuite/gcc.dg/matrix/transpose-2.c =================================================================== --- testsuite/gcc.dg/matrix/transpose-2.c (revision 174024) +++ testsuite/gcc.dg/matrix/transpose-2.c (working copy) @@ -50,7 +50,7 @@ main (int argc, char **argv) /*--------------------------------------------------------------------------*/ /* Dynamic memory allocations and initializations */ -void +__attribute__((noinline)) void mem_init (void) { Index: testsuite/gcc.dg/matrix/transpose-3.c =================================================================== --- testsuite/gcc.dg/matrix/transpose-3.c (revision 174024) +++ testsuite/gcc.dg/matrix/transpose-3.c (working copy) @@ -54,7 +54,7 @@ main (int argc, char **argv) /*--------------------------------------------------------------------------*/ /* Dynamic memory allocations and initializations */ -void +__attribute__((noinline)) void mem_init (void) { Index: testsuite/gcc.dg/matrix/transpose-4.c =================================================================== --- testsuite/gcc.dg/matrix/transpose-4.c (revision 174024) +++ testsuite/gcc.dg/matrix/transpose-4.c (working copy) @@ -52,7 +52,7 @@ main (int argc, char **argv) /*--------------------------------------------------------------------------*/ /* Dynamic memory allocations and initializations */ -void +__attribute__((noinline)) void mem_init (void) { Index: testsuite/gcc.dg/matrix/transpose-5.c =================================================================== --- testsuite/gcc.dg/matrix/transpose-5.c (revision 174024) +++ testsuite/gcc.dg/matrix/transpose-5.c (working copy) @@ -49,7 +49,7 @@ main (int argc, char **argv) /*--------------------------------------------------------------------------*/ /* Dynamic memory allocations and initializations */ -void +__attribute__((noinline)) void mem_init (void) { Index: testsuite/gcc.dg/matrix/transpose-6.c =================================================================== --- testsuite/gcc.dg/matrix/transpose-6.c (revision 174024) +++ testsuite/gcc.dg/matrix/transpose-6.c (working copy) @@ -49,7 +49,7 @@ main (int argc, char **argv) /*--------------------------------------------------------------------------*/ /* Dynamic memory allocations and initializations */ -void +__attribute__((noinline)) void mem_init (void) { -- This patch is available for review at http://codereview.appspot.com/4553055