From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 48) id B6A2D3858289; Tue, 11 Oct 2022 04:30:55 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org B6A2D3858289 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1665462655; bh=klpa5QVhFCyTRv/6u0eht4ti1VoS6qrBmpKqEeEVpOk=; h=From:To:Subject:Date:In-Reply-To:References:From; b=bOMPfLNyqTWucgn4XSEeSIZMwF50F2wsVBU9w1GN/WmUSkel4vGL+Vrm0OvFBXbg/ fSqEw4VmRFcfOh7WQKJotwnkGwgNHh5zqihZzO3zudE/pv5VvU1xfhftXaMhXXpiDw YGGr0EgocIHEQNHhWvcQDx1CD8CbtH62rsde8nNc= From: "pinskia at gcc dot gnu.org" To: gcc-bugs@gcc.gnu.org Subject: [Bug middle-end/107208] [aarch64] _complex integer return types could be improved Date: Tue, 11 Oct 2022 04:30:55 +0000 X-Bugzilla-Reason: CC X-Bugzilla-Type: changed X-Bugzilla-Watch-Reason: None X-Bugzilla-Product: gcc X-Bugzilla-Component: middle-end X-Bugzilla-Version: 13.0 X-Bugzilla-Keywords: missed-optimization X-Bugzilla-Severity: enhancement X-Bugzilla-Who: pinskia at gcc dot gnu.org 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: --- X-Bugzilla-Flags: X-Bugzilla-Changed-Fields: short_desc component 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=3D107208 Andrew Pinski changed: What |Removed |Added ---------------------------------------------------------------------------- Summary|[aarch64] llvm generate |[aarch64] _complex integer |better code than gcc base |return types could be |on _Complex type mul |improved Component|rtl-optimization |middle-end Last reconfirmed| |2022-10-11 Status|UNCONFIRMED |NEW Ever confirmed|0 |1 --- Comment #2 from Andrew Pinski --- Yes it is due to return value and how it is done: (insn 32 28 33 2 (clobber (reg/i:CDI 0 x0)) "/app/example.cpp":6:1 -1 (nil)) (insn 33 32 34 2 (set (reg:DI 0 x0) (reg:DI 102 [ ])) "/app/example.cpp":6:1 -1 (nil)) (insn 34 33 35 2 (set (reg:DI 1 x1 [+8 ]) (reg:DI 103 [ +8 ])) "/app/example.cpp":6:1 -1 (nil)) (insn 35 34 0 2 (use (reg/i:CDI 0 x0)) "/app/example.cpp":6:1 -1 (nil)) So this is not _Complex integer multiplies at all but rather just the return values and the register allocator. I wonder why Complex float is expanded slightly differently (and better her= e): (insn 34 33 35 2 (set (reg:SF 32 v0) (reg:SF 115)) "/app/example.cpp":6:1 -1 (nil)) (insn 35 34 36 2 (set (reg:SF 33 v1) (reg:SF 118)) "/app/example.cpp":6:1 -1 (nil)) (insn 36 35 37 2 (use (reg:SF 32 v0)) "/app/example.cpp":6:1 -1 (nil)) (insn 37 36 0 2 (use (reg:SF 33 v1)) "/app/example.cpp":6:1 -1 (nil)) Who chose CDI for the integer case but a pair of SF for the float case ...=