Skip to content
  1. Feb 04, 2011
    • Andrew Trick's avatar
      Introducing a new method of tracking register pressure. We can't · d0548ae7
      Andrew Trick authored
      precisely track pressure on a selection DAG, but we can at least keep
      it balanced. This design accounts for various interesting aspects of
      selection DAGS: register and subregister copies, glued nodes, dead
      nodes, unused registers, etc.
      
      Added SUnit::NumRegDefsLeft and ScheduleDAGSDNodes::RegDefIter.
      
      Note: I disabled PrescheduleNodesWithMultipleUses when register
      pressure is enabled, based on no evidence other than I don't think it
      makes sense to have both enabled.
      
      llvm-svn: 124853
      d0548ae7
  2. Dec 24, 2010
    • Andrew Trick's avatar
      Fix a few cases where the scheduler is not checking for phys reg copies. The... · c9405669
      Andrew Trick authored
      Fix a few cases where the scheduler is not checking for phys reg copies. The scheduling node may have a NULL DAG node, yuck.
      
      llvm-svn: 122544
      c9405669
    • Andrew Trick's avatar
      Various bits of framework needed for precise machine-level selection · 10ffc2b6
      Andrew Trick authored
      DAG scheduling during isel. Most new functionality is currently
      guarded by -enable-sched-cycles and -enable-sched-hazard.
      
      Added InstrItineraryData::IssueWidth field, currently derived from
      ARM itineraries, but could be initialized differently on other targets.
      
      Added ScheduleHazardRecognizer::MaxLookAhead to indicate whether it is
      active, and if so how many cycles of state it holds.
      
      Added SchedulingPriorityQueue::HasReadyFilter to allowing gating entry
      into the scheduler's available queue.
      
      ScoreboardHazardRecognizer now accesses the ScheduleDAG in order to
      get information about it's SUnits, provides RecedeCycle for bottom-up
      scheduling, correctly computes scoreboard depth, tracks IssueCount, and
      considers potential stall cycles when checking for hazards.
      
      ScheduleDAGRRList now models machine cycles and hazards (under
      flags). It tracks MinAvailableCycle, drives the hazard recognizer and
      priority queue's ready filter, manages a new PendingQueue, properly
      accounts for stall cycles, etc.
      
      llvm-svn: 122541
      10ffc2b6
  3. Dec 20, 2010
  4. Jun 30, 2010
  5. May 17, 2010
  6. Apr 13, 2010
  7. Jan 05, 2010
  8. Nov 20, 2009
  9. Nov 12, 2009
  10. Nov 03, 2009
  11. Sep 30, 2009
  12. Aug 22, 2009
  13. Aug 11, 2009
  14. Jul 24, 2009
  15. Feb 11, 2009
    • Dan Gohman's avatar
      When scheduling a block in parts, keep track of the overall · dfaf646c
      Dan Gohman authored
      instruction index across each part. Instruction indices are used
      to make live range queries, and live ranges can extend beyond
      scheduling region boundaries.
      
      Refactor the ScheduleDAGSDNodes class some more so that it
      doesn't have to worry about this additional information.
      
      llvm-svn: 64288
      dfaf646c
    • Dan Gohman's avatar
      Use iterators to iterate through the Preds array instead of · 27fa408b
      Dan Gohman authored
      an index. This code is on the hot-path because the current
      way SDep edges are uniqued has quadratic complexity.
      
      llvm-svn: 64262
      27fa408b
    • Dan Gohman's avatar
      Factor out more code for computing register live-range informationfor · b9543435
      Dan Gohman authored
      scheduling, and generalize is so that preserves state across
      scheduling regions. This fixes incorrect live-range information around
      terminators and labels, which are effective region boundaries.
      
      In place of looking for terminators to anchor inter-block dependencies,
      introduce special entry and exit scheduling units for this purpose.
      
      llvm-svn: 64254
      b9543435
  16. 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
  17. Jan 15, 2009
  18. Jan 13, 2009
  19. Jan 05, 2009
  20. Dec 23, 2008
  21. Dec 22, 2008
  22. Dec 20, 2008
  23. Dec 17, 2008
  24. Dec 16, 2008
    • Dan Gohman's avatar
      Fix some register-alias-related bugs in the post-RA scheduler liveness · dddc1ac7
      Dan Gohman authored
      computation code. Also, avoid adding output-depenency edges when both
      defs are dead, which frequently happens with EFLAGS defs.
      
      Compute Depth and Height lazily, and always in terms of edge latency
      values. For the schedulers that don't care about latency, edge latencies
      are set to 1.
      
      Eliminate Cycle and CycleBound, and LatencyPriorityQueue's Latencies array.
      These are all subsumed by the Depth and Height fields.
      
      llvm-svn: 61073
      dddc1ac7
    • Dan Gohman's avatar
      Move addPred and removePred out-of-line. · e3a6351f
      Dan Gohman authored
      llvm-svn: 61067
      e3a6351f
  25. 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
    • Dan Gohman's avatar
      Whitespace cleanups. · 7d329740
      Dan Gohman authored
      llvm-svn: 60769
      7d329740
  26. Nov 25, 2008
  27. Nov 21, 2008
  28. Nov 20, 2008
    • Dan Gohman's avatar
      Add #include <climits> to get the definition of INT_MAX. · 866b0348
      Dan Gohman authored
      llvm-svn: 59692
      866b0348
    • Dan Gohman's avatar
      Factor out the code for verifying the work of the scheduler, · 4ce15e12
      Dan Gohman authored
      extend it a bit, and make use of it in all schedulers, to
      ensure consistent checking.
      
      llvm-svn: 59689
      4ce15e12
    • 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