Skip to content
  1. Jun 15, 2010
    • Bob Wilson's avatar
      Fix a comment typo. · 5947573f
      Bob Wilson authored
      llvm-svn: 106015
      5947573f
    • Bob Wilson's avatar
      Add some missing checks for the case where the extract_subregs are · de94e662
      Bob Wilson authored
      combined to an insert_subreg, i.e., where the destination register is larger
      than the source.  We need to check that the subregs can be composed for that
      case in a symmetrical way to the case when the destination is smaller.
      
      llvm-svn: 106004
      de94e662
    • Jakob Stoklund Olesen's avatar
      Avoid processing early clobbers twice in RegAllocFast. · 246e9a07
      Jakob Stoklund Olesen authored
      Early clobbers defining a virtual register were first alocated to a physreg and
      then processed as a physreg EC, spilling the virtreg.
      
      This fixes PR7382.
      
      llvm-svn: 105998
      246e9a07
    • Jakob Stoklund Olesen's avatar
      Add CoalescerPair helper class. · 82eca35b
      Jakob Stoklund Olesen authored
      Given a copy instruction, CoalescerPair can determine which registers to
      coalesce in order to eliminate the copy. It deals with all the subreg fun to
      determine a tuple (DstReg, SrcReg, SubIdx) such that:
      
      - SrcReg is a virtual register that will disappear after coalescing.
      - DstReg is a virtual or physical register whose live range will be extended.
      - SubIdx is 0 when DstReg is a physical register.
      - SrcReg can be joined with DstReg:SubIdx.
      
      CoalescerPair::isCoalescable() determines if another copy instruction is
      compatible with the same tuple. This fixes some NEON miscompilations where
      shuffles are getting coalesced as if they were copies.
      
      The CoalescerPair class will replace a lot of the spaghetti logic in JoinCopy
      later.
      
      llvm-svn: 105997
      82eca35b
    • Bob Wilson's avatar
      Generalize the pre-coalescing of extract_subregs feeding reg_sequences, · a55b8877
      Bob Wilson authored
      replacing the overly conservative checks that I had introduced recently to
      deal with correctness issues.  This makes a pretty noticable difference
      in our testcases where reg_sequences are used.  I've updated one test to
      check that we no longer emit the unnecessary subreg moves.
      
      llvm-svn: 105991
      a55b8877
    • Ted Kremenek's avatar
      Update CMake build. · d52caa52
      Ted Kremenek authored
      llvm-svn: 105987
      d52caa52
  2. Jun 14, 2010
  3. Jun 12, 2010
  4. Jun 11, 2010
  5. Jun 10, 2010
  6. Jun 09, 2010
  7. Jun 08, 2010
  8. Jun 07, 2010
  9. Jun 05, 2010
  10. Jun 04, 2010
  11. Jun 03, 2010
    • Dan Gohman's avatar
      Fix SimplifyDemandedBits' AssertZext logic to demand all the bits. It · d83e3e77
      Dan Gohman authored
      needs to demand the high bits because it's asserting that they're zero.
      
      llvm-svn: 105406
      d83e3e77
    • Bob Wilson's avatar
      Revert 105308. · 30093b5d
      Bob Wilson authored
      llvm-svn: 105399
      30093b5d
    • Bill Wendling's avatar
      Machine sink could potentially sink instructions into a block where the physical · f82aea63
      Bill Wendling authored
      registers it defines then interfere with an existing preg live range.
      
      For instance, if we had something like these machine instructions:
      
      BB#0
        ... = imul ... EFLAGS<imp-def,dead>
        test ..., EFLAGS<imp-def>
        jcc BB#2 EFLAGS<imp-use>
      
      BB#1
        ... ; fallthrough to BB#2
      
      BB#2
        ... ; No code that defines EFLAGS
        jcc ... EFLAGS<imp-use>
      
      Machine sink will come along, see that imul implicitly defines EFLAGS, but
      because it's "dead", it assumes that it can move imul into BB#2. But when it
      does, imul's "dead" imp-def of EFLAGS is raised from the dead (a zombie) and
      messes up the condition code for the jump (and pretty much anything else which
      relies upon it being correct).
      
      The solution is to know which pregs are live going into a basic block. However,
      that information isn't calculated at this point. Nor does the LiveVariables pass
      take into account non-allocatable physical registers. In lieu of this, we do a
      *very* conservative pass through the basic block to determine if a preg is live
      coming out of it.
      
      llvm-svn: 105387
      f82aea63
    • Eric Christopher's avatar
      One underscore, not two. · f67fe3b1
      Eric Christopher authored
      llvm-svn: 105379
      f67fe3b1
    • Eli Friedman's avatar
      Implement expansion in type legalization for add/sub with overflow. The · dbbbf73c
      Eli Friedman authored
      expansion is the same as that used by LegalizeDAG.
      
      The resulting code sucks in terms of performance/codesize on x86-32 for a
      64-bit operation; I haven't looked into whether different expansions might be
      better in general.
      
      llvm-svn: 105378
      dbbbf73c
    • Jakob Stoklund Olesen's avatar
      Use the fast register allocator by default for -O0 builds. · 4029596f
      Jakob Stoklund Olesen authored
      This affects both llvm-gcc and clang.
      
      llvm-svn: 105372
      4029596f
    • Jakob Stoklund Olesen's avatar
      Use readsWritesVirtualRegister instead of counting uses and defs when inserting · 818e4df2
      Jakob Stoklund Olesen authored
      spills and reloads.
      
      This means that a partial define of a register causes a reload so the other
      parts of the register are preserved.
      
      The reload can be prevented by adding an <imp-def> operand for the full
      register. This is already done by the coalescer and live interval analysis where
      relevant.
      
      llvm-svn: 105369
      818e4df2
Loading