Skip to content
  1. May 29, 2012
  2. May 28, 2012
  3. May 27, 2012
  4. May 25, 2012
  5. May 24, 2012
  6. May 23, 2012
  7. May 22, 2012
  8. May 17, 2012
  9. May 16, 2012
  10. May 15, 2012
    • Jim Grosbach's avatar
      TableGen'erate mapping physical registers to encoding values. · 97609a84
      Jim Grosbach authored
      Many targets always use the same bitwise encoding value for physical
      registers in all (or most) instructions. Add this mapping to the
      .td files and TableGen'erate the information and expose an accessor
      in MCRegisterInfo.
      
      patch by Tom Stellard.
      
      llvm-svn: 156829
      97609a84
    • Jakob Stoklund Olesen's avatar
      Create a struct representing register units in TableGen. · 095f22af
      Jakob Stoklund Olesen authored
      Besides the weight, we also want to store up to two root registers per
      unit. Most units will have a single root, the leaf register they
      represent. Units created for ad hoc aliasing get two roots: The two
      aliasing registers.
      
      The root registers can be used to compute the set of overlapping
      registers.
      
      llvm-svn: 156792
      095f22af
  11. May 14, 2012
    • Jakob Stoklund Olesen's avatar
      Consider ad hoc aliasing when building RegUnits. · 066fba1a
      Jakob Stoklund Olesen authored
      Register units can be used to compute if two registers overlap:
      
        A overlaps B iff units(A) intersects units(B).
      
      With this change, the above holds true even on targets that use ad hoc
      aliasing (currently only ARM). This means that register units can be
      used to implement regsOverlap() more efficiently, and the register
      allocator can use the concept to model interference.
      
      When there is no ad hoc aliasing, the register units correspond to the
      maximal cliques in the register overlap graph. This is optimal, no other
      register unit assignment can have fewer units.
      
      With ad hoc aliasing, weird things are possible, and we don't try too
      hard to compute the maximal cliques. The current approach is always
      correct, and it works very well (probably optimally) as long as the ad
      hoc aliasing doesn't have cliques larger than pairs. It seems unlikely
      that any target would need more.
      
      llvm-svn: 156763
      066fba1a
    • Jakob Stoklund Olesen's avatar
      Record the ad hoc aliasing graph in CodeGenRegister. · 534848b1
      Jakob Stoklund Olesen authored
      The ad hoc aliasing specified in the 'Aliases' list in .td files is
      currently only used by computeOverlaps(). It will soon be needed to
      build accurate register units as well, so build the undirected graph in
      CodeGenRegister::buildObjectGraph() instead.
      
      Aliasing is a symmetric relationship with only one direction specified
      in the .td files. Make sure both directions are represented in
      getExplicitAliases().
      
      llvm-svn: 156762
      534848b1
    • Jakob Stoklund Olesen's avatar
      Compute topological signatures of registers. · 50ecd0ff
      Jakob Stoklund Olesen authored
      TableGen creates new register classes and sub-register indices based on
      the sub-register structure present in the register bank. So far, it has
      been doing that on a per-register basis, but that is not very efficient.
      
      This patch teaches TableGen to compute topological signatures for
      registers, and use that to reduce the amount of redundant computation.
      Registers get the same TopoSig if they have identical sub-register
      structure.
      
      TopoSigs are not currently exposed outside TableGen.
      
      llvm-svn: 156761
      50ecd0ff
  12. May 12, 2012
  13. May 11, 2012
    • Bill Wendling's avatar
      Remove extraneous ; and the resulting warning. · 393f432d
      Bill Wendling authored
      llvm-svn: 156649
      393f432d
    • Jakob Stoklund Olesen's avatar
      Defer computation of SuperRegs. · 3f3eb180
      Jakob Stoklund Olesen authored
      Don't compute the SuperRegs list until the sub-register graph is
      completely finished. This guarantees that the list of super-registers is
      properly topologically ordered, and has no duplicates.
      
      llvm-svn: 156629
      3f3eb180
    • Jakob Stoklund Olesen's avatar
      Compute secondary sub-registers. · c08df9e5
      Jakob Stoklund Olesen authored
      The sub-registers explicitly listed in SubRegs in the .td files form a
      tree. In a complicated register bank, it is possible to have
      sub-register relationships across sub-trees. For example, the ARM NEON
      double vector Q0_Q1 is a tree:
      
        Q0_Q1 = [Q0, Q1],  Q0 = [D0, D1], Q1 = [D2, D3]
      
      But we also define the DPair register D1_D2 = [D1, D2] which is fully
      contained in Q0_Q1.
      
      This patch teaches TableGen to find such sub-register relationships, and
      assign sub-register indices to them. In the example, TableGen will
      create a dsub_1_dsub_2 sub-register index, and add D1_D2 as a
      sub-register of Q0_Q1.
      
      This will eventually enable the coalescer to handle copies of skewed
      sub-registers.
      
      llvm-svn: 156587
      c08df9e5
  14. May 10, 2012
  15. May 06, 2012
  16. May 05, 2012
    • Jakob Stoklund Olesen's avatar
      Order register classes by spill size first, members last. · 4fd600b6
      Jakob Stoklund Olesen authored
      This is still a topological ordering such that every register class gets
      a smaller enum value than its sub-classes.
      
      Placing the smaller spill sizes first makes a difference for the
      super-register class bit masks. When looking for a super-register class,
      we usually want the smallest possible kind of super-register. That is
      now available as the first bit set in the bit mask.
      
      llvm-svn: 156222
      4fd600b6
  17. May 04, 2012
Loading