public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug tree-optimization/50730] New: SLP vectorization confused by unrelated DRs
@ 2011-10-14 13:54 rguenth at gcc dot gnu.org
2011-10-16 9:42 ` [Bug tree-optimization/50730] " irar at il dot ibm.com
` (5 more replies)
0 siblings, 6 replies; 7+ messages in thread
From: rguenth at gcc dot gnu.org @ 2011-10-14 13:54 UTC (permalink / raw)
To: gcc-bugs
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50730
Bug #: 50730
Summary: SLP vectorization confused by unrelated DRs
Classification: Unclassified
Product: gcc
Version: 4.7.0
Status: UNCONFIRMED
Keywords: missed-optimization
Severity: normal
Priority: P3
Component: tree-optimization
AssignedTo: unassigned@gcc.gnu.org
ReportedBy: rguenth@gcc.gnu.org
CC: irar@gcc.gnu.org
The SLP vectorizer is confused by the aggregate store in
typedef __complex__ float Value;
struct A {
Value a[16 / sizeof (Value)];
} __attribute__ ((aligned(16)));
A sum(A a, A b)
{
a.a[0]+=b.a[0];
a.a[1]+=b.a[1];
return a;
}
when built with -O3 -fno-tree-sra:
<bb 2>:
D.2130_11 = REALPART_EXPR <a.a[0]>;
D.2131_12 = IMAGPART_EXPR <a.a[0]>;
D.2132_13 = REALPART_EXPR <b.a[0]>;
D.2133_14 = IMAGPART_EXPR <b.a[0]>;
D.2134_15 = D.2130_11 + D.2132_13;
D.2135_16 = D.2131_12 + D.2133_14;
REALPART_EXPR <a.a[0]> = D.2134_15;
IMAGPART_EXPR <a.a[0]> = D.2135_16;
D.2136_17 = REALPART_EXPR <a.a[1]>;
D.2137_18 = IMAGPART_EXPR <a.a[1]>;
D.2138_19 = REALPART_EXPR <b.a[1]>;
D.2139_20 = IMAGPART_EXPR <b.a[1]>;
D.2140_21 = D.2136_17 + D.2138_19;
D.2141_22 = D.2137_18 + D.2139_20;
REALPART_EXPR <a.a[1]> = D.2140_21;
IMAGPART_EXPR <a.a[1]> = D.2141_22;
D.2119 = a;
return D.2119;
but I don't see why SLP couldn't simply stop analyzing the BB when
it encounters a DR that it cannot build or handle. The
previous instructions can be still vectorized.
If you put an unrelated volatile store at the end of any sequence
in a bb-slp testcase this reproduces as well. The above testcase
will probably fail due to unsupported strided stores.
^ permalink raw reply [flat|nested] 7+ messages in thread
* [Bug tree-optimization/50730] SLP vectorization confused by unrelated DRs
2011-10-14 13:54 [Bug tree-optimization/50730] New: SLP vectorization confused by unrelated DRs rguenth at gcc dot gnu.org
@ 2011-10-16 9:42 ` irar at il dot ibm.com
2011-10-16 12:24 ` paolo.carlini at oracle dot com
` (4 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: irar at il dot ibm.com @ 2011-10-16 9:42 UTC (permalink / raw)
To: gcc-bugs
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50730
Ira Rosen <irar at il dot ibm.com> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |NEW
Last reconfirmed| |2011-10-16
CC| |irar at il dot ibm.com
Ever Confirmed|0 |1
--- Comment #1 from Ira Rosen <irar at il dot ibm.com> 2011-10-16 09:41:27 UTC ---
Tested only with the vectorizer tests.
Index: tree-vect-data-refs.c
===================================================================
--- tree-vect-data-refs.c (revision 179789)
+++ tree-vect-data-refs.c (working copy)
@@ -2524,7 +2524,7 @@ vect_analyze_data_refs (loop_vec_info lo
VEC (data_reference_p, heap) *datarefs;
struct data_reference *dr;
tree scalar_type;
- bool res;
+ bool res, stop_bb_analysis = false;
if (vect_print_dump_info (REPORT_DETAILS))
fprintf (vect_dump, "=== vect_analyze_data_refs ===\n");
@@ -2579,12 +2579,19 @@ vect_analyze_data_refs (loop_vec_info lo
{
if (vect_print_dump_info (REPORT_UNVECTORIZED_LOCATIONS))
fprintf (vect_dump, "not vectorized: unhandled data-ref ");
+
return false;
}
stmt = DR_STMT (dr);
stmt_info = vinfo_for_stmt (stmt);
+ if (stop_bb_analysis)
+ {
+ STMT_VINFO_VECTORIZABLE (stmt_info) = false;
+ continue;
+ }
+
/* Check that analysis of the data-ref succeeded. */
if (!DR_BASE_ADDRESS (dr) || !DR_OFFSET (dr) || !DR_INIT (dr)
|| !DR_STEP (dr))
@@ -2595,6 +2602,13 @@ vect_analyze_data_refs (loop_vec_info lo
print_gimple_stmt (vect_dump, stmt, 0, TDF_SLIM);
}
+ if (bb_vinfo)
+ {
+ STMT_VINFO_VECTORIZABLE (stmt_info) = false;
+ stop_bb_analysis = true;
+ continue;
+ }
+
return false;
}
@@ -2603,7 +2617,15 @@ vect_analyze_data_refs (loop_vec_info lo
if (vect_print_dump_info (REPORT_UNVECTORIZED_LOCATIONS))
fprintf (vect_dump, "not vectorized: base addr of dr is a "
"constant");
- return false;
+
+ if (bb_vinfo)
+ {
+ STMT_VINFO_VECTORIZABLE (stmt_info) = false;
+ stop_bb_analysis = true;
+ continue;
+ }
+
+ return false;
}
if (TREE_THIS_VOLATILE (DR_REF (dr)))
@@ -2613,6 +2635,14 @@ vect_analyze_data_refs (loop_vec_info lo
fprintf (vect_dump, "not vectorized: volatile type ");
print_gimple_stmt (vect_dump, stmt, 0, TDF_SLIM);
}
+
+ if (bb_vinfo)
+ {
+ STMT_VINFO_VECTORIZABLE (stmt_info) = false;
+ stop_bb_analysis = true;
+ continue;
+ }
+
return false;
}
@@ -2628,6 +2658,14 @@ vect_analyze_data_refs (loop_vec_info lo
"exception ");
print_gimple_stmt (vect_dump, stmt, 0, TDF_SLIM);
}
+
+ if (bb_vinfo)
+ {
+ STMT_VINFO_VECTORIZABLE (stmt_info) = false;
+ stop_bb_analysis = true;
+ continue;
+ }
+
return false;
}
@@ -2745,6 +2783,14 @@ vect_analyze_data_refs (loop_vec_info lo
"not vectorized: more than one data ref in stmt: ");
print_gimple_stmt (vect_dump, stmt, 0, TDF_SLIM);
}
+
+ if (bb_vinfo)
+ {
+ STMT_VINFO_VECTORIZABLE (stmt_info) = false;
+ stop_bb_analysis = true;
+ continue;
+ }
+
return false;
}
@@ -2769,6 +2815,7 @@ vect_analyze_data_refs (loop_vec_info lo
{
/* Mark the statement as not vectorizable. */
STMT_VINFO_VECTORIZABLE (stmt_info) = false;
+ stop_bb_analysis = true;
continue;
}
else
^ permalink raw reply [flat|nested] 7+ messages in thread
* [Bug tree-optimization/50730] SLP vectorization confused by unrelated DRs
2011-10-14 13:54 [Bug tree-optimization/50730] New: SLP vectorization confused by unrelated DRs rguenth at gcc dot gnu.org
2011-10-16 9:42 ` [Bug tree-optimization/50730] " irar at il dot ibm.com
@ 2011-10-16 12:24 ` paolo.carlini at oracle dot com
2011-10-22 12:10 ` irar at il dot ibm.com
` (3 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: paolo.carlini at oracle dot com @ 2011-10-16 12:24 UTC (permalink / raw)
To: gcc-bugs
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50730
--- Comment #2 from Paolo Carlini <paolo.carlini at oracle dot com> 2011-10-16 12:23:43 UTC ---
First blush, looks like something could be abstracted as a function or a
macro?!?
^ permalink raw reply [flat|nested] 7+ messages in thread
* [Bug tree-optimization/50730] SLP vectorization confused by unrelated DRs
2011-10-14 13:54 [Bug tree-optimization/50730] New: SLP vectorization confused by unrelated DRs rguenth at gcc dot gnu.org
2011-10-16 9:42 ` [Bug tree-optimization/50730] " irar at il dot ibm.com
2011-10-16 12:24 ` paolo.carlini at oracle dot com
@ 2011-10-22 12:10 ` irar at il dot ibm.com
2011-10-24 9:17 ` irar at gcc dot gnu.org
` (2 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: irar at il dot ibm.com @ 2011-10-22 12:10 UTC (permalink / raw)
To: gcc-bugs
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50730
--- Comment #3 from Ira Rosen <irar at il dot ibm.com> 2011-10-22 12:09:30 UTC ---
(In reply to comment #2)
> First blush, looks like something could be abstracted as a function or a
> macro?!?
Hmm, I don't know. There is a 'continue' there...
^ permalink raw reply [flat|nested] 7+ messages in thread
* [Bug tree-optimization/50730] SLP vectorization confused by unrelated DRs
2011-10-14 13:54 [Bug tree-optimization/50730] New: SLP vectorization confused by unrelated DRs rguenth at gcc dot gnu.org
` (2 preceding siblings ...)
2011-10-22 12:10 ` irar at il dot ibm.com
@ 2011-10-24 9:17 ` irar at gcc dot gnu.org
2011-11-03 8:50 ` irar at il dot ibm.com
2011-11-04 12:56 ` irar at gcc dot gnu.org
5 siblings, 0 replies; 7+ messages in thread
From: irar at gcc dot gnu.org @ 2011-10-24 9:17 UTC (permalink / raw)
To: gcc-bugs
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50730
--- Comment #4 from irar at gcc dot gnu.org 2011-10-24 09:16:57 UTC ---
Author: irar
Date: Mon Oct 24 09:16:53 2011
New Revision: 180367
URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=180367
Log:
PR tree-optimization/50730
* tree-vect-data-refs.c (vect_analyze_data_refs): Stop basic
block analysis if encountered unsupported data-ref.
Added:
trunk/gcc/testsuite/gcc.dg/vect/no-tree-sra-bb-slp-pr50730.c
Modified:
trunk/gcc/ChangeLog
trunk/gcc/testsuite/ChangeLog
trunk/gcc/testsuite/gcc.dg/vect/vect.exp
trunk/gcc/tree-vect-data-refs.c
^ permalink raw reply [flat|nested] 7+ messages in thread
* [Bug tree-optimization/50730] SLP vectorization confused by unrelated DRs
2011-10-14 13:54 [Bug tree-optimization/50730] New: SLP vectorization confused by unrelated DRs rguenth at gcc dot gnu.org
` (3 preceding siblings ...)
2011-10-24 9:17 ` irar at gcc dot gnu.org
@ 2011-11-03 8:50 ` irar at il dot ibm.com
2011-11-04 12:56 ` irar at gcc dot gnu.org
5 siblings, 0 replies; 7+ messages in thread
From: irar at il dot ibm.com @ 2011-11-03 8:50 UTC (permalink / raw)
To: gcc-bugs
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50730
Ira Rosen <irar at il dot ibm.com> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|NEW |RESOLVED
Resolution| |FIXED
--- Comment #5 from Ira Rosen <irar at il dot ibm.com> 2011-11-03 08:49:29 UTC ---
Fixed.
^ permalink raw reply [flat|nested] 7+ messages in thread
* [Bug tree-optimization/50730] SLP vectorization confused by unrelated DRs
2011-10-14 13:54 [Bug tree-optimization/50730] New: SLP vectorization confused by unrelated DRs rguenth at gcc dot gnu.org
` (4 preceding siblings ...)
2011-11-03 8:50 ` irar at il dot ibm.com
@ 2011-11-04 12:56 ` irar at gcc dot gnu.org
5 siblings, 0 replies; 7+ messages in thread
From: irar at gcc dot gnu.org @ 2011-11-04 12:56 UTC (permalink / raw)
To: gcc-bugs
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50730
--- Comment #6 from irar at gcc dot gnu.org 2011-11-04 12:55:11 UTC ---
Author: irar
Date: Fri Nov 4 12:55:06 2011
New Revision: 180945
URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=180945
Log:
Unrevert:
2011-10-24 Ira Rosen <ira.rosen@linaro.org>
PR tree-optimization/50730
* tree-vect-data-refs.c (vect_analyze_data_refs): Stop basic
block analysis if encountered unsupported data-ref.
Modified:
trunk/gcc/ChangeLog
trunk/gcc/tree-vect-data-refs.c
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2011-11-04 12:56 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-10-14 13:54 [Bug tree-optimization/50730] New: SLP vectorization confused by unrelated DRs rguenth at gcc dot gnu.org
2011-10-16 9:42 ` [Bug tree-optimization/50730] " irar at il dot ibm.com
2011-10-16 12:24 ` paolo.carlini at oracle dot com
2011-10-22 12:10 ` irar at il dot ibm.com
2011-10-24 9:17 ` irar at gcc dot gnu.org
2011-11-03 8:50 ` irar at il dot ibm.com
2011-11-04 12:56 ` irar at gcc dot gnu.org
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).