Skip to content
  1. Aug 03, 2012
  2. Aug 02, 2012
    • Manman Ren's avatar
      X86 Peephole: fold loads to the source register operand if possible. · ba8122cc
      Manman Ren authored
      Add more comments and use early returns to reduce nesting in isLoadFoldable.
      Also disable folding for V_SET0 to avoid introducing a const pool entry and
      a const pool load.
      
      rdar://10554090 and rdar://11873276
      
      llvm-svn: 161207
      ba8122cc
    • 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
      Verify regunit intervals along with virtreg intervals. · 637c4675
      Jakob Stoklund Olesen authored
      Don't cause regunit intervals to be computed just to verify them. Only
      check the already cached intervals.
      
      llvm-svn: 161183
      637c4675
    • Jakob Stoklund Olesen's avatar
      Avoid creating dangling physreg live ranges during DCE. · 374071dd
      Jakob Stoklund Olesen authored
      LiveRangeEdit::eliminateDeadDefs() can delete a dead instruction that
      reads unreserved physregs. This would leave the corresponding regunit
      live interval dangling because we don't have shrinkToUses() for physical
      registers.
      
      Fix this problem by turning the instruction into a KILL instead of
      deleting it. This happens in a landing pad in
      test/CodeGen/X86/2012-05-19-CoalescerCrash.ll:
      
        %vreg27<def,dead> = COPY %EDX<kill>; GR32:%vreg27
      
      becomes:
      
        KILL %EDX<kill>
      
      An upcoming fix to the machine verifier will catch problems like this by
      verifying regunit live intervals.
      
      This fixes PR13498. I am not including the test case from the PR since
      we already have one exposing the problem once the verifier is fixed.
      
      llvm-svn: 161182
      374071dd
    • Jakob Stoklund Olesen's avatar
      Add report() functions that take a LiveInterval argument. · bde5dc5e
      Jakob Stoklund Olesen authored
      llvm-svn: 161178
      bde5dc5e
    • Manman Ren's avatar
      X86 Peephole: fold loads to the source register operand if possible. · 5759d012
      Manman Ren authored
      Machine CSE and other optimizations can remove instructions so folding
      is possible at peephole while not possible at ISel.
      
      This patch is a rework of r160919 and was tested on clang self-host on my local
      machine.
      
      rdar://10554090 and rdar://11873276
      
      llvm-svn: 161152
      5759d012
    • Jakob Stoklund Olesen's avatar
      Extract some methods from verifyLiveIntervals. · e736b97e
      Jakob Stoklund Olesen authored
      No functional change.
      
      llvm-svn: 161149
      e736b97e
    • Jakob Stoklund Olesen's avatar
      Also verify RegUnit intervals at uses. · a766b474
      Jakob Stoklund Olesen authored
      llvm-svn: 161147
      a766b474
    • 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
  3. Aug 01, 2012
  4. Jul 31, 2012
  5. Jul 30, 2012
Loading