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.