https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66076
Uroš Bizjak <ubizjak at gmail dot com> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |NEW Last reconfirmed| |2015-05-10 CC| |rdsandiford at googlemail dot com, | |ubizjak at gmail dot com Component|target |rtl-optimization Ever confirmed|0 |1 --- Comment #1 from Uroš Bizjak <ubizjak at gmail dot com> --- Confirmed. #0 internal_error (gmsgid=gmsgid@entry=0x1687d37 "in %s, at %s:%d") at /home/uros/gcc-svn/trunk/gcc/diagnostic.c:1217 #1 0x00000000011228d4 in fancy_abort (file=file@entry=0x1200878 "/home/uros/gcc-svn/trunk/gcc/vec.h", line=line@entry=618, function=function@entry=0x12a8d80 <void vec_safe_grow<rtx_def const*, va_heap>(vec<rtx_def const*, va_heap, vl_embed>*&, unsigned int)::__FUNCTION__> "vec_safe_grow") at /home/uros/gcc-svn/trunk/gcc/diagnostic.c:1291 #2 0x0000000000a747e1 in vec_safe_grow<rtx_def const*, va_heap> (len=17, v=@0x7fffffffd830: 0x1c84950) at /home/uros/gcc-svn/trunk/gcc/vec.h:618 #3 generic_subrtx_iterator<const_rtx_accessor>::add_single_to_queue (array=..., base=0x7fffffffd7b0, i=i@entry=16, x=<optimized out>) at /home/uros/gcc-svn/trunk/gcc/rtlanal.c:107 #4 0x0000000000a7498a in generic_subrtx_iterator<const_rtx_accessor>::add_subrtxes_to_queue (array=..., base=<optimized out>, base@entry=0x7fffffffd7b0, end=17, end@entry=1, x=0x7ffff1a1f010) at /home/uros/gcc-svn/trunk/gcc/rtlanal.c:174 #5 0x0000000000daa055 in next (this=<synthetic pointer>) at /home/uros/gcc-svn/trunk/gcc/rtl-iter.h:196 #6 ix86_loop_unroll_adjust (nunroll=1, loop=0x7ffff19cb510) at /home/uros/gcc-svn/trunk/gcc/config/i386/i386.c:51449 #7 0x000000000097f367 in decide_unroll_constant_iterations (flags=<optimized out>, loop=0x7ffff19cb510) at /home/uros/gcc-svn/trunk/gcc/loop-unroll.c:403 #8 decide_unrolling (flags=<optimized out>) at /home/uros/gcc-svn/trunk/gcc/loop-unroll.c:293 #9 unroll_loops (flags=<optimized out>) at /home/uros/gcc-svn/trunk/gcc/loop-unroll.c:311 While following patch should be used, it doesn't help. It looks that some internal limit in RTX iterator is triggered for quite big RTX. --cut here-- Index: config/i386/i386.c =================================================================== --- config/i386/i386.c (revision 222981) +++ config/i386/i386.c (working copy) @@ -51446,7 +51446,7 @@ ix86_loop_unroll_adjust (unsigned nunroll, struct for (i = 0; i < loop->num_nodes; i++) FOR_BB_INSNS (bbs[i], insn) if (NONDEBUG_INSN_P (insn)) - FOR_EACH_SUBRTX (iter, array, insn, NONCONST) + FOR_EACH_SUBRTX (iter, array, PATTERN (insn), NONCONST) if (const_rtx x = *iter) if (MEM_P (x)) { --cut here-- (gdb) f 6 #6 ix86_loop_unroll_adjust (nunroll=1, loop=0x7ffff19cb510) at /home/uros/gcc-svn/trunk/gcc/config/i386/i386.c:51449 51449 FOR_EACH_SUBRTX (iter, array, PATTERN (insn), NONCONST) (gdb) p debug_rtx (insn) (insn 120 119 123 5 (set (reg:V32QI 230) (vec_select:V32QI (vec_concat:V64QI (subreg:V32QI (reg:V4DI 225) 0) (subreg:V32QI (reg:V4DI 225) 0)) (parallel [ (const_int 8 [0x8]) (const_int 40 [0x28]) (const_int 9 [0x9]) (const_int 41 [0x29]) (const_int 10 [0xa]) (const_int 42 [0x2a]) (const_int 11 [0xb]) (const_int 43 [0x2b]) (const_int 12 [0xc]) (const_int 44 [0x2c]) (const_int 13 [0xd]) (const_int 45 [0x2d]) (const_int 14 [0xe]) (const_int 46 [0x2e]) (const_int 15 [0xf]) (const_int 47 [0x2f]) (const_int 24 [0x18]) (const_int 56 [0x38]) (const_int 25 [0x19]) (const_int 57 [0x39]) (const_int 26 [0x1a]) (const_int 58 [0x3a]) (const_int 27 [0x1b]) (const_int 59 [0x3b]) (const_int 28 [0x1c]) (const_int 60 [0x3c]) (const_int 29 [0x1d]) (const_int 61 [0x3d]) (const_int 30 [0x1e]) (const_int 62 [0x3e]) (const_int 31 [0x1f]) (const_int 63 [0x3f]) ]))) pr66076.c:6 3549 {avx2_interleave_highv32qi} (expr_list:REG_DEAD (reg:V4DI 225) (nil))) $15 = void Adding RTX expert to CC.