1. Jan 27, 2017
    • Artem Dergachev's avatar
      [analyzer] Consider function call arguments while building CallGraph. · 12caf8e1
      Artem Dergachev authored
      Function call can appear in the arguments of another function call, eg.:
      
        foo(bar());
      
      This patch adds support for such cases.
      
      Patch by Ivan Sidorenko!
      
      Differential revision: https://reviews.llvm.org/D28905
      
      llvm-svn: 293280
      12caf8e1
    • Simon Dardis's avatar
      [mips] Recommit: "N64 static relocation model support" · ca74dd79
      Simon Dardis authored
      This patch makes one change to GOT handling and two changes to N64's
      relocation model handling. Furthermore, the jumptable encodings have
      been corrected for static N64.
      
      Big GOT handling is now done via a new SDNode MipsGotHi - this node is
      unconditionally lowered to an lui instruction.
      
      The first change to N64's relocation handling is the lifting of the
      restriction that N64 always uses PIC. Now it is possible to target static
      environments.
      
      The second change adds support for 64 bit symbols and enables them by
      default. Previously N64 had patterns for sym32 mode only. In this mode all
      symbols are assumed to have 32 bit addresses. sym32 mode support
      is selectable with attribute 'sym32'. A follow on patch for clang will
      add the necessary frontend parameter.
      
      This partially resolves PR/23485.
      
      Thanks to Brooks Davis for reporting the issue!
      
      This version corrects a "Conditional jump or move depends on uninitialised
      value(s)" error detected by valgrind present in the original commit.
      
      Reviewers: dsanders, seanbruno, zoran.jovanovic, vkalintiris
      
      Differential Revision: https://reviews.llvm.org/D23652
      
      llvm-svn: 293279
      ca74dd79
    • Eugene Leviant's avatar
      [ELF] Fixed formatting. NFC · bcff495b
      Eugene Leviant authored
      llvm-svn: 293278
      bcff495b
    • Jonas Hahnfeld's avatar
      [libomptarget] Fix compilation with libc++ · cfe5ef58
      Jonas Hahnfeld authored
      iterator is only guaranteed to be default-constructible, without any argument.
      
      Differential Revision: https://reviews.llvm.org/D29171
      
      llvm-svn: 293277
      cfe5ef58
    • Eugene Leviant's avatar
      [ELF] Bypass section type check · 8b7cadcf
      Eugene Leviant authored
      Differential revision: https://reviews.llvm.org/D28761
      
      llvm-svn: 293276
      8b7cadcf
    • Simon Dardis's avatar
      [lld][mips] Correct tests for mips64 implying PIC. · 73190d39
      Simon Dardis authored
      Currently LLVM can only generate PIC code for MIPS64 with the N64 as
      it uses the idiom "isPositionIndependent() || IsABI_N64()" throughout the
      MIPS backend. r293164 changed this, causing test failures for LLD.
      
      This patch changes the tests minimally to preserve existing test coverage
      and one case where the test was "right" in the wrong circumstance.
      
      Reviewers: atanasyan
      
      Differential Revision: https://reviews.llvm.org/D29194
      
      llvm-svn: 293275
      73190d39
    • Alexey Bataev's avatar
      [SLP] Refactoring of horizontal reduction analysis, NFC. · 4015bf83
      Alexey Bataev authored
      Some checks in SLP horizontal reduction analysis function are performed
      several times, though it is enough to perform these checks only once
      during an initial attempt at adding candidate for the reduction
      instruction/reduced value.
      
      Differential Revision: https://reviews.llvm.org/D29175
      
      llvm-svn: 293274
      4015bf83
    • Chandler Carruth's avatar
      [LICM] When we are recomputing the alias sets for a subloop, we cannot · fd2d7c72
      Chandler Carruth authored
      skip sub-subloops.
      
      The logic to skip subloops dated from when this code was shared with the
      cached case. Once it was factored out to only run in the case of
      recomputed subloops it became a dangerous bug. If a subsubloop contained
      an interfering instruction it would be silently skipped from the alias
      sets for LICM.
      
      With the old pass manager this was extremely hard to trigger as it would
      require failing to visit these subloops with the LICM pass but then
      visiting the outer loop somehow. I've not yet contrived any test case
      that actually manages to trigger this.
      
      But with the new pass manager we don't do the cross-loop caching hack
      that the old PM does and so we recompute alias set information from
      first principles. While this seems much cleaner and simpler it exposed
      this bug and would subtly miscompile code due to failing to correctly
      model the aliasing constraints of deeply nested loops.
      
      llvm-svn: 293273
      fd2d7c72
    • Martin Probst's avatar
      clang-format: [JS] do not format MPEG transport streams. · fa37b18f
      Martin Probst authored
      Summary:
      The MPEG transport stream file format also uses ".ts" as its file extension.
      This change detects its specific framing format (0x47 every 189 bytes) and
      simply ignores MPEG TS files.
      
      Reviewers: djasper, sammccall
      
      Subscribers: klimek, cfe-commits
      
      Differential Revision: https://reviews.llvm.org/D29186
      
      llvm-svn: 293270
      fa37b18f
    • Boris Ulasevich's avatar
    • Jonas Paulsson's avatar
      [DAGTypeLegalizer] Handle SIGN/ZERO_EXTEND in WidenVecRes_Convert(). · bb0ed3e7
      Jonas Paulsson authored
      In case of a SIGN/ZERO_EXTEND of an incomplete vector type (using only a
      partial number of available vector elements), WidenVecRes_Convert() used to
      resort to scalarization.
      
      This patch adds a handling of the (common) case where an input vector can be
      found of same width as the widened result vector, by converting the node to
      SIGN/ZERO_EXTEND_VECTOR_INREG.
      
      Review: Eli Friedman
      llvm-svn: 293268
      bb0ed3e7
    • Diana Picus's avatar
      Revert "Implement a new clang-tidy check that suggests users replace dynamic... · 91415017
      Diana Picus authored
      Revert "Implement a new clang-tidy check that suggests users replace dynamic exception specifications with noexcept exception specifications."
      
      This reverts commit r293217, its follow-up 293218 and part of 293234 because it
      broke all bots that build clang-tools-extra.
      
      llvm-svn: 293267
      91415017
    • Adam Nemet's avatar
      [opt-viewer] Introduce global context · 572fca71
      Adam Nemet authored
      This is necessary since globals (max_hotness, caller_loc) need to be
      explicitly passed to the subprocesses.
      
      llvm-svn: 293266
      572fca71
    • Adam Nemet's avatar
      [opt-viewer] Remove message from the key · 07f1264b
      Adam Nemet authored
      This is causing problems because the rendering of the text will depend on
      varying global state to show relative hotness or a link in the inlining
      context.
      
      llvm-svn: 293265
      07f1264b
    • Adam Nemet's avatar
      [opt-viewer] Unique across the different jobs as well · 41cf9b27
      Adam Nemet authored
      llvm-svn: 293264
      41cf9b27
    • Adam Nemet's avatar
      [opt-viewer] Make sorting for the index page deterministic · 4f075e3c
      Adam Nemet authored
      Break the tie between entries with identical hotness deterministically.
      
      llvm-svn: 293263
      4f075e3c
    • Adam Nemet's avatar
      [opt-viewer] Include the function in the remark key · 742615e5
      Adam Nemet authored
      Avoid uniquing remarks with different the inlining context (Function).
      
      llvm-svn: 293262
      742615e5
    • Adam Nemet's avatar
      [opt-viewer] Put critical items in parallel · 55bfb497
      Adam Nemet authored
      Summary:
      Put opt-viewer critical items in parallel
      
      Patch by Brian Cain!
      
      Requires features from Python 2.7
      
      **Performance**
      Below are performance results across various configurations. These were taken on an i5-5200U (dual core + HT). They were taken with a small subset of the YAML output of building Python 3.6.0b3 with LTO+PGO. 60 YAML files.
      
      "multiprocessing" is the current submission contents. "baseline" is as of 544f14c6b2a07a94168df31833dba9dc35fd8289 (I think this is aka r287505).
      
      "ImportError" vs "class<...CLoader>" below are just confirming the expected configuration (with/without CLoader).
      
      The below was measured on AMD A8-5500B (4 cores) with 224 input YAML files, showing a ~1.75x speed increase over the baseline with libYAML.  I suspect it would scale well on high-end servers.
      
      ```
      **************************************** MULTIPROCESSING ****************************************
      PyYAML:
              Traceback (most recent call last):
                File "<string>", line 1, in <module>
              ImportError: cannot import name CLoader
              Python 2.7.10
      489.42user 5.53system 2:38.03elapsed 313%CPU (0avgtext+0avgdata 400308maxresident)k
      0inputs+31392outputs (0major+473540minor)pagefaults 0swaps
      
      PyYAML+libYAML:
              <class 'yaml.cyaml.CLoader'>
              Python 2.7.10
      78.69user 5.45system 0:32.63elapsed 257%CPU (0avgtext+0avgdata 398560maxresident)k
      0inputs+31392outputs (0major+542022minor)pagefaults 0swaps
      
      PyPy/PyYAML:
              Traceback (most recent call last):
                File "<builtin>/app_main.py", line 75, in run_toplevel
                File "<builtin>/app_main.py", line 601, in run_it
                File "<string>", line 1, in <module>
              ImportError: cannot import name 'CLoader'
              Python 2.7.9 (2.6.0+dfsg-3, Jul 04 2015, 05:43:17)
              [PyPy 2.6.0 with GCC 4.9.3]
      154.27user 8.12system 0:53.83elapsed 301%CPU (0avgtext+0avgdata 627960maxresident)k
      808inputs+30376outputs (0major+727994minor)pagefaults 0swaps
      **************************************** BASELINE        ****************************************
      PyYAML:
              Traceback (most recent call last):
                File "<string>", line 1, in <module>
              ImportError: cannot import name CLoader
              Python 2.7.10
              358.08user 4.05system 6:08.37elapsed 98%CPU (0avgtext+0avgdata 315004maxresident)k
      0inputs+31392outputs (0major+85252minor)pagefaults 0swaps
      
      PyYAML+libYAML:
              <class 'yaml.cyaml.CLoader'>
              Python 2.7.10
      50.32user 3.30system 0:56.59elapsed 94%CPU (0avgtext+0avgdata 307296maxresident)k
      0inputs+31392outputs (0major+79335minor)pagefaults 0swaps
      
      PyPy/PyYAML:
              Traceback (most recent call last):
                File "<builtin>/app_main.py", line 75, in run_toplevel
                File "<builtin>/app_main.py", line 601, in run_it
                File "<string>", line 1, in <module>
              ImportError: cannot import name 'CLoader'
              Python 2.7.9 (2.6.0+dfsg-3, Jul 04 2015, 05:43:17)
              [PyPy 2.6.0 with GCC 4.9.3]
      72.94user 5.18system 1:23.41elapsed 93%CPU (0avgtext+0avgdata 455312maxresident)k
      0inputs+30392outputs (0major+110280minor)pagefaults 0swaps
      
      ```
      
      Reviewers: fhahn, anemet
      
      Reviewed By: anemet
      
      Subscribers: llvm-commits, mehdi_amini
      
      Differential Revision: https://reviews.llvm.org/D26967
      
      llvm-svn: 293261
      55bfb497
    • Richard Trieu's avatar
      Fix unused variable warning. · 0b79aa33
      Richard Trieu authored
      llvm-svn: 293260
      0b79aa33
    • Saleem Abdulrasool's avatar
      ARM: fix vectorized division on WoA · 26c00e37
      Saleem Abdulrasool authored
      The Windows on ARM target uses custom division for normal division as
      the backend needs to insert division-by-zero checks.  However, it is
      designed to only handle non-vectorized division.  ARM has custom
      lowering for vectorized division as that can avoid loading registers
      with the values and invoke a division routine for each one, preferring
      to lower using NEON instructions.  Fall back to the custom lowering for
      the NEON instructions if we encounter a vectorized division.
      
      Resolves PR31778!
      
      llvm-svn: 293259
      26c00e37
    • Daniel Berlin's avatar
      NewGVN: Add basic dead and redundant store elimination · c479686a
      Daniel Berlin authored
      Summary:
      This adds basic dead and redundant store elimination to
      NewGVN.  Unlike our current DSE, it will happily do cross-block DSE if
      it meets our requirements.
      
      We get a bunch of DSE's simple.ll cases, and some stuff it doesn't.
      Unlike DSE, however, we only try to eliminate stores of the same value
      to the same memory location, not just general stores to the same
      memory location.
      
      Reviewers: davide
      
      Subscribers: llvm-commits
      
      Differential Revision: https://reviews.llvm.org/D29149
      
      llvm-svn: 293258
      c479686a
    • Saleem Abdulrasool's avatar
      Revert "DWARF: convert error logs to _LIBUNWIND_LOG" · 2b2f4dad
      Saleem Abdulrasool authored
      This reverts SVN r292721.  Avoid the use of the GNU extension as the
      preprocessor in C++11 mode requires at least one argument, and this
      warning cannot be disabled, resulting in failing -Werror builds.
      
      llvm-svn: 293257
      2b2f4dad
    • NAKAMURA Takumi's avatar
      NVPTXCodeGen: Add IPO to libdeps, since r293189. · 0d299191
      NAKAMURA Takumi authored
      llvm-svn: 293256
      0d299191
    • Tim Shen's avatar
      [APFloat] Reduce some dispatch boilerplates. NFC. · 601ba8c5
      Tim Shen authored
      Summary: This is an attempt to reduce the verbose manual dispatching code in APFloat. This doesn't handle multiple dispatch on single discriminator (e.g. APFloat::add(const APFloat&)), nor handles multiple dispatch on multiple discriminators (e.g. APFloat::convert()).
      
      Reviewers: hfinkel, echristo, jlebar
      
      Subscribers: mehdi_amini, llvm-commits
      
      Differential Revision: https://reviews.llvm.org/D29161
      
      llvm-svn: 293255
      601ba8c5
    • Richard Smith's avatar
      [docs] Add help text and refine grouping for various options. · c5b2e00d
      Richard Smith authored
      Also accept -G= (and -msmall-data-threshold=) as an alias for -G on MIPS as well as Hexagon.
      
      llvm-svn: 293254
      c5b2e00d
    • Justin Lebar's avatar
      [NVPTX] [InstCombine] Add llvm_unreachable to appease MSVC. · 25ebe2d7
      Justin Lebar authored
      llvm-svn: 293253
      25ebe2d7
    • Richard Smith's avatar
      Improve workaround for Sphinx's lack of support for command line options... · b2c82a69
      Richard Smith authored
      Improve workaround for Sphinx's lack of support for command line options containing '+', '.' etc. to be more stable as the set of options changes.
      
      llvm-svn: 293252
      b2c82a69
    • Justin Lebar's avatar
      [NVPTX] Fix use-after-stack-free bug in InstCombineCalls. · e3ac0fb9
      Justin Lebar authored
      Introduced in r293244.
      
      llvm-svn: 293251
      e3ac0fb9
    • Xin Tong's avatar
      Constant fold switch inst when looking for trivial conditions to unswitch on. · e5f8d643
      Xin Tong authored
      Summary: Constant fold switch inst when looking for trivial conditions to unswitch on.
      
      Reviewers: sanjoy, chenli, hfinkel, efriedma
      
      Subscribers: llvm-commits, mzolotukhin
      
      Differential Revision: https://reviews.llvm.org/D29037
      
      llvm-svn: 293250
      e5f8d643
    • Chandler Carruth's avatar
      [PM] Port LoopLoadElimination to the new pass manager and wire it into · baabda93
      Chandler Carruth authored
      the main pipeline.
      
      This is a very straight forward port. Nothing weird or surprising.
      
      This brings the number of missing passes from the new PM's pipeline down
      to three.
      
      llvm-svn: 293249
      baabda93
    • Quentin Colombet's avatar
      [ARM][LegalizerInfo] Specify the type of the opcode. · 89dbea06
      Quentin Colombet authored
      This is to fix the win7 bot that does not seem to be very
      good at infering the type when it gets used in an initiliazer list.
      
      llvm-svn: 293248
      89dbea06
    • Weiming Zhao's avatar
      [Builtin][ARM] Add Thumb1 support for aeabi_c{f,d}cmp.S and dcmp.S · 68e20da3
      Weiming Zhao authored
      Reviewers: compnerd, rengolin
      
      Reviewed By: rengolin
      
      Subscribers: aemerson, llvm-commits, mgorny
      
      Differential Revision: https://reviews.llvm.org/D28985
      
      llvm-svn: 293247
      68e20da3
    • Quentin Colombet's avatar
      [AArch64][LegalizerInfo] Specify the type of the opcode. · 24203cf9
      Quentin Colombet authored
      This is an attempt to fix the win7 bot that does not seem to be very
      good at infering the type when it gets used in an initiliazer list.
      
      llvm-svn: 293246
      24203cf9
    • Quentin Colombet's avatar
      Revert "[AArch64][LegalizerInfo] Specify the type of the initialization list." · e15e460c
      Quentin Colombet authored
      This reverts commit r293238.
      Even with that the win7 bot is still failing:
      http://lab.llvm.org:8011/builders/lld-x86_64-win7/builds/3862
      
      llvm-svn: 293245
      e15e460c
    • Justin Lebar's avatar
      [NVPTX] Upgrade NVVM intrinsics in InstCombineCalls. · 698c31b8
      Justin Lebar authored
      Summary:
      There are many NVVM intrinsics that we can't entirely get rid of, but
      that nonetheless often correspond to target-generic LLVM intrinsics.
      
      For example, if flush denormals to zero (ftz) is enabled, we can convert
      @llvm.nvvm.ceil.ftz.f to @llvm.ceil.f32.  On the other hand, if ftz is
      disabled, we can't do this, because @llvm.ceil.f32 will be lowered to a
      non-ftz PTX instruction.  In this case, we can, however, simplify the
      non-ftz nvvm ceil intrinsic, @llvm.nvvm.ceil.f, to @llvm.ceil.f32.
      
      These transformations are particularly useful because they let us
      constant fold instructions that appear in libdevice, the bitcode library
      that ships with CUDA and essentially functions as its libm.
      
      Reviewers: tra
      
      Subscribers: hfinkel, majnemer, llvm-commits
      
      Differential Revision: https://reviews.llvm.org/D28794
      
      llvm-svn: 293244
      698c31b8
    • Justin Lebar's avatar
      [ValueTracking] Add comment that CannotBeOrderedLessThanZero does the wrong thing for powi. · 322c127b
      Justin Lebar authored
      Summary:
      CannotBeOrderedLessThanZero(powi(x, exp)) returns true if
      CannotBeOrderedLessThanZero(x).  But powi(-0, exp) is negative if exp is
      odd, so we actually want to return SignBitMustBeZero(x).
      
      Except that also isn't right, because we want to return true if x is
      NaN, even if x has a negative sign bit.
      
      What we really need in order to fix this is a consistent approach in
      this function to handling the sign bit of NaNs.  Without this it's very
      difficult to say what the correct behavior here is.
      
      Reviewers: hfinkel, efriedma, sanjoy
      
      Subscribers: llvm-commits
      
      Differential Revision: https://reviews.llvm.org/D28927
      
      llvm-svn: 293243
      322c127b
    • Justin Lebar's avatar
      [LangRef] Make @llvm.sqrt(x) return undef, rather than have UB, for negative x. · cb9b41dd
      Justin Lebar authored
      Summary:
      Some frontends emit a speculate-and-select idiom for sqrt, wherein they compute
      sqrt(x), check if x is negative, and select NaN if it is:
      
        %cmp = fcmp olt double %a, -0.000000e+00
        %sqrt = call double @llvm.sqrt.f64(double %a)
        %ret = select i1 %cmp, double 0x7FF8000000000000, double %sqrt
      
      This is technically UB as the LangRef is written today if %a is ever less than
      -0.  But emitting code that's compliant with the current definition of sqrt
      would require a branch, which would then prevent us from matching this idiom in
      SelectionDAG (which we do today -- ISD::FSQRT has defined behavior on negative
      inputs), because SelectionDAG looks at one BB at a time.
      
      Nothing in LLVM takes advantage of this undefined behavior, as far as we can
      tell, and the fact that llvm.sqrt has UB dates from its initial addition to the
      LangRef.
      
      Reviewers: arsenm, mehdi_amini, hfinkel
      
      Subscribers: wdng, llvm-commits
      
      Differential Revision: https://reviews.llvm.org/D28797
      
      llvm-svn: 293242
      cb9b41dd
    • Chandler Carruth's avatar
      [PM] Flesh out almost all of the late loop passes. · a95ff389
      Chandler Carruth authored
      With this the per-module pass pipeline is *extremely* close to the
      legacy PM. The missing pieces are:
      - PruneEH (or some equivalent)
      - ArgumentPromotion
      - LoopLoadElimination
      - LoopUnswitch
      
      I'm going to work through those in essentially that order but this seems
      like a worthwhile incremental step toward the end state.
      
      One difference in what I have here from the legacy PM is that I've
      consolidated some of the per-function passes at the very end of the
      pipeline into the main optimization function pipeline. The intervening
      passes are *really* uninteresting and so this seems very likely to have
      any effect other than minor improvement to locality.
      
      Note that there are still some failures in the test suite, but the
      compiler doesn't crash or assert.
      
      Differential Revision: https://reviews.llvm.org/D29114
      
      llvm-svn: 293241
      a95ff389
    • Kostya Serebryany's avatar
      [libFuzzer] simplify the value profiling callback further: don't use (idx MOD... · 70182dea
      Kostya Serebryany authored
      [libFuzzer] simplify the value profiling callback further: don't use (idx MOD prime) on the hot path where it is useless anyway
      
      llvm-svn: 293239
      70182dea
    • Quentin Colombet's avatar
      [AArch64][LegalizerInfo] Specify the type of the initialization list. · 86fc8305
      Quentin Colombet authored
      This is an attempt to fix the win7 bot that does not seem to be very
      good at infering the type.
      
      llvm-svn: 293238
      86fc8305