This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug other/17104] New: Non-optimal code generation for bitfield initialization


Description:
A non-optimal code sequence is illustrated.    Duplicate using gcc 3.5 and
command line:

gcc -O3 -m32/-m64 -c test.c


Testcase:
struct {
 int f1 : 1;
 int f2 : 1;
 int f3 : 1;
 int f4 : 1;
 int f5 : 1;
 int f6 : 1;
 int f7 : 1;
 int f8 : 1;
 int f9 : 1;
 int f10 : 1;
 int f11 : 1;
 int f12 : 1;
 int f13 : 1;
 int f14 : 1;
 int f15 : 1;
 int f16 : 1;
 int f17 : 2;
 int f18 : 2;
 int f19 : 2;
 int f20 : 2;
 int f21 : 2;
 int f22 : 2;
 int f23 : 2;
 int f24 : 2;
 } s;

void foo ()
{

    s.f1 = 0;
    s.f2 = 0;
    s.f3 = 0;
    s.f4 = 0;
    s.f5 = 0;
    s.f6 = 0;
    s.f7 = 0;
    s.f8 = 0;
    s.f9 = 0;
    s.f10 = 0;
    s.f11 = 0;
    s.f12 = 0;
    s.f13 = 0;
    s.f14 = 0;
    s.f15 = 0;
    s.f16 = 0;
    s.f17 = 0;
    s.f18 = 0;
    s.f19 = 0;
    s.f20 = 0;
    s.f21 = 0;
    s.f22 = 0;
    s.f23 = 0;
    s.f24 = 0;

}

Assembly:
GCC 3.5 currently generates the following using:
 -m32 -O3

 foo:
      lis 9,s@ha
      li 11,0
      lwz 0,s@l(9)
      rlwinm 0,0,0,30,31
      rlwimi 0,11,0,30,31
      stw 0,s@l(9)
      blr

which could be simplified to:

 foo:
      lis 9,s@ha
      li 11,0
      stw 11,s@l(9)
      blr

the real problem, however, lies in the code generated
for 64 bit:
      -m64 -O3

 .foo:
      ld 11,.LC0@toc(2)
      lwz 0,0(11)
      rlwinm 0,0,0,1,31
      stw 0,0(11)
      lwz 9,0(11)
      rlwinm 9,9,1,1,31
      rlwinm 9,9,31,0xffffffff
      stw 9,0(11)
      lwz 0,0(11)
      rlwinm 0,0,2,1,31
      rlwinm 0,0,30,0xffffffff
      stw 0,0(11)
      lwz 9,0(11)
      rlwinm 9,9,3,1,31
      rlwinm 9,9,29,0xffffffff
      stw 9,0(11)
      lwz 0,0(11)
      rlwinm 0,0,4,1,31
      rlwinm 0,0,28,0xffffffff
      stw 0,0(11)
      lwz 9,0(11)
      rlwinm 9,9,5,1,31
      rlwinm 9,9,27,0xffffffff
      stw 9,0(11)
      lwz 0,0(11)
      rlwinm 0,0,6,1,31
      rlwinm 0,0,26,0xffffffff
      stw 0,0(11)
      lwz 9,0(11)
      rlwinm 9,9,7,1,31
      rlwinm 9,9,25,0xffffffff
      stw 9,0(11)
      lwz 0,0(11)
      rlwinm 0,0,8,1,31
      rlwinm 0,0,24,0xffffffff
      stw 0,0(11)
      lwz 9,0(11)
      rlwinm 9,9,9,1,31
      rlwinm 9,9,23,0xffffffff
      stw 9,0(11)
      lwz 0,0(11)
      rlwinm 0,0,10,1,31
      rlwinm 0,0,22,0xffffffff
      stw 0,0(11)
      lwz 9,0(11)
      rlwinm 9,9,11,1,31
      rlwinm 9,9,21,0xffffffff
      stw 9,0(11)
      lwz 0,0(11)
      rlwinm 0,0,12,1,31
      rlwinm 0,0,20,0xffffffff
      stw 0,0(11)
      lwz 9,0(11)
      rlwinm 9,9,13,1,31
      rlwinm 9,9,19,0xffffffff
      stw 9,0(11)
      lwz 0,0(11)
      rlwinm 0,0,14,1,31
      rlwinm 0,0,18,0xffffffff
      stw 0,0(11)
      lwz 9,0(11)
      rlwinm 9,9,15,1,31
      rlwinm 9,9,17,0xffffffff
      stw 9,0(11)
      lwz 0,0(11)
      rlwinm 0,0,16,2,31
      rlwinm 0,0,16,0xffffffff
      stw 0,0(11)
      lwz 9,0(11)
      rlwinm 9,9,18,2,31
      rlwinm 9,9,14,0xffffffff
      stw 9,0(11)
      lwz 0,0(11)
      rlwinm 0,0,20,2,31
      rlwinm 0,0,12,0xffffffff
      stw 0,0(11)
      lwz 9,0(11)
      rlwinm 9,9,22,2,31
      rlwinm 9,9,10,0xffffffff
      stw 9,0(11)
      lwz 0,0(11)
      rlwinm 0,0,24,2,31
      rlwinm 0,0,8,0xffffffff
      stw 0,0(11)
      lwz 9,0(11)
      rlwinm 9,9,26,2,31
      rlwinm 9,9,6,0xffffffff
      stw 9,0(11)
      lwz 0,0(11)
      rlwinm 0,0,28,2,31
      rlwinm 0,0,4,0xffffffff
      stw 0,0(11)
      lwz 9,0(11)
      rlwinm 9,9,0,0,29
      stw 9,0(11)
      blr



-- 
           Summary: Non-optimal code generation for bitfield initialization
           Product: gcc
           Version: 3.5.0
            Status: UNCONFIRMED
          Severity: enhancement
          Priority: P1
         Component: other
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: steinmtz at us dot ibm dot com
                CC: gcc-bugs at gcc dot gnu dot org,steinmtz at us dot ibm
                    dot com
 GCC build triplet: powerpc64-linux
  GCC host triplet: powerpc64-linux
GCC target triplet: powerpc64-linux


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]