Skip to content
  1. Jun 26, 2008
  2. Jun 24, 2008
    • Bill Wendling's avatar
      This situation can occur: · c44659b9
      Bill Wendling authored
          ,------.
          |      |
          |      v
          |   t2 = phi ... t1 ...
          |      |
          |      v
          |   t1 = ...
          |  ... = ... t1 ...
          |      |
          `------'
      
      where there is a use in a PHI node that's a predecessor to the defining
      block. We don't want to mark all predecessors as having the value "alive" in
      this case. Also, the assert was too restrictive and didn't handle this case.
      
      llvm-svn: 52655
      c44659b9
  3. Apr 16, 2008
    • Evan Cheng's avatar
      Rewrite LiveVariable liveness computation. The new implementation is much... · e45b8f89
      Evan Cheng authored
      Rewrite LiveVariable liveness computation. The new implementation is much simplified. It eliminated the nasty recursive routines and removed the partial def / use bookkeeping. There is also potential for performance improvement by replacing the conservative handling of partial physical register definitions. The code is currently disabled until live interval analysis is taught of the name scheme.
      
      This patch also fixed a couple of nasty corner cases.
      
      llvm-svn: 49784
      e45b8f89
  4. Apr 02, 2008
    • Evan Cheng's avatar
      Now that I am told MachineRegisterInfo also tracks physical register uses /... · d8616064
      Evan Cheng authored
      Now that I am told MachineRegisterInfo also tracks physical register uses / defs, I can do away with the horribleness I introduced a while back. It's impossible to detect if there is any use of a physical register below an instruction (and before any def of the register) with some cheap book keeping.
      
      llvm-svn: 49105
      d8616064
  5. Mar 19, 2008
    • Evan Cheng's avatar
      Fix live variables issues: · 44c0b4f7
      Evan Cheng authored
      1. If part of a register is re-defined, an implicit kill and an implicit def are added to denote read / mod / write. However, this should only be necessary if the register is actually read later. This is a performance issue.
      2. If a sub-register is being defined, and it doesn't have a previous use, do not add a implicit kill to the last use of a super-register:
         = EAX, AX<imp-use,kill>
      ...
      AX =
      In this case, EAX is live but AX is killed, this is wrong and will cause the coalescer to do bad things.
      
      llvm-svn: 48521
      44c0b4f7
  6. Mar 05, 2008
  7. Feb 21, 2008
  8. Feb 20, 2008
  9. Feb 10, 2008
  10. Feb 05, 2008
  11. Jan 24, 2008
  12. Jan 15, 2008
  13. Jan 07, 2008
  14. Dec 31, 2007
    • Chris Lattner's avatar
      Rename SSARegMap -> MachineRegisterInfo in keeping with the idea · a10fff51
      Chris Lattner authored
      that "machine" classes are used to represent the current state of
      the code being compiled.  Given this expanded name, we can start 
      moving other stuff into it.  For now, move the UsedPhysRegs and
      LiveIn/LoveOuts vectors from MachineFunction into it.
      
      Update all the clients to match.
      
      This also reduces some needless #includes, such as MachineModuleInfo
      from MachineFunction.
      
      llvm-svn: 45467
      a10fff51
    • Chris Lattner's avatar
      Add new shorter predicates for testing machine operands for various types: · a5bb370a
      Chris Lattner authored
      e.g. MO.isMBB() instead of MO.isMachineBasicBlock().  I don't plan on 
      switching everything over, so new clients should just start using the 
      shorter names.
      
      Remove old long accessors, switching everything over to use the short
      accessor: getMachineBasicBlock() -> getMBB(), 
      getConstantPoolIndex() -> getIndex(), setMachineBasicBlock -> setMBB(), etc.
      
      llvm-svn: 45464
      a5bb370a
  15. Dec 30, 2007
  16. Dec 29, 2007
  17. Nov 17, 2007
    • Evan Cheng's avatar
      Live interval splitting: · 8e223793
      Evan Cheng authored
      When a live interval is being spilled, rather than creating short, non-spillable
      intervals for every def / use, split the interval at BB boundaries. That is, for
      every BB where the live interval is defined or used, create a new interval that
      covers all the defs and uses in the BB.
      
      This is designed to eliminate one common problem: multiple reloads of the same
      value in a single basic block. Note, it does *not* decrease the number of spills
      since no copies are inserted so the split intervals are *connected* through
      spill and reloads (or rematerialization). The newly created intervals can be
      spilled again, in that case, since it does not span multiple basic blocks, it's
      spilled in the usual manner. However, it can reuse the same stack slot as the
      previously split interval.
      
      This is currently controlled by -split-intervals-at-bb.
      
      llvm-svn: 44198
      8e223793
  18. Nov 08, 2007
  19. Nov 05, 2007
  20. Sep 14, 2007
  21. Sep 13, 2007
  22. Sep 12, 2007
  23. Aug 01, 2007
  24. Jul 21, 2007
  25. Jul 17, 2007
  26. Jun 27, 2007
  27. Jun 26, 2007
  28. May 14, 2007
  29. May 08, 2007
  30. May 03, 2007
  31. May 02, 2007
Loading