From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 48) id 2FF04396ECE8; Fri, 27 Nov 2020 10:50:50 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 2FF04396ECE8 From: "denis.campredon at gmail dot com" To: gcc-bugs@gcc.gnu.org Subject: [Bug tree-optimization/98028] New: __builtin_sub_overflow_p not folded to const when some constraints are known Date: Fri, 27 Nov 2020 10:50:50 +0000 X-Bugzilla-Reason: CC X-Bugzilla-Type: new X-Bugzilla-Watch-Reason: None X-Bugzilla-Product: gcc X-Bugzilla-Component: tree-optimization X-Bugzilla-Version: 11.0 X-Bugzilla-Keywords: X-Bugzilla-Severity: normal X-Bugzilla-Who: denis.campredon at gmail dot com X-Bugzilla-Status: UNCONFIRMED X-Bugzilla-Resolution: X-Bugzilla-Priority: P3 X-Bugzilla-Assigned-To: unassigned at gcc dot gnu.org X-Bugzilla-Target-Milestone: --- X-Bugzilla-Flags: X-Bugzilla-Changed-Fields: bug_id short_desc product version bug_status bug_severity priority component assigned_to reporter target_milestone Message-ID: 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: Fri, 27 Nov 2020 10:50:50 -0000 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=3D98028 Bug ID: 98028 Summary: __builtin_sub_overflow_p not folded to const when some constraints are known Product: gcc Version: 11.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: tree-optimization Assignee: unassigned at gcc dot gnu.org Reporter: denis.campredon at gmail dot com Target Milestone: --- According to godbolt, f1 used to be optimised with gcc 7. The same problem can be seen with signed types (and maybe more conditions?). All the following functions should be only one instruction plus ret with O2 ----------------- unsigned f1(unsigned i, unsigned j) { if (j !=3D i) __builtin_unreachable(); return __builtin_sub_overflow_p(i, j, (unsigned)0); } unsigned f2(unsigned i, unsigned j) { if (j > i) __builtin_unreachable(); return __builtin_sub_overflow_p(i, j, (unsigned)0); } unsigned f3(unsigned i, unsigned j) { if (j >=3D i) __builtin_unreachable(); return __builtin_sub_overflow_p(i, j, (unsigned)0); } unsigned f4(unsigned i, unsigned j) { if (j < i) __builtin_unreachable(); return __builtin_sub_overflow_p(i, j, (unsigned)0); } -----------------=