[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