From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 48) id 8605D3858C27; Sat, 25 Dec 2021 22:16:17 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 8605D3858C27 From: "pinskia at gcc dot gnu.org" To: gcc-bugs@gcc.gnu.org Subject: [Bug rtl-optimization/103829] New: [9/10/11/12 Regression] missing shrink wrapping for simple/obvious code Date: Sat, 25 Dec 2021 22:16:17 +0000 X-Bugzilla-Reason: CC X-Bugzilla-Type: new X-Bugzilla-Watch-Reason: None X-Bugzilla-Product: gcc X-Bugzilla-Component: rtl-optimization X-Bugzilla-Version: 12.0 X-Bugzilla-Keywords: missed-optimization X-Bugzilla-Severity: normal X-Bugzilla-Who: pinskia at gcc dot gnu.org 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 keywords bug_severity priority component assigned_to reporter target_milestone cf_gcctarget 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: Sat, 25 Dec 2021 22:16:17 -0000 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=3D103829 Bug ID: 103829 Summary: [9/10/11/12 Regression] missing shrink wrapping for simple/obvious code Product: gcc Version: 12.0 Status: UNCONFIRMED Keywords: missed-optimization Severity: normal Priority: P3 Component: rtl-optimization Assignee: unassigned at gcc dot gnu.org Reporter: pinskia at gcc dot gnu.org Target Milestone: --- Target: x86_64-linux-gnu aarch64-linux-gnu Take: extern int _IO_getc (void *) ; extern int *__errno_location (void) __attribute__ ((__const__)); void readError ( void ); typedef struct { void* handle; int buffer; int buffLive; char mode; } BitStream; int bsGetBit ( BitStream* bs ) {=20=20 if (bs->buffLive > 0) { bs->buffLive --; return ( ((bs->buffer) >> (bs->buffLive)) & 0x1 ); } else { int retVal =3D _IO_getc (bs->handle); if ( retVal =3D=3D (-1) ) { if ((*__errno_location ()) !=3D 0) readError(); return 2; } bs->buffLive =3D 7; bs->buffer =3D retVal; return ( ((bs->buffer) >> 7) & 0x1 ); } } ----- CUT ---- GCC 4.9.0-8.5.0 was able to shrink wrap the above function. But starting in GCC 9, GCC does not; there is an extra mov using a callee s= aved register. This happens on both aarch64 and x86_64 So I suspect it was a generic change which caused it.=