http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51797
Bug #: 51797 Summary: Arm backend missed the mls related optimization Classification: Unclassified Product: gcc Version: 4.7.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: target AssignedTo: unassig...@gcc.gnu.org ReportedBy: car...@google.com Target: arm-linux-androideabi compile the following code with options -march=armv7-a -mthumb -Os int t0i(int a, int b) { return a - 368 * b; } GCC 4.7 generates: t0i: ldr r3, .L2 mla r0, r3, r1, r0 bx lr .L3: .align 2 .L2: .word -368 When compiled with -O3, gcc generates: t0i: movw r3, #65168 movt r3, 65535 mla r0, r3, r1, r0 bx lr But an optimized result should be: t0i: movw r3, 368 mls r0, r3, r1, r0 bx lr It is faster and smaller than either of Os/O3 result.