Skip to content
  1. Nov 18, 2013
  2. Nov 17, 2013
    • David Blaikie's avatar
      Remove unnecessary temporary construction. · 2c8d5ec1
      David Blaikie authored
      llvm-svn: 194981
      2c8d5ec1
    • David Blaikie's avatar
      Remove redundant explicit default initialization. · 3c0e6bbc
      David Blaikie authored
      llvm-svn: 194980
      3c0e6bbc
    • David Blaikie's avatar
      DwarfCompileUnit: Add type safety to createGlobalVariableDIE · a781b25b
      David Blaikie authored
      llvm-svn: 194979
      a781b25b
    • Manman Ren's avatar
      Debug Info: fix typo in function name. · b46e550a
      Manman Ren authored
      llvm-svn: 194975
      b46e550a
    • Manman Ren's avatar
      Debug Info Verifier: fix when to find debug info nodes and when to verify them. · c9e395e9
      Manman Ren authored
      We used to collect debug info MDNodes in doInitialization and verify them in
      doFinalization. That is incorrect since MDNodes can be modified by passes run
      between doInitialization and doFinalization.
      
      To fix the problem, we handle debug info MDNodes that can be reached from a
      function in runOnFunction (i.e we collect those nodes by calling processDeclare,
      processValue and processLocation, and then verify them in runOnFunction).
      
      We handle debug info MDNodes that can be reached from named metadata in
      doFinalization. This is in line with how Verifier handles module-level data
      (they are verified in doFinalization).
      
      rdar://15472296
      
      llvm-svn: 194974
      c9e395e9
    • Manman Ren's avatar
      Debug Info Verifier: enable public functions of Finder to update the type map. · 2085cccf
      Manman Ren authored
      We used to depend on running processModule before the other public functions
      such as processDeclare, processValue and processLocation. We are now relaxing
      the constraint by adding a module argument to the three functions and
      letting the three functions to initialize the type map. This will be used in
      a follow-on patch that collects nodes reachable from a Function.
      
      llvm-svn: 194973
      2085cccf
    • NAKAMURA Takumi's avatar
      Utils/LoopUnroll.cpp: Tweak (StringRef)OldName to be valid until it is used, since r194601. · f9c8339a
      NAKAMURA Takumi authored
      eraseFromParent() invalidates OldName.
      
      llvm-svn: 194970
      f9c8339a
    • Hal Finkel's avatar
      Add a loop rerolling flag to the PassManagerBuilder · 29aeb205
      Hal Finkel authored
      This adds a boolean member variable to the PassManagerBuilder to control loop
      rerolling (just like we have for unrolling and the various vectorization
      options). This is necessary for control by the frontend. Loop rerolling remains
      disabled by default at all optimization levels.
      
      llvm-svn: 194966
      29aeb205
    • Bill Wendling's avatar
      Revert "Micro-optimization" · 25b61dba
      Bill Wendling authored
      This reverts commit f1d9fe9d04ce93f6d5dcebbd2cb6a07414d7a029.
      
      This was causing PR17964. We need to use thread data before regular data.
      
      llvm-svn: 194960
      25b61dba
    • Benjamin Kramer's avatar
    • Michael Gottesman's avatar
      [block-freq] Add BlockFrequency::scale that returns a remainder from the... · 4d078a3d
      Michael Gottesman authored
      [block-freq] Add BlockFrequency::scale that returns a remainder from the division and make the private scale in BlockFrequency more performant.
      
      This change is the first in a series of changes improving LLVM's Block
      Frequency propogation implementation to not lose probability mass in
      branchy code when propogating block frequency information from a basic
      block to its successors. This patch is a simple infrastructure
      improvement that does not actually modify the block frequency
      algorithm. The specific changes are:
      
      1. Changes the division algorithm used when scaling block frequencies by
      branch probabilities to a short division algorithm. This gives us the
      remainder for free as well as provides a nice speed boost. When I
      benched the old routine and the new routine on a Sandy Bridge iMac with
      disabled turbo mode performing 8192 iterations on an array of length
      32768, I saw ~600% increase in speed in mean/median performance.
      
      2. Exposes a scale method that returns a remainder. This is important so
      we can ensure that when we scale a block frequency by some branch
      probability BP = N/D, the remainder from the division by D can be
      retrieved and propagated to other children to ensure no probability mass
      is lost (more to come on this).
      
      llvm-svn: 194950
      4d078a3d
    • Matt Arsenault's avatar
      Use more getZExtOrTruncs · 64283bd9
      Matt Arsenault authored
      llvm-svn: 194945
      64283bd9
    • Matt Arsenault's avatar
      Use getZExtOrTrunc instead of repeating the same logic. · 873bb3ea
      Matt Arsenault authored
      llvm-svn: 194944
      873bb3ea
    • Hal Finkel's avatar
      Add the cold attribute to error-reporting call sites · 66cd3f1b
      Hal Finkel authored
      Generally speaking, control flow paths with error reporting calls are cold.
      So far, error reporting calls are calls to perror and calls to fprintf,
      fwrite, etc. with stderr as the stream. This can be extended in the future.
      
      The primary motivation is to improve block placement (the cold attribute
      affects the static branch prediction heuristics).
      
      llvm-svn: 194943
      66cd3f1b
    • Andrew Trick's avatar
      Added a size field to the stack map record to handle subregister spills. · 10d5be4e
      Andrew Trick authored
      Implementing this on bigendian platforms could get strange. I added a
      target hook, getStackSlotRange, per Jakob's recommendation to make
      this as explicit as possible.
      
      llvm-svn: 194942
      10d5be4e
    • Hal Finkel's avatar
      Fix ndebug-build unused variable in loop rerolling · 67107ea1
      Hal Finkel authored
      llvm-svn: 194941
      67107ea1
    • Matt Arsenault's avatar
      Use right address space pointer size · 36f5eb59
      Matt Arsenault authored
      llvm-svn: 194940
      36f5eb59
    • Hal Finkel's avatar
      Add a loop rerolling pass · bf45efde
      Hal Finkel authored
      This adds a loop rerolling pass: the opposite of (partial) loop unrolling. The
      transformation aims to take loops like this:
      
      for (int i = 0; i < 3200; i += 5) {
        a[i]     += alpha * b[i];
        a[i + 1] += alpha * b[i + 1];
        a[i + 2] += alpha * b[i + 2];
        a[i + 3] += alpha * b[i + 3];
        a[i + 4] += alpha * b[i + 4];
      }
      
      and turn them into this:
      
      for (int i = 0; i < 3200; ++i) {
        a[i] += alpha * b[i];
      }
      
      and loops like this:
      
      for (int i = 0; i < 500; ++i) {
        x[3*i] = foo(0);
        x[3*i+1] = foo(0);
        x[3*i+2] = foo(0);
      }
      
      and turn them into this:
      
      for (int i = 0; i < 1500; ++i) {
        x[i] = foo(0);
      }
      
      There are two motivations for this transformation:
      
        1. Code-size reduction (especially relevant, obviously, when compiling for
      code size).
      
        2. Providing greater choice to the loop vectorizer (and generic unroller) to
      choose the unrolling factor (and a better ability to vectorize). The loop
      vectorizer can take vector lengths and register pressure into account when
      choosing an unrolling factor, for example, and a pre-unrolled loop limits that
      choice. This is especially problematic if the manual unrolling was optimized
      for a machine different from the current target.
      
      The current implementation is limited to single basic-block loops only. The
      rerolling recognition should work regardless of how the loop iterations are
      intermixed within the loop body (subject to dependency and side-effect
      constraints), but the significant restriction is that the order of the
      instructions in each iteration must be identical. This seems sufficient to
      capture all current use cases.
      
      This pass is not currently enabled by default at any optimization level.
      
      llvm-svn: 194939
      bf45efde
  3. Nov 16, 2013
Loading