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

            Bug ID: 78683
           Summary: [ppc] __builtin_ctlz code gen can be improved for
                    -mcpu=power8 and earlier
           Product: gcc
           Version: 7.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: target
          Assignee: unassigned at gcc dot gnu.org
          Reporter: wschmidt at gcc dot gnu.org
  Target Milestone: ---

For this code:

unsigned r; r = (unsigned) __builtin_ctzl(v); return r;

GCC on POWER produces:

                 neg 9,3
                 and 3,9,3
                 cntlzd 3,3
                 subfic 3,3,63
                 rldicl 3,3,0,32

Two other compilers produce the following sequences:

                 addi 4, 3, -1
                 andc 3, 4, 3
                 popcntd 3, 3

or

                 addi       r0,r3,-1
                 andc       r0,r0,r3
                 cntlzd     r0,r0
                 subfic     r3,r0,64

We should probably be using the short and elegant popcntd solution.

Reply via email to