Skip to content
  1. Nov 21, 2008
  2. Nov 13, 2008
  3. Oct 03, 2008
  4. Sep 21, 2008
  5. Aug 15, 2008
  6. Aug 05, 2008
    • Owen Anderson's avatar
      - Fix SelectionDAG to generate correct CFGs. · a102290b
      Owen Anderson authored
      - Add a basic machine-level dead block eliminator.
      
      These two have to go together, since many other parts of the code generator are unable to handle the unreachable blocks otherwise created.
      
      llvm-svn: 54333
      a102290b
  7. Jul 03, 2008
  8. Jun 27, 2008
  9. Jun 26, 2008
  10. 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
  11. 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
  12. 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
  13. 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
  14. Mar 05, 2008
  15. Feb 21, 2008
  16. Feb 20, 2008
  17. Feb 10, 2008
  18. Feb 05, 2008
  19. Jan 24, 2008
  20. Jan 15, 2008
  21. Jan 07, 2008
  22. 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
  23. Dec 30, 2007
  24. Dec 29, 2007
  25. 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
  26. Nov 08, 2007
  27. Nov 05, 2007
  28. Sep 14, 2007
  29. Sep 13, 2007
Loading