public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug c/30442]  New: Array initialization can use memset builtin function
@ 2007-01-11 19:53 ubizjak at gmail dot com
  2007-01-11 22:16 ` [Bug middle-end/30442] " pinskia at gcc dot gnu dot org
                   ` (4 more replies)
  0 siblings, 5 replies; 10+ messages in thread
From: ubizjak at gmail dot com @ 2007-01-11 19:53 UTC (permalink / raw)
  To: gcc-bugs

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


^ permalink raw reply	[flat|nested] 10+ messages in thread
[parent not found: <bug-30442-4@http.gcc.gnu.org/bugzilla/>]

end of thread, other threads:[~2012-06-05 12:39 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2007-01-11 19:53 [Bug c/30442] New: Array initialization can use memset builtin function ubizjak at gmail dot com
2007-01-11 22:16 ` [Bug middle-end/30442] " pinskia at gcc dot gnu dot org
2007-01-14  5:01 ` [Bug middle-end/30442] Expanded array " pinskia at gcc dot gnu dot org
2007-11-09 13:09 ` johan dot walles at gmail dot com
2008-03-12 11:06 ` ubizjak at gmail dot com
2008-03-13  6:51 ` irar at il dot ibm dot com
     [not found] <bug-30442-4@http.gcc.gnu.org/bugzilla/>
2012-02-06 21:41 ` ubizjak at gmail dot com
2012-06-05 10:50 ` rguenth at gcc dot gnu.org
2012-06-05 12:38 ` rguenth at gcc dot gnu.org
2012-06-05 12:39 ` rguenth at gcc dot gnu.org

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).