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

            Bug ID: 96769
           Summary: -mpure-code produces suboptimal code for immediate
                    generation for thumb-1
           Product: gcc
           Version: 10.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: target
          Assignee: unassigned at gcc dot gnu.org
          Reporter: clyon at gcc dot gnu.org
  Target Milestone: ---

As discussed in PR94538, -mpure-code produces switch tables for thumb-1.

int f3 (void) { return 0x11000000; }
int f3_2 (void) { return 0x12345678; }

Compiled with -O2 -mpure-code,
-mcpu=cortex-m0:
f3:
        movs    r0, #17
        @ sp needed
        lsls    r0, r0, #8
        lsls    r0, r0, #8
        lsls    r0, r0, #8
        bx      lr
f3_2:
        movs    r0, #18
        @ sp needed
        lsls    r0, r0, #8
        adds    r0, r0, #52
        lsls    r0, r0, #8
        adds    r0, r0, #86
        lsls    r0, r0, #8
        adds    r0, r0, #120
        bx      lr

-mcpu=cortex-m23:
f3:
        movs    r0, #136
        @ sp needed
        lsls    r0, r0, #21
        bx      lr
f3_2:
        movw    r0, #22136
        @ sp needed
        movt    r0, 4660
        bx      lr

Code for cortex-m23 is OK, but the code for cortex-m0 could be improved for
f3(). For f3_2(), code for cortex-m0 looks OK since that CPU does not have
movw/movt instructions.

Reply via email to