This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
While writing the Thunder tunings, I got an internal compiler error while building glibc. The reduced testcase is: typedef unsigned int size_t; typedef unsigned int wchar_t; extern __thread int __libc_errno; extern __thread int * t; int _IO_vfprintf_internal (char *string, char *workend, char *f) { int save_errno = __libc_errno; do { int prec = (workend - string); string = (char *) __strerror_r (save_errno); if ( *t == 1) { size_t ignore_size = (unsigned) prec > 1024 ? 1024 : prec; wchar_t ignore[ignore_size]; const char *str2 = string; const char *strend = string + prec; int ps; while (str2 != ((void *)0) && str2 < strend) __mbsnrtowcs (ignore, &str2 ,&ps) ; } } while (*f != '\0'); } ---- CUT --- I changed the cost of moving between two neon registers (FP_REGS register class) to be the same as the cost of moving between a GENERAL_REGS and a FP_REGS class. This caused the cost of moving between the STACK_REG and FP_REGS being the same FP_REGS and GENERAL_REGS which is incorrect as it has to go through a GENERAL_REGS. This patch fixes the problem by changing the cost of the move between STACK_REG and FP_REGS to the cost of moving via a GENERAL_REGS. OK? Built and tested on aarch64-elf with no regressions. Thanks, Andrew Pinski ChangeLog: * config/aarch64/aarch64.c (aarch64_register_move_cost): Correct cost of moving from/to the STACK_REG register class.
Attachment:
fixregistercost.diff.txt
Description: Text document
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |