Skip to content
  1. Aug 11, 2011
  2. Aug 10, 2011
  3. Aug 09, 2011
  4. Aug 08, 2011
  5. Aug 06, 2011
  6. Aug 05, 2011
    • Jakob Stoklund Olesen's avatar
      Detect proper register sub-classes. · 5122467b
      Jakob Stoklund Olesen authored
      Some instructions require restricted register classes, but most of the
      time that doesn't affect register allocation. For example, some
      instructions don't work with the stack pointer, but that is a reserved
      register anyway.
      
      Sometimes it matters, GR32_ABCD only has 4 allocatable registers. For
      such a proper sub-class, the register allocator should try to enable
      register class inflation since that makes more registers available for
      allocation.
      
      Make sure only legal super-classes are considered. For example, tGPR is
      not a proper sub-class in Thumb mode, but in ARM mode it is.
      
      llvm-svn: 136981
      5122467b
    • Jakob Stoklund Olesen's avatar
      Fix liveness computations in BranchFolding. · d633abeb
      Jakob Stoklund Olesen authored
      The old code would look at kills and defs in one pass over the
      instruction operands, causing problems with this code:
      
        %R0<def>, %CPSR<def,dead> = tLSLri %R5<kill>, 2, pred:14, pred:%noreg
        %R0<def>, %CPSR<def,dead> = tADDrr %R4<kill>, %R0<kill>, pred:14, %pred:%noreg
      
      The last instruction kills and redefines %R0, so it is still live after
      the instruction.
      
      This caused a register scavenger crash when compiling 483.xalancbmk for
      armv6. I am not including a test case because it requires too much bad
      luck to expose this old bug.
      
      First you need to convince the register allocator to use %R0 twice on
      the tADDrr instruction, then you have to convince BranchFolding to do
      something that causes it to run the register scavenger on he bad block.
      
      <rdar://problem/9898200>
      
      llvm-svn: 136973
      d633abeb
    • Chandler Carruth's avatar
      Temporarily revert r135528 which distinguishes between two copies of one · 81b7e11c
      Chandler Carruth authored
      inlined variable, based on the discussion in PR10542.
      
      This explodes the runtime of several passes down the pipeline due to
      a large number of "copies" remaining live across a large function. This
      only shows up with both debug and opt, but when it does it creates
      a many-minute compile when self-hosting LLVM+Clang. There are several
      other cases that show these types of regressions.
      
      All of this is tracked in PR10542, and progress is being made on fixing
      the issue. Once its addressed, the re-instated, but until then this
      restores the performance for self-hosting and other opt+debug builds.
      
      Devang, let me know if this causes any trouble, or impedes fixing it in
      any way, and thanks for working on this!
      
      llvm-svn: 136953
      81b7e11c
  7. Aug 04, 2011
Loading