1. Nov 16, 2019
    • Fangrui Song's avatar
    • Vedant Kumar's avatar
      [DebugInfo] Allow spill slots in call site parameter descriptions · 67c416dc
      Vedant Kumar authored
      Allow call site paramter descriptions to reference spill slots. Spill
      slots are not visible to high-level LLVM IR, so they can safely be
      referenced during entry value evaluation (as they cannot be clobbered by
      some other function).
      
      This gives a 5% increase in the number of call site parameter DIEs in an
      LTO x86_64 build of the xnu kernel.
      
      This reverts commit eb4c98ca (
      [DebugInfo] Exclude memory location values as parameter entry values),
      effectively reintroducing the portion of D60716 which dealt with memory
      locations (authored by Djordje, Nikola, Ananth, and Ivan).
      
      This partially addresses llvm.org/PR43343. However, not all memory
      operands forwarded to callees live in spill slots. In the xnu build, it
      may be possible to use an escape analysis to increase the number of call
      site parameter by another 15% (more details in PR43343).
      
      Differential Revision: https://reviews.llvm.org/D70254
      67c416dc
    • Dávid Bolvanský's avatar
      f7efea0d
    • Jonas Devlieghere's avatar
      [CMake] Configure the Info.plist so it contains a real version number. · 81104ea9
      Jonas Devlieghere authored
      Use CMake to configure the Info.plist file so that we have a real
      version number in things like crash reporter.
      81104ea9
    • Marek Kurdej's avatar
      [libc++] [chrono] Fix year_month_weekday::ok() implementation. · 8e34be2f
      Marek Kurdej authored
      Reviewers: ldionne, EricWF, mclow.lists
      
      Reviewed By: mclow.lists
      
      Subscribers: christof, dexonsmith, libcxx-commits
      
      Tags: #libc
      
      Differential Revision: https://reviews.llvm.org/D70282
      8e34be2f
    • Ilya Tokar's avatar
      [libcxx] use __builtin_isnan in std::isnan. · 767eadd7
      Ilya Tokar authored
      Summary: This allows std::isnan to be fully inlined, instead of generating calls.
      
      Reviewers: EricWF
      
      Reviewed By: EricWF
      
      Subscribers: christof, ldionne
      
      Differential Revision: https://reviews.llvm.org/D69806
      767eadd7
    • Adrian Prantl's avatar
    • Cameron Desrochers's avatar
      [clang-format] Flexible line endings · 358eaa3d
      Cameron Desrochers authored
      Line ending detection is now set with the `DeriveLineEnding` option.
      CRLF can now be used as the default line ending by setting `UseCRLF`.
      When line ending detection is disabled, all line endings are converted
      according to the `UseCRLF` option.
      
      Differential Revision: https://reviews.llvm.org/D19031
      358eaa3d
    • Aditya Nandakumar's avatar
      [MirNamer][Canonicalizer]: Perform instruction semantic based renaming · 72768685
      Aditya Nandakumar authored
      https://reviews.llvm.org/D70210
      
      Previously:
      
      Due to sensitivity of the algorithm with gaps, and extra instructions,
      when diffing, often we see naming being off by a few. Makes the diff
      unreadable even for tests with 7 and 8 instructions respectively.
      Naming can change depending on candidates (and order of picking
      candidates). Suddenly if there's one extra instruction somewhere, the
      entire subtree would be named completely differently.
      No consistent naming of similar instructions which occur in different
      functions. If we try to do something like count the frequency
      distribution of various differences across suite, then the above
      sensitivity issues are going to result in poor results.
      Instead:
      
      Name instruction based on semantics of the instruction (hash of the
      opcode and operands). Essentially for a given instruction that occurs in
      any module/function it'll be named similarly (ie semantic). This has
      some nice properties
      Can easily look at many instructions and just check the hash and if
      they're named similarly, then it's the same instruction. Makes it very
      easy to spot the same instruction both multiple times, as well as across
      many functions (useful for frequency distribution).
      Independent of traversal/candidates/depth of graph. No need to keep
      track of last index/gaps/skip count etc.
      No off by few issues with diffs. I've tried the old vs new
      implementation in files ranging from 30 to 700 instructions. In both
      cases with the old algorithm, diffs are a sea of red, where as for the
      semantic version, in both cases, the diffs line up beautifully.
      Simplified implementation of the main loop (simple iteration) , no keep
      track of what's visited and not.
      Handle collision just by incrementing a counter. Roughly
      bb[N]_hash_[CollisionCount].
      Additionally with the new implementation, we can probably avoid doing
      the hoisting of instructions to various places, as they'll likely be
      named the same resulting in differences only based on collision (ie
      regardless of whether the instruction is hoisted or not/close to use or
      not, it'll be named the same hash which should result in use of the
      instruction be identical with the only change being the collision count)
      which is very easy to spot visually.
      72768685
    • Sam McCall's avatar
      [clangd] Fix typo in symbol kind conversion · c9081968
      Sam McCall authored
      Reviewers: hokein
      
      Subscribers: ilya-biryukov, MaskRay, jkorous, arphaman, kadircet, usaxena95, cfe-commits
      
      Tags: #clang
      
      Differential Revision: https://reviews.llvm.org/D70309
      c9081968
    • Kostya Kortchinsky's avatar
      [scudo][standalone] Enabled SCUDO_DEBUG for tests + fixes · f018246c
      Kostya Kortchinsky authored
      Summary:
      `SCUDO_DEBUG` was not enabled for unit tests, meaning the `DCHECK`s
      were never tripped. While turning this on, I discovered that a few
      of those not-exercised checks were actually wrong. This CL addresses
      those incorrect checks.
      
      Not that to work in tests `CHECK_IMPL` has to explicitely use the
      `scudo` namespace. Also changes a C cast to a C++ cast.
      
      Reviewers: hctim, pcc, cferris, eugenis, vitalybuka
      
      Subscribers: mgorny, #sanitizers, llvm-commits
      
      Tags: #sanitizers, #llvm
      
      Differential Revision: https://reviews.llvm.org/D70276
      f018246c
    • Sam McCall's avatar
      [clangd] Don't consider class template params part of constructor name. · 713c30b3
      Sam McCall authored
      Summary:
      This is shorter and usually the extra info is noise.
      There are cases where the params become type-parameter-0-0 that are hard to fix.
      
      This affects a few features:
       - 'name' field in structured hover API (not exposed yet)
       - 'name' field in locateSymbolAt (not exposed in LSP)
       - 'document/symbol' - the symbol is hierarchically nested in the class
         template, or written as foo<t>::foo when defined out-of-line.
      
      Added a test case for hover from https://github.com/clangd/clangd/issues/76.
      This patch fixes one field, but no fewer than four others are wrong!
      I'll fix them...
      
      Reviewers: hokein
      
      Subscribers: ilya-biryukov, MaskRay, jkorous, arphaman, kadircet, usaxena95, cfe-commits
      
      Tags: #clang
      
      Differential Revision: https://reviews.llvm.org/D70308
      713c30b3
    • Sam McCall's avatar
      [clangd] Fix SelectionTree behavior on constructor init-lists. · ad9fd320
      Sam McCall authored
      Summary:
      For the constructor Foo() : classmember(arg) {}
      
      The AST looks like:
       - CXXCtorInitializer  classmember(arg)
         - CXXConstructExpr  classmember(arg)
           - DeclRefExpr:                arg
      
      We want the 'classmember' to be associated with the CXXCtorInitializer, not the
      CXXConstructExpr. (CXXConstructExpr is known to have bad ranges).
      So just early-claim it.
      
      Thanks @hokein for tracking down/reducing the bug.
      
      Reviewers: hokein
      
      Subscribers: ilya-biryukov, MaskRay, jkorous, arphaman, kadircet, usaxena95, cfe-commits, hokein
      
      Tags: #clang
      
      Differential Revision: https://reviews.llvm.org/D70312
      ad9fd320
    • diggerlin's avatar
      Add read-only data assembly writing for aix · 3dfa975f
      diggerlin authored
      SUMMARY:
      The patch will emit read-only variable assembly code for aix.
      
      Reviewers: daltenty,Xiangling_Liao
      Subscribers: rupprecht, seiyai,hiraditya
      
      Differential Revision: https://reviews.llvm.org/D70182
      3dfa975f
    • Sergey Dmitriev's avatar
      [llvm-objcopy][NFC] Use generated object file in COFF/add-section.test · 840c891a
      Sergey Dmitriev authored
      Updated LIT test from D70205 to use generated object file with extended relocation table.
      
      Differential Revision: https://reviews.llvm.org/D70269
      840c891a
  2. Nov 15, 2019
    • Simon Pilgrim's avatar
      [X86][SSE] Add test for extractelement from volatile vector load · c3607f52
      Simon Pilgrim authored
      Mentioned in D70267
      c3607f52
    • Momchil Velikov's avatar
      Implement target(branch-protection) attribute for AArch64 · aa6d48fa
      Momchil Velikov authored
      This patch implements `__attribute__((target("branch-protection=...")))`
      in a manner, compatible with the analogous GCC feature:
      
      https://gcc.gnu.org/onlinedocs/gcc-9.2.0/gcc/AArch64-Function-Attributes.html#AArch64-Function-Attributes
      
      Differential Revision: https://reviews.llvm.org/D68711
      aa6d48fa
    • Ed Maste's avatar
      clang: enable unwind tables on FreeBSD !amd64 · cb176146
      Ed Maste authored
      There doesn't seem to be much sense in defaulting "on" unwind tables on
      amd64 and not on other arches. It causes surprising differences between
      platforms, such as the PR below[1].
      
      Prior to this change, FreeBSD inherited the default implementation of the
      method from the Gnu.h Generic_Elf => Generic_GCC parent class, which
      returned true only for amd64 targets.  Override that and opt on always,
      similar to, e.g., NetBSD's driver.
      
      [1] https://bugs.freebsd.org/241562
      
      Patch by cem (Conrad Meyer).
      
      Reviewed By: dim
      
      Differential Revision: https://reviews.llvm.org/D70110
      cb176146
    • Haojian Wu's avatar
      [clangd] Replace getLangOpts().isHeaderFile usage with isHeaderFile helper. · b221c9d0
      Haojian Wu authored
      Summary:
      The helper is more correct to detect header file, this would fix our
      issues caused by false positive before.
      
      Reviewers: sammccall
      
      Reviewed By: sammccall
      
      Subscribers: merge_guards_bot, ilya-biryukov, MaskRay, jkorous, arphaman, kadircet, usaxena95, cfe-commits
      
      Tags: #clang
      
      Differential Revision: https://reviews.llvm.org/D70299
      b221c9d0
    • Haojian Wu's avatar
      [clangd] Add isHeaderFile helper. · 509efe5d
      Haojian Wu authored
      Summary:
      we have a few places using `ASTCtx.getLangOpts().IsHeaderFile` to
      determine a header file, but it relies on "-x c-header" compiler flag,
      if the compilation command doesn't have this flag, we will get a false
      positive. We are encountering this issue in bazel build system.
      
      To solve this problem, we infer the file from file name, actual changes will
      come in follow-ups.
      
      Reviewers: sammccall
      
      Subscribers: ilya-biryukov, MaskRay, jkorous, arphaman, kadircet, usaxena95, cfe-commits
      
      Tags: #clang
      
      Differential Revision: https://reviews.llvm.org/D70235
      509efe5d
    • Sam Elliott's avatar
      [RISCV] Match GCC `-march`/`-mabi` driver defaults · e3d5ff5a
      Sam Elliott authored
      Summary:
      Clang/LLVM is a cross-compiler, and so we don't have to make a choice
      about `-march`/`-mabi` at build-time, but we may have to compute a
      default `-march`/`-mabi` when compiling a program. Until now, each
      place that has needed a default `-march` has calculated one itself.
      
      This patch adds a single place where a default `-march` is calculated,
      in order to avoid calculating different defaults in different places.
      
      This patch adds a new function `riscv::getRISCVArch` which encapsulates
      this logic based on GCC's for computing a default `-march` value
      when none is provided. This patch also updates the logic in
      `riscv::getRISCVABI` to match the logic in GCC's build system for
      computing a default `-mabi`.
      
      This patch also updates anywhere that `-march` is used to now use the
      new function which can compute a default. In particular, we now
      explicitly pass a `-march` value down to the gnu assembler.
      
      GCC has convoluted logic in its build system to choose a default
      `-march`/`-mabi` based on build options, which would be good to match.
      This patch is based on the logic in GCC 9.2.0. This commit's logic is
      different to GCC's only for baremetal targets, where we default
      to rv32imac/ilp32 or rv64imac/lp64 depending on the target triple.
      
      Tests have been updated to match the new logic.
      
      Reviewers: asb, luismarques, rogfer01, kito-cheng, khchen
      
      Reviewed By: asb, luismarques
      
      Subscribers: sameer.abuasal, rbar, johnrusso, simoncook, apazos, sabuasal, niosHD, shiva0217, jrtc27, MaskRay, zzheng, edward-jones, MartinMosbeck, brucehoult, the_o, rkruppe, PkmX, jocewei, psnobl, benna, Jim, s.egerton, pzheng, cfe-commits
      
      Tags: #clang
      
      Differential Revision: https://reviews.llvm.org/D69383
      e3d5ff5a
    • Sam McCall's avatar
      [CodeComplete] Constructor overload candidates report as vector(int) instead of vector<string>(int) · fa3b87fb
      Sam McCall authored
      Summary:
      This is shorter, shouldn't be confusing (is consistent with how they're declared),
      and avoids messy cases that are printed as myclass<type-param-0-0>(int) in the
      case of partial specialization.
      
      Fixes part of https://github.com/clangd/clangd/issues/76
      
      Reviewers: hokein, lh123
      
      Subscribers: ilya-biryukov, kadircet, usaxena95, cfe-commits
      
      Tags: #clang
      
      Differential Revision: https://reviews.llvm.org/D70307
      fa3b87fb
    • Simon Tatham's avatar
      [ARM,MVE] Add reversed isel patterns for MVE `vcmp qN,rN` · b0c19008
      Simon Tatham authored
      Summary:
      As well as vector/vector compare instructions, MVE also has a family
      of comparisons taking a vector and a scalar, which compare every lane
      of the vector against the same value. We generate those at isel time
      using isel patterns that match `(ARMvcmp vector, (ARMvdup scalar))`.
      
      This commit adds corresponding patterns for the operand-reversed form
      `(ARMvcmp (ARMvdup scalar), vector)`, with condition codes swapped as
      necessary. That way, we can still generate the vector/scalar compare
      instruction if the IR happens to have been rearranged to put the
      operands the other way round, which can happen in some optimization
      phases. Previously, a vcmp the other way round was handled by emitting
      a `vdup` instruction to //explicitly// replicate the scalar input into
      a vector, and then doing a vector/vector comparison.
      
      I haven't added a new test, because it turned out that several
      existing tests were already exhibiting that failure mode. So just
      updating the expected output in the existing MVE codegen tests
      demonstrates what's been improved.
      
      Reviewers: ostannard, MarkMurrayARM, dmgreen
      
      Reviewed By: dmgreen
      
      Subscribers: kristof.beyls, hiraditya, llvm-commits
      
      Tags: #llvm
      
      Differential Revision: https://reviews.llvm.org/D70296
      b0c19008
    • Balázs Kéri's avatar
      [Clang][ASTImporter] Added visibility check for ClassTemplateDecl. · c2f6efc7
      Balázs Kéri authored
      Summary:
      ASTImporter makes now difference between class templates with same
      name in different translation units if these are not visible outside.
      
      Reviewers: martong, a.sidorin, shafik
      
      Reviewed By: martong
      
      Subscribers: rnkovacs, dkrupp, Szelethus, gamesh411, teemperor, cfe-commits
      
      Tags: #clang
      
      Differential Revision: https://reviews.llvm.org/D67543
      c2f6efc7
    • Piotr Sobczak's avatar
      [AMDGPU] Lower llvm.amdgcn.s.buffer.load.v3[i|f]32 · 02419ab5
      Piotr Sobczak authored
      Summary: Add lowering support for 32-bit vec3 variant of s.buffer.load intrinsic.
      
      Subscribers: arsenm, kzhuravl, jvesely, wdng, nhaehnle, yaxunl, dstuttard, tpr, t-tye, hiraditya, llvm-commits
      
      Tags: #llvm
      
      Differential Revision: https://reviews.llvm.org/D70118
      02419ab5
    • evgeny's avatar
      Recommit "[ThinLTO] Add correctness check for RO/WO variable import" · 3d708bf5
      evgeny authored
      ValueInfo has user-defined 'operator bool' which allows incorrect implicit conversion
      to GlobalValue::GUID (which is unsigned long). This causes bugs which are hard to
      track and should be removed in future.
      3d708bf5
    • Diana Picus's avatar
      Fix TestFormatters.py stepping too far · 5f0c3bad
      Diana Picus authored
      TestFormatters.py has a sequence of three 'next' commands to get past
      all the initializations in the test function. On AArch64 (and
      potentially other platforms), this was one 'next' too many and we ended
      up outside our frame.
      
      This patch replaces the sequence with a 'thread until ' the line of the
      return from the function, so we should stop after all the
      initializations but before actually returning.
      
      Differential Revision: https://reviews.llvm.org/D70303
      5f0c3bad
    • LLVM GN Syncbot's avatar
      gn build: Merge e6584b2b · 9c5e0fcc
      LLVM GN Syncbot authored
      9c5e0fcc
    • Serge Pavlov's avatar
      Move floating point related entities to namespace level · e6584b2b
      Serge Pavlov authored
      Enumerations that describe rounding mode and exception behavior were
      defined inside ConstrainedFPIntrinsic. It makes sense to use the same
      definitions to represent the same properties in other cases, not only
      in constrained intrinsics. It was however inconvenient as required to
      include constrained intrinsics definitions even if they were not needed.
      Also using long scope prefix reduced readability.
      
      This change moves these definitioins to the namespace llvm::fp.
      No functional changes.
      
      Differential Revision: https://reviews.llvm.org/D69552
      e6584b2b
    • Alex Richardson's avatar
      [update_cc_test_checks.py] Use -ast-dump=json to get mangled name · 0df4a8f7
      Alex Richardson authored
      Summary:
      Using c-index-test is fragile since it does not parse all the clang
      arguments that are used in the RUN: line. This can result in incorrect
      mangled names that do not match any of the generated IR.
      For example macOS triples include a leading underscore (which was handled
      with a hack in the current script). For the CHERI target we have added
      new qualifiers which affect C++ name mangling, but will be included added
      by update_cc_test_checks since it parses the source file with the host
      triple because it ignores the -triple= argument passed to clang -cc1.
      
      Using the new feature of including the mangled name in the JSON AST dump
      (see D69564), we can parse the output of the RUN: command with
      "-fsyntax-only -ast-dump=json" appended.
      This should make the script less fragile and also forks one process less.
      
      Reviewers: MaskRay, xbolva00
      
      Reviewed By: MaskRay
      
      Subscribers: llvm-commits
      
      Tags: #llvm
      
      Differential Revision: https://reviews.llvm.org/D69565
      0df4a8f7
    • Alex Richardson's avatar
      Include the mangled name in -ast-dump=json · 3c3048c1
      Alex Richardson authored
      I am planning to use this feature to make update_cc_test_checks.py less fragile
      by obtaining the mangled names directly from -ast-dump=json. Currently,
      it uses c-index-test which ignores the -triple=, etc. arguments that are
      in the RUN: line and therefore does not generate checks for some targets.
      
      The AST dump tests were updated using the following command:
      `python $LLVM_BINDIR/gen_ast_dump_json_test.py --update --source $LLVM_SRC/clang/test/AST/*-json.*`
      
      Reviewers: aaron.ballman
      
      Reviewed By: aaron.ballman
      
      Subscribers: rsmith, MaskRay, cfe-commits
      
      Tags: #clang
      
      Differential Revision: https://reviews.llvm.org/D69564
      3c3048c1
    • Alex Richardson's avatar
      [NFC] Regenerate ast-dump-json tests · 709ea172
      Alex Richardson authored
      This was done by running `python $LLVM_BINDIR/gen_ast_dump_json_test.py --update --source $LLVM_SRC/clang/test/AST/*-json.*`
      Only changes are whitespace and line endings.
      
      Differential Revision: https://reviews.llvm.org/D70119
      709ea172
    • Alex Richardson's avatar
      [gen_ast_dump_json_test.py] Allow updating multiple files in one go · 7debe513
      Alex Richardson authored
      With this change it is possible to update all JSON dump tests using the
      following command:
      python $LLVM_BINDIR/gen_ast_dump_json_test.py --update --source $LLVM_SRC/clang/test/AST/*-json.*
      
      See https://reviews.llvm.org/D70119
      7debe513
    • Alex Richardson's avatar
      [gen_ast_dump_json_test.py] Copy to binary directory to omit --clang argument · d09e811c
      Alex Richardson authored
      The script will now check if a clang binary exists in the same directory
      and default to that instead of requiring a --clang argument. The script
      is copied to the clang build directory using CMake configure_file() with
      COPYONLY. This ensures that the version in the build directory is updated
      any time the source version changes.
      
      See https://reviews.llvm.org/D70119
      d09e811c
    • Alex Richardson's avatar
    • Alex Richardson's avatar
    • Alex Richardson's avatar
    • Alex Richardson's avatar
      [gen_ast_dump_json_test.py] Add a --update flag · a763d985
      Alex Richardson authored
      This will allow updating the JSON tests for new format changes. Instead of
      simply appending the JSON to the input file, the script will now make a
      copy of the input file up to the "CHECK lines have been autogenerated"
      disclaimer and then append the new JSON.
      
      See https://reviews.llvm.org/D70119
      a763d985
    • Pavel Labath's avatar
      DWARFDebugLoc(v4): Add an incremental parsing function · 09080939
      Pavel Labath authored
      Summary:
      This adds a visitLocationList function to the DWARF v4 location lists,
      similar to what already exists for DWARF v5. It follows the approach
      outlined in previous patches (D69672), where the parsed form is always
      stored in the DWARF v5 format, which makes it easier for generic code to
      be built on top of that. v4 location lists are "upgraded" during
      parsing, and then this upgrade is undone while dumping.
      
      Both "inline" and section-based dumping is rewritten to reuse the
      existing "generic" location list dumper. This means that the output
      format is consistent for all location lists (the only thing one needs to
      implement is the function which prints the "raw" form of a location
      list), and that debug_loc dumping correctly processes base address
      selection entries, etc.
      
      The previous existing debug_loc functionality (e.g.,
      parseOneLocationList) is rewritten on top of the new API, but it is not
      removed as there is still code which uses them. This will be done in
      follow-up patches, after I build the API to access the "interpreted"
      location lists in a generic way (as that is what those users really
      want).
      
      Reviewers: dblaikie, probinson, JDevlieghere, aprantl, SouraVX
      
      Subscribers: hiraditya, llvm-commits
      
      Tags: #llvm
      
      Differential Revision: https://reviews.llvm.org/D69847
      09080939
    • Jay Foad's avatar
      [CodeGen] Increase the size of a SmallVector · c953e061
      Jay Foad authored
      The SmallVector reserve() call in
      MachineInstrExpressionTrait::getHashValue accounted for over 3% of all
      calls to malloc() when I compiled a bunch of graphics shaders for the
      AMDGPU target. Its initial size was only enough for machine instructions
      with up to 7 operands, but for AMDGPU 8 and 10 operands are very common.
      Here's a histogram of number of operands for each call to getHashValue,
      gathered from the same collection of shaders:
      
      1  13503
      2  254273
      3  135781
      4  422508
      5  614997
      6  194953
      7  287248
      8  1517255
      9  31218
      10 1191269
      11 70731
      12 24
      13 77
      15 84
      17 4692
      27 16
      33 705
      49 6
      
      Typical instructions with 8 and 10 operands are floating point
      arithmetic and multiply-accumulate instructions like:
      
      %83:vgpr_32 = V_MUL_F32_e64 0, killed %82:vgpr_32, 0, killed %81:vgpr_32, 0, 0, implicit $exec
      %330:vgpr_32 = V_MAC_F32_e64 0, killed %327:vgpr_32, 0, killed %329:sgpr_32, 0, %328:vgpr_32(tied-def 0), 0, 0, implicit $exec
      
      Differential Revision: https://reviews.llvm.org/D70301
      c953e061