Skip to content
  1. Mar 15, 2011
    • Evan Cheng's avatar
      Add a peephole optimization to optimize pairs of bitcasts. e.g. · e4b8ac9f
      Evan Cheng authored
      v2 = bitcast v1
      ...
      v3 = bitcast v2
      ...
         = v3
      =>
      v2 = bitcast v1
      ...
         = v1
      if v1 and v3 are of in the same register class.
      
      bitcast between i32 and fp (and others) are often not nops since they
      are in different register classes. These bitcast instructions are often
      left because they are in different basic blocks and cannot be
      eliminated by dag combine.
      
      rdar://9104514
      
      llvm-svn: 127668
      e4b8ac9f
  2. Feb 15, 2011
  3. Feb 14, 2011
  4. Jan 10, 2011
  5. Jan 08, 2011
    • Evan Cheng's avatar
      Do not model all INLINEASM instructions as having unmodelled side effects. · 6eb516db
      Evan Cheng authored
      Instead encode llvm IR level property "HasSideEffects" in an operand (shared
      with IsAlignStack). Added MachineInstrs::hasUnmodeledSideEffects() to check
      the operand when the instruction is an INLINEASM.
      
      This allows memory instructions to be moved around INLINEASM instructions.
      
      llvm-svn: 123044
      6eb516db
  6. Jan 07, 2011
  7. 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
  8. Nov 15, 2010
  9. Nov 01, 2010
  10. 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
  11. 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
  12. Oct 18, 2010
  13. Oct 12, 2010
  14. Oct 08, 2010
  15. Sep 21, 2010
  16. Sep 14, 2010
  17. Sep 11, 2010
  18. Sep 10, 2010
  19. Aug 27, 2010
  20. Aug 10, 2010
  21. Aug 06, 2010
  22. Aug 03, 2010
  23. Jul 22, 2010
  24. Jul 08, 2010
  25. 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
  26. Mar 26, 2010
  27. Feb 09, 2010
  28. Jan 19, 2010
  29. Jan 13, 2010
Loading