[AArch64][GlobalISel] Select patterns which use shifted register operands

Authored by paquette on Aug 20 2019, 3:18 PM.


[AArch64][GlobalISel] Select patterns which use shifted register operands

This adds GlobalISel equivalents for the following from AArch64InstrFormats:

  • arith_shifted_reg32
  • arith_shifted_reg64

And partial support for

  • logical_shifted_reg32
  • logical_shifted_reg32

The only thing missing for the logical cases is support for rotates. Other than
the missing support, the transformation is identical for the arithmetic shifted
register and the logical shifted register.

Lots of tests here:

  • Add select-arith-shifted-reg.mir to show that we correctly select add and

sub instructions which use this pattern.

  • Add select-logical-shifted-reg.mir to cover patterns which are not shared

between the arithmetic and logical cases.

  • Update addsub-shifted.ll to show that we correctly fold shifts into


  • Update eon.ll to show that we can select the eon instruction by folding xors.

Differential Revision: https://reviews.llvm.org/D66163

llvm-svn: 369460