Committed to master. Thanks! Philipp.
On Thu, 17 Nov 2022 at 15:43, Jeff Law <jeffreya...@gmail.com> wrote: > > > On 11/8/22 12:55, Philipp Tomsich wrote: > > Consider creating a polarity-reversed mask from a set-bit (i.e., if > > the bit is set, produce all-ones; otherwise: all-zeros). Using Zbb, > > this can be expressed as bexti, followed by an addi of minus-one. To > > enable the combiner to discover this opportunity, we need to split the > > canonical expression for "(a & (1 << BIT_NO)) ? 0 : -1" into a form > > combinable into bexti. > > > > Consider the function: > > long f(long a) > > { > > return (a & (1 << BIT_NO)) ? 0 : -1; > > } > > This produces the following sequence prior to this change: > > andi a0,a0,16 > > seqz a0,a0 > > neg a0,a0 > > ret > > Following this change, it results in: > > bexti a0,a0,4 > > addi a0,a0,-1 > > ret > > > > gcc/ChangeLog: > > > > * config/riscv/bitmanip.md: Add a splitter to generate > > polarity-reversed masks from a set bit using bexti + addi. > > > > gcc/testsuite/ChangeLog: > > > > * gcc.target/riscv/zbs-bexti.c: New test. > > OK > > > Jeff > >