Skip to content
  • Chris Lattner's avatar
    When factoring multiply expressions across adds, factor both · 0c59ac3f
    Chris Lattner authored
    positive and negative forms of constants together.  This 
    allows us to compile:
    
    int foo(int x, int y) {
        return (x-y) + (x-y) + (x-y);
    }
    
    into:
    
    _foo:                                                       ## @foo
    	subl	%esi, %edi
    	leal	(%rdi,%rdi,2), %eax
    	ret
    
    instead of (where the 3 and -3 were not factored):
    
    _foo:
            imull   $-3, 8(%esp), %ecx
            imull   $3, 4(%esp), %eax
            addl    %ecx, %eax
            ret
    
    this started out as:
        movl    12(%ebp), %ecx
        imull   $3, 8(%ebp), %eax
        subl    %ecx, %eax
        subl    %ecx, %eax
        subl    %ecx, %eax
        ret
    
    This comes from PR5359.
    
    llvm-svn: 92381
    0c59ac3f
Loading