[PATCH] D20667: ARM: Add additional matching for UBFX instructions.

Dave Green via llvm-commits llvm-commits at lists.llvm.org
Thu May 26 08:14:43 PDT 2016

dmgreen added a comment.

Hey James, cheers for taking a look at this.

For adding SBFX support; there might some cases to do with sign extending i16/i8's, but are probably quite limited in scope. The top bit of the AND would need to be set. Most such sequences of an AND+ASR are already either optimised to an AND+LSR, so will get caught by this change, or end up as just an ASR as the AND becomes superfluous.

This change was motivated by code like this:

  int example(unsigned int x, unsigned int *y) {
      if (x == 1) {
          return (*y & (1 << 5U)) != 0;
      } else if (x == 2) {
          return (*y & (1 << 6U)) != 0;
      return 0;

which was coming through as an AND+LSR. I made it a little more general to handle shifted mask AND operands, not just powers of 2, but in this case SBFX isn't as useful.



More information about the llvm-commits mailing list