1. Feb 12, 2021
    • Nick Desaulniers's avatar
      [clang][Arm] Fix handling of -Wa,-implicit-it= · a680bc3a
      Nick Desaulniers authored
      Similiar to D95872, this flag can be set for the assembler directly.
      Move validation code into a reusable helper function.
      
      Link: https://bugs.llvm.org/show_bug.cgi?id=49023
      Link: https://github.com/ClangBuiltLinux/linux/issues/1270
      
      
      Reported-by: default avatarArnd Bergmann <arnd@kernel.org>
      Signed-off-by: default avatarNick Desaulniers <ndesaulniers@google.com>
      
      Reviewed By: DavidSpickett
      
      Differential Revision: https://reviews.llvm.org/D96285
      a680bc3a
    • Philip Reames's avatar
      [tests] Precommit tests for D96440 · 81c51891
      Philip Reames authored
      81c51891
    • Sanjay Patel's avatar
      6ef84730
    • Yonghong Song's avatar
      BPF: Add LLVMAnalysis in CMakefile LINK_COMPONENTS · 74975d35
      Yonghong Song authored
      buildbot reported a build error like below:
        BPFTargetMachine.cpp:(.text._ZN4llvm19TargetTransformInfo5ModelINS_10BPFTTIImplEED2Ev
          [_ZN4llvm19TargetTransformInfo5ModelINS_10BPFTTIImplEED2Ev]+0x14):
          undefined reference to `llvm::TargetTransformInfo::Concept::~Concept()'
        lib/Target/BPF/CMakeFiles/LLVMBPFCodeGen.dir/BPFTargetMachine.cpp.o:
          In function `llvm::TargetTransformInfo::Model<llvm::BPFTTIImpl>::~Model()':
      
      Commit a260ae71 ("BPF: Implement TTI.IntImmCost() properly")
      added TargetTransformInfo to BPF, which requires LLVMAnalysis
      dependence. In certain cmake configurations, lacking explicit
      LLVMAnalysis dependency may cause compilation error.
      Similar to other targets, this patch added LLVMAnalysis
      in CMakefile LINK_COMPONENTS explicitly.
      74975d35
    • Michael Kruse's avatar
      Revert "[AssumptionCache] Avoid dangling llvm.assume calls in the cache" · 606aa622
      Michael Kruse authored
      This reverts commit b7d870ea and the
      subsequent fix "[Polly] Fix build after AssumptionCache change (D96168)"
      (commit e6810cab).
      
      It caused indeterminism in the output, such that e.g. the
      polly-x86_64-linux buildbot failed accasionally.
      606aa622
    • Mark de Wever's avatar
      [libc++][format] Enable format_error on older compilers. · f8772da8
      Mark de Wever authored
      It seems like modifying the header doesn't cause libc++ to be rebuild.
      So the breakage of the previous commit didn't happen on my system.
      
      This should fix the build of https://buildkite.com/mlir/mlir-core
      f8772da8
    • Leandro Vaz's avatar
      [flang] Fix typo in FlangConfig.cmake.in. · 204360fd
      Leandro Vaz authored
      `find_package(Flang)` does not work as there is a missing `@` in the
      FlangConfig.cmake.in file. This patch fixes the issue.
      
      Reviewed By: thopre
      
      Differential Revision: https://reviews.llvm.org/D96484
      204360fd
    • Mark de Wever's avatar
      [libc++][format] Improve Add basic_format_parse_context. · af83e89a
      Mark de Wever authored
      Add an additional guard to prevent building on older clang versions.
      
      This should fix the build of https://buildkite.com/mlir/mlir-core
      af83e89a
    • Fangrui Song's avatar
      0dc6122d
    • David Green's avatar
      [ARM] Single source vmovnt tests. NFC · 0f60ed12
      David Green authored
      0f60ed12
    • Jay Foad's avatar
      [AMDGPU] Better selection of base offset when merging DS reads/writes · 23db2d36
      Jay Foad authored
      When merging a pair of DS reads or writes needs to materialize the base
      offset in a vgpr, choose a value that is aligned to as high a power of
      two as possible. This maximises the chance that different pairs can use
      the same base offset, in which case the base offset registers can be
      commoned up by MachineCSE.
      
      Differential Revision: https://reviews.llvm.org/D96421
      23db2d36
    • Craig Topper's avatar
      [TargetLowering][RISCV][AArch64][PowerPC] Enable BuildUDIV/BuildSDIV on... · 5744502a
      Craig Topper authored
      [TargetLowering][RISCV][AArch64][PowerPC] Enable BuildUDIV/BuildSDIV on illegal types before type legalization if we can find a larger legal type that supports MUL.
      
      If we wait until the type is legalized, we'll lose information
      about the orginal type and need to use larger magic constants.
      This gets especially bad on RISCV64 where i64 is the only legal
      type.
      
      I've limited this to simple scalar types so it only works for
      i8/i16/i32 which are most likely to occur. For more odd types
      we might want to do a small promotion to a type where MULH is legal
      instead.
      
      Unfortunately, this does prevent some urem/srem+seteq matching since
      that still require legal types.
      
      Reviewed By: RKSimon
      
      Differential Revision: https://reviews.llvm.org/D96210
      5744502a
    • Fangrui Song's avatar
      [ELF] Resolve defined symbols before undefined symbols · 0557b1bd
      Fangrui Song authored
      When parsing an object file, LLD interleaves undefined symbol resolution (which
      may recursively fetch other lazy objects) with defined symbol resolution.
      
      This may lead to surprising results, e.g. if an object file defines currently
      undefined symbols and references another lazy symbol, we may interleave defined
      symbols with the lazy fetch, potentially leading to the defined symbols
      resolving to different files.
      
      As an example, if both `a.a(a.o)` and `a.a(b.o)` define `foo` (not in COMDAT
      group, or in different COMDAT groups) and `__profd_foo` (in COMDAT group
      `__profd_foo`).  LLD may resolve `foo` to `a.a(a.o)` and `__profd_foo` to
      `b.a(b.o)`, i.e. different files.
      
      ```
      parse ArchiveFile a.a
        entry fetches a.a(a.o)
        parse ObjectFile a.o
          define entry
          define foo
          reference b
          b fetches a.a(b.o)
          parse ObjectFile b.o
            define prevailing __profd_foo
          define (ignored) non-prevailing __profd_foo
      ```
      
      Assuming a set of interconnected symbols are defined all or none in several lazy
      objects. Arguably making them resolve to the same file is preferable than making
      them resolve to different files (some are lazy objects).
      
      The main argument favoring the new behavior is the stability. The relative order
      between a defined symbol and an undefined symbol does not change the symbol
      resolution behavior.  Only the relative order between two undefined symbols can
      affect fetching behaviors.
      
      ---
      
      The real world case is reduced from a Fuchsia PGO usage: `a.a(a.o)` has a
      constructor within COMDAT group C5 while `a.a(b.o)` has a constructor within
      COMDAT group C2. Because they use different group signatures, they are not
      de-duplicated. It is not entirely whether Clang behavior is entirely conforming.
      
      LLD selects the PGO counter section (`__profd_*`) from `a.a(b.o)` and the
      constructor section from `a.a(a.o)`. The `__profd_*` is a SHF_LINK_ORDER section
      linking to its own non-prevailing constructor section, so LLD errors
      `sh_link points to discarded section`. This patch fixes the error.
      
      Differential Revision: https://reviews.llvm.org/D95985
      0557b1bd
    • Nico Weber's avatar
      [gn build] port ed98676f · 18d38b24
      Nico Weber authored
      18d38b24
    • Stella Stamenova's avatar
      Support multi-configuration generators correctly in several config files · ed98676f
      Stella Stamenova authored
      Multi-configuration generators (such as Visual Studio and Xcode) allow the specification of a build flavor at build time instead of config time, so the lit configuration files need to support that - and they do for the most part. There are several places that had one of two issues (or both!):
      
      1) Paths had %(build_mode)s set up, but then not configured, resulting in values that would not work correctly e.g. D:/llvm-build/%(build_mode)s/bin/dsymutil.exe
      2) Paths did not have %(build_mode)s set up, but instead contained $(Configuration) (which is the value for Visual Studio at configuration time, for Xcode they would have had the equivalent) e.g. "D:/llvm-build/$(Configuration)/lib".
      
      This seems to indicate that we still have a lot of fragility in the configurations, but also that a number of these paths are never used (at least on Windows) since the errors appear to have been there a while.
      
      This patch fixes the configurations and it has been tested with Ninja and Visual Studio to generate the correct paths. We should consider removing some of these settings altogether.
      
      Reviewed By: JDevlieghere, mehdi_amini
      
      Differential Revision: https://reviews.llvm.org/D96427
      ed98676f
    • Adhemerval Zanella's avatar
      [sanitizer] Fix suffix-log-path_test.c on arm-linux-gnu · 88d1724d
      Adhemerval Zanella authored
      The recent suffix-log-path_test.c checks for a full stacktrace and
      since on some arm-linux-gnu configuration the slow unwinder is used
      on default (when the compiler emits thumb code as default), it
      requires -funwind-tables on tests.
      
      It also seems to fix the issues disable by d025df3c.
      
      Reviewed By: ostannard
      
      Differential Revision: https://reviews.llvm.org/D96337
      88d1724d
    • Florian Hahn's avatar
      [LV] Add tests showing suboptimal vectorization for narrow types. · d5387ec2
      Florian Hahn authored
      This patch adds additional test cases showing missing/sub-optimal
      vectorization for loops which contain small and wider memory ops on
      AArch64.
      d5387ec2
    • Sourabh Singh Tomar's avatar
      [flang] Remove `LINK_WITH_FIR` cmake switch · 6a7deff5
      Sourabh Singh Tomar authored
      Most components required for this are already there.
      
      Build and Testing clean.
      ninja check-flang
      
      Reviewed By: clementval, tskeith
      
      Differential Revision: https://reviews.llvm.org/D96411
      6a7deff5
    • Craig Topper's avatar
      [RISCV] Add support loads, stores, and splats of vXi1 fixed vectors. · 033b1bd1
      Craig Topper authored
      This refines how we determine which masks types are legal and adds
      support for loads, stores, and all ones/zeros splats.
      
      I left a fixme in store handling where I think we need to zero
      extra bits if the type isn't a multiple of a byte. If I remember
      right from X86 there was some case we could have a store of a
      1, 2, or 4 bit mask and have a scalar zextload that then expected the
      bits to be 0. Its tricky to zero the bits with RVV. We need to do
      something like round VL up, zero a register, lower the VL back down,
      then do a tail undisturbed move into the zero register. Another
      option might be to generate a mask of 1/2/4 bits set with a VL of 8
      and use that to mask off the bits.
      
      Reviewed By: frasercrmck
      
      Differential Revision: https://reviews.llvm.org/D96468
      033b1bd1
    • Simon Pilgrim's avatar
      [DAG] foldLogicOfSetCCs - Generalize and/or (setcc X, CMax, ne), (setcc X, CMin, ne/eq) fold. NFCI. · 5beebf9c
      Simon Pilgrim authored
      Prep work to add support for non-uniform vectors - replace APInt values with using the SDValue ops directly.
      5beebf9c
    • Mark de Wever's avatar
      [libc++][format] Add basic_format_parse_context. · 38ddeade
      Mark de Wever authored
      Implements parts of:
      - P0645 Text Formatting
      
      Depends on D92214
      
      Reland with changes:
      The format header will only be compiled if the compiler used has support
      for concepts. This should fix the issues with the initial version.
      
      Differential Revision: https://reviews.llvm.org/D93166
      38ddeade
    • Nico Weber's avatar
      [gn build] Port 7e3b9aba · 1739e7ed
      Nico Weber authored
      1739e7ed
    • clementval's avatar
      Revert "[flang][fir][NFC] Move BoxType to TableGen type definition" · 661f9e2a
      clementval authored
      This reverts commit d96bb48f.
      661f9e2a
    • Yonghong Song's avatar
      BPF: Implement TTI.IntImmCost() properly · a260ae71
      Yonghong Song authored
      This patch implemented TTI.IntImmCost() properly.
      Each BPF insn has 32bit immediate space, so for any immediate
      which can be represented as 32bit signed int, the cost
      is technically free. If an int cannot be presented as
      a 32bit signed int, a ld_imm64 instruction is needed
      and a TCC_Basic is returned.
      
      This change is motivated when we observed that
      several bpf selftests failed with latest llvm trunk, e.g.,
        #10/16 strobemeta.o:FAIL
        #10/17 strobemeta_nounroll1.o:FAIL
        #10/18 strobemeta_nounroll2.o:FAIL
        #10/19 strobemeta_subprogs.o:FAIL
        #96 snprintf_btf:FAIL
      
      The reason of the failure is due to that
      SpeculateAroundPHIsPass did aggressive transformation
      which alters control flow for which currently verifer
      cannot handle well. In llvm12, SpeculateAroundPHIsPass
      is not called.
      
      SpeculateAroundPHIsPass relied on TTI.getIntImmCost()
      and TTI.getIntImmCostInst() for profitability
      analysis. This patch implemented TTI.getIntImmCost()
      properly for BPF backend which also prevented
      transformation which caused the above test failures.
      
      Differential Revision: https://reviews.llvm.org/D96448
      a260ae71
    • Alex Hoppen's avatar
      [Timer] On macOS count number of executed instructions · 7e3b9aba
      Alex Hoppen authored
      In addition to wall time etc. this should allow us to get less noisy
      values for time measurements.
      
      Reviewed By: JDevlieghere
      
      Differential Revision: https://reviews.llvm.org/D96049
      7e3b9aba
    • Valentin Clement's avatar
      [flang][fir][NFC] Move BoxType to TableGen type definition · d96bb48f
      Valentin Clement authored
      This patch is a follow up of D96422 and move BoxType to TableGen.
      
      Reviewed By: mehdi_amini
      
      Differential Revision: https://reviews.llvm.org/D96476
      d96bb48f
    • Raphael Isemann's avatar
      [lldb] Fix that running a top level expression without a process fails with a cryptic error · 71536fd0
      Raphael Isemann authored
      Right now when running `expr --top-level -- void foo() {}`, LLDB just prints a cryptic
      `error: Couldn't find $__lldb_expr() in the module` error. The reason for that is
      that if we don't have a running process, we try to set our execution policy to always use the
      IR interpreter (ExecutionPolicyNever) which works even without a process. However
      that code didn't consider the special ExecutionPolicyTopLevel which we use for
      top-level expressions. By changing the execution policy to ExecutionPolicyNever,
      LLDB thinks we're actually trying to interpret a normal expression inside our
      `$__lldb_expr` function and then fails when looking for it.
      
      This just adds an exception for top-level expressions to that code and a bunch of tests.
      
      Reviewed By: shafik
      
      Differential Revision: https://reviews.llvm.org/D91723
      71536fd0
  2. Feb 11, 2021
    • Nicolas Vasilache's avatar
    • Raphael Isemann's avatar
      [lldb] Don't emit a warning when using Objective-C getters in expressions · 19b4d3ce
      Raphael Isemann authored
      Clang emits a warning when accessing an Objective-C getter but not using the result.
      This gets triggered when just trying to print a getter value in the expression parser (where
      Clang just sees a normal expression like `obj.getter` while parsing).
      
      This patch just disables the warning in the expression parser (similar to what we do with
      the C++ equivalent of just accessing a member variable but not doing anything with it).
      
      Reviewed By: kastiglione
      
      Differential Revision: https://reviews.llvm.org/D94307
      19b4d3ce
    • David Green's avatar
      [ARM] Add CostKind to getMVEVectorCostFactor. · b1ef919a
      David Green authored
      This adds the CostKind to getMVEVectorCostFactor, so that it can
      automatically account for CodeSize costs, where it returns a cost of 1
      not the MVEFactor used for Throughput/Latency. This helps simplify the
      caller code and allows us to get the codesize cost more correct in more
      cases.
      b1ef919a
    • Aaron Ballman's avatar
      Store the calculated constant expression value into the ConstantExpr object · 059a335e
      Aaron Ballman authored
      With https://reviews.llvm.org/D63376, we began storing the APValue
      directly into the ConstantExpr object so that we could reuse the
      calculated value later. However, it missed a case when not in C++11
      mode but the expression is known to be constant.
      059a335e
    • Raphael Isemann's avatar
      [lldb] Log the actual expression result in UserExpression::Evaluate · e87b8e44
      Raphael Isemann authored
      This used to be a LLDB_LOGF call that used the printf %s syntax.
      0ab109d4 changed it to LLDB_LOG but didn't
      update this format string to use formatv's syntax so this just printed '%s'.
      e87b8e44
    • Thomas Preud'homme's avatar
      Improve STRICT_FSETCC codegen in absence of no NaN · bad0290c
      Thomas Preud'homme authored
      As for SETCC, use a less expensive condition code when generating
      STRICT_FSETCC if the node is known not to have Nan.
      
      Reviewed By: SjoerdMeijer
      
      Differential Revision: https://reviews.llvm.org/D91972
      bad0290c
    • Andy Wingo's avatar
      [lld][WebAssembly] Common superclass for input globals/events/tables · a56e5749
      Andy Wingo authored
      This commit regroups commonalities among InputGlobal, InputEvent, and
      InputTable into the new InputElement.  The subclasses are defined
      inline in the new InputElement.h.  NFC.
      
      Reviewed By: sbc100
      
      Differential Revision: https://reviews.llvm.org/D94677
      a56e5749
    • Joe Ellis's avatar
      [DebugInfo] Only perform TypeSize -> unsigned cast when necessary · 67464dfe
      Joe Ellis authored
      This commit moves a line in SelectionDAGBuilder::handleDebugValue to
      avoid implicitly casting a TypeSize object to an unsigned earlier than
      necessary. It was possible that we bail out of the loop before the value
      is ever used, which means we could create a superfluous TypeSize
      warning.
      
      Reviewed By: DavidTruby
      
      Differential Revision: https://reviews.llvm.org/D96423
      67464dfe
    • Alex Zinenko's avatar
      [mlir] make ModuleTranslation mapping fields private · 0881a4f1
      Alex Zinenko authored
      ModuleTranslation contains multiple fields that keep track of the mappings
      between various MLIR and LLVM IR components. The original ModuleTranslation
      extension model was based on inheritance, with these fields being protected and
      thus accessible in the ModuleTranslation and derived classes. The
      inheritance-based model doesn't scale to translation of more than one derived
      dialect and will be progressively replaced with a more flexible one based on
      dialect interfaces and a translation state that is separate from
      ModuleTranslation. This change prepares the replacement by making the mappings
      private and providing public methods to access them.
      
      Depends On D96436
      
      Reviewed By: mehdi_amini
      
      Differential Revision: https://reviews.llvm.org/D96437
      0881a4f1
    • Alex Zinenko's avatar
      [mlir] Make JitRunnerMain main take a DialectRegistry · 9a08f760
      Alex Zinenko authored
      Historically, JitRunner has been registering all available dialects with the
      context and depending on them without the real need. Make it take a registry
      that contains only the dialects that are expected in the input and stop linking
      in all dialects.
      
      Reviewed By: mehdi_amini
      
      Differential Revision: https://reviews.llvm.org/D96436
      9a08f760
    • Valeriy Savchenko's avatar
      [Attr] Apply GNU-style attributes to expression statements · 81a97077
      Valeriy Savchenko authored
      Before this commit, expression statements could not be annotated
      with statement attributes.  Whenever parser found attribute, it
      unconditionally assumed that it was followed by a declaration.
      This not only doesn't allow expression attributes to have attributes,
      but also produces spurious error diagnostics.
      
      In order to maintain all previously compiled code, we still assume
      that GNU attributes are followed by declarations unless ALL of those
      are statement attributes.  And even in this case we are not forcing
      the parser to think that it should parse a statement, but rather
      let it proceed as if no attributes were found.
      
      Differential Revision: https://reviews.llvm.org/D93630
      81a97077
    • Pavel Labath's avatar
      [lldb/test] Automatically find debug servers to test · 7df4eaaa
      Pavel Labath authored
      Our test configuration logic assumes that the tests can be run either
      with debugserver or with lldb-server. This is not entirely correct,
      since lldb server has two "personalities" (platform server and debug
      server) and debugserver is only a replacement for the latter.
      
      A consequence of this is that it's not possible to test the platform
      behavior of lldb-server on macos, as it is not possible to get a hold of
      the lldb-server binary.
      
      One solution to that would be to duplicate the server configuration
      logic to be able to specify both executables. However, that seems
      excessively redundant.
      
      A well-behaved lldb should be able to find the debug server on its own,
      and testing lldb with a different (lldb-|debug)server does not seem very
      useful (even in the out-of-tree debugserver setup, we copy the server
      into the build tree to make it appear "real").
      
      Therefore, this patch deletes the configuration altogether and changes
      the low-level server retrieval functions to be able to both lldb-server
      and debugserver paths. They do this by consulting the "support
      executable" directory of the lldb under test.
      
      Differential Revision: https://reviews.llvm.org/D96202
      7df4eaaa
    • Simon Tatham's avatar
      [ARM] Copy-paste error in ARMv87a architecture definition. · 69f1a7ad
      Simon Tatham authored
      In the tablegen architecture definition, the Name field for the
      ARMv87a record read "ARMv86a". All the other records contain their own
      names.
      
      Corrected it to "ARMv87a", and added the necessary value in
      ARMArchEnum for that to refer to.
      
      Reviewed By: pratlucas
      
      Differential Revision: https://reviews.llvm.org/D96493
      69f1a7ad