Skip to content
  1. Jan 16, 2009
    • Dan Gohman's avatar
      Instead of adding dependence edges between terminator instructions · 5f8a2598
      Dan Gohman authored
      and every other instruction in their blocks to keep the terminator
      instructions at the end, teach the post-RA scheduler how to operate
      on ranges of instructions, and exclude terminators from the range
      of instructions that get scheduled.
      
      Also, exclude mid-block labels, such as EH_LABEL instructions, and
      schedule code before them separately from code after them. This
      fixes problems with the post-RA scheduler moving code past
      EH_LABELs.
      
      llvm-svn: 62366
      5f8a2598
  2. Jan 15, 2009
    • Dan Gohman's avatar
      Move a few containers out of ScheduleDAGInstrs::BuildSchedGraph · 619ef48a
      Dan Gohman authored
      and into the ScheduleDAGInstrs class, so that they don't get
      destructed and re-constructed for each block. This fixes a
      compile-time hot spot in the post-pass scheduler.
      
      To help facilitate this, tidy and do some minor reorganization
      in the scheduler constructor functions.
      
      llvm-svn: 62275
      619ef48a
  3. Dec 23, 2008
    • Dan Gohman's avatar
      Clean up the atomic opcodes in SelectionDAG. · 12f24904
      Dan Gohman authored
      This removes all the _8, _16, _32, and _64 opcodes and replaces each
      group with an unsuffixed opcode. The MemoryVT field of the AtomicSDNode
      is now used to carry the size information. In tablegen, the size-specific
      opcodes are replaced by size-independent opcodes that utilize the
      ability to compose them with predicates.
      
      This shrinks the per-opcode tables and makes the code that handles
      atomics much more concise.
      
      llvm-svn: 61389
      12f24904
    • Dan Gohman's avatar
      Rename BuildSchedUnits to BuildSchedGraph, and refactor the · 04543e71
      Dan Gohman authored
      code in ScheduleDAGSDNodes' BuildSchedGraph into separate functions.
      
      llvm-svn: 61376
      04543e71
    • Dan Gohman's avatar
      Use isTerminator() instead of isBranch()||isReturn() in · 072e52f1
      Dan Gohman authored
      several places. isTerminator() returns true for a superset
      of cases, and includes things like FP_REG_KILL, which are
      nither return or branch but aren't safe to move/remat/etc.
      
      llvm-svn: 61373
      072e52f1
  4. Dec 16, 2008
  5. Dec 09, 2008
    • Dan Gohman's avatar
      Rewrite the SDep class, and simplify some of the related code. · 2d170896
      Dan Gohman authored
      The Cost field is removed. It was only being used in a very limited way,
      to indicate when the scheduler should attempt to protect a live register,
      and it isn't really needed to do that. If we ever want the scheduler to
      start inserting copies in non-prohibitive situations, we'll have to
      rethink some things anyway.
      
      A Latency field is added. Instead of giving each node a single
      fixed latency, each edge can have its own latency. This will eventually
      be used to model various micro-architecture properties more accurately.
      
      The PointerIntPair class and an internal union are now used, which
      reduce the overall size.
      
      llvm-svn: 60806
      2d170896
  6. Dec 08, 2008
  7. Dec 04, 2008
  8. Nov 24, 2008
  9. Nov 21, 2008
  10. Nov 20, 2008
    • Dan Gohman's avatar
      Treat mid-block labels the same as terminators when building the · 22e9677a
      Dan Gohman authored
      MachineInstr scheduling DAG, meaning they implicitly depend on all
      preceding defs. This fixes Benchmarks/Shootout-C++/except and
      Regression/C++/EH/simple_rethrow in
        -relocation-model=pic -disable-post-RA-scheduler=false
      mode.
      
      llvm-svn: 59747
      22e9677a
    • Dan Gohman's avatar
      Experimental post-pass scheduling support. Post-pass scheduling · 60cb69e6
      Dan Gohman authored
      is currently off by default, and can be enabled with
      -disable-post-RA-scheduler=false.
      
      This doesn't have a significant impact on most code yet because it doesn't
      yet do anything to address anti-dependencies and it doesn't attempt to
      disambiguate memory references. Also, several popular targets
      don't have pipeline descriptions yet.
      
      The majority of the changes here are splitting the SelectionDAG-specific
      code out of ScheduleDAG, so that ScheduleDAG can be moved to
      libLLVMCodeGen.a. The interface between ScheduleDAG-using code and
      the rest of the scheduling code is somewhat rough and will evolve.
      
      llvm-svn: 59676
      60cb69e6
Loading