Skip to content
  • Chris Lattner's avatar
    Implement a couple of more simplifications. This lets us codegen: · 41b76414
    Chris Lattner authored
    int test2(int * P, int* Q, int A, int B) {
            return P+A == P;
    }
    
    into:
    
    test2:
            movl 4(%esp), %eax
            movl 12(%esp), %eax
            shll $2, %eax
            cmpl $0, %eax
            sete %al
            movzbl %al, %eax
            ret
    
    instead of:
    
    test2:
            movl 4(%esp), %eax
            movl 12(%esp), %ecx
            leal (%eax,%ecx,4), %ecx
            cmpl %eax, %ecx
            sete %al
            movzbl %al, %eax
            ret
    
    ICC is producing worse code:
    
    test2:
            movl      4(%esp), %eax                                 #8.5
            movl      12(%esp), %edx                                #8.5
            lea       (%edx,%edx), %ecx                             #9.9
            addl      %ecx, %ecx                                    #9.9
            addl      %eax, %ecx                                    #9.9
            cmpl      %eax, %ecx                                    #9.16
            movl      $0, %eax                                      #9.16
            sete      %al                                           #9.16
            ret                                                     #9.16
    
    as is GCC (looks like our old code):
    
    test2:
            movl    4(%esp), %edx
            movl    12(%esp), %eax
            leal    (%edx,%eax,4), %ecx
            cmpl    %edx, %ecx
            sete    %al
            movzbl  %al, %eax
            ret
    
    llvm-svn: 19430
    41b76414
Loading