tree-optimization/112281 - loop distribution and zero dependence distances
commit5ea2965b499f9e491e45db19fedbccfccb75076a
authorRichard Biener <rguenther@suse.de>
Tue, 14 Nov 2023 10:37:13 +0000 (14 11:37 +0100)
committerRichard Biener <rguenther@suse.de>
Tue, 14 Nov 2023 12:44:56 +0000 (14 13:44 +0100)
tree099d234a5276bc4530d1bdcdc5fc57aab5818926
parentb9fd8399ec027ce42fd35a070ce38de8d69521b2
tree-optimization/112281 - loop distribution and zero dependence distances

We currently distribute

  for (c = 2; c; c--)
    for (e = 0; e < 2; e++) {
      d[c] = b = d[c + 1];
      d[c + 1].a = 0;
    }

in a wrong way where the inner loop zero dependence distance should
make us preserve stmt execution order.  We fail to do so since we
only look for a fully zero distance vector rather than looking at
the innermost loop distance.  This is somewhat similar to PR87022
where we instead looked at the outermost loop distance and changed
this to what we do now.  The following switches us to look at the
innermost loop distance.

PR tree-optimization/112281
* tree-loop-distribution.cc (pg_add_dependence_edges):
Preserve stmt order when the innermost loop has exact
overlap.

* gcc.dg/torture/pr112281.c: New testcase.
gcc/testsuite/gcc.dg/torture/pr112281.c [new file with mode: 0644]
gcc/tree-loop-distribution.cc