Skip to content
  1. Jan 07, 2011
  2. Nov 17, 2010
    • Evan Cheng's avatar
      Remove ARM isel hacks that fold large immediates into a pair of add, sub, and, · 7f8ab6ee
      Evan Cheng authored
      and xor. The 32-bit move immediates can be hoisted out of loops by machine
      LICM but the isel hacks were preventing them.
      
      Instead, let peephole optimization pass recognize registers that are defined by
      immediates and the ARM target hook will fold the immediates in.
      
      Other changes include 1) do not fold and / xor into cmp to isel TST / TEQ
      instructions if there are multiple uses. This happens when the 'and' is live
      out, machine sink would have sinked the computation and that ends up pessimizing
      code. The peephole pass would recognize situations where the 'and' can be
      toggled to define CPSR and eliminate the comparison anyway.
      
      2) Move peephole pass to after machine LICM, sink, and CSE to avoid blocking
      important optimizations.
      
      rdar://8663787, rdar://8241368
      
      llvm-svn: 119548
      7f8ab6ee
  3. Nov 15, 2010
  4. Nov 01, 2010
  5. Oct 31, 2010
    • Eric Christopher's avatar
      Revert r117876 for now, it's causing more testsuite failures. · ef5a1c3e
      Eric Christopher authored
      llvm-svn: 117879
      ef5a1c3e
    • Bill Wendling's avatar
      Disable the peephole optimizer until 186.crafty on armv6 is fixed. This is what · 0392f1b4
      Bill Wendling authored
      looks like is happening:
      
      Without the peephole optimizer:
        (1)   sub     r6, r6, #32
              orr     r12, r12, lr, lsl r9
              orr     r2, r2, r3, lsl r10
        (x)   cmp     r6, #0
              ldr     r9, LCPI2_10
              ldr     r10, LCPI2_11
        (2)   sub     r8, r8, #32
        (a)   movge   r12, lr, lsr r6
        (y)   cmp     r8, #0
      LPC2_10:
              ldr     lr, [pc, r10]
        (b)   movge   r2, r3, lsr r8
      
      With the peephole optimizer:
              ldr     r9, LCPI2_10
              ldr     r10, LCPI2_11
        (1*)  subs    r6, r6, #32
        (2*)  subs    r8, r8, #32
        (a*)  movge   r12, lr, lsr r6
        (b*)  movge   r2, r3, lsr r8
      
      (1) is used by (x) for the conditional move at (a). (2) is used by (y) for the
      conditional move at (b). After the peephole optimizer, these the flags resulting
      from (1*) are ignored and only the flags from (2*) are considered for both
      conditional moves.
      
      llvm-svn: 117876
      0392f1b4
  6. Oct 19, 2010
    • Owen Anderson's avatar
      Get rid of static constructors for pass registration. Instead, every pass... · 6c18d1aa
      Owen Anderson authored
      Get rid of static constructors for pass registration.  Instead, every pass exposes an initializeMyPassFunction(), which
      must be called in the pass's constructor.  This function uses static dependency declarations to recursively initialize
      the pass's dependencies.
      
      Clients that only create passes through the createFooPass() APIs will require no changes.  Clients that want to use the
      CommandLine options for passes will need to manually call the appropriate initialization functions in PassInitialization.h
      before parsing commandline arguments.
      
      I have tested this with all standard configurations of clang and llvm-gcc on Darwin.  It is possible that there are problems
      with the static dependencies that will only be visible with non-standard options.  If you encounter any crash in pass
      registration/creation, please send the testcase to me directly.
      
      llvm-svn: 116820
      6c18d1aa
  7. Oct 18, 2010
  8. Oct 12, 2010
  9. Oct 08, 2010
  10. Sep 21, 2010
  11. Sep 14, 2010
  12. Sep 11, 2010
  13. Sep 10, 2010
  14. Aug 27, 2010
  15. Aug 10, 2010
  16. Aug 06, 2010
  17. Aug 03, 2010
  18. Jul 22, 2010
  19. Jul 08, 2010
  20. Jun 09, 2010
    • Bill Wendling's avatar
      It's an error to translate this: · 5ac1d23d
      Bill Wendling authored
         %reg1025 = <sext> %reg1024
          ...
         %reg1026 = SUBREG_TO_REG 0, %reg1024, 4
      
      into this:
      
         %reg1025 = <sext> %reg1024
          ...
         %reg1027 = EXTRACT_SUBREG %reg1025, 4
         %reg1026 = SUBREG_TO_REG 0, %reg1027, 4
      
      The problem here is that SUBREG_TO_REG is there to assert that an implicit zext
      occurs. It doesn't insert a zext instruction. If we allow the EXTRACT_SUBREG
      here, it will give us the value after the <sext>, not the original value of
      %reg1024 before <sext>.
      
      llvm-svn: 105741
      5ac1d23d
  21. Mar 26, 2010
  22. Feb 09, 2010
  23. Jan 19, 2010
  24. Jan 13, 2010
Loading