https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115505
Bug ID: 115505
Summary: missing optimization: thumb1 use ldmia/stmia for load
store DI/DF data when possible
Product: gcc
Version: 15.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: rtl-optimization
Assignee: unassigned at gcc dot gnu.org
Reporter: lis8215 at gmail dot com
Target Milestone: ---
Created attachment 58438
--> https://gcc.gnu.org/bugzilla/attachment.cgi?id=58438&action=edit
possible solution patch
At the moment GCC emits two ldr/str instructions for DI/DF modes load/store.
However there's a trick to use ldmia/stmia when address register in not
used anymore/dead or reused.
I don't know if it affects arm and/or thumb2 as well.
Patch for possible solution for thumb1 provided.
Comparing code size with the patch gives for v6-m/nofp:
libgcc: -52 bytes / -0.10%
Newlib's libc: -68 bytes / -0.03%
libm: -96 bytes / -0.10%
libstdc++: -140 bytes / -0.02%