Skip to content
  1. Jun 15, 2013
    • Andrew Trick's avatar
      Machine Model: Add MicroOpBufferSize and resource BufferSize. · de2109eb
      Andrew Trick authored
      Replace the ill-defined MinLatency and ILPWindow properties with
      with straightforward buffer sizes:
      MCSchedMode::MicroOpBufferSize
      MCProcResourceDesc::BufferSize
      
      These can be used to more precisely model instruction execution if desired.
      
      Disabled some misched tests temporarily. They'll be reenabled in a few commits.
      
      llvm-svn: 184032
      de2109eb
  2. Apr 27, 2013
  3. Apr 03, 2013
  4. Apr 02, 2013
    • Jakob Stoklund Olesen's avatar
      Count processor resources individually in MachineTraceMetrics. · 3ca14772
      Jakob Stoklund Olesen authored
      The new instruction scheduling models provide information about the
      number of cycles consumed on each processor resource. This makes it
      possible to estimate ILP more accurately than simply counting
      instructions / issue width.
      
      The functions getResourceDepth() and getResourceLength() now identify
      the limiting processor resource, and return a cycle count based on that.
      
      This gives more precise resource information, particularly in traces
      that use one resource a lot more than others.
      
      llvm-svn: 178553
      3ca14772
  5. Mar 08, 2013
    • Jakob Stoklund Olesen's avatar
      Rename isEarlierInSameTrace to isUsefulDominator. · 299cedc7
      Jakob Stoklund Olesen authored
      In very rare cases caused by irreducible control flow, the dominating
      block can have the same trace head without actually being part of the
      trace.
      
      As long as such a dominator still has valid instruction depths, it is OK
      to use it for computing instruction depths.
      
      Rename the function to avoid lying, and add a check that instruction
      depths are computed for the dominator.
      
      llvm-svn: 176668
      299cedc7
  6. Jan 17, 2013
  7. Dec 03, 2012
    • Chandler Carruth's avatar
      Use the new script to sort the includes of every file under lib. · ed0881b2
      Chandler Carruth authored
      Sooooo many of these had incorrect or strange main module includes.
      I have manually inspected all of these, and fixed the main module
      include to be the nearest plausible thing I could find. If you own or
      care about any of these source files, I encourage you to take some time
      and check that these edits were sensible. I can't have broken anything
      (I strictly added headers, and reordered them, never removed), but they
      may not be the headers you'd really like to identify as containing the
      API being implemented.
      
      Many forward declarations and missing includes were added to a header
      files to allow them to parse cleanly when included first. The main
      module rule does in fact have its merits. =]
      
      llvm-svn: 169131
      ed0881b2
  8. Oct 11, 2012
  9. Oct 09, 2012
    • Jakob Stoklund Olesen's avatar
      Don't crash on extra evil irreducible control flow. · 9d1173a8
      Jakob Stoklund Olesen authored
      When the CFG contains a loop with multiple entry blocks, the traces
      computed by MachineTraceMetrics don't always have the same nice
      properties. Loop back-edges are normally excluded from traces, but
      MachineLoopInfo doesn't recognize loops with multiple entry blocks, so
      those back-edges may be included.
      
      Avoid asserting when that happens by adding an isEarlierInSameTrace()
      function that accurately determines if a dominating block is part of the
      same trace AND is above the currrent block in the trace.
      
      llvm-svn: 165434
      9d1173a8
  10. Oct 04, 2012
  11. Aug 11, 2012
  12. Aug 10, 2012
  13. Aug 09, 2012
    • Jakob Stoklund Olesen's avatar
      Deal with irreducible control flow when building traces. · bf1ac4bd
      Jakob Stoklund Olesen authored
      We filter out MachineLoop back-edges during the trace-building PO
      traversals, but it is possible to have CFG cycles that aren't natural
      loops, and MachineLoopInfo doesn't include such cycles.
      
      Use a standard visited set to detect such CFG cycles, and completely
      ignore them when picking traces.
      
      llvm-svn: 161532
      bf1ac4bd
  14. Aug 07, 2012
  15. Aug 02, 2012
    • Jakob Stoklund Olesen's avatar
      Compute the critical path length through a trace. · 5d30630e
      Jakob Stoklund Olesen authored
      Whenever both instruction depths and instruction heights are known in a
      block, it is possible to compute the length of the critical path as
      max(depth+height) over the instructions in the block.
      
      The stored live-in lists make it possible to accurately compute the
      length of a critical path that bypasses the current (small) block.
      
      llvm-svn: 161197
      5d30630e
    • Jakob Stoklund Olesen's avatar
      Compute instruction heights through a trace. · 2db6b653
      Jakob Stoklund Olesen authored
      The height on an instruction is the minimum number of cycles from the
      instruction is issued to the end of the trace. Heights are computed for
      all instructions in and below the trace center block.
      
      The method for computing heights is different from the depth
      computation. As we visit instructions in the trace bottom-up, heights of
      used instructions are pushed upwards. This way, we avoid scanning long
      use lists, looking for uses in the current trace.
      
      At each basic block boundary, a list of live-in registers and their
      minimum heights is saved in the trace block info. These live-in lists
      are used when restarting depth computations on a trace that
      converges with an already computed trace. They will also be used to
      accurately compute the critical path length.
      
      llvm-svn: 161138
      2db6b653
  16. Aug 01, 2012
  17. Jul 31, 2012
  18. Jul 30, 2012
  19. Jul 28, 2012
  20. Jul 26, 2012
    • Jakob Stoklund Olesen's avatar
      Use an otherwise unused variable. · 35400b1d
      Jakob Stoklund Olesen authored
      llvm-svn: 160798
      35400b1d
    • Jakob Stoklund Olesen's avatar
      Start scaffolding for a MachineTraceMetrics analysis pass. · f9029fef
      Jakob Stoklund Olesen authored
      This is still a work in progress.
      
      Out-of-order CPUs usually execute instructions from multiple basic
      blocks simultaneously, so it is necessary to look at longer traces when
      estimating the performance effects of code transformations.
      
      The MachineTraceMetrics analysis will pick a typical trace through a
      given basic block and provide performance metrics for the trace. Metrics
      will include:
      
      - Instruction count through the trace.
      - Issue count per functional unit.
      - Critical path length, and per-instruction 'slack'.
      
      These metrics can be used to determine the performance limiting factor
      when executing the trace, and how it will be affected by a code
      transformation.
      
      Initially, this will be used by the early if-conversion pass.
      
      llvm-svn: 160796
      f9029fef
Loading