This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c/66090] New: Wrong loop code generation with -O2 on ARM
- From: "christian dot prochaska at genode-labs dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Sun, 10 May 2015 02:28:30 +0000
- Subject: [Bug c/66090] New: Wrong loop code generation with -O2 on ARM
- Auto-submitted: auto-generated
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66090
Bug ID: 66090
Summary: Wrong loop code generation with -O2 on ARM
Product: gcc
Version: 4.9.2
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c
Assignee: unassigned at gcc dot gnu.org
Reporter: christian.prochaska@genode-labs.com
Target Milestone: ---
test.c:
void func()
{
unsigned int i;
unsigned int *ptr = (unsigned int*)0xfffff000;
for (i = 0; i < 1024; i++)
*(ptr++) = 0;
}
Compiled with GCC 4.9.2 from the Xubuntu 15.04 repository:
arm-linux-gnueabihf-gcc-4.9 -marm -c -O2 test.c
Generated code:
00000000 <func>:
func():
0: e3a03a0f mov r3, #61440 ; 0xf000
4: e3a02000 mov r2, #0
8: e34f3fff movt r3, #65535 ; 0xffff
c: e4832004 str r2, [r3], #4
10: eafffffd b c <func+0xc>
There is no check of the loop exit condition.
When compiling with -O1, it is there:
00000000 <func>:
func():
0: e3a03a0f mov r3, #61440 ; 0xf000
4: e34f3fff movt r3, #65535 ; 0xffff
8: e3a02000 mov r2, #0
c: e4832004 str r2, [r3], #4
10: e3530000 cmp r3, #0
14: 1afffffc bne c <func+0xc>
18: e12fff1e bx lr
The problem does not occur with GCC 4.8.4.