Skip to content
  1. Mar 03, 2011
  2. Mar 02, 2011
  3. Mar 01, 2011
    • Devang Patel's avatar
    • Devang Patel's avatar
      Today, the language front ends produces llvm.dbg.* intrinsics, used to encode... · 40eee1e9
      Devang Patel authored
      Today, the language front ends produces llvm.dbg.* intrinsics, used to encode arguments' debug info, in order any way, most of the times. However, if a front end mix-n-matches llvm.dbg.declare and llvm.dbg.value intrinsics to encode debug info for arguments then code generator needs a way to find argument order.
      
      Use 8 bits from line number field to keep track of argument ordering while encoding debug info for an argument. That leaves 24 bit for line no, DebugLoc also allocates 24 bit for line numbers. If a function has more than 255 arguments then rest of the arguments will be ordered by llvm.dbg.* intrinsics' ordering in IR.
      
      llvm-svn: 126793
      40eee1e9
    • Cameron Zwarich's avatar
      Stop computing the number of uses twice per value in CodeGenPrepare's sinking of · b7f8eaaf
      Cameron Zwarich authored
      addressing code. On 403.gcc this almost halves CodeGenPrepare time and reduces
      total llc time by 9.5%. Unfortunately, getNumUses() is still the hottest function
      in llc.
      
      llvm-svn: 126782
      b7f8eaaf
    • Jakob Stoklund Olesen's avatar
      Keep track of which stage produced a live range, and bypass earlier stages when revisiting. · 5f9f081d
      Jakob Stoklund Olesen authored
      This effectively disables the 'turbo' functionality of the greedy register
      allocator where all new live ranges created by splitting would be reconsidered
      as if they were originals.
      
      There are two reasons for doing this, 1. It guarantees that the algorithm
      terminates. Early versions were prone to infinite looping in certain corner
      cases. 2. It is a 2x speedup. We can skip a lot of unnecessary interference
      checks that won't lead to good splitting anyway.
      
      The problem is that region splitting only gets one shot, so it should probably
      be changed to target multiple physical registers at once.
      
      Local live range splitting is still 'turbo' enabled. It only accounts for a
      small fraction of compile time, so it is probably not necessary to do anything
      about that.
      
      llvm-svn: 126781
      5f9f081d
Loading