[Bug tree-optimization/96633] New: missed optimization?

nathan at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Sun Aug 16 21:25:44 GMT 2020


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

            Bug ID: 96633
           Summary: missed optimization?
           Product: gcc
           Version: 10.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: tree-optimization
          Assignee: unassigned at gcc dot gnu.org
          Reporter: nathan at gcc dot gnu.org
  Target Milestone: ---

Matt Godbolt's https://queue.acm.org/detail.cfm?id=3372264
has an example of optimizing on amd64:

bool isWhitespace(char c)
 {
     return c == ' '
       || c == '\r'
       || c == '\n'
       || c == '\t';
 }

GCC generates: 
        xorl    %eax, %eax
        cmpb    $32, %dil
        ja      .L1
        movabsq $4294977024, %rax
        movl    %edi, %ecx
        shrq    %cl, %rax
        andl    $1, %eax
.L1:
        ret

following an amazing comment on the ML, I've determined the following is abot
12% faster (and shorter too):

        movabsq $4294977024, %rax
        movl   %edi, %ecx
        shrq    %cl, %rax
        shr    $6, %ecx
        andl    $1, %eax
        shrq    %cl, %rax
        ret

We're dealing with chars in the range [-128,128), and x86's shift operator only
considers the bottom 6 bits.


More information about the Gcc-bugs mailing list