Skip to content
  1. 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
  2. Oct 04, 2012
  3. Aug 11, 2012
  4. Aug 10, 2012
  5. 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
  6. Aug 07, 2012
  7. 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
  8. Aug 01, 2012
  9. Jul 31, 2012
  10. Jul 30, 2012
  11. Jul 28, 2012
  12. 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