[Bug other/29124] New: unoptimal addressing mode.

pluto at agmk dot net gcc-bugzilla@gcc.gnu.org
Mon Sep 18 09:27:00 GMT 2006


$ cat tmp.c
struct some_struct
{
        int i;
        int j;
        void* priv[];
};
struct some_struct_priv
{
        int k;
        int l;
};
void update( struct some_struct* s )
{
        s->i = 0;
        s->j = 0;
        struct some_struct_priv* priv = (struct some_struct_priv*)s->priv;
#ifdef TEST
        priv->k = 0;
#endif
        priv->l = 0;
}

$ gcc -Wall tmp.c -c -O2 -fno-strict-aliasing && objdump -d tmp.o

0000000000000000 <update>:
   0:   c7 07 00 00 00 00       movl   $0x0,(%rdi)
   6:   c7 47 04 00 00 00 00    movl   $0x0,0x4(%rdi)
   d:   c7 47 0c 00 00 00 00    movl   $0x0,0xc(%rdi)
  14:   c3                      retq

$ gcc -Wall tmp.c -c -O2 -fno-strict-aliasing -DTEST && objdump -d tmp.o

0000000000000000 <update>:
   0:   c7 07 00 00 00 00       movl   $0x0,(%rdi)
   6:   c7 47 04 00 00 00 00    movl   $0x0,0x4(%rdi)
   d:   48 83 c7 08             add    $0x8,%rdi              <== [*]
  11:   c7 07 00 00 00 00       movl   $0x0,(%rdi)            <== [*]
  17:   c7 47 04 00 00 00 00    movl   $0x0,0x4(%rdi)         <== [*]
  1e:   c3                      retq

[*] could be done with: movl $0, 8(%rdi); movl $0, 12(%rdi).


-- 
           Summary: unoptimal addressing mode.
           Product: gcc
           Version: 4.1.2
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: other
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: pluto at agmk dot net
GCC target triplet: x86_64-linux


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=29124



More information about the Gcc-bugs mailing list