From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 48) id 38AD43858C66; Mon, 23 Oct 2023 03:36:04 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 38AD43858C66 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1698032164; bh=bv/+Bn2ZUNEvFaev0aCEm7At6bAw9O5mC049PvFEIWU=; h=From:To:Subject:Date:From; b=nYBH50kxvvNepvQ1jSEMw8AYPoOo7Uevm3KuN3Az9lHxLyIrohhUs0Qij5bL0vZtL 7sa8swIb4lItad6lg0WbPcy59uPPUPOLqkvMg7WwyO2hjDu6iCfgJbvw6pz5A4ytwK XLrD2nQ4ShEGwyzitdagzwSdqvVSi1h+J51r5gdA= From: "lehua.ding at rivai dot ai" To: gcc-bugs@gcc.gnu.org Subject: [Bug target/111926] New: RISC-V: Use vsetvl insn replace csrr vlenb insn Date: Mon, 23 Oct 2023 03:36:03 +0000 X-Bugzilla-Reason: CC X-Bugzilla-Type: new X-Bugzilla-Watch-Reason: None X-Bugzilla-Product: gcc X-Bugzilla-Component: target X-Bugzilla-Version: 14.0 X-Bugzilla-Keywords: X-Bugzilla-Severity: normal X-Bugzilla-Who: lehua.ding 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: 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 List-Id: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=3D111926 Bug ID: 111926 Summary: RISC-V: Use vsetvl insn replace csrr vlenb insn Product: gcc Version: 14.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: target Assignee: unassigned at gcc dot gnu.org Reporter: lehua.ding at rivai dot ai Target Milestone: --- We can use:=20 vsetvl a5, zero, e8, mf8, ta, ta replace: csrr a4,vlenb srli a4,a4,3 The reason for this is that the performance of the vsetvl instruction tends= to be better optimised than the csrr instruction. #include #define exhaust_vector_regs()=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20 \ asm volatile("#" ::=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20 \ : "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7", "v8", "v= 9", \ "v10", "v11", "v12", "v13", "v14", "v15", "v16", "v17",= =20=20=20=20 \ "v18", "v19", "v20", "v21", "v22", "v23", "v24", "v25",= =20=20=20=20 \ "v26", "v27", "v28", "v29", "v30", "v31"); void spill_1 (int8_t *in, int8_t *out) { vint8mf8_t v1 =3D *(vint8mf8_t*)in; exhaust_vector_regs (); *(vint8mf8_t*)out =3D v1; } spill_1(signed char*, signed char*): csrr a4,vlenb srli a4,a4,3 csrr t0,vlenb slli a3,a4,3 sub sp,sp,t0 sub a3,a3,a4 add a3,a3,sp vsetvli a5,zero,e8,mf8,ta,ma vle8.v v1,0(a0) vse8.v v1,0(a3) csrr a4,vlenb srli a4,a4,3 slli a3,a4,3 sub a3,a3,a4 add a3,a3,sp vle8.v v1,0(a3) csrr t0,vlenb vse8.v v1,0(a1) add sp,sp,t0 jr ra https://godbolt.org/z/TcKxbjnoh=