This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug tree-optimization/59642] [5/6 Regression] Performance regression with -ftree-loop-distribute-patterns
- From: "rguenth at gcc dot gnu.org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Tue, 04 Apr 2017 09:59:06 +0000
- Subject: [Bug tree-optimization/59642] [5/6 Regression] Performance regression with -ftree-loop-distribute-patterns
- Auto-submitted: auto-generated
- References: <bug-59642-4@http.gcc.gnu.org/bugzilla/>
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=59642
Richard Biener <rguenth at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Priority|P3 |P2
Status|UNCONFIRMED |NEW
Last reconfirmed| |2017-04-04
Known to work| |4.7.3, 7.0.1
Target Milestone|--- |5.5
Summary|Performance regression |[5/6 Regression]
|(4.7/4.8) with |Performance regression with
|-ftree-loop-distribute-patt |-ftree-loop-distribute-patt
|erns |erns
Ever confirmed|0 |1
Known to fail| |5.4.0, 6.3.0
--- Comment #4 from Richard Biener <rguenth at gcc dot gnu.org> ---
We now unroll early enough to not regress compared to 4.8 anymore. Some niter
analysis improvements make us unroll in cunrolli pass.
Note that if you adjust the testcase to make sure we don't unroll code with
loop distribution is better:
void foo(int *v)
{
int *p;
for(p = v; p < v + 18; ++p) *p = 0;
for(p = v; p < v + 18; ++p)
if(*p) *p = 1;
}
still we don't optimize the 2nd loop in GCC for the following testcase
void foo(int *v, int n)
{
int *p;
__builtin_memset (v, 0, n * sizeof (int));
for(p = v; p < v + n; ++p)
if(*p) *p = 1;
}
because value-numbering isn't clever enough here (constant 'n' would be
moderately easier to handle).