[Bug target/65768] New: sub-optimimal code for constant Uses in loop

kugan at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Wed Apr 15 07:09:00 GMT 2015


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65768

            Bug ID: 65768
           Summary: sub-optimimal code for constant Uses in loop
           Product: gcc
           Version: 6.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: target
          Assignee: unassigned at gcc dot gnu.org
          Reporter: kugan at gcc dot gnu.org

#include <stdint.h>
void maskdata(int32_t * data, unsigned int len)
{
  const int32_t mask = 0x00ff00ff;
  for (int i=len; i-- > 0 ;) {
      data[i] &= mask;
  }
}

Is producing the following with arm-none-linux-gnueabi-gcc for -O2:

maskdata:
    @ args = 0, pretend = 0, frame = 0
    @ frame_needed = 0, uses_anonymous_args = 0
    @ link register save eliminated.
    cmp    r1, #0
    bxle    lr
    add    r1, r0, r1, lsl #2
.L3:
    ldr    r3, [r1, #-4]!
    cmp    r1, r0
    bic    r3, r3, #-16777216
    bic    r3, r3, #65280
    str    r3, [r1]
    bne    .L3
    bx    lr
    .size    maskdata, .-maskdata
    .ident    "GCC: (GNU) 5.0.0 20150409 (experimental)"
    .section    .note.GNU-stack,"",%progbits



More information about the Gcc-bugs mailing list