Skip to content
  1. Jun 09, 2012
    • Jakob Stoklund Olesen's avatar
      Don't run RAFast in the optimizing regalloc pipeline. · 33a1b416
      Jakob Stoklund Olesen authored
      The fast register allocator is not supposed to work in the optimizing
      pipeline. It doesn't make sense to compute live intervals, run full copy
      coalescing, and then run RAFast.
      
      Fast register allocation in the optimizing pipeline is better done by
      RABasic.
      
      llvm-svn: 158242
      33a1b416
    • Nuno Lopes's avatar
      canonicalize: · 2710f1b0
      Nuno Lopes authored
      -%a + 42
      into
      42 - %a
      
      previously we were emitting:
      -(%a + 42)
      
      This fixes the infinite loop in PR12338. The generated code is still not perfect, though.
      Will work on that next
      
      llvm-svn: 158237
      2710f1b0
  2. Jun 08, 2012
    • Evan Cheng's avatar
    • Andrew Trick's avatar
      423fa6fa
    • Duncan Sands's avatar
      Reapply commit 158073 with a fix (the testcase was already committed). The · 3293f460
      Duncan Sands authored
      problem was that by moving instructions around inside the function, the pass
      could accidentally move the iterator being used to advance over the function
      too.  Fix this by only processing the instruction equal to the iterator, and
      leaving processing of instructions that might not be equal to the iterator
      to later (later = after traversing the basic block; it could also wait until
      after traversing the entire function, but this might make the sets quite big).
      Original commit message:
      
      Grab-bag of reassociate tweaks.  Unify handling of dead instructions and
      instructions to reoptimize.  Exploit this to more systematically eliminate
      dead instructions (this isn't very useful in practice but is convenient for
      analysing some testcase I am working on).  No need for WeakVH any more: use
      an AssertingVH instead.
      
      llvm-svn: 158226
      3293f460
    • Hal Finkel's avatar
      Remove the TODO statement in the PPC README re: CTR loops · 41e6fd1d
      Hal Finkel authored
      As Chris points out, this can now be removed!
      
      TODO: check if the associated section on viterbi's inner loop can also be removed.
      llvm-svn: 158224
      41e6fd1d
    • Hal Finkel's avatar
      Enable PPC CTR loop formation by default. · c6b5debb
      Hal Finkel authored
      Thanks to Jakob's help, this now causes no new test suite failures!
      
      Over the entire test suite, this gives an average 1% speedup. The largest speedups are:
      SingleSource/Benchmarks/Misc/pi - 108%
      SingleSource/Benchmarks/CoyoteBench/lpbench - 54%
      MultiSource/Benchmarks/Prolangs-C/unix-smail/unix-smail - 50%
      SingleSource/Benchmarks/Shootout/ary3 - 32%
      SingleSource/Benchmarks/Shootout-C++/matrix - 30%
      
      The largest slowdowns are:
      MultiSource/Benchmarks/mediabench/gsm/toast/toast - -30%
      MultiSource/Benchmarks/Prolangs-C/bison/mybison - -25%
      MultiSource/Benchmarks/BitBench/uuencode/uuencode - -22%
      MultiSource/Applications/d/make_dparser - -14%
      SingleSource/Benchmarks/Shootout-C++/ary - -13%
      
      In light of these slowdowns, additional profiling work is obviously needed!
      
      llvm-svn: 158223
      c6b5debb
    • Hal Finkel's avatar
      Mark the PPC CTRRC and CTRRC8 register classes as non-allocatable. · 3d32ad3a
      Hal Finkel authored
      Marking these classes as non-alocatable allows CTR loop generation to
      work correctly with the block placement passes, etc. These register
      classes are currently used only by some unused TCRETURN patterns.
      In future cleanup, these will be removed.
      
      Thanks again to Jakob for suggesting this fix to the CTR loop problem!
      
      llvm-svn: 158221
      3d32ad3a
    • Manman Ren's avatar
      Enable optimization for integer ABS on X86 if Subtarget has CMOV. · 6bc2d270
      Manman Ren authored
      llvm-svn: 158220
      6bc2d270
    • Manman Ren's avatar
      Test case for r158160 · bf86b295
      Manman Ren authored
      llvm-svn: 158218
      bf86b295
    • Andrew Trick's avatar
      Sched itinerary fix: Avoid static initializers. · 8cf02875
      Andrew Trick authored
      This fixes an accidental dependence on static initialization order that I introduced yesterday.
      
      Thank you Lang!!!
      
      llvm-svn: 158215
      8cf02875
    • Chad Rosier's avatar
      Fix a crash in APInt::lshr when shiftAmt > BitWidth. · 3d464d80
      Chad Rosier authored
      Patch by James Benton <jbenton@vmware.com>.
      
      llvm-svn: 158213
      3d464d80
    • Andrew Trick's avatar
      Fix Target->Codegen dependence. · 596af1b0
      Andrew Trick authored
      Bulk move of TargetInstrInfo implementation into
      TargetInstrInfoImpl. This is dirty because the code isn't part of
      TargetInstrInfoImpl class, nor should it be, because the methods are
      not target hooks. However, it's the current mechanism for keeping
      libTarget useful outside the backend. You'll get a not-so-nice link
      error if you invoke a TargetInstrInfo method that depends on CodeGen.
      
      The TargetInstrInfoImpl class should probably be removed since it
      doesn't really solve this problem.
      
      To really fix this, we probably need separate interfaces for the
      CodeGen/nonCodeGen sides of TargetInstrInfo.
      
      llvm-svn: 158212
      596af1b0
    • Nuno Lopes's avatar
      BoundsChecking: add support for ConstantPointerNull. fixes a bunch of... · 4b68c1da
      Nuno Lopes authored
      BoundsChecking: add support for ConstantPointerNull. fixes a bunch of instrumentation failures in loops with reallocs
      
      llvm-svn: 158210
      4b68c1da
    • NAKAMURA Takumi's avatar
      5412cef7
    • Hal Finkel's avatar
      Disable the PPC CTR-Loops pass by default. · 821e0012
      Hal Finkel authored
      The pass itself works well, but the something in the Machine* infrastructure
      does not understand terminators which define registers. Without the ability
      to use the block-placement pass, etc. this causes performance regressions (and
      so is turned off by default). Turning off the analysis turns off the problems
      with the Machine* infrastructure.
      
      llvm-svn: 158206
      821e0012
    • Hal Finkel's avatar
      Fix a bug in the new PPC CTR-Loops pass. · 8b01503e
      Hal Finkel authored
      The code which tests for an induction operation cannot assume that any
      ADDI instruction will have a register operand because the operand could
      also be a frame index; for example:
          %vreg16<def> = ADDI8 <fi#0>, 0; G8RC:%vreg16
      
      llvm-svn: 158205
      8b01503e
    • Hal Finkel's avatar
      Add the PPCCTRLoops pass: a PPC machine-code-level optimization pass to form... · 96c2d4d9
      Hal Finkel authored
      Add the PPCCTRLoops pass: a PPC machine-code-level optimization pass to form CTR-based loop branching code.
      
      This pass is derived from the Hexagon HardwareLoops pass. The only significant enhancement over the Hexagon
      pass is that PPCCTRLoops will also attempt to delete the replaced add and compare operations if they are
      no longer otherwise used. Also, invalid preheader DebugLoc is not used.
      
      llvm-svn: 158204
      96c2d4d9
    • Duncan Sands's avatar
      Revert commit 158073 while waiting for a fix. The issue is that reassociate · 9a5cf922
      Duncan Sands authored
      can move instructions within the instruction list.  If the instruction just
      happens to be the one the basic block iterator is pointing to, and it is
      moved to a different basic block, then we get into an infinite loop due to
      the iterator running off the end of the basic block (for some reason this
      doesn't fire any assertions).  Original commit message:
      
      Grab-bag of reassociate tweaks.  Unify handling of dead instructions and
      instructions to reoptimize.  Exploit this to more systematically eliminate
      dead instructions (this isn't very useful in practice but is convenient for
      analysing some testcase I am working on).  No need for WeakVH any more: use
      an AssertingVH instead.
      
      llvm-svn: 158199
      9a5cf922
    • Tobias Grosser's avatar
      cmake: Pass the -m32 flag to modules if LLVM_BUILD_32_BITS is enabled · b32ad401
      Tobias Grosser authored
      This was previously only done for executables and shared libraries, but not
      for modules. As modules are essentially shared libraries (that need to be
      dlopened explicitly), threating them the same as shared libraries seems
      reasonable. This fixes the LLVM_BUILD_32_BITS build of Polly.
      
      Contributed by: Ondra Hosek  <ondra.hosek@gmail.com>
      
      llvm-svn: 158195
      b32ad401
    • Owen Anderson's avatar
      Teach the AsmMatcherEmitter to allow InstAlias' where the suboperands of a... · da6bd3e6
      Owen Anderson authored
      Teach the AsmMatcherEmitter to allow InstAlias' where the suboperands of a complex operand are called out explicitly in the asm string.
      
      llvm-svn: 158183
      da6bd3e6
    • Michael J. Spencer's avatar
      [CMake] Promote extension warnings to errors. · aeb59e1d
      Michael J. Spencer authored
      llvm-svn: 158176
      aeb59e1d
    • Manman Ren's avatar
      X86: optimize generated code for integer ABS · 2cdc8afc
      Manman Ren authored
      This patch will generate the following for integer ABS:
            movl    %edi, %eax
            negl    %eax
            cmovll  %edi, %eax
      INSTEAD OF
            movl    %edi, %ecx
            sarl    $31, %ecx
            leal    (%rdi,%rcx), %eax
            xorl    %ecx, %eax
      
      There exists a target-independent DAG combine for integer ABS, which converts
      integer ABS to sar+add+xor. For X86, we match this pattern back to neg+cmov. 
      This is implemented in PerformXorCombine.
      
      rdar://10695237
      
      llvm-svn: 158175
      2cdc8afc
  3. Jun 07, 2012
Loading