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.