[Bug tree-optimization/98535] [11 Regression] ICE in operands_scanner::get_expr_operands(tree_node**, int) building 538.imagick_r

rguenth at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Tue Jan 19 10:04:44 GMT 2021


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98535

Richard Biener <rguenth at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Assignee|unassigned at gcc dot gnu.org      |rguenth at gcc dot gnu.org
     Ever confirmed|0                           |1
   Last reconfirmed|                            |2021-01-19
             Status|UNCONFIRMED                 |ASSIGNED

--- Comment #5 from Richard Biener <rguenth at gcc dot gnu.org> ---
(In reply to Richard Biener from comment #4)
> guess 'pieces' is accessed in uninitialized parts.  Using quick_grow_cleared
> to init it might more reliably "crash" things rather than ending up with
> strange 'niters' entry ;)

Indeed.

> ./cc1 -quiet t.c -I include -O3 -mcpu=neoverse-v1
during GIMPLE pass: vect
t.c: In function 'i':
t.c:12:1: internal compiler error: in duplicate_and_interleave, at
tree-vect-slp.c:5115
   12 | i() {
      | ^
0x1778d9b duplicate_and_interleave(vec_info*, gimple**, tree_node*,
vec<tree_node*, va_heap, vl_ptr>, unsigned int, vec<tree_node*, va_heap,
vl_ptr>&)
        ../../src/trunk/gcc/tree-vect-slp.c:5115

with

diff --git a/gcc/tree-vect-slp.c b/gcc/tree-vect-slp.c
index 1787ad74268..f4b2b69a6eb 100644
--- a/gcc/tree-vect-slp.c
+++ b/gcc/tree-vect-slp.c
@@ -5063,7 +5063,7 @@ duplicate_and_interleave (vec_info *vinfo, gimple_seq
*seq, tree vector_type,

   tree_vector_builder partial_elts;
   auto_vec<tree, 32> pieces (nvectors * 2);
-  pieces.quick_grow (nvectors * 2);
+  pieces.quick_grow_cleared (nvectors * 2);
   for (unsigned int i = 0; i < nvectors; ++i)
     {
       /* (2) Replace ELTS[0:NELTS] with ELTS'[0:NELTS'], where each element of
@@ -5112,6 +5112,7 @@ duplicate_and_interleave (vec_info *vinfo, gimple_seq
*seq, tree vector_type,
          tree output = make_ssa_name (new_vector_type);
          tree input1 = pieces[in_start + (i / 2)];
          tree input2 = pieces[in_start + (i / 2) + hi_start];
+         gcc_assert (input1 && input2);
          gassign *stmt = gimple_build_assign (output, VEC_PERM_EXPR,
                                               input1, input2,
                                               permutes[i & 1]);

I'll see what happens.


More information about the Gcc-bugs mailing list