RISC-V: costs: handle BSWAP

Message ID 20221108195415.2701208-1-philipp.tomsich@vrull.eu
State Accepted
Headers
Series RISC-V: costs: handle BSWAP |

Checks

Context Check Description
snail/gcc-patch-check success Github commit url

Commit Message

Philipp Tomsich Nov. 8, 2022, 7:54 p.m. UTC
  The BSWAP operation is not handled in rtx_costs. Add it.

With Zbb, BSWAP for XLEN is a single instruction; for smaller modes,
it will expand into two.

gcc/ChangeLog:

        * config/riscv/riscv.c (rtx_costs): Add BSWAP.

---

 gcc/config/riscv/riscv.cc | 10 ++++++++++
 1 file changed, 10 insertions(+)
  

Comments

Jeff Law Nov. 9, 2022, 2:57 a.m. UTC | #1
On 11/8/22 12:54, Philipp Tomsich wrote:
> The BSWAP operation is not handled in rtx_costs. Add it.
>
> With Zbb, BSWAP for XLEN is a single instruction; for smaller modes,
> it will expand into two.
>
> gcc/ChangeLog:
>
>          * config/riscv/riscv.c (rtx_costs): Add BSWAP.

OK.

Jeff
  
Palmer Dabbelt Nov. 9, 2022, 3:15 a.m. UTC | #2
On Tue, 08 Nov 2022 18:57:26 PST (-0800), jeffreyalaw@gmail.com wrote:
>
> On 11/8/22 12:54, Philipp Tomsich wrote:
>> The BSWAP operation is not handled in rtx_costs. Add it.
>>
>> With Zbb, BSWAP for XLEN is a single instruction; for smaller modes,
>> it will expand into two.
>>
>> gcc/ChangeLog:
>>
>>          * config/riscv/riscv.c (rtx_costs): Add BSWAP.
>
> OK.

It's riscv_rtx_costs.

(I don't usually read ChangeLog entries that closely, just happened to 
stumble on it when poking around.)


>
> Jeff
  
Andrew Pinski Nov. 9, 2022, 4:43 a.m. UTC | #3
On Tue, Nov 8, 2022 at 7:16 PM Palmer Dabbelt <palmer@rivosinc.com> wrote:
>
> On Tue, 08 Nov 2022 18:57:26 PST (-0800), jeffreyalaw@gmail.com wrote:
> >
> > On 11/8/22 12:54, Philipp Tomsich wrote:
> >> The BSWAP operation is not handled in rtx_costs. Add it.
> >>
> >> With Zbb, BSWAP for XLEN is a single instruction; for smaller modes,
> >> it will expand into two.
> >>
> >> gcc/ChangeLog:
> >>
> >>          * config/riscv/riscv.c (rtx_costs): Add BSWAP.
> >
> > OK.
>
> It's riscv_rtx_costs.
>
> (I don't usually read ChangeLog entries that closely, just happened to
> stumble on it when poking around.)

Using contrib/git-commit-mklog.py can help here to make sure you
always get the correct format for the changelog and it does a decent
job of figuring out function names too.
You can also use contrib/gcc-git-customization.sh to install it such
that you can use it when doing git commits.
After invoking that inside the GCC git; you can just do "git
gcc-commit-mklog ...." Where .... would be what you normally put for
"git commit" (but as if in the toplevel directory).

Thanks,
Andrew Pinski

>
>
> >
> > Jeff
  
Palmer Dabbelt Nov. 9, 2022, 4:53 a.m. UTC | #4
On Tue, 08 Nov 2022 20:43:20 PST (-0800), pinskia@gmail.com wrote:
> On Tue, Nov 8, 2022 at 7:16 PM Palmer Dabbelt <palmer@rivosinc.com> wrote:
>>
>> On Tue, 08 Nov 2022 18:57:26 PST (-0800), jeffreyalaw@gmail.com wrote:
>> >
>> > On 11/8/22 12:54, Philipp Tomsich wrote:
>> >> The BSWAP operation is not handled in rtx_costs. Add it.
>> >>
>> >> With Zbb, BSWAP for XLEN is a single instruction; for smaller modes,
>> >> it will expand into two.
>> >>
>> >> gcc/ChangeLog:
>> >>
>> >>          * config/riscv/riscv.c (rtx_costs): Add BSWAP.
>> >
>> > OK.
>>
>> It's riscv_rtx_costs.
>>
>> (I don't usually read ChangeLog entries that closely, just happened to
>> stumble on it when poking around.)
>
> Using contrib/git-commit-mklog.py can help here to make sure you
> always get the correct format for the changelog and it does a decent
> job of figuring out function names too.
> You can also use contrib/gcc-git-customization.sh to install it such
> that you can use it when doing git commits.
> After invoking that inside the GCC git; you can just do "git
> gcc-commit-mklog ...." Where .... would be what you normally put for
> "git commit" (but as if in the toplevel directory).

Thanks, that's awesome.
  
Philipp Tomsich Nov. 9, 2022, 9:27 a.m. UTC | #5
On Wed, 9 Nov 2022 at 05:43, Andrew Pinski <pinskia@gmail.com> wrote:
>
> On Tue, Nov 8, 2022 at 7:16 PM Palmer Dabbelt <palmer@rivosinc.com> wrote:
> >
> > On Tue, 08 Nov 2022 18:57:26 PST (-0800), jeffreyalaw@gmail.com wrote:
> > >
> > > On 11/8/22 12:54, Philipp Tomsich wrote:
> > >> The BSWAP operation is not handled in rtx_costs. Add it.
> > >>
> > >> With Zbb, BSWAP for XLEN is a single instruction; for smaller modes,
> > >> it will expand into two.
> > >>
> > >> gcc/ChangeLog:
> > >>
> > >>          * config/riscv/riscv.c (rtx_costs): Add BSWAP.
> > >
> > > OK.
> >
> > It's riscv_rtx_costs.
> >
> > (I don't usually read ChangeLog entries that closely, just happened to
> > stumble on it when poking around.)
>
> Using contrib/git-commit-mklog.py can help here to make sure you
> always get the correct format for the changelog and it does a decent
> job of figuring out function names too.
> You can also use contrib/gcc-git-customization.sh to install it such
> that you can use it when doing git commits.
> After invoking that inside the GCC git; you can just do "git
> gcc-commit-mklog ...." Where .... would be what you normally put for
> "git commit" (but as if in the toplevel directory).

We always pass them through contrib/mklog,py (or git-commit-mklog.py,
which invokes it) anyway, but (as the ".c" in the filename indicates)
this one hasn't been refreshed in over a year's time.
Don't worry, this will need to get adjusted again once I merge it (as
the commit hooks won't let it pass).

Philipp.
  
Philipp Tomsich Nov. 9, 2022, 9:33 a.m. UTC | #6
Applied to master, with the commit-message regenerated as:

    gcc/ChangeLog:

            * config/riscv/riscv.cc (riscv_rtx_costs): Add BSWAP.

Thanks,
Philipp.

On Wed, 9 Nov 2022 at 04:15, Palmer Dabbelt <palmer@rivosinc.com> wrote:
>
> On Tue, 08 Nov 2022 18:57:26 PST (-0800), jeffreyalaw@gmail.com wrote:
> >
> > On 11/8/22 12:54, Philipp Tomsich wrote:
> >> The BSWAP operation is not handled in rtx_costs. Add it.
> >>
> >> With Zbb, BSWAP for XLEN is a single instruction; for smaller modes,
> >> it will expand into two.
> >>
> >> gcc/ChangeLog:
> >>
> >>          * config/riscv/riscv.c (rtx_costs): Add BSWAP.
> >
> > OK.
>
> It's riscv_rtx_costs.
>
> (I don't usually read ChangeLog entries that closely, just happened to
> stumble on it when poking around.)
>
>
> >
> > Jeff
  

Patch

diff --git a/gcc/config/riscv/riscv.cc b/gcc/config/riscv/riscv.cc
index 32f9ef9ade9..ab6c745c722 100644
--- a/gcc/config/riscv/riscv.cc
+++ b/gcc/config/riscv/riscv.cc
@@ -2562,6 +2562,16 @@  riscv_rtx_costs (rtx x, machine_mode mode, int outer_code, int opno ATTRIBUTE_UN
       *total = riscv_extend_cost (XEXP (x, 0), GET_CODE (x) == ZERO_EXTEND);
       return false;
 
+    case BSWAP:
+      if (TARGET_ZBB)
+	{
+	  /* RISC-V only defines rev8 for XLEN, so we will need an extra
+	     shift-right instruction for smaller modes. */
+	  *total = COSTS_N_INSNS (mode == word_mode ? 1 : 2);
+	  return true;
+	}
+      return false;
+
     case FLOAT:
     case UNSIGNED_FLOAT:
     case FIX: