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

            Bug ID: 91026
           Summary: switch expansion produces a jump table with trivial
                    entries
           Product: gcc
           Version: unknown
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: tree-optimization
          Assignee: unassigned at gcc dot gnu.org
          Reporter: rafael at espindo dot la
  Target Milestone: ---

Created attachment 46531
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=46531&action=edit
testcase

In the attached testcase gcc lowers the switch to a jump table where each entry
in the table just sets a value. The two labels in the table are

.L5:
        movl    $1, %eax
        ret

.L2:
        xorl    %eax, %eax
        ret

gcc could have replaced the jump table with a constant table, with L5 replaced
by 1 and L2 by 0.

clang produces:

0000000000000000 <_Z3foo4kind>:
   0:   40 80 c7 ff             add    $0xff,%dil
   4:   40 80 ff 11             cmp    $0x11,%dil
   8:   77 0c                   ja     16 <_Z3foo4kind+0x16>
   a:   b8 b9 a7 02 00          mov    $0x2a7b9,%eax
   f:   89 f9                   mov    %edi,%ecx
  11:   d3 e8                   shr    %cl,%eax
  13:   24 01                   and    $0x1,%al
  15:   c3                      retq
  16:   31 c0                   xor    %eax,%eax
  18:   c3                      retq

Reply via email to