Skip to content
  1. Apr 27, 2009
  2. Apr 25, 2009
  3. Apr 24, 2009
  4. Apr 23, 2009
  5. Apr 21, 2009
  6. Apr 20, 2009
  7. Apr 18, 2009
  8. Apr 17, 2009
  9. Apr 16, 2009
  10. Apr 15, 2009
  11. Apr 14, 2009
  12. Apr 12, 2009
  13. Apr 08, 2009
    • Chris Lattner's avatar
      Instcombine should not promote whole computation trees to "strange" · eb510d6b
      Chris Lattner authored
      integer types, unless they are already strange.  This prevents it from
      turning the code produced by SROA into crazy libcalls and stuff that 
      the code generator can't handle.  In the attached example, the result
      was an i96 multiply that caused the x86 backend to assert.
      
      Note that if TargetData had an idea of what the legal types are for
      a target that this could be used to stop instcombine from introducing
      i64 muls, as Scott wanted.
      
      llvm-svn: 68598
      eb510d6b
  14. Apr 07, 2009
  15. Apr 06, 2009
  16. Apr 02, 2009
  17. Apr 01, 2009
  18. Mar 31, 2009
    • Evan Cheng's avatar
      Throttle back "fold select into operand" transformation. InstCombine should... · 826b6f0f
      Evan Cheng authored
      Throttle back "fold select into operand" transformation. InstCombine should not generate selects of two constants unless they are selects of 0 and 1.
      
      e.g.
      define i32 @t1(i32 %c, i32 %x) nounwind {
             %t1 = icmp eq i32 %c, 0
             %t2 = lshr i32 %x, 18
             %t3 = select i1 %t1, i32 %t2, i32 %x
             ret i32 %t3
      }
      
      was turned into
      
      define i32 @t2(i32 %c, i32 %x) nounwind {
             %t1 = icmp eq i32 %c, 0
             %t2 = select i1 %t1, i32 18, i32 0
             %t3 = lshr i32 %x, %t2
             ret i32 %t3
      }
      
      For most targets, that means materializing two constants and then a select. e.g. On x86-64
      
      movl    %esi, %eax
      shrl    $18, %eax
      testl   %edi, %edi
      cmovne  %esi, %eax
      ret
      
      =>
      
      xorl    %eax, %eax
      testl   %edi, %edi
      movl    $18, %ecx
      cmovne  %eax, %ecx
      movl    %esi, %eax
      shrl    %cl, %eax
      ret
      
      Also, the optimizer and codegen can reason about shl / and / add, etc. by a constant. This optimization will hinder optimizations using ComputeMaskedBits.
      
      llvm-svn: 68142
      826b6f0f
    • Devang Patel's avatar
      Loop Index Split can eliminate a loop if it can determin if loop body is... · 6e68bd00
      Devang Patel authored
      Loop Index Split can eliminate a loop if it can determin if loop body is executed only once. There was a bug in determining IV based value of the iteration for which the loop body is executed. Fix it.
      
      llvm-svn: 68071
      6e68bd00
Loading