From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 48) id 6A9043858C66; Fri, 1 Mar 2024 16:08:08 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 6A9043858C66 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1709309288; bh=5K9vSB3HqwUCyx84x+EShGHOggsWx0FhUrkElOt/HiQ=; h=From:To:Subject:Date:In-Reply-To:References:From; b=R7kQiuFVaKfwZqT/Uu9feoV32AF0B38qutmDuWl3+O6WBkpP8eBRxw4uDLWkJcrpN wZZlOtBDlb4XmzohK0tSkgCO53qdoEWkmyYt8BhI718UIop3eJz342hWsUjeZINM2C PbwI80mcGDjM57EhnN7BgHrIyiVaSceWG3Erzcro= From: "roger at nextmovesoftware dot com" To: gcc-bugs@gcc.gnu.org Subject: [Bug target/114187] [14 regression] bizarre register dance on x86_64 for pass-by-value struct since r14-2526 Date: Fri, 01 Mar 2024 16:08:07 +0000 X-Bugzilla-Reason: CC X-Bugzilla-Type: changed X-Bugzilla-Watch-Reason: None X-Bugzilla-Product: gcc X-Bugzilla-Component: target X-Bugzilla-Version: 14.0 X-Bugzilla-Keywords: missed-optimization X-Bugzilla-Severity: normal X-Bugzilla-Who: roger at nextmovesoftware dot com X-Bugzilla-Status: NEW X-Bugzilla-Resolution: X-Bugzilla-Priority: P3 X-Bugzilla-Assigned-To: unassigned at gcc dot gnu.org X-Bugzilla-Target-Milestone: 14.0 X-Bugzilla-Flags: X-Bugzilla-Changed-Fields: cf_reconfirmed_on bug_status everconfirmed 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 List-Id: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=3D114187 Roger Sayle changed: What |Removed |Added ---------------------------------------------------------------------------- Last reconfirmed| |2024-03-01 Status|UNCONFIRMED |NEW Ever confirmed|0 |1 --- Comment #3 from Roger Sayle --- There's a missing simplification in combine: Trying 6 -> 11: 6: r102:TI=3Dzero_extend(r109:DF#0)<<0x40|zero_extend(r108:DF#0) REG_DEAD r108:DF REG_DEAD r109:DF 11: r105:DF=3Dr102:TI#0+r102:TI#8 REG_DEAD r102:TI Failed to match this instruction: (set (reg:DF 105 [ _4 ]) (plus:DF (subreg:DF (ior:TI (ashift:TI (zero_extend:TI (subreg:DI (reg:= DF 109) 0)) (const_int 64 [0x40])) (zero_extend:TI (subreg:DI (reg:DF 108) 0))) 8) (reg:DF 108))) where the lowpart is getting simplified to reg:DF 108, but the highpart isn= 't getting simplified to reg:DF 109. i.e. (subreg:DF (ior:TI (ashift:TI (zero_extend:TI (subreg:DI (reg:DF 109) 0)) (const_int 64 [0x40])) (zero_extend:TI (subreg:DI (reg:DF 108) 0))) = 8) can be simplified to just (reg:DF 109). I'm looking into why this isn't happening.=