Skip to content
Snippets Groups Projects
  1. Jun 03, 2010
    • 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
    • Jakob Stoklund Olesen's avatar
      Add full register <imp-def> operands when the coalescer is creating partial · 42c642cd
      Jakob Stoklund Olesen authored
      register updates.
      
      These operands tell the spiller that the other parts of the partially defined
      register are don't-care, and a reload is not necessary.
      
      llvm-svn: 105361
      42c642cd
    • Bill Wendling's avatar
      Compulsive reformating. No functionalitical changes. · 7ee730eb
      Bill Wendling authored
      llvm-svn: 105359
      7ee730eb
    • Jakob Stoklund Olesen's avatar
      Slightly change the meaning of the reMaterialize target hook when the original · a8ad9774
      Jakob Stoklund Olesen authored
      instruction defines subregisters.
      
      Any existing subreg indices on the original instruction are preserved or
      composed with the new subreg index.
      
      Also substitute multiple operands mentioning the original register by using the
      new MachineInstr::substituteRegister() function. This is necessary because there
      will soon be <imp-def> operands added to non read-modify-write partial
      definitions. This instruction:
      
        %reg1234:foo = FLAP %reg1234<imp-def>
      
      will reMaterialize(%reg3333, bar) like this:
      
        %reg3333:bar-foo = FLAP %reg333:bar<imp-def>
      
      Finally, replace the TargetRegisterInfo pointer argument with a reference to
      indicate that it cannot be NULL.
      
      llvm-svn: 105358
      a8ad9774
  2. Jun 02, 2010
  3. Jun 01, 2010
  4. May 31, 2010
  5. May 30, 2010
  6. May 29, 2010
  7. May 28, 2010
  8. May 27, 2010
Loading