Skip to content
  • Benjamin Kramer's avatar
    Add some x86 specific dagcombines for conditional increments. · f6ddc4a1
    Benjamin Kramer authored
    (add Y, (sete  X, 0)) -> cmp X, 1; adc  0, Y
    (add Y, (setne X, 0)) -> cmp X, 1; sbb -1, Y
    (sub (sete  X, 0), Y) -> cmp X, 1; sbb  0, Y
    (sub (setne X, 0), Y) -> cmp X, 1; adc -1, Y
    
    for
      unsigned foo(unsigned a, unsigned b) {
        if (a == 0) b++;
        return b;
      }
    we now get:
      foo:
        cmpl  $1, %edi
        movl  %esi, %eax
        adcl  $0, %eax
        ret
    instead of:
      foo:
        testl %edi, %edi
        sete  %al
        movzbl  %al, %eax
        addl  %esi, %eax
        ret
    
    llvm-svn: 122364
    f6ddc4a1
Loading