Summary: | [8 Regression] ICE with -O3 in process_use, at tree-vect-stmts.c:506 | ||
---|---|---|---|
Product: | gcc | Reporter: | David Binderman <dcb314> |
Component: | tree-optimization | Assignee: | Not yet assigned to anyone <unassigned> |
Status: | RESOLVED FIXED | ||
Severity: | normal | CC: | rguenth |
Priority: | P3 | Keywords: | ice-on-valid-code |
Version: | 8.0 | ||
Target Milestone: | 8.0 | ||
Host: | Target: | ||
Build: | Known to work: | ||
Known to fail: | Last reconfirmed: | 2017-07-21 00:00:00 |
Description
David Binderman
2017-07-20 20:37:51 UTC
Mine. Possible duplicate for this reduced code: struct a { int b; int c }; struct d { struct a *e } f(struct d *g) { int h; int b; for (; h; ++h) { int i = g->e[h].c + 1; g->e[h].c = g->e[h].b; g->e[h].b = b; b = i; } if (b) j(); } $ ~/gcc/results/bin/gcc -c -O3 -w bug370.c during GIMPLE pass: vect bug370.c: In function ‘f’: bug370.c:7:3: internal compiler error: in vect_analyze_stmt, at tree-vect-stmts.c:8524 } f(struct d *g) { ^ 0xef7559 vect_analyze_stmt(gimple*, bool*, _slp_tree*, _slp_instance*) ../../trunk/gcc/tree-vect-stmts.c:8519 0xf1217a vect_slp_analyze_node_operations ../../trunk/gcc/tree-vect-slp.c:2510 0xf12075 vect_slp_analyze_node_operations ../../trunk/gcc/tree-vect-slp.c:2453 0xf175ef vect_slp_analyze_operations(vec<_slp_instance*, va_heap, vl_ptr>, void*) On Fri, 21 Jul 2017, dcb314 at hotmail dot com wrote:
> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81500
>
> --- Comment #3 from David Binderman <dcb314 at hotmail dot com> ---
> Possible duplicate for this reduced code:
>
> struct a {
> int b;
> int c
> };
> struct d {
> struct a *e
> } f(struct d *g) {
> int h;
> int b;
> for (; h; ++h) {
> int i = g->e[h].c + 1;
> g->e[h].c = g->e[h].b;
> g->e[h].b = b;
> b = i;
> }
> if (b)
> j();
> }
Yeah. Fix is obvious:
Index: gcc/tree-vect-loop.c
===================================================================
--- gcc/tree-vect-loop.c (revision 250386)
+++ gcc/tree-vect-loop.c (working copy)
@@ -3243,7 +3243,7 @@ pop:
}
/* Check whether the reduction path detected is valid. */
- bool fail = false;
+ bool fail = path.length () == 0;
bool neg = false;
for (unsigned i = 1; i < path.length (); ++i)
{
@@ -3276,9 +3276,7 @@ pop:
if (dump_enabled_p ())
{
- report_vect_op (MSG_MISSED_OPTIMIZATION,
- SSA_NAME_DEF_STMT
- (USE_FROM_PTR (path[path.length ()-1].second)),
+ report_vect_op (MSG_MISSED_OPTIMIZATION, def_stmt,
"reduction: unknown pattern: ");
}
Author: rguenth Date: Fri Jul 21 11:32:01 2017 New Revision: 250423 URL: https://gcc.gnu.org/viewcvs?rev=250423&root=gcc&view=rev Log: 2017-06-21 Richard Biener <rguenther@suse.de> PR tree-optimization/81500 * tree-vect-loop.c (vect_is_simple_reduction): Properly fail if we didn't identify a reduction path. * gcc.dg/torture/pr81500.c: New testcase. Added: trunk/gcc/testsuite/gcc.dg/torture/pr81500.c Modified: trunk/gcc/ChangeLog trunk/gcc/testsuite/ChangeLog trunk/gcc/tree-vect-loop.c Fixed. |