Skip to content
  1. Nov 17, 2013
    • Hal Finkel's avatar
      Add -freroll-loops to enable loop rerolling · ce0697f4
      Hal Finkel authored
      This adds -freroll-loops (and -fno-reroll-loops in the usual way) to enable
      loop rerolling as part of the optimization pass manager. This transformation
      can enable vectorization, reduce code size (or both).
      
      Briefly, loop rerolling can transform a loop 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];
      }
      
      into this:
      
      for (int i = 0; i < 3200; ++i) {
        a[i] += alpha * b[i];
      }
      
      Loop rerolling is currently disabled by default at all optimization levels.
      
      llvm-svn: 194967
      ce0697f4
    • 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
    • Anders Waldenborg's avatar
      python: Fix check for disasm creation failure · 01af07a1
      Anders Waldenborg authored
      Check should be for pointer being NULL, not what it points to.
      
      Also adds a test for this case.
      
      Reviewed By: indygreg
      
      Differential Revision: http://llvm-reviews.chandlerc.com/D1878
      
      llvm-svn: 194965
      01af07a1
    • Anders Waldenborg's avatar
      python: Properly initialize before trying to create disasm · 6a105e99
      Anders Waldenborg authored
      As the "LLVMInitializeAll*" functions are not available as symbols in
      the shared library they can't be used, and as a workaround a list of
      the targets is kept and the individual symbols tried. As soon as the
      "All"-functions are changed to proper symbols (as opposed to static
      inlines in the headers) this hack will be replace with simple calls
      to the corresponding "LLVMInitializeAll*" functions.
      
      Reviewed By: indygreg
      
      CC: llvm-commits
      
      Differential Revision: http://llvm-reviews.chandlerc.com/D1879
      
      llvm-svn: 194964
      6a105e99
    • Alexey Samsonov's avatar
      [ASan] Build ASan on Windows only if MSVC is used · be9d20b7
      Alexey Samsonov authored
      llvm-svn: 194963
      be9d20b7
    • Alp Toker's avatar
      Update CREDITS · ad72aa05
      Alp Toker authored
      llvm-svn: 194962
      ad72aa05
    • Bill Wendling's avatar
      Testcase for PR17964 · 1ead4a48
      Bill Wendling authored
      llvm-svn: 194961
      1ead4a48
    • 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
    • Alexey Samsonov's avatar
    • Yaron Keren's avatar
      DebugLoc defines LineCol as 32 bit in comment but unsigned in code. · 9c131c1f
      Yaron Keren authored
      This patch modifies LineCol to be a uint32_t.
      
      See http://llvm.org/bugs/show_bug.cgi?id=17957
      
      llvm-svn: 194957
      9c131c1f
    • Sylvestre Ledru's avatar
      Fixes a typo and changes references to the function clang_displayDiagnostic... · d29d97c7
      Sylvestre Ledru authored
      Fixes a typo and changes references to the function clang_displayDiagnostic (which was removed in r96823) to clang_formatDiagnostics.
      
      Patch by David Wiberg
      
      llvm-svn: 194956
      d29d97c7
    • Alexey Samsonov's avatar
      [DFSan] Don't include public headers in dfsan runtime code · 4985d527
      Alexey Samsonov authored
      Summary:
      Definitions we use in public sanitizer headers may
      slightly conflict with the ones we use in private sanitizer runtimes.
      Moreover, we generally forbid to include any system headers (like <stdint.h>)
      in sanitizer runtime headers. This leads to inevitable duplication of selected
      interface function declarations, but we decided to live with it.
      
      Reviewers: pcc
      
      Reviewed By: pcc
      
      CC: kcc, llvm-commits
      
      Differential Revision: http://llvm-reviews.chandlerc.com/D2179
      
      llvm-svn: 194955
      4985d527
    • Hao Liu's avatar
      Implement vreinterpret ACLE functions in Clang. · 9e49704f
      Hao Liu authored
      llvm-svn: 194954
      9e49704f
    • Anton Yartsev's avatar
      [analyzer] Better modeling of memcpy by the CStringChecker (PR16731). · 968c60a5
      Anton Yartsev authored
      New rules of invalidation/escape of the source buffer of memcpy: the source buffer contents is invalidated and escape while the source buffer region itself is neither invalidated, nor escape.
      In the current modeling of memcpy the information about allocation state of regions, accessible through the source buffer, is not copied to the destination buffer and we can not track the allocation state of those regions anymore. So we invalidate/escape the source buffer indirect regions in anticipation of their being invalidated for real later. This eliminates false-positive leaks reported by the unix.Malloc and alpha.cplusplus.NewDeleteLeaks checkers for the cases like
      
      char *f() {
        void *x = malloc(47);
        char *a;
        memcpy(&a, &x, sizeof a);
        return a;
      }
      
      llvm-svn: 194953
      968c60a5
    • Hao Liu's avatar
      Fix the problem that the arm_neon.h can't be used in a cpp file. Also fix a... · 90ee2f1f
      Hao Liu authored
      Fix the problem that the arm_neon.h can't be used in a cpp file. Also fix a minor bug with poly64 name mangling.
      
      llvm-svn: 194952
      90ee2f1f
    • Richard Smith's avatar
      Tests for core issue 241-250. · 3cde3d24
      Richard Smith authored
      llvm-svn: 194951
      3cde3d24
    • 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
    • Tobias Grosser's avatar
      Fix 80 column violation · e5f00c8b
      Tobias Grosser authored
      Found by clang-format.
      
      llvm-svn: 194949
      e5f00c8b
    • Tobias Grosser's avatar
      IslCodegen: Support for run-time conditions · 54ee0ba7
      Tobias Grosser authored
      llvm-svn: 194948
      54ee0ba7
    • Chandler Carruth's avatar
      [PM] Completely remove support for explicit 'require' methods on the · a8df4760
      Chandler Carruth authored
      AnalysisManager. All this method did was assert something and we have
      a perfectly good way to trigger that assert from the query path.
      
      llvm-svn: 194947
      a8df4760
    • Richard Smith's avatar
      Tests for core issues 224-240. · 7101fd0e
      Richard Smith authored
      llvm-svn: 194946
      7101fd0e
    • 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
    • Fariborz Jahanian's avatar
      ObjectiveC ARC. More validation of toll-free bridging of · 2c312128
      Fariborz Jahanian authored
      CF objects with objc_bridge'ing annotaiton.
      // rdar://15454846
      
      llvm-svn: 194938
      2c312128
  2. Nov 16, 2013
Loading