From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 48) id AECFE3947430; Mon, 15 Feb 2021 10:46:40 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org AECFE3947430 From: "rguenth at gcc dot gnu.org" To: gcc-bugs@gcc.gnu.org Subject: [Bug tree-optimization/99101] optimization bug with -ffinite-loops Date: Mon, 15 Feb 2021 10:46:40 +0000 X-Bugzilla-Reason: CC X-Bugzilla-Type: changed X-Bugzilla-Watch-Reason: None X-Bugzilla-Product: gcc X-Bugzilla-Component: tree-optimization X-Bugzilla-Version: 11.0 X-Bugzilla-Keywords: wrong-code X-Bugzilla-Severity: normal X-Bugzilla-Who: rguenth at gcc dot gnu.org X-Bugzilla-Status: ASSIGNED X-Bugzilla-Resolution: X-Bugzilla-Priority: P3 X-Bugzilla-Assigned-To: rguenth at gcc dot gnu.org X-Bugzilla-Target-Milestone: --- X-Bugzilla-Flags: X-Bugzilla-Changed-Fields: Message-ID: In-Reply-To: References: Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Bugzilla-URL: http://gcc.gnu.org/bugzilla/ Auto-Submitted: auto-generated MIME-Version: 1.0 X-BeenThere: gcc-bugs@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-bugs mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 15 Feb 2021 10:46:40 -0000 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=3D99101 --- Comment #6 from Richard Biener --- (In reply to Jakub Jelinek from comment #4) > If there are EH edges, doesn't it fit then the -ffinite-loops description: > '-ffinite-loops' > Assume that a loop with an exit will eventually take the exit and > not loop indefinitely. This allows the compiler to remove loops > that otherwise have no side-effects, not considering eventual > endless looping as such. >=20 > This option is enabled by default at '-O2' for C++ with -std=3Dc++11 > or higher. > ? EH is an exit as well... Note the exit isn't an EH edge (sorry for misleading), it's a conditional controlled exit to noreturn std::__throw_bad_cast (): [local count: 11633210387]: comp_md_.at_eof_ =3D 1; _14 =3D std::basic_ostream::operator<< (&cout, 1); _15 =3D _14->_vptr.basic_ostream; _16 =3D MEM[(long int *)_15 + -24B]; _17 =3D (sizetype) _16; _18 =3D _14 + _17; _23 =3D MEM[(const struct __ctype_type * *)_18 + 240B]; if (_23 =3D=3D 0B) goto ; [0.04%] else goto ; [99.96%] [local count: 4653337]: std::__throw_bad_cast (); and handling this call first in the post-dom DFS when walking not reverse reachable blocks makes control dependence behave wrong (or CD-DCEs expectation is). Note _not_ treating EH or abnormals as exit makes us more conservative (we consider the loop to be _not_ finite then). Again, sorry for misleading.=