$ cat ~/ice2.i typedef unsigned int _GCC_ATTR_ALIGN_u64t __attribute__((__mode__(__DI__))); typedef _GCC_ATTR_ALIGN_u64t _Uint64t __attribute__((__aligned__(8))); typedef unsigned int _GCC_ATTR_ALIGN_u8t __attribute__((__mode__(__QI__))); typedef _GCC_ATTR_ALIGN_u8t _Uint8t __attribute__((__aligned__(1))); typedef _Uint8t uint8_t; typedef _Uint64t uint64_t; typedef __builtin_neon_udi uint64x1_t; typedef struct uint64x1x4_t { uint64x1_t val[4]; } uint64x1x4_t;
__extension__ static __inline uint64x1x4_t __attribute__ ((__always_inline__)) vld4_u64 (const uint64_t * __a) { union { uint64x1x4_t __i; __builtin_neon_oi __o; } __rv; __rv.__o = __builtin_neon_vld4v8hi ((const __builtin_neon_hi *) __a); return __rv.__i; } void test( uint8_t * dst, uint8_t * src, unsigned nbytes) { uint64x1x4_t tmp; while (nbytes >= 32) { tmp = vld4_u64((uint64_t *)src); vst4_u64((uint64_t *)dst, tmp); } } $ ./xgcc -v Using built-in specs. Target: arm-unknown-linux-gnueabi Configured with: ../configure --target=arm-unknown-linux-gnueabi --prefix=/home/ryan/x-tools/arm-unknown-linux-gnueabi --with-sysroot=/home/ryan/x-tools/arm-unknown-linux-gnueabi/arm-unknown-linux-gnueabi/sys-root --enable-languages=c,c++ --disable-multilib --with-float=soft --disable-sjlj-exceptions --enable-__cxa_atexit --with-local-prefix=/home/ryan/x-tools/arm-unknown-linux-gnueabi/arm-unknown-linux-gnueabi/sys-root --disable-nls --enable-threads=posix --enable-symvers=gnu --enable-c99 --enable-long-long --enable-target-optspac Thread model: posix gcc version 4.5.0 20100329 (experimental) [trunk revision 157802] (GCC) $ ./xgcc -B. ~/ice2.i -O3 -mfpu=neon -mfloat-abi=softfp -c /home/ryan/ice2.i: In function 'test': /home/ryan/ice2.i:22:1: error: unable to find a register to spill in class 'GENERAL_REGS' /home/ryan/ice2.i:22:1: error: this is the insn: (insn 96 10 12 3 /home/ryan/ice2.i:12 (set (reg:XI 136 [ D.3641 ]) (const_int 0 [0x0])) 732 {*neon_movxi} (expr_list:REG_EQUAL (const_int 0 [0x0]) (nil))) /home/ryan/ice2.i:22:1: internal compiler error: in spill_failure, at reload1.c:2158 Please submit a full bug report, with preprocessed source if appropriate. See <http://gcc.gnu.org/bugs.html> for instructions. On the 4.3 branch (4.3.5 20100330 (prerelease)), the same testcase has causes a different ICE: $ ./xgcc -B. ~/ice2.i -O3 -mfpu=neon -mfloat-abi=softfp -c /home/ryan/ice2.i: In function 'test': /home/ryan/ice2.i:22: internal compiler error: in record_store, at dse.c:1360 Please submit a full bug report, with preprocessed source if appropriate. See <http://gcc.gnu.org/bugs.html> for instructions. -- Summary: ICE in spill_failure, at reload1.c:2158 Product: gcc Version: 4.5.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: target AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: rmansfield at qnx dot com GCC build triplet: i686-pc-linux-gnu GCC host triplet: i686-pc-linux-gnu GCC target triplet: arm-unknown-linux-gnueabi http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43590