Skip to content
  • Benjamin Kramer's avatar
    Teach instcombine to transform · 2321e6a4
    Benjamin Kramer authored
    (X >s -1) ? C1 : C2 and (X <s  0) ? C2 : C1
    into ((X >>s 31) & (C2 - C1)) + C1, avoiding the conditional.
    
    This optimization could be extended to take non-const C1 and C2 but we better
    stay conservative to avoid code size bloat for now.
    
    for
    int sel(int n) {
         return n >= 0 ? 60 : 100;
    }
    
    we now generate
      sarl  $31, %edi
      andl  $40, %edi
      leal  60(%rdi), %eax
    
    instead of
      testl %edi, %edi
      movl  $60, %ecx
      movl  $100, %eax
      cmovnsl %ecx, %eax
    
    llvm-svn: 107866
    2321e6a4
Loading