On Thu, May 29, 2014 at 06:38:22PM +0100, Vladimir Makarov wrote:
>   The following patch PR61325.  The details can be found on
> 
> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61325
> 
>   The patch was bootstrapped and tested on x86/x86-64.
> 
>   Committed as rev. 211060 to gcc-4.9 branch and as rev.211061 to trunk.
> 
> 2014-05-29  Vladimir Makarov  <vmaka...@redhat.com>
> 
>         PR rtl-optimization/61325
>         * lra-constraints.c (process_address): Rename to
>         process_address_1.
>         (process_address): New function.
> 
> 2014-05-29  Vladimir Makarov  <vmaka...@redhat.com>
> 
>         PR rtl-optimization/61325
>         * gcc.target/aarch64/pr61325.c: New.

Hi Vlad,

This patch appears to cause issues where the ARM backend can get stuck in a
seemingly infinite loop.

Compiling:

./gcc.c-torture/compile/unalign-1.c

Directly With cc1 using command line:

cc1 gcc-clean/gcc/testsuite/gcc.c-torture/compile/unalign-1.c -O3 
-mcpu=cortex-a15 -mthumb -mfloat-abi=hard -mfpu=neon-vfpv4

Triggers the issue reproducibly for me across a few ARM configurations.

Reverting this patch fixes the problem.

Interrupting and asking gdb for a backtrace gives this:

#1  0x005597cc in resize_reg_info() () at 
/home/jamgre01//gcc-clean/gcc/reginfo.c:912
#2  0x004b436c in get_reg_class(int) () at 
/home/jamgre01//gcc-clean/gcc/lra-int.h:400
#3  0x004b541c in in_class_p(rtx_def*, reg_class, reg_class*) () at 
/home/jamgre01//gcc-clean/gcc/lra-constraints.c:265
#4  0x004b6314 in process_addr_reg(rtx_def**, rtx_def**, rtx_def**, reg_class) 
() at /home/jamgre01//gcc-clean/gcc/lra-constraints.c:1176
#5  0x004b6aa0 in process_address_1(int, rtx_def**, rtx_def**) () at 
/home/jamgre01//gcc-clean/gcc/lra-constraints.c:2829
#6  0x004bb150 in curr_insn_transform() () at 
/home/jamgre01//gcc-clean/gcc/lra-constraints.c:3001
#7  0x004bd884 in lra_constraints(bool) () at 
/home/jamgre01//gcc-clean/gcc/lra-constraints.c:4230
#8  0x004aca04 in lra(_IO_FILE*) () at /home/jamgre01//gcc-clean/gcc/lra.c:2333

For completeness, here is the -v output for one recent toolchain I've built.

Using built-in specs.
COLLECT_GCC=build/clean/install/bin/gcc
COLLECT_LTO_WRAPPER=/home/jamgre01/build/clean/install/bin/../libexec/gcc/armv7l-unknown-linux-gnueabihf/4.10.0/lto-wrapper
Target: armv7l-unknown-linux-gnueabihf
Configured with: /home/jamgre01//gcc-clean/configure 
--with-cpu=cortex-a15.cortex-a7 --with-fpu=neon-vfpv4 --with-float=hard 
--prefix=/home/jamgre01/build//clean//install --enable-languages=c,c++,fortran
Thread model: posix
gcc version 4.10.0 20140603 (experimental) (GCC) 
COLLECT_GCC_OPTIONS='-O3' '-v' '-mcpu=cortex-a15.cortex-a7' '-mfloat-abi=hard' 
'-mfpu=neon-vfpv4' '-mtls-dialect=gnu'
 
/home/jamgre01/build/clean/install/bin/../libexec/gcc/armv7l-unknown-linux-gnueabihf/4.10.0/cc1
 -quiet -v -imultilib . -imultiarch arm-linux-gnueabihf -iprefix 
/home/jamgre01/build/clean/install/bin/../lib/gcc/armv7l-unknown-linux-gnueabihf/4.10.0/
 gcc-clean/gcc/testsuite/gcc.c-torture/compile/unalign-1.c -quiet -dumpbase 
unalign-1.c -mcpu=cortex-a15.cortex-a7 -mfloat-abi=hard -mfpu=neon-vfpv4 
-mtls-dialect=gnu -auxbase unalign-1 -O3 -version -o /tmp/ccZj6iwS.s
GNU C (GCC) version 4.10.0 20140603 (experimental) 
(armv7l-unknown-linux-gnueabihf)
        compiled by GNU C version 4.10.0 20140603 (experimental), GMP version 
5.0.2, MPFR version 3.1.0-p3, MPC version 0.9
GGC heuristics: --param ggc-min-expand=30 --param ggc-min-heapsize=4096
ignoring nonexistent directory 
"/home/jamgre01/build/clean/install/bin/../lib/gcc/armv7l-unknown-linux-gnueabihf/4.10.0/../../../../armv7l-unknown-linux-gnueabihf/include"
ignoring duplicate directory 
"/home/jamgre01/build/clean/install/bin/../lib/gcc/../../lib/gcc/armv7l-unknown-linux-gnueabihf/4.10.0/include"
ignoring nonexistent directory "/usr/local/include/arm-linux-gnueabihf"
ignoring duplicate directory 
"/home/jamgre01/build/clean/install/bin/../lib/gcc/../../lib/gcc/armv7l-unknown-linux-gnueabihf/4.10.0/include-fixed"
ignoring nonexistent directory 
"/home/jamgre01/build/clean/install/bin/../lib/gcc/../../lib/gcc/armv7l-unknown-linux-gnueabihf/4.10.0/../../../../armv7l-unknown-linux-gnueabihf/include"
#include "..." search starts here:
#include <...> search starts here:
 
/home/jamgre01/build/clean/install/bin/../lib/gcc/armv7l-unknown-linux-gnueabihf/4.10.0/include
 
/home/jamgre01/build/clean/install/bin/../lib/gcc/armv7l-unknown-linux-gnueabihf/4.10.0/include-fixed
 /usr/local/include
 /home/jamgre01/build/clean/install/bin/../lib/gcc/../../include
 /usr/include/arm-linux-gnueabihf
 /usr/include
End of search list.
GNU C (GCC) version 4.10.0 20140603 (experimental) 
(armv7l-unknown-linux-gnueabihf)
        compiled by GNU C version 4.10.0 20140603 (experimental), GMP version 
5.0.2, MPFR version 3.1.0-p3, MPC version 0.9
GGC heuristics: --param ggc-min-expand=30 --param ggc-min-heapsize=4096

Thanks,
James

Reply via email to