[Bug tree-optimization/107043] New: range information not used in popcount

drepper.fsp+rhbz at gmail dot com gcc-bugzilla@gcc.gnu.org
Mon Sep 26 20:10:20 GMT 2022


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

            Bug ID: 107043
           Summary: range information not used in popcount
           Product: gcc
           Version: 13.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: tree-optimization
          Assignee: unassigned at gcc dot gnu.org
          Reporter: drepper.fsp+rhbz at gmail dot com
  Target Milestone: ---

This code could be compiled to a simple return of the value 1 but it isn't
because the range information for n does not survive long enough.

int g(int n)
{
  n &= 0x8000;
  if (n == 0)
    return 1;
  return __builtin_popcount(n);
}

The code generated today is lengthy:

   0:   81 e7 00 80 00 00       and    $0x8000,%edi
   6:   ba 01 00 00 00          mov    $0x1,%edx
   b:   89 f8                   mov    %edi,%eax
   d:   c1 e8 0f                shr    $0xf,%eax
  10:   85 ff                   test   %edi,%edi
  12:   0f 44 c2                cmove  %edx,%eax
  15:   c3                      ret


More information about the Gcc-bugs mailing list