Hi,

#include <string.h>

void fill(char *s, int i)
{
        memset(s, i, strlen(s));
}


4.1 produces two strlen calls

fill:
        mflr 0
        stwu 1,-32(1)
        stw 0,36(1)
        stw 28,16(1)
        mr 28,4
        stw 29,20(1)
        mr 29,3
        bl strlen
        mr 3,29
        bl strlen
        mr 4,28
        mr 5,3
        mr 3,29
        bl memset
        lwz 0,36(1)
        lwz 28,16(1)
        lwz 29,20(1)
        addi 1,1,32
        mtlr 0
        blr


where 4.0 outputs

fill:
        mflr 0
        stwu 1,-32(1)
        stw 0,36(1)
        stw 28,16(1)
        mr 28,3
        stw 29,20(1)
        mr 29,4
        bl strlen
        mr 4,29
        mr 5,3
        mr 3,28
        bl memset
        lwz 0,36(1)
        lwz 28,16(1)
        lwz 29,20(1)
        addi 1,1,32
        mtlr 0
        blr


-- 
           Summary: O2 produces duplicate code
           Product: gcc
           Version: 4.1.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: benoit at placenet dot org
 GCC build triplet: powerpc-linux-gnu
  GCC host triplet: powerpc-linux-gnu
GCC target triplet: powerpc-linux-gnu


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

Reply via email to