public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc r11-8462] tree-optimization/100492 - avoid irreducible regions in loop distribution
@ 2021-05-25 8:07 Richard Biener
0 siblings, 0 replies; only message in thread
From: Richard Biener @ 2021-05-25 8:07 UTC (permalink / raw)
To: gcc-cvs
https://gcc.gnu.org/g:9b3852d998bd4ae68f51311441feea13103971e3
commit r11-8462-g9b3852d998bd4ae68f51311441feea13103971e3
Author: Richard Biener <rguenther@suse.de>
Date: Mon May 10 11:37:27 2021 +0200
tree-optimization/100492 - avoid irreducible regions in loop distribution
When we distribute away a condition we rely on the ability to
change it to either 1 != 0 or 0 != 0 depending on the direction
of the exit branch in the respective loop. But when the loop
contains an irreducible sub-region then for the conditions inside
this this fails and can lead to infinite loops being generated.
Avoid distibuting loops with irreducible sub-regions.
2021-05-10 Richard Biener <rguenther@suse.de>
PR tree-optimization/100492
* tree-loop-distribution.c (find_seed_stmts_for_distribution):
Find nothing when the loop contains an irreducible region.
* gcc.dg/torture/pr100492.c: New testcase.
(cherry picked from commit 60af2db18013a0339302928ba98fee893ccc1957)
Diff:
---
gcc/testsuite/gcc.dg/torture/pr100492.c | 26 ++++++++++++++++++++++++++
gcc/tree-loop-distribution.c | 10 ++++++++++
2 files changed, 36 insertions(+)
diff --git a/gcc/testsuite/gcc.dg/torture/pr100492.c b/gcc/testsuite/gcc.dg/torture/pr100492.c
new file mode 100644
index 00000000000..75229c8813b
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/pr100492.c
@@ -0,0 +1,26 @@
+/* { dg-do run } */
+/* { dg-additional-options "-ftree-loop-distribution" } */
+
+extern void abort (void);
+
+signed char a, c;
+int b, d, *e = &d, g;
+signed static char f;
+int main() {
+ int h = 0;
+ int a_ = a;
+ for (; a_ < 1; a = ++a_) {
+ int *i[5], **j = &i[4], ***k[3][2] = {{&j}}, ****l = &k[2][1], *****m = &l;
+ char *n = &c;
+ f = *e = g = 0;
+ for (; g < 2; g++) {
+ for (b = 0; b < 3; b++)
+ h = (h && (*n = 0)) == 0;
+ if (g)
+ break;
+ }
+ }
+ if (f != 0)
+ abort ();
+ return 0;
+}
diff --git a/gcc/tree-loop-distribution.c b/gcc/tree-loop-distribution.c
index 8b91a30d1c6..65aa1df4aba 100644
--- a/gcc/tree-loop-distribution.c
+++ b/gcc/tree-loop-distribution.c
@@ -3203,6 +3203,16 @@ find_seed_stmts_for_distribution (class loop *loop, vec<gimple *> *work_list)
/* Initialize the worklist with stmts we seed the partitions with. */
for (unsigned i = 0; i < loop->num_nodes; ++i)
{
+ /* In irreducible sub-regions we don't know how to redirect
+ conditions, so fail. See PR100492. */
+ if (bbs[i]->flags & BB_IRREDUCIBLE_LOOP)
+ {
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ fprintf (dump_file, "loop %d contains an irreducible region.\n",
+ loop->num);
+ work_list->truncate (0);
+ break;
+ }
for (gphi_iterator gsi = gsi_start_phis (bbs[i]);
!gsi_end_p (gsi); gsi_next (&gsi))
{
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2021-05-25 8:07 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-05-25 8:07 [gcc r11-8462] tree-optimization/100492 - avoid irreducible regions in loop distribution Richard Biener
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).