------- Comment #5 from roger at eyesopen dot com 2007-02-02 00:17 ------- It looks like Ian's recent subreg lowering pass patch has improved code generation on this testcase. Previously, we'd spill three integer registers to the stack for "LLM", we're now down to two. [A significant improvement from the five we spilled when this bug was reported]
Before: LLM: subl $12, %esp movl %ebx, (%esp) movl 28(%esp), %edx movl 20(%esp), %ebx movl 16(%esp), %ecx movl 24(%esp), %eax movl %esi, 4(%esp) movl %edx, %esi movl %edi, 8(%esp) movl %ebx, %edi movl (%esp), %ebx imull %ecx, %esi imull %eax, %edi mull %ecx addl %edi, %esi movl 8(%esp), %edi leal (%esi,%edx), %edx movl 4(%esp), %esi addl $12, %esp ret After: LLM: subl $8, %esp movl %ebx, (%esp) movl 20(%esp), %eax movl %esi, 4(%esp) movl 24(%esp), %ecx movl 12(%esp), %esi movl 16(%esp), %ebx imull %esi, %ecx imull %eax, %ebx mull %esi movl 4(%esp), %esi addl %ebx, %ecx movl (%esp), %ebx addl $8, %esp leal (%ecx,%edx), %edx ret -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=17236