1. Feb 06, 2019
    • Sanjay Patel's avatar
      [x86] vectorize cast ops in lowering to avoid register file transfers · e84fbb67
      Sanjay Patel authored
      The proposal in D56796 may cross the line because we're trying to avoid vectorization 
      transforms in generic DAG combining. So this is an alternate, later, x86-specific 
      translation of that patch.
      
      There are several potential follow-ups to enhance this:
      1. Allow extraction from non-zero element index.
      2. Peek through extends of smaller width integers.
      3. Support x86-specific conversion opcodes like X86ISD::CVTSI2P
      
      Differential Revision: https://reviews.llvm.org/D56864
      
      llvm-svn: 353302
      e84fbb67
    • Andrea Di Biagio's avatar
      [MCA] Speedup ResourceManager queries. NFCI · 02974728
      Andrea Di Biagio authored
      When a resource unit R is released, the ResourceManager notifies groups that
      contain R. Before this patch, the logic in method ResourceManager::release()
      implemented a potentially slow iterative search of dependent groups on the
      entire set of processor resources.
      This patch replaces that logic with a simpler (and often faster) lookup on array
      `Resource2Groups`.  This patch gives an average speedup of ~3-4% (observed on a
      release build when testing for target btver2).
      No functional change intended.
      
      llvm-svn: 353301
      02974728
    • George Rimar's avatar
      Recommit r353293 "[LLD][ELF] - Set DF_STATIC_TLS flag for i386 target." · ae54e58b
      George Rimar authored
      With the following changes:
      1) Compilation fix:
      std::atomic<bool> HasStaticTlsModel = false; ->
      std::atomic<bool> HasStaticTlsModel{false};
      
      2) Adjusted the comment in code.
      
      Initial commit message:
      
      DF_STATIC_TLS flag indicates that the shared object or executable
      contains code using a static thread-local storage scheme.
      
      Patch checks if IE/LE relocations were used to check if the code uses
      a static model. If so it sets the DF_STATIC_TLS flag.
      
      Differential revision: https://reviews.llvm.org/D57749
      ----
      Modified : /lld/trunk/ELF/Arch/X86.cpp
      Modified : /lld/trunk/ELF/Config.h
      Modified : /lld/trunk/ELF/SyntheticSections.cpp
      Added : /lld/trunk/test/ELF/Inputs/i386-static-tls-model1.s
      Added : /lld/trunk/test/ELF/Inputs/i386-static-tls-model2.s
      Added : /lld/trunk/test/ELF/Inputs/i386-static-tls-model3.s
      Added : /lld/trunk/test/ELF/Inputs/i386-static-tls-model4.s
      Added : /lld/trunk/test/ELF/i386-static-tls-model.s
      Modified : /lld/trunk/test/ELF/i386-tls-ie-shared.s
      Modified : /lld/trunk/test/ELF/tls-dynamic-i686.s
      Modified : /lld/trunk/test/ELF/tls-opt-iele-i686-nopic.s
      
      llvm-svn: 353299
      ae54e58b
    • Nico Weber's avatar
      gn build: Merge r353265, r353237 · da2bb5d5
      Nico Weber authored
      llvm-svn: 353298
      da2bb5d5
    • George Rimar's avatar
      Revert r353293 "[LLD][ELF] - Set DF_STATIC_TLS flag for i386 target." · 52fafcb9
      George Rimar authored
      It broke BB:
      http://lab.llvm.org:8011/builders/llvm-clang-lld-x86_64-scei-ps4-ubuntu-fast/builds/43450
      http://lab.llvm.org:8011/builders/lld-x86_64-freebsd/builds/27891
      
      Error is:
      tools/lld/ELF/Config.h:84:41: error: copying member subobject of type
      'std::atomic<bool>' invokes deleted constructor std::atomic<bool> HasStaticTlsModel = false;
      
      llvm-svn: 353297
      52fafcb9
    • Ilya Biryukov's avatar
      [clangd] Update dev dependencies of clangd-vscode · 8e42c622
      Ilya Biryukov authored
      Summary:
      The version bumps are a result of running `npm audit`, which found
      3 security issues in previous versions of our dependencies.
      
      Also add 'package-lock.json' to the repo, it's a common practice to
      check in those files into the repository to get consistent versions of
      dependencies when running on different machines.
      
      Reviewers: hokein
      
      Reviewed By: hokein
      
      Subscribers: dschuff, ioeric, MaskRay, jkorous, arphaman, kadircet, cfe-commits
      
      Tags: #clang
      
      Differential Revision: https://reviews.llvm.org/D57814
      
      llvm-svn: 353296
      8e42c622
    • Ilya Biryukov's avatar
      [clangd] Enable clangd on Objective-C in VSCode · 7a621551
      Ilya Biryukov authored
      Summary: Thanks to Andreas Ostermeyer for raising this on the mailing list.
      
      Reviewers: hokein
      
      Reviewed By: hokein
      
      Subscribers: ioeric, MaskRay, jkorous, arphaman, kadircet, cfe-commits
      
      Tags: #clang
      
      Differential Revision: https://reviews.llvm.org/D57813
      
      llvm-svn: 353295
      7a621551
    • Eugene Leviant's avatar
      Attempt to fix buildbot after r353289 · ef6eba24
      Eugene Leviant authored
      llvm-svn: 353294
      ef6eba24
    • George Rimar's avatar
      [LLD][ELF] - Set DF_STATIC_TLS flag for i386 target. · da60ad22
      George Rimar authored
      DF_STATIC_TLS flag indicates that the shared object or executable
      contains code using a static thread-local storage scheme.
      
      Patch checks if IE/LE relocations were used to check if the code uses
      a static model. If so it sets the DF_STATIC_TLS flag.
      
      Differential revision: https://reviews.llvm.org/D57749
      
      llvm-svn: 353293
      da60ad22
    • Clement Courbet's avatar
      [DAGCombine][NFC] GatherAllAliases should take a LSBaseSDNode. · 5a6712b6
      Clement Courbet authored
      GatherAllAliases only makes sense for LSBaseSDNode. Enforce it with
      static typing instead of runtime cast.
      
      llvm-svn: 353291
      5a6712b6
    • Max Kazantsev's avatar
      [NFC] Simplify check in guard widening · cd48ac36
      Max Kazantsev authored
      llvm-svn: 353290
      cd48ac36
    • Eugene Leviant's avatar
      [llvm-objcopy] Allow regular expressions in name comparison · f324f6dc
      Eugene Leviant authored
      Differential revision: https://reviews.llvm.org/D57517
      
      llvm-svn: 353289
      f324f6dc
    • James Henderson's avatar
      [DebugInfo]Print correct value for special opcode address increment · b6b5b1a5
      James Henderson authored
      The wrong variable was being used when printing the address increment in
      verbose output of .debug_line. This patch fixes this.
      
      Reviewed by: JDevlieghere
      
      Differential Revision: https://reviews.llvm.org/D57693
      
      llvm-svn: 353288
      b6b5b1a5
    • James Henderson's avatar
      [DebugInfo][llvm-symbolizer]Add some tests for edge cases when symbolizing · cd1424ae
      James Henderson authored
      This patch adds half a dozen new tests that test various edge cases in
      the behaviour of the symbolizer and DWARF data parsing. All of them test
      the current behaviour.
      
      Reviewed by: JDevlieghere, aprantl
      
      Differential Revision: https://reviews.llvm.org/D57741
      
      llvm-svn: 353286
      cd1424ae
    • Peter Smith's avatar
      [ELF][ARM] Add test case that will fail if toPlt() is removed [NFC] · aa192bb7
      Peter Smith authored
      When a thunk is created to a PLT entry, the call to the thunk is converted
      to a non-plt expression with fromPlt(). If the thunk becomes unusable we
      retarget the relocation back to its original target and try again. When we
      do this we need to make sure that we restore the PLT form of the expression
      with toPlt().
      
      This change adds a test case that will fail if toPlt() is removed. We need
      to have a call to a preemptible symbol defined within the link unit. If
      toPlt() is removed then the relocation to the thunk to the PLT entry for the
      preemptible symbol will be retargeted to the preemptible symbol itself
      instead of its PLT entry.
      
      Differential Revision: https://reviews.llvm.org/D57743
      
      llvm-svn: 353285
      aa192bb7
    • Haojian Wu's avatar
      [clangd] Add CLI flag "-clang-tidy" to enable/disable running clang-tidy checks. · ac6d2e1b
      Haojian Wu authored
      Reviewers: sammccall
      
      Subscribers: ilya-biryukov, ioeric, MaskRay, jkorous, arphaman, kadircet, cfe-commits
      
      Tags: #clang
      
      Differential Revision: https://reviews.llvm.org/D57746
      
      llvm-svn: 353284
      ac6d2e1b
    • Haojian Wu's avatar
      [clangd] Some minor fixes. · 5dcc66d0
      Haojian Wu authored
      Reviewers: ilya-biryukov
      
      Subscribers: ioeric, MaskRay, jkorous, arphaman, kadircet, cfe-commits
      
      Tags: #clang
      
      Differential Revision: https://reviews.llvm.org/D57755
      
      llvm-svn: 353283
      5dcc66d0
    • Roman Lebedev's avatar
      [yaml::BinaryRef] Slight perf tuning (for llvm-exegesis analysis mode) · 41828010
      Roman Lebedev authored
      Summary:
      llvm-exegesis uses this functionality to read it's benchmark dumps.
      This reading of `.yaml`s takes ~60% of runtime for 14656 benchmark points (i.e. one sweep over all x86 instructions),
      but only 30% of time for 3x as much benchmark points.
      
      In particular, this `BinaryRef` appears to be an obvious pain point.
      Without patch:
      ```
      $ perf stat -r 25 ./bin/llvm-exegesis -mode=analysis -analysis-epsilon=1.0 -benchmarks-file=/tmp/benchmarks-inverse_throughput-onefull.yaml -analysis-clusters-output-file="" -analysis-inconsistencies-output-file=/tmp/clusters-orig.html
      no exegesis target for x86_64-unknown-linux-gnu, using default
      Parsed 14656 benchmark points
      Printing sched class consistency analysis results to file '/tmp/clusters-orig.html'
      ...
      no exegesis target for x86_64-unknown-linux-gnu, using default
      Parsed 14656 benchmark points
      Printing sched class consistency analysis results to file '/tmp/clusters-orig.html'
      
       Performance counter stats for './bin/llvm-exegesis -mode=analysis -analysis-epsilon=1.0 -benchmarks-file=/tmp/benchmarks-inverse_throughput-onefull.yaml -analysis-clusters-output-file= -analysis-inconsistencies-output-file=/tmp/clusters-orig.html' (25 runs):
      
                  972.86 msec task-clock                #    0.994 CPUs utilized            ( +-  0.25% )
                      30      context-switches          #   30.774 M/sec                    ( +- 21.74% )
                       0      cpu-migrations            #    0.370 M/sec                    ( +- 67.81% )
                   11873      page-faults               # 12211.512 M/sec                   ( +-  0.00% )
              3898373408      cycles                    # 4009682.186 GHz                   ( +-  0.25% )  (83.12%)
               360399748      stalled-cycles-frontend   #    9.24% frontend cycles idle     ( +-  0.54% )  (83.24%)
              1099450483      stalled-cycles-backend    #   28.20% backend cycles idle      ( +-  0.59% )  (33.63%)
              4910528820      instructions              #    1.26  insn per cycle
                                                        #    0.22  stalled cycles per insn  ( +-  0.13% )  (50.21%)
              1111976775      branches                  # 1143726625.854 M/sec              ( +-  0.10% )  (66.77%)
                23248474      branch-misses             #    2.09% of all branches          ( +-  0.19% )  (83.29%)
      
                 0.97850 +- 0.00647 seconds time elapsed  ( +-  0.66% )
      ```
      With the patch:
      ```
      $ perf stat -r 25 ./bin/llvm-exegesis -mode=analysis -analysis-epsilon=1.0 -benchmarks-file=/tmp/benchmarks-inverse_throughput-onefull.yaml -analysis-clusters-output-file="" -analysis-inconsistencies-output-file=/tmp/clusters-new.html
      no exegesis target for x86_64-unknown-linux-gnu, using default
      Parsed 14656 benchmark points
      Printing sched class consistency analysis results to file '/tmp/clusters-new.html'
      ...
      no exegesis target for x86_64-unknown-linux-gnu, using default
      Parsed 14656 benchmark points
      Printing sched class consistency analysis results to file '/tmp/clusters-new.html'
      
       Performance counter stats for './bin/llvm-exegesis -mode=analysis -analysis-epsilon=1.0 -benchmarks-file=/tmp/benchmarks-inverse_throughput-onefull.yaml -analysis-clusters-output-file= -analysis-inconsistencies-output-file=/tmp/clusters-new.html' (25 runs):
      
                  905.29 msec task-clock                #    0.999 CPUs utilized            ( +-  0.11% )
                      15      context-switches          #   16.533 M/sec                    ( +- 32.27% )
                       0      cpu-migrations            #    0.000 K/sec
                   11873      page-faults               # 13121.789 M/sec                   ( +-  0.00% )
              3627759720      cycles                    # 4009283.100 GHz                   ( +-  0.11% )  (83.19%)
               370401480      stalled-cycles-frontend   #   10.21% frontend cycles idle     ( +-  0.22% )  (83.19%)
              1007114438      stalled-cycles-backend    #   27.76% backend cycles idle      ( +-  0.34% )  (33.62%)
              4414014304      instructions              #    1.22  insn per cycle
                                                        #    0.23  stalled cycles per insn  ( +-  0.08% )  (50.36%)
              1003751700      branches                  # 1109314021.971 M/sec              ( +-  0.07% )  (66.97%)
                24611010      branch-misses             #    2.45% of all branches          ( +-  0.10% )  (83.41%)
      
                 0.90593 +- 0.00105 seconds time elapsed  ( +-  0.12% )
      ```
      So this decreases the overall run time of llvm-exegesis analysis mode (on one sweep) by roughly -7%.
      
      To be noted, `BinaryRef::writeAsBinary()` change is the reason for the perf changes,
      usage of `llvm::isHexDigit()` instead of `isxdigit()` does not appear to have any perf impact,
      i have only changed it "for symmetry".
      
      `writeAsBinary()` change is correct, it produces identical de-hex-ified buffer, and the final output is thus identical:
      ```
      $ sha512sum /tmp/clusters-*
      db4bbd904fe8840853b589b032c5041bc060b91bcd9c27b914b56581fbc473550eea74b852238c79963b5adf2419f379e9f5db76784048b48e3937f9f3e732bf  /tmp/clusters-new.html
      db4bbd904fe8840853b589b032c5041bc060b91bcd9c27b914b56581fbc473550eea74b852238c79963b5adf2419f379e9f5db76784048b48e3937f9f3e732bf  /tmp/clusters-orig.html
      ```
      
      Reviewers: silvas, espindola, sbc100, zturner, courbet, gchatelet
      
      Reviewed By: gchatelet
      
      Subscribers: tschuett, RKSimon, llvm-commits
      
      Tags: #llvm
      
      Differential Revision: https://reviews.llvm.org/D57699
      
      llvm-svn: 353282
      41828010
    • Aleksandr Urakov's avatar
      [x64] Process the B field of the REX prefix correctly for the PUSH and POP · 823c66b6
      Aleksandr Urakov authored
      instructions
      
      Summary: This patch makes `x86AssemblyInspectionEngine` to process zero value of
      the `B` field of the `REX` prefix in a correct way for `PUSH` and `POP`
      instructions. MSVC sometimes emits `pushq %rbp` instruction as `0x40 0x55`, and
      it was not parsed correctly before.
      
      Reviewers: jasonmolenda, labath
      
      Reviewed By: jasonmolenda, labath
      
      Subscribers: abidh, lldb-commits
      
      Tags: #lldb
      
      Differential Revision: https://reviews.llvm.org/D57745
      
      llvm-svn: 353281
      823c66b6
    • Jan Kratochvil's avatar
      Fix strlen() of unbound array undefined behavior · bb3609e4
      Jan Kratochvil authored
      LLDB testsuite fails when built by GCC8 on:
        LLDB :: SymbolFile/DWARF/find-basic-namespace.cpp
      
      This is because this code in LLDB codebase has undefined behavior:
      
        #include <algorithm>
        #include <string.h>
        // lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp:1731
        static struct section_64 {
          char sectname[16];
          char segname[16];
        } sect64 = { {'_','_','a','p','p','l','e','_','n','a','m','e','s','p','a','c'}, "__DWARF" };
        int main() {
          return std::min<size_t>(strlen(sect64.sectname), sizeof(sect64.sectname));
        }
      
      It has been discussed as a (false) bugreport to GCC:
        wrong-code: LLDB testcase fails: SymbolFile/DWARF/find-basic-namespace.cpp
        https://bugzilla.redhat.com/show_bug.cgi?id=1672436
      
      Differential Revision: https://reviews.llvm.org/D57781
      
      llvm-svn: 353280
      bb3609e4
    • Fangrui Song's avatar
      b8ee8c85
    • Max Kazantsev's avatar
      [NFC] Factor out detatchment of dead blocks from their erasing · 36b392cb
      Max Kazantsev authored
      llvm-svn: 353277
      36b392cb
    • Max Kazantsev's avatar
      a4ccfc18
    • Max Kazantsev's avatar
      [NFC] Revert rL353274 · 0d7ad3c9
      Max Kazantsev authored
      llvm-svn: 353275
      0d7ad3c9
    • Max Kazantsev's avatar
      61e6ffc3
    • Max Kazantsev's avatar
      [NFC] Replace readonly SmallVectorImpl with ArrayRef · bad4db8b
      Max Kazantsev authored
      llvm-svn: 353273
      bad4db8b
    • David L. Jones's avatar
      [wasm-ld] Fix wasm trace test to use %t for temporary files. · 4c3ba384
      David L. Jones authored
      llvm-svn: 353272
      4c3ba384
    • Jonas Devlieghere's avatar
      [Reproducers] lldb-instr: tool to generate instrumentation macros. · edff5f4b
      Jonas Devlieghere authored
      This patch introduces a new tool called 'lldb-instr'. It automates the
      workflow of inserting LLDB_RECORD and LLDB_REGSITER macros for
      instrumentation.
      
      Because the tool won't be part of the build process, I didn't want to
      over-complicate it. SB_RECORD macros are inserted in place, while
      SB_REGISTER macros are printed to stdout, and have to be manually copied
      into the Registry's constructor. Additionally, the utility makes no
      attempt to properly format the inserted macros. Please use clang-format
      to format the changes after running the tool.
      
      Differential revision: https://reviews.llvm.org/D56822
      
      llvm-svn: 353271
      edff5f4b
    • Teresa Johnson's avatar
      [HotColdSplit] Move splitting after instrumented PGO use · 716abbeb
      Teresa Johnson authored
      Summary:
      Follow up to D57082 which moved splitting earlier in the pipeline, in
      order to perform it before inlining. However, it was moved too early,
      before the IR is annotated with instrumented PGO data. This caused the
      splitting to incorrectly determine cold functions.
      
      Move it to just after PGO annotation (still before inlining), in both
      pass managers.
      
      Reviewers: vsk, hiraditya, sebpop
      
      Subscribers: mehdi_amini, llvm-commits
      
      Tags: #llvm
      
      Differential Revision: https://reviews.llvm.org/D57805
      
      llvm-svn: 353270
      716abbeb
    • Jason Molenda's avatar
      Add a warning to GDBRemoteRegisterContext (if packet logging enabled) · 8130bf67
      Jason Molenda authored
      if the size of the g packet response was smaller than expected and is
      going to be ignored.
      
      llvm-svn: 353269
      8130bf67
    • Petr Hosek's avatar
      [CMake] Unify scripts for generating VCS headers · 23fdd5a3
      Petr Hosek authored
      Previously, there were two different scripts for generating VCS headers:
      one used by LLVM and one used by Clang and lldb. They were both similar,
      but different. They were both broken in their own ways, for example the
      one used by Clang didn't properly handle monorepo resulting in an
      incorrect version information reported by Clang.
      
      This change unifies two the scripts by introducing a new script that's
      used from both LLVM, Clang and lldb, ensures that the new script
      supports both monorepo and standalone SVN and Git setups, and removes
      the old scripts.
      
      Differential Revision: https://reviews.llvm.org/D57063
      
      llvm-svn: 353268
      23fdd5a3
    • Philip Reames's avatar
    • Philip Reames's avatar
      b5bb4a4e
    • Richard Trieu's avatar
      Move DomTreeUpdater from IR to Analysis · 5f436fc5
      Richard Trieu authored
      DomTreeUpdater depends on headers from Analysis, but is in IR.  This is a
      layering violation since Analysis depends on IR.  Relocate this code from IR
      to Analysis to fix the layering violation.
      
      llvm-svn: 353265
      5f436fc5
    • Sam Clegg's avatar
      [WebAssembly] Implement --trace and --trace-symbol · 1f3f774f
      Sam Clegg authored
      Differential Revision: https://reviews.llvm.org/D57725
      
      llvm-svn: 353264
      1f3f774f
    • Fangrui Song's avatar
      [PPC64] Delete the unnecessary __tls_get_addr from ppc64-tls-ld-le.s · c1950aa1
      Fangrui Song authored
      The definition is harmful here as it suppresses R_PPC64_REL24 which is
      supposed to follow R_PPC64_TLSLD.
      
      llvm-svn: 353263
      c1950aa1
    • Fangrui Song's avatar
      [PPC64] Set the number of relocations processed for R_PPC64_TLS[GL]D to 2 · f55e9a2d
      Fangrui Song authored
      Summary:
      R_PPC64_TLSGD and R_PPC64_TLSLD are used as markers on TLS code sequences. After GD-to-IE or GD-to-LE relaxation, the next relocation R_PPC64_REL24 should be skipped to not create a false dependency on __tls_get_addr. When linking statically, the false dependency may cause an "undefined symbol: __tls_get_addr" error.
      
      R_PPC64_GOT_TLSGD16_HA
      R_PPC64_GOT_TLSGD16_LO
      R_PPC64_TLSGD R_TLSDESC_CALL
      R_PPC64_REL24 __tls_get_addr
      
      Reviewers: ruiu, sfertile, syzaara, espindola
      
      Reviewed By: sfertile
      
      Subscribers: emaste, nemanjai, arichardson, kbarton, jsji, llvm-commits, tamur
      
      Tags: #llvm
      
      Differential Revision: https://reviews.llvm.org/D57673
      
      llvm-svn: 353262
      f55e9a2d
    • Evgeniy Stepanov's avatar
      [sanitizer] Fix fuchsia and windows build. · 54c82886
      Evgeniy Stepanov authored
      llvm-svn: 353261
      54c82886
    • Heejin Ahn's avatar
      [WebAssembly] Add atomics target option · bab85979
      Heejin Ahn authored
      Reviewers: tlively
      
      Subscribers: dschuff, sbc100, jgravelle-google, sunfish, jfb, cfe-commits
      
      Tags: #clang
      
      Differential Revision: https://reviews.llvm.org/D57798
      
      llvm-svn: 353260
      bab85979
    • Jonas Devlieghere's avatar
      [Reproducers] Add instrumentation to Xcode project · 7b3a0f17
      Jonas Devlieghere authored
      llvm-svn: 353259
      7b3a0f17