1. Nov 16, 2019
  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
    • Djordje Todorovic's avatar
      Revert "[clang] Remove the DIFlagArgumentNotModified debug info flag" · 41d6ad6e
      Djordje Todorovic authored
      This reverts commit rG16437347 due to LLDB test failure.
      41d6ad6e
    • Sjoerd Meijer's avatar
      [ARM][MVE] tail-predication · 71327707
      Sjoerd Meijer authored
      This is a follow up of d90804d2, to also flag fmcp instructions as instructions
      that we do not support in tail-predicated vector loops.
      
      Differential Revision: https://reviews.llvm.org/D70295
      71327707
    • Petar Avramovic's avatar
      [MIPS GlobalISel] Select andi, ori and xori · 1f559353
      Petar Avramovic authored
      Introduce IntImmLeaf version of PatLeaf immZExt16 for 32-bit immediates.
      Change immZExt16 with imm32ZExt16 for andi, ori and xori.
      This keeps same behavior for SDAG and allows for GlobalISel selectImpl
      to select 'G_CONSTANT imm' + G_AND, G_OR, G_XOR into ANDi, ORi, XORi,
      respectively, when 32-bit imm satisfies imm32ZExt16 predicate: zero
      extending 16 low bits of imm is equal to imm.
      Large number of test changes comes from zero extending of small types
      which is transformed into 'and' with bitmask in legalizer.
      
      Differential Revision:https://reviews.llvm.org/D70185
      1f559353
    • Petar Avramovic's avatar
      [MIPS GlobalISel] Select addiu · dda8e955
      Petar Avramovic authored
      Introduce IntImmLeaf version of PatLeaf immSExt16 for 32-bit immediates.
      Change immSExt16 with imm32SExt16 for addiu.
      This keeps same behavior for SDAG and allows for GlobalISel selectImpl
      to select 'G_CONSTANT imm' + G_ADD into ADDIu when 32-bit imm satisfies
      imm32SExt16 predicate: sign extending 16 low bits of imm is equal to imm.
      
      Differential Revision: https://reviews.llvm.org/D70184
      dda8e955
    • Mikael Holmen's avatar
      [Scalarizer] Treat values from unreachable blocks as undef · 1587c7e8
      Mikael Holmen authored
      Summary:
      When scalarizing PHI nodes we might try to examine/rewrite
      InsertElement nodes in predecessors. If those predecessors
      are unreachable from entry, then the IR in those blocks could
      have unexpected properties resulting in infinite loops in
      Scatterer::operator[].
      By simply treating values originating from instructions in
      unreachable blocks as undef we do not need to analyse them
      further.
      
      This fixes PR41723.
      
      Reviewers: bjope
      
      Reviewed By: bjope
      
      Subscribers: bjope, hiraditya, llvm-commits
      
      Tags: #llvm
      
      Differential Revision: https://reviews.llvm.org/D70171
      1587c7e8
    • Djordje Todorovic's avatar
      [clang] Remove the DIFlagArgumentNotModified debug info flag · 16437347
      Djordje Todorovic authored
      It turns out that the ExprMutationAnalyzer can be very slow when AST
      gets huge in some cases. The idea is to move this analysis to the LLVM
      back-end level (more precisely, in the LiveDebugValues pass). The new
      approach will remove the performance regression, simplify the
      implementation and give us front-end independent implementation.
      
      Differential Revision: https://reviews.llvm.org/D68206
      16437347
    • Simon Tatham's avatar
      [ARM,MVE] Add intrinsics for vector get/set lane. · 9e378927
      Simon Tatham authored
      This adds the `vgetq_lane` and `vsetq_lane` families, to copy between
      a scalar and a specified lane of a vector.
      
      One of the new `vgetq_lane` intrinsics returns a `float16_t`, which
      causes a compile error if `%clang_cc1` doesn't get the option
      `-fallow-half-arguments-and-returns`. The driver passes that option to
      cc1 already, but I've had to edit all the explicit cc1 command lines
      in the existing MVE intrinsics tests.
      
      A couple of fixes are included for the code I wrote up front in
      MveEmitter to support lane-index immediates (and which nothing has
      tested until now): the type was wrong (`uint32_t` instead of `int`)
      and the range was off by one.
      
      I've also added a method of bypassing the default promotion to `i32`
      that is done by the MveEmitter code generation: it's sensible to
      promote short scalars like `i16` to `i32` if they're going to be
      passed to custom IR intrinsics representing a machine instruction
      operating on GPRs, but not if they're going to be passed to standard
      IR operations like `insertelement` which expect the exact type.
      
      Reviewers: ostannard, MarkMurrayARM, dmgreen
      
      Reviewed By: dmgreen
      
      Subscribers: kristof.beyls, cfe-commits
      
      Tags: #clang
      
      Differential Revision: https://reviews.llvm.org/D70188
      9e378927
    • Simon Tatham's avatar
      [ARM,MVE] Add intrinsics for 'administrative' vector operations. · 902e8455
      Simon Tatham authored
      This batch of intrinsics includes lots of things that move vector data
      around or change its type without really affecting its value very
      much. It includes the `vreinterpretq` family (cast one vector type to
      another); `vuninitializedq` (create a vector of a given type with
      don't-care contents); and `vcreateq` (make a 128-bit vector out of two
      `uint64_t` halves).
      
      These are all implemented using completely standard IR that's already
      tested in existing LLVM unit tests, so I've just written a clang test
      to check the IR is correct, and left it at that.
      
      I've also added some richer infrastructure to the MveEmitter Tablegen
      backend, to make it specify the exact integer type of integer
      arguments passed to IR construction functions, and wrap those
      arguments in a `static_cast` in the autogenerated C++. That was
      necessary to prevent an overloading ambiguity when passing the integer
      literal `0` to `IRBuilder::CreateInsertElement`, because otherwise, it
      could mean either a null pointer `llvm::Value *` or a zero `uint64_t`.
      
      Reviewers: ostannard, MarkMurrayARM, dmgreen
      
      Subscribers: kristof.beyls, cfe-commits
      
      Tags: #clang
      
      Differential Revision: https://reviews.llvm.org/D70133
      902e8455
    • Sam McCall's avatar
      [AST] Use written names instead of `type-param-0-0` in more cases when printing types and decls. · 87054ec0
      Sam McCall authored
      Summary:
      This doesn't cover decls in diagnostics, which use NamedDecl::getNameForDiagnostic().
      (That should also be fixed later I think).
      
      This covers some cases of https://github.com/clangd/clangd/issues/76
      (hover, but not outline or sighelp)
      
      Reviewers: hokein
      
      Subscribers: ilya-biryukov, jkorous, arphaman, kadircet, usaxena95, cfe-commits
      
      Tags: #clang
      
      Differential Revision: https://reviews.llvm.org/D70236
      87054ec0
    • Hans Wennborg's avatar
      Fix GCC -Wcast-qual warnings · c42e3851
      Hans Wennborg authored
      c42e3851
    • Hans Wennborg's avatar
      GCC 5.3 build fix · 04dcb800
      Hans Wennborg authored
      It was failing with
      
        llvm/lib/ExecutionEngine/Orc/DebugUtils.cpp:56:10:
        error: could not convert ‘Obj’ from ‘std::unique_ptr<llvm::MemoryBuffer>’
        to ‘llvm::Expected<std::unique_ptr<llvm::MemoryBuffer> >’
           return Obj;
                  ^
      04dcb800
    • Matt Arsenault's avatar
      AMDGPU: Change boolean content type to 0 or 1 · 31479d86
      Matt Arsenault authored
      The usage of target boolean checks is overly inflexible, since sext
      and zext of a compare are equally cheap. The choice is arbitrary, but
      using 0/1 to some degree is the choice of lower resistance since
      that's what most targets use. This enables a few combines that don't
      bother to support ZeroOrNegativeOneBooleanContent.
      31479d86
    • Matt Arsenault's avatar
      AMDGPU: Try to commute sub of boolean ext · 69fcfb7d
      Matt Arsenault authored
      Avoids another regression in a future patch.
      69fcfb7d