mbox series

[0/6] 'bits translation' simplification

Message ID 20201127222516.44915-1-luc.vanoostenryck@gmail.com (mailing list archive)
Headers show
Series 'bits translation' simplification | expand

Message

Luc Van Oostenryck Nov. 27, 2020, 10:25 p.m. UTC
This series allows the simplification of expressions like:
	if (val1 & 4)
		val2 |= 8;
into
	val2 |= (val1 & 4) << 1;

With a better if-conversion mechanism it also allows to optimize
	int translate_bits(int x)
	{
		int y = 0;
		if (x & 4)
			y |= 16;
		if (x & 8)
			y |= 32;
		return y;
	}

into this nice:
	translate_bits:
		and.32      %r2 <- %arg1, $12
		shl.32      %r5 <- %r2, $2
		ret.32      %r5

when applied on top of the previous 'factorization' series.

This series is available for review and testing at:
  git://git.kernel.org/pub/scm/devel/sparse/sparse-dev.git bit-trans

Luc Van Oostenryck (6):
  add testscases for 'bits translation' optimization
  factorize SEL(x, OP(y,z), y) into OP(SEL(x, z, 0), y)
  add helper is_power_of_2()
  add helper is_pow2()
  add log base 2 function: log2_exact()
  convert SEL(x & BIT1, BIT2, 0) into SHIFT(x & BIT1, S)

 bits.h                              | 12 ++++++
 simplify.c                          | 64 +++++++++++++++++++++++++++++
 validation/optim/fact-select01.c    | 25 +++++++++++
 validation/optim/select-and-shift.c | 17 ++++++++
 4 files changed, 118 insertions(+)
 create mode 100644 validation/optim/fact-select01.c
 create mode 100644 validation/optim/select-and-shift.c

Comments

Linus Torvalds Nov. 27, 2020, 10:44 p.m. UTC | #1
On Fri, Nov 27, 2020 at 2:28 PM Luc Van Oostenryck
<luc.vanoostenryck@gmail.com> wrote:
>
> With a better if-conversion mechanism it also allows to optimize
>         int translate_bits(int x)
>         {
>                 int y = 0;
>                 if (x & 4)
>                         y |= 16;
>                 if (x & 8)
>                         y |= 32;
>                 return y;
>         }
>
> into this nice:
>         translate_bits:
>                 and.32      %r2 <- %arg1, $12
>                 shl.32      %r5 <- %r2, $2
>                 ret.32      %r5
>
> when applied on top of the previous 'factorization' series.

Heh. Very nice. Thanks,

            Linus