From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 48) id 6B06E385B530; Sat, 7 Oct 2023 22:38:33 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 6B06E385B530 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1696718313; bh=GXb+VgDUcpbfNBU+MRyQQGCqxCAOxUSNtxPs4JG+0D8=; h=From:To:Subject:Date:In-Reply-To:References:From; b=UUzowKff2txBlkPz5LruhMUYG3erg+429u6idJV9m1zHWxbAWA76VDU9Ubzaj/poO TB+UH4NrTCjtjRVC8Ti499JkHr/SWbyICbyynzG2tdNDXocf4QgMDfJVF8t73Op42Y gJ2qmuawj7SUB24Rv1TahLAmEdj86SkXmndsvtvY= From: "juzhe.zhong at rivai dot ai" To: gcc-bugs@gcc.gnu.org Subject: [Bug target/111720] RISC-V: Ugly codegen in RVV Date: Sat, 07 Oct 2023 22:38:33 +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: juzhe.zhong at rivai dot ai 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: 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=3D111720 --- Comment #3 from JuzheZhong --- (In reply to Andrew Pinski from comment #2) > I noticed there is an ABI difference here. >=20 > GCC is returning via a store to a0: > vsm.v v1,0(a0) >=20 > While LLVM is returning via v0 . >=20 > Which one is correct? Both are correct. We have a experiment ABI doc. GCC also support same ABI but need --param=3Driscv-vector-abi Then GCC ASM: fn: lui a5,%hi(.LANCHOR0) addi sp,sp,-32 addi a5,a5,%lo(.LANCHOR0) vsetivli zero,4,e64,m2,ta,ma li a4,32 vle64.v v8,0(a5) vse64.v v8,0(sp) vsetvli zero,a4,e8,m1,ta,ma vle8.v v0,0(sp) vand.vi v0,v0,1 addi sp,sp,32 jr ra GCC also return via v0 with enabling ABI. The root cause is unnecessary load/store: vle64.v v8,0(a5) vse64.v v8,0(sp)=