[Bug target/51797] New: Arm backend missed the mls related optimization
carrot at google dot com
gcc-bugzilla@gcc.gnu.org
Mon Jan 9 08:45:00 GMT 2012
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: unassigned@gcc.gnu.org
ReportedBy: carrot@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.
More information about the Gcc-bugs
mailing list