1. Oct 17, 2019
    • Fangrui Song's avatar
      [llvm-ar] Implement the O modifier: display member offsets inside the archive · a69cc92c
      Fangrui Song authored
      Since GNU ar 2.31, the 't' operation prints member offsets beside file
      names if the 'O' modifier is specified. 'O' is ignored for thin
      archives.
      
      Reviewed By: gbreynoo, ruiu
      
      Differential Revision: https://reviews.llvm.org/D69087
      
      llvm-svn: 375106
      a69cc92c
    • Fangrui Song's avatar
      [llvm-objcopy] --add-symbol: fix crash if SHT_SYMTAB does not exist · 9dce25a9
      Fangrui Song authored
      Exposed by D69041. If SHT_SYMTAB does not exist, ELFObjcopy.cpp:handleArgs will crash due
      to a null pointer dereference.
      
        for (const NewSymbolInfo &SI : Config.ELF->SymbolsToAdd) {
          ...
          Obj.SymbolTable->addSymbol(
      
      Fix this by creating .symtab and .strtab on demand in ELFBuilder<ELFT>::readSections,
      if --add-symbol is specified.
      
      Reviewed By: grimar
      
      Differential Revision: https://reviews.llvm.org/D69093
      
      llvm-svn: 375105
      9dce25a9
    • Stephan Bergmann's avatar
      Include leading attributes in DeclStmt's SourceRange · dc3957ec
      Stephan Bergmann authored
      Differential Revision: https://reviews.llvm.org/D68581
      
      llvm-svn: 375104
      dc3957ec
    • Simon Pilgrim's avatar
      JumpThreadingPass::UnfoldSelectInstr - silence static analyzer dyn_cast<> null... · 3ec83e81
      Simon Pilgrim authored
      JumpThreadingPass::UnfoldSelectInstr - silence static analyzer dyn_cast<> null dereference warning. NFCI.
      
      The static analyzer is warning about a potential null dereference, but we should be able to use cast<> directly and if not assert will fire for us.
      
      llvm-svn: 375103
      3ec83e81
    • Simon Pilgrim's avatar
      clang-tidy - silence static analyzer getAs<> null dereference warnings. NFCI. · 2ea8b58c
      Simon Pilgrim authored
      The static analyzer is warning about potential null dereferences, but in these cases we should be able to use castAs<> directly and if not assert will fire for us.
      
      llvm-svn: 375102
      2ea8b58c
    • Simon Pilgrim's avatar
      SemaExprCXX - silence static analyzer getAs<> null dereference warnings. NFCI. · e1485125
      Simon Pilgrim authored
      The static analyzer is warning about potential null dereferences, but in these cases we should be able to use castAs<> directly and if not assert will fire for us.
      
      llvm-svn: 375101
      e1485125
    • Roman Lebedev's avatar
      [LoopIdiom] BCmp: check, not assert that loop exits exit out of the loop (PR43687) · fda3243f
      Roman Lebedev authored
      We can't normally stumble into that assertion because a tautological
      *conditional* `br` in loop body is required, one that always
      branches to loop latch. But that should have been always folded
      to an unconditional branch before we get it.
      But that is not guaranteed if the pass is run standalone.
      So let's just promote the assertion into a proper check.
      
      Fixes https://bugs.llvm.org/show_bug.cgi?id=43687
      
      llvm-svn: 375100
      fda3243f
    • Simon Pilgrim's avatar
      SemaDeclObjC - silence static analyzer getAs<> null dereference warnings. NFCI. · a867cca0
      Simon Pilgrim authored
      The static analyzer is warning about potential null dereferences, but in these cases we should be able to use castAs<> directly and if not assert will fire for us.
      
      llvm-svn: 375097
      a867cca0
    • George Rimar's avatar
      [LLD][ELF] - Update test cases after llvm-readobj output format change. · 938db706
      George Rimar authored
      The change was:
      
      SHT_GNU_verdef { -> VersionDefinitions [
      SHT_GNU_verneed { -> VersionRequirements [
      Version symbols [ -> VersionSymbols [
      EH_FRAME Header [ -> EHFrameHeader {
      
      llvm-svn: 375096
      938db706
    • George Rimar's avatar
      [llvm-readobj] - Refine the LLVM-style output to be consistent. · 9b8e5316
      George Rimar authored
      Our LLVM-style output was inconsistent.
      This patch changes the output in the following way:
      
      SHT_GNU_verdef { -> VersionDefinitions [
      SHT_GNU_verneed { -> VersionRequirements [
      Version symbols [ -> VersionSymbols [
      EH_FRAME Header [ -> EHFrameHeader {
      
      Differential revision: https://reviews.llvm.org/D68636
      
      llvm-svn: 375095
      9b8e5316
    • Oliver Stannard's avatar
      Reland: Dead Virtual Function Elimination · 3b598b9c
      Oliver Stannard authored
      Remove dead virtual functions from vtables with
      replaceNonMetadataUsesWith, so that CGProfile metadata gets cleaned up
      correctly.
      
      Original commit message:
      
      Currently, it is hard for the compiler to remove unused C++ virtual
      functions, because they are all referenced from vtables, which are referenced
      by constructors. This means that if the constructor is called from any live
      code, then we keep every virtual function in the final link, even if there
      are no call sites which can use it.
      
      This patch allows unused virtual functions to be removed during LTO (and
      regular compilation in limited circumstances) by using type metadata to match
      virtual function call sites to the vtable slots they might load from. This
      information can then be used in the global dead code elimination pass instead
      of the references from vtables to virtual functions, to more accurately
      determine which functions are reachable.
      
      To make this transformation safe, I have changed clang's code-generation to
      always load virtual function pointers using the llvm.type.checked.load
      intrinsic, instead of regular load instructions. I originally tried writing
      this using clang's existing code-generation, which uses the llvm.type.test
      and llvm.assume intrinsics after doing a normal load. However, it is possible
      for optimisations to obscure the relationship between the GEP, load and
      llvm.type.test, causing GlobalDCE to fail to find virtual function call
      sites.
      
      The existing linkage and visibility types don't accurately describe the scope
      in which a virtual call could be made which uses a given vtable. This is
      wider than the visibility of the type itself, because a virtual function call
      could be made using a more-visible base class. I've added a new
      !vcall_visibility metadata type to represent this, described in
      TypeMetadata.rst. The internalization pass and libLTO have been updated to
      change this metadata when linking is performed.
      
      This doesn't currently work with ThinLTO, because it needs to see every call
      to llvm.type.checked.load in the linkage unit. It might be possible to
      extend this optimisation to be able to use the ThinLTO summary, as was done
      for devirtualization, but until then that combination is rejected in the
      clang driver.
      
      To test this, I've written a fuzzer which generates random C++ programs with
      complex class inheritance graphs, and virtual functions called through object
      and function pointers of different types. The programs are spread across
      multiple translation units and DSOs to test the different visibility
      restrictions.
      
      I've also tried doing bootstrap builds of LLVM to test this. This isn't
      ideal, because only classes in anonymous namespaces can be optimised with
      -fvisibility=default, and some parts of LLVM (plugins and bugpoint) do not
      work correctly with -fvisibility=hidden. However, there are only 12 test
      failures when building with -fvisibility=hidden (and an unmodified compiler),
      and this change does not cause any new failures for either value of
      -fvisibility.
      
      On the 7 C++ sub-benchmarks of SPEC2006, this gives a geomean code-size
      reduction of ~6%, over a baseline compiled with "-O2 -flto
      -fvisibility=hidden -fwhole-program-vtables". The best cases are reductions
      of ~14% in 450.soplex and 483.xalancbmk, and there are no code size
      increases.
      
      I've also run this on a set of 8 mbed-os examples compiled for Armv7M, which
      show a geomean size reduction of ~3%, again with no size increases.
      
      I had hoped that this would have no effect on performance, which would allow
      it to awlays be enabled (when using -fwhole-program-vtables). However, the
      changes in clang to use the llvm.type.checked.load intrinsic are causing ~1%
      performance regression in the C++ parts of SPEC2006. It should be possible to
      recover some of this perf loss by teaching optimisations about the
      llvm.type.checked.load intrinsic, which would make it worth turning this on
      by default (though it's still dependent on -fwhole-program-vtables).
      
      Differential revision: https://reviews.llvm.org/D63932
      
      llvm-svn: 375094
      3b598b9c
    • Hans Wennborg's avatar
      Try to fix the assert in Alignment::alignAddr to work on 32-bit · 77cad0b0
      Hans Wennborg authored
      Hopefully fixing the AlignmentDeathTest.AlignAddr failures (e.g. at
      http://lab.llvm.org:8011/builders/clang-cmake-armv7-quick/builds/10925)
      
      llvm-svn: 375090
      77cad0b0
    • Mikhail Maltsev's avatar
      [Analysis] Don't assume that unsigned overflow can't happen in EmitGEPOffset (PR42699) · b6534b2a
      Mikhail Maltsev authored
      Summary:
      Currently when computing a GEP offset using the function EmitGEPOffset
      for the following instruction
      
        getelementptr inbounds i32, i32* %p, i64 %offs
      
      we get
      
        mul nuw i64 %offs, 4
      
      Unfortunately we cannot assume that unsigned wrapping won't happen
      here because %offs is allowed to be negative.
      
      Making such assumptions can lead to miscompilations: see the new test
      test24_neg_offs in InstCombine/icmp.ll. Without the patch InstCombine
      would generate the following comparison:
      
         icmp eq i64 %offs, 4611686018427387902; 0x3ffffffffffffffe
      
      Whereas the correct value to compare with is -2.
      
      This patch replaces the NUW flag with NSW in the multiplication
      instructions generated by EmitGEPOffset and adjusts the test suite.
      
      https://bugs.llvm.org/show_bug.cgi?id=42699
      
      Reviewers: chandlerc, craig.topper, ostannard, lebedev.ri, spatel, efriedma, nlopes, aqjune
      
      Reviewed By: lebedev.ri
      
      Subscribers: reames, lebedev.ri, hiraditya, llvm-commits
      
      Tags: #llvm
      
      Differential Revision: https://reviews.llvm.org/D68342
      
      llvm-svn: 375089
      b6534b2a
    • Hans Wennborg's avatar
      Revert r374931 "[llvm-objdump] Use a counter for llvm-objdump -h instead of the section index." · 312c4a6e
      Hans Wennborg authored
      This broke llvm-objdump in 32-bit builds, see e.g.
      http://lab.llvm.org:8011/builders/clang-cmake-armv7-quick/builds/10925
      
      > Summary:
      > When listing the index in `llvm-objdump -h`, use a zero-based counter instead of the actual section index (e.g. shdr->sh_index for ELF).
      >
      > While this is effectively a noop for now (except one unit test for XCOFF), the index values will change in a future patch that filters certain sections out (e.g. symbol tables). See D68669 for more context. Note: the test case in `test/tools/llvm-objdump/X86/section-index.s` already covers the case of incrementing the section index counter when sections are skipped.
      >
      > Reviewers: grimar, jhenderson, espindola
      >
      > Reviewed By: grimar
      >
      > Subscribers: emaste, sbc100, arichardson, aheejin, arphaman, seiya, llvm-commits, MaskRay
      >
      > Tags: #llvm
      >
      > Differential Revision: https://reviews.llvm.org/D68848
      
      llvm-svn: 375088
      312c4a6e
    • Sam Parker's avatar
      [ARM][MVE] Change VPST to use, not def, VPR · 3ff961ca
      Sam Parker authored
      Unlike VPT, VPST just uses the current value of VPR.P0.
      
      Differential Revision: https://reviews.llvm.org/D69037
      
      llvm-svn: 375087
      3ff961ca
    • James Molloy's avatar
      [DFAPacketizer] Use DFAEmitter. NFC. · 12092a96
      James Molloy authored
      Summary:
      This is a NFC change that removes the NFA->DFA construction and emission logic from DFAPacketizerEmitter and instead uses the generic DFAEmitter logic. This allows DFAPacketizer to use the Automaton class from Support and remove a bunch of logic there too.
      
      After this patch, DFAPacketizer is mostly logic for grepping Itineraries and collecting functional units, with no state machine logic. This will allow us to modernize by removing the 16-functional-unit limit and supporting non-itinerary functional units. This is all for followup patches.
      
      Subscribers: hiraditya, llvm-commits
      
      Tags: #llvm
      
      Differential Revision: https://reviews.llvm.org/D68992
      
      llvm-svn: 375086
      12092a96
    • Sam Parker's avatar
      [DAGCombine][ARM] Enable extending masked loads · 39af8a3a
      Sam Parker authored
      Add generic DAG combine for extending masked loads.
      
      Allow us to generate sext/zext masked loads which can access v4i8,
      v8i8 and v4i16 memory to produce v4i32, v8i16 and v4i32 respectively.
      
      Differential Revision: https://reviews.llvm.org/D68337
      
      llvm-svn: 375085
      39af8a3a
    • Guillaume Chatelet's avatar
      [Alignment][NFC] Use Align for TargetFrameLowering/Subtarget · 882c43d7
      Guillaume Chatelet authored
      Summary:
      This is patch is part of a series to introduce an Alignment type.
      See this thread for context: http://lists.llvm.org/pipermail/llvm-dev/2019-July/133851.html
      See this patch for the introduction of the type: https://reviews.llvm.org/D64790
      
      Reviewers: courbet
      
      Subscribers: jholewinski, arsenm, dschuff, jyknight, dylanmckay, sdardis, nemanjai, jvesely, nhaehnle, sbc100, jgravelle-google, hiraditya, aheejin, kbarton, fedor.sergeev, asb, rbar, johnrusso, simoncook, apazos, sabuasal, niosHD, jrtc27, MaskRay, zzheng, edward-jones, atanasyan, rogfer01, MartinMosbeck, brucehoult, the_o, PkmX, jocewei, jsji, Jim, lenary, s.egerton, pzheng, llvm-commits
      
      Tags: #llvm
      
      Differential Revision: https://reviews.llvm.org/D68993
      
      llvm-svn: 375084
      882c43d7
    • Eugene Leviant's avatar
      943afb57
    • Fangrui Song's avatar
      [llvm-ar] Simplify and make two global variables static. NFC · bb197dd5
      Fangrui Song authored
      llvm-svn: 375082
      bb197dd5
    • Sam Clegg's avatar
      [lld][WebAssebmly] Preserve custom import attributes with LTO · 67b05584
      Sam Clegg authored
      Undefined symbols in WebAssembly can come with custom `import-module`
      and `import-field` attributes.  However when reading symbols from
      bitcode object files during LTO those curtom attributes are not
      available.
      
      Once we compile the LTO object and read in the symbol table from the
      object file we have access to these custom attributes.  In this case,
      when undefined symbols are added and a symbol already exists in the
      SymbolTable we can't simple return it, we may need to update the
      symbol's attributes.
      
      Fixes: PR43211
      
      Differential Revision: https://reviews.llvm.org/D68959
      
      llvm-svn: 375081
      67b05584
    • Kousik Kumar's avatar
      Revert "Include sanitize blacklist and other extra deps as part of scan-deps output" · 9e7e36d4
      Kousik Kumar authored
      This test is failing on Windows bots, revert for now (will check the right fix and retry the patch).
      
      Summary: This reverts commit 962ca076.
      
      Reviewers: Bigcheese, jkorous, arphaman
      
      Subscribers: dexonsmith, cfe-commits
      
      Tags: #clang
      
      Differential Revision: https://reviews.llvm.org/D69079
      
      llvm-svn: 375079
      9e7e36d4
    • Sam Clegg's avatar
      [lld][WebAssembly] Fix for weak references to data symbols in archives · 6c393e9d
      Sam Clegg authored
      Fix a bug where were not handling relocations against weakly undefined
      data symbol.  Add a test for this case.  Also ensure that the weak
      references to data symbols are not pulled in from archive files by
      default (but are if `-u <name>` is added to the command line).
      
      Fixes: PR43696
      
      Differential Revision: https://reviews.llvm.org/D69073
      
      llvm-svn: 375077
      6c393e9d
    • Marcello Maggioni's avatar
      5926eb5f
    • Marcello Maggioni's avatar
      Move LiveRangeCalc header to publicily available position. NFC · 6fc9563d
      Marcello Maggioni authored
      Differential Revision: https://reviews.llvm.org/D69078
      
      llvm-svn: 375075
      6fc9563d
    • Kousik Kumar's avatar
      Include sanitize blacklist and other extra deps as part of scan-deps output · 962ca076
      Kousik Kumar authored
      Summary:
      Clang's -M mode includes these extra dependencies in its output and clang-scan-deps
      should have equivalent behavior, so adding these extradeps to output just like
      how its being done for ".d" file generation mode.
      
      Reviewers: arphaman, dexonsmith, Bigcheese, jkorous
      
      Subscribers: cfe-commits
      
      Tags: #clang
      
      Differential Revision: https://reviews.llvm.org/D69017
      
      llvm-svn: 375074
      962ca076
    • Lawrence D'Anna's avatar
      delete SWIG typemaps for FILE* · 0f783599
      Lawrence D'Anna authored
      Summary:
      The SWIG typemaps for FILE* are no longer used, so
      this patch deletes them.
      
      Reviewers: JDevlieghere, jasonmolenda, labath
      
      Reviewed By: labath
      
      Subscribers: lldb-commits
      
      Tags: #lldb
      
      Differential Revision: https://reviews.llvm.org/D68963
      
      llvm-svn: 375073
      0f783599
    • Fangrui Song's avatar
      SBCommandReturnObject: change LLDB_RECORD_METHOD(..., FILE *, ...) to use LLDB_RECORD_DUMMY · 56ee3196
      Fangrui Song authored
      POSIX says FILE is a typedef to a structure containing information about
      a file. The structure is unspecified, i.e. it may be an incomplete type, as is the case on musl
      (`struct _IO_FILE` is an implementation detail that is not exposed).
      
      `LLDB_RECORD_METHOD(..., (FILE *), ...)` transitively uses sizeof(FILE)
      and requires the structure to be complete.  Change it to
      LLDB_RECORD_DUMMY to fix the build failure on musl (regression of
      D57475).
      
      Reviewed By: JDevlieghere, labath, lawrence_danna
      
      Differential Revision: https://reviews.llvm.org/D68872
      
      llvm-svn: 375072
      56ee3196
    • Daniel Sanders's avatar
      Correct placement of #ifndef NDEBUG in r375067 · 6150093e
      Daniel Sanders authored
      llvm-svn: 375071
      6150093e
    • Daniel Sanders's avatar
      Fix unused variable in r375066 · 149a0204
      Daniel Sanders authored
      llvm-svn: 375070
      149a0204
    • Dmitry Mikulin's avatar
      Revert Tag CFI-generated data structures with "#pragma clang section" attributes. · 15984457
      Dmitry Mikulin authored
      This reverts r375022 (git commit e2692b3b)
      
      llvm-svn: 375069
      15984457
    • Jonas Devlieghere's avatar
      [CMake] Make it possible to set the RPATH in add_lldb_exectable. · eb1bbcec
      Jonas Devlieghere authored
      Make it possible to pass a build and install RPATH to
      add_lldb_executable instead of having to call lldb_setup_rpaths after
      the fact.
      
      This fixes a real issue where setting an install RPATH with
      lldb_setup_rpaths would only affect the symroot installation component.
      Given that lldb_setup_rpaths sets a target property I would expect this
      to be orthogonal to installation components. Regardless, it makes sense
      to integrate this functionality in add_lldb_exectable.
      
      llvm-svn: 375068
      eb1bbcec
    • Daniel Sanders's avatar
      [gicombiner] Add the run-time rule disable option · 329e748c
      Daniel Sanders authored
      Summary:
      Each generated helper can be configured to generate an option that disables
      rules in that helper. This can be used to bisect rulesets.
      
      The disable bits are stored in a SparseVector as this is very cheap for the
      common case where nothing is disabled. It gets more expensive the more rules
      are disabled but you're generally doing that for debug purposes where
      performance is less of a concern.
      
      Depends on D68426
      
      Reviewers: volkan, bogner
      
      Reviewed By: volkan
      
      Subscribers: hiraditya, Petar.Avramovic, llvm-commits
      
      Tags: #llvm
      
      Differential Revision: https://reviews.llvm.org/D68438
      
      llvm-svn: 375067
      329e748c
    • Quentin Colombet's avatar
      [GISel][CombinerHelper] Add concat_vectors(build_vector, build_vector) => build_vector · c319afc9
      Quentin Colombet authored
      Teach the combiner helper how to flatten concat_vectors of build_vectors
      into a build_vector.
      
      Add this combine as part of AArch64 pre-legalizer combiner.
      
      Differential Revision: https://reviews.llvm.org/D69071
      
      llvm-svn: 375066
      c319afc9
    • Julian Lettner's avatar
      [lit] Improve lit.Run class · f35cebe7
      Julian Lettner authored
      * Push timing of overall test time into run module
      * Make lit.Run a proper class
      * Add a few TODO comments
      
      llvm-svn: 375065
      f35cebe7
    • Jonas Devlieghere's avatar
      [Reproducer] Set the working directory in the VFS · f80f15e3
      Jonas Devlieghere authored
      Now that the VFS knows how to deal with virtual working directories, we
      can set the current working directory to the one we recorded during
      reproducer capture. This ensures that relative paths are resolved
      correctly during replay.
      
      llvm-svn: 375064
      f80f15e3
    • Saar Raz's avatar
      [Concepts] ConceptSpecializationExprs mangling · f567b008
      Saar Raz authored
      Implement mangling for CSEs to match regular template-ids.
      Reviewed as part of D41569 <https://reviews.llvm.org/D41569>.
      
      Re-commit fixing failing test.
      
      llvm-svn: 375063
      f567b008
    • Raphael Isemann's avatar
      Revert "make ConstString allocate memory in non-tiny chunks" · 755420c0
      Raphael Isemann authored
      As discussed in https://reviews.llvm.org/D68549, the actual issue
      here seems to be that the BumpPtrAllocator is growing far too slow
      because of the 256 different StringPools used as the backend for ConstString.
      At the same time the original patch made ConstString allocate memory in
      256MiB slabs for the same reason, meaning that the RSS usage of LLDB increased
      by a few hundred MiB for all users without bringing any noticeable speedup
      for most of them.
      
      llvm-svn: 375062
      755420c0
    • Jonas Devlieghere's avatar
      [Reproducer] Support dumping the reproducer CWD · f4f12012
      Jonas Devlieghere authored
      Add support for dumping the current working directory with
      `reproducer dump -p cwd`.
      
      llvm-svn: 375061
      f4f12012
    • Jonas Devlieghere's avatar
      [Reproducer] Add LoadBuffer<> helper (NFC) · b2575da9
      Jonas Devlieghere authored
      Introduce a helper method named LoadBuffer in the Loader to abstract
      reading a reproducer file from disk.
      
      llvm-svn: 375060
      b2575da9