This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c/30442] New: Array initialization can use memset builtin function
- From: "ubizjak at gmail dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 11 Jan 2007 19:53:35 -0000
- Subject: [Bug c/30442] New: Array initialization can use memset builtin function
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
Array initialization could use memset builtin function. In following two
testcases, array is initialized without use of memset:
--cut here--
long long foo(long long *);
long long test1(void)
{
long long a[32];
a[0] = 0;
a[1] = 0;
a[2] = 0;
a[3] = 0;
a[4] = 0;
a[5] = 0;
a[6] = 0;
a[7] = 0;
a[8] = 0;
a[9] = 0;
a[10] = 0;
a[11] = 0;
a[12] = 0;
a[13] = 0;
a[14] = 0;
a[15] = 0;
a[16] = 0;
a[17] = 0;
a[18] = 0;
a[19] = 0;
a[20] = 0;
a[21] = 0;
a[22] = 0;
a[23] = 0;
a[24] = 0;
a[25] = 0;
a[26] = 0;
a[27] = 0;
a[28] = 0;
a[29] = 0;
a[30] = 0;
a[31] = 0;
return foo(a);
}
long long test2(void)
{
long long a[32];
int i;
for (i = 0; i < 32; i++)
a[i] = 0;
return foo(a);
}
--cut here--
gcc -O3 -m32 -S -fomit-frame-pointer
test1:
subl $268, %esp
leal 8(%esp), %eax
movl $0, 8(%esp)
movl $0, 12(%esp)
movl $0, 16(%esp)
movl $0, 20(%esp)
movl $0, 24(%esp)
movl $0, 28(%esp)
movl $0, 32(%esp)
movl $0, 36(%esp)
movl $0, 40(%esp)
movl $0, 44(%esp)
movl $0, 48(%esp)
movl $0, 52(%esp)
movl $0, 56(%esp)
movl $0, 60(%esp)
movl $0, 64(%esp)
movl $0, 68(%esp)
movl $0, 72(%esp)
movl $0, 76(%esp)
movl $0, 80(%esp)
movl $0, 84(%esp)
movl $0, 88(%esp)
movl $0, 92(%esp)
movl $0, 96(%esp)
movl $0, 100(%esp)
movl $0, 104(%esp)
movl $0, 108(%esp)
movl $0, 112(%esp)
movl $0, 116(%esp)
movl $0, 120(%esp)
movl $0, 124(%esp)
movl $0, 128(%esp)
movl $0, 132(%esp)
movl $0, 136(%esp)
movl $0, 140(%esp)
movl $0, 144(%esp)
movl $0, 148(%esp)
movl $0, 152(%esp)
movl $0, 156(%esp)
movl $0, 160(%esp)
movl $0, 164(%esp)
movl $0, 168(%esp)
movl $0, 172(%esp)
movl $0, 176(%esp)
movl $0, 180(%esp)
movl $0, 184(%esp)
movl $0, 188(%esp)
movl $0, 192(%esp)
movl $0, 196(%esp)
movl $0, 200(%esp)
movl $0, 204(%esp)
movl $0, 208(%esp)
movl $0, 212(%esp)
movl $0, 216(%esp)
movl $0, 220(%esp)
movl $0, 224(%esp)
movl $0, 228(%esp)
movl $0, 232(%esp)
movl $0, 236(%esp)
movl $0, 240(%esp)
movl $0, 244(%esp)
movl $0, 248(%esp)
movl $0, 252(%esp)
movl $0, 256(%esp)
movl $0, 260(%esp)
movl %eax, (%esp)
call foo
addl $268, %esp
ret
test2:
subl $268, %esp
movl $2, %eax
movl $0, 8(%esp)
leal 8(%esp), %edx
movl $0, 12(%esp)
.p2align 4,,7
.L2:
movl $0, -8(%edx,%eax,8)
movl $0, -4(%edx,%eax,8)
addl $1, %eax
cmpl $33, %eax
jne .L2
movl %edx, (%esp)
call foo
addl $268, %esp
ret
IIRC, this optimization was recently implemented in gfrortran...
--
Summary: Array initialization can use memset builtin function
Product: gcc
Version: 4.3.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: ubizjak at gmail dot com
GCC build triplet: i686-pc-linux-gnu
GCC host triplet: i686-pc-linux-gnu
GCC target triplet: i686-pc-linux-gnu
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=30442