------- Comment #27 from hubicka at gcc dot gnu dot org 2008-09-06 12:02 ------- Also just noticed that offline copy of longest-match get extra move: .L15: movzbl 2(%eax), %edi #, tmp87 leal 2(%eax), %ecx #, scan.158 movl %edi, %edx # tmp87, cmpb 2(%ebx), %dl #, jne .L6 #, movzbl 3(%eax), %edi #, tmp88 leal 3(%eax), %ecx #, scan.158 movl %edi, %edx # tmp88, cmpb 3(%ebx), %dl #, jne .L6 #, movzbl 4(%eax), %edi #, tmp89 leal 4(%eax), %ecx #, scan.158 movl %edi, %edx # tmp89, cmpb 4(%ebx), %dl #, jne .L6 #, movzbl 5(%eax), %edi #, tmp90 leal 5(%eax), %ecx #, scan.158 movl %edi, %edx # tmp90, cmpb 5(%ebx), %dl #, jne .L6 #,
while inlined copy is fine: .L98: movzbl 1(%eax), %edx #, leal 1(%eax), %edi #, scan cmpb 1(%ecx), %dl #, jne .L161 #, movzbl 2(%eax), %edx #, leal 2(%eax), %edi #, scan cmpb 2(%ecx), %dl #, jne .L161 #, movzbl 3(%eax), %edx #, leal 3(%eax), %edi #, scan cmpb 3(%ecx), %dl #, jne .L161 #, movzbl 4(%eax), %edx #, leal 4(%eax), %edi #, scan cmpb 4(%ecx), %dl #, jne .L161 #, interesting :) -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33761