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