This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug target/51797] New: Arm backend missed the mls related optimization
- From: "carrot at google dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Mon, 09 Jan 2012 08:45:16 +0000
- Subject: [Bug target/51797] New: Arm backend missed the mls related optimization
- Auto-submitted: auto-generated
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.