From: Richard Biener Date: Mon, 14 Jun 2021 12:57:26 +0000 (+0200) Subject: tree-optimization/100934 - properly mark irreducible regions for DOM X-Git-Tag: releases/gcc-11.2.0~223 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8c90437109c30a0b6d2cf861c6f0cee8b69965ef;p=thirdparty%2Fgcc.git tree-optimization/100934 - properly mark irreducible regions for DOM The jump threading code requires marked irreducible regions for the purpose of validating jump threading paths but DOM fails to provide that resulting in mised number of iteration upper bounds clearing. 2021-06-14 Richard Biener PR tree-optimization/100934 * tree-ssa-dom.c (pass_dominator::execute): Properly mark irreducible regions. * gcc.dg/torture/pr100934.c: New testcase. (cherry picked from commit 788bb7edb3975b80c4cb16323e7a5e55a2471e46) --- diff --git a/gcc/testsuite/gcc.dg/torture/pr100934.c b/gcc/testsuite/gcc.dg/torture/pr100934.c new file mode 100644 index 000000000000..43b788498957 --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr100934.c @@ -0,0 +1,21 @@ +/* { dg-do run } */ + +int a, b, c, d, e; +int main() +{ + int f = 0, g = 0; + for (; f < 2; f++) + { + int h, i; + for (h = 0; h < 2; h++) + { + b = e = g ? a % g : 0; + c = d; + for (i = 0; i < 1; i++) + g = 0; + for (; g < 2; g++) + ; + } + } + return 0; +} diff --git a/gcc/tree-ssa-dom.c b/gcc/tree-ssa-dom.c index 81abf35ac024..4786dbd3849b 100644 --- a/gcc/tree-ssa-dom.c +++ b/gcc/tree-ssa-dom.c @@ -695,7 +695,8 @@ pass_dominator::execute (function *fun) gcc.dg/tree-ssa/pr21417.c can't be threaded if loop preheader is missing. We should improve jump threading in future then LOOPS_HAVE_PREHEADERS won't be needed here. */ - loop_optimizer_init (LOOPS_HAVE_PREHEADERS | LOOPS_HAVE_SIMPLE_LATCHES); + loop_optimizer_init (LOOPS_HAVE_PREHEADERS | LOOPS_HAVE_SIMPLE_LATCHES + | LOOPS_HAVE_MARKED_IRREDUCIBLE_REGIONS); /* Initialize the value-handle array. */ threadedge_initialize_values ();