https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82682
--- Comment #3 from Jakub Jelinek <jakub at gcc dot gnu.org> --- Yes. r253955 to r253958 diff is: --- pr50038.s.253955 2017-11-20 09:52:43.000000000 -0500 +++ pr50038.s.253958 2017-11-20 09:52:48.000000000 -0500 @@ -1,53 +1,55 @@ .file "pr50038.c" .text .p2align 4,,15 .globl test .type test, @function test: .LFB0: .cfi_startproc pushl %edi .cfi_def_cfa_offset 8 .cfi_offset 7, -8 pushl %esi .cfi_def_cfa_offset 12 .cfi_offset 6, -12 pushl %ebx .cfi_def_cfa_offset 16 .cfi_offset 3, -16 movl 16(%esp), %eax movl 20(%esp), %edx testl %eax, %eax jle .L1 movl 24(%esp), %ecx leal (%edx,%eax,2), %edi .p2align 4,,10 .p2align 3 .L3: movzbl (%edx), %esi addl $2, %edx addl $1, %ecx movzbl -1(%edx), %eax - imull $19595, %esi, %esi + movl %esi, %ebx imull $38470, %eax, %eax + movzbl %bl, %esi + imull $19595, %esi, %esi addl %esi, %eax sarl $16, %eax movb %al, -1(%ecx) cmpl %edi, %edx jne .L3 .L1: popl %ebx .cfi_restore 3 .cfi_def_cfa_offset 12 popl %esi .cfi_restore 6 .cfi_def_cfa_offset 8 popl %edi .cfi_restore 7 .cfi_def_cfa_offset 4 ret .cfi_endproc .LFE0: .size test, .-test .ident "GCC: (GNU) 8.0.0 20171020 (experimental)" .section .note.GNU-stack,"",@progbits Before *.ira dump the IL is identical, RA makes different decisions because MEMs are seen as more costly than before. @@ -237,7 +237,7 @@ Ranges after the compression: Pressure: GENERAL_REGS=5 Hard reg set forest: 0:( 0-6 8-15)@0 - 1:( 0-6)@135464 + 1:( 0-6)@167080 Allocno a0r99 of GENERAL_REGS(7) has 7 avail. regs 0-6, node: 0-6 (confl regs = 7-79) Allocno a1r104 of GENERAL_REGS(7) has 7 avail. regs 0-6, node: 0-6 (confl regs = 7-79) Allocno a2r103 of GENERAL_REGS(7) has 7 avail. regs 0-6, node: 0-6 (confl regs = 7-79) @@ -266,9 +266,9 @@ Ranges after the compression: Making a0(r99,l0) colorable Making a1(r104,l0) colorable Making a3(r96,l0) colorable - Pushing a0(r99,l0)(cost 3058) - Pushing a3(r96,l0)(cost 9008) - Pushing a1(r104,l0)(cost 14358) + Pushing a0(r99,l0)(cost 3312) + Pushing a3(r96,l0)(cost 10962) + Pushing a1(r104,l0)(cost 16058) Pushing a13(r107,l0)(cost 0) Pushing a10(r108,l0)(cost 0) Pushing a8(r111,l0)(cost 0) @@ -284,15 +284,12 @@ Ranges after the compression: Popping a11(r109,l0) -- assign reg 4 Popping a12(r93,l0) -- assign reg 4 Popping a2(r103,l0) -- assign reg 0 -Spilling a0r99 for a12r93 -Assigning 3 to a12r93 - a0(r99,l0) -- assign hard reg 5 Disposition: - 12:r93 l0 3 3:r96 l0 2 0:r99 l0 5 2:r103 l0 0 + 12:r93 l0 4 3:r96 l0 2 0:r99 l0 3 2:r103 l0 0 1:r104 l0 1 13:r107 l0 0 10:r108 l0 0 11:r109 l0 4 9:r110 l0 4 8:r111 l0 0 7:r112 l0 0 New iteration of spill/restore move -+++Costs: overall 0, reg 0, mem 0, ld 0, st 0, move 0 ++++Costs: overall 3400, reg 3400, mem 0, ld 0, st 0, move 0 +++ move loops 0, new jumps 0