platform/upstream/llvm.git
3 years agoFix MSVC "truncation from 'int' to 'bool'" warning. NFCI.
Simon Pilgrim [Thu, 8 Jul 2021 16:51:32 +0000 (17:51 +0100)]
Fix MSVC "truncation from 'int' to 'bool'" warning. NFCI.

3 years ago[CostModel][X86] Account for older SSE targets with slow fp->int conversions
Simon Pilgrim [Thu, 8 Jul 2021 16:21:08 +0000 (17:21 +0100)]
[CostModel][X86] Account for older SSE targets with slow fp->int conversions

Both the conversion cost and the xmm->gpr transfer cost tend to be a lot higher on early SSE targets

3 years ago[LangRef] Clarify !associated
Fangrui Song [Thu, 8 Jul 2021 17:07:10 +0000 (10:07 -0700)]
[LangRef] Clarify !associated

Notably, a global variable with the metadata should generally not be referenced
by a function function. E.g. -fstack-size-section usage is fine, but
-fsanitize-coverage= used to have a linker GC problem (fixed by D97430).

Reviewed By: eugenis

Differential Revision: https://reviews.llvm.org/D104933

3 years ago[mlir][sparse] updated setter/getter comments
Aart Bik [Wed, 7 Jul 2021 23:09:22 +0000 (16:09 -0700)]
[mlir][sparse] updated setter/getter comments

For the getters, it is bad practice to keep the reference
around for too long, as explained in the new comment

Reviewed By: gussmith23

Differential Revision: https://reviews.llvm.org/D105599

3 years ago[AMDGPU] Set LoopInfo as preserved by SIAnnotateControlFlow
Stanislav Mekhanoshin [Wed, 7 Jul 2021 19:28:30 +0000 (12:28 -0700)]
[AMDGPU] Set LoopInfo as preserved by SIAnnotateControlFlow

The pass does not change loops, it just adds calls.

Differential Revision: https://reviews.llvm.org/D105583

3 years ago[libc++][ci] Stop testing on GCC previous, since we don't support it anymore
Louis Dionne [Thu, 8 Jul 2021 16:14:31 +0000 (12:14 -0400)]
[libc++][ci] Stop testing on GCC previous, since we don't support it anymore

This is the first of a few commits that update the CI to match the
recently officialized compiler support policy. I'm staging those
changes to try and keep the CI green at all times, accounting how
builders refresh their Docker image.

3 years ago[IR] Restore vector support for deprecated CreateGEP methods
Nikita Popov [Thu, 8 Jul 2021 15:49:56 +0000 (17:49 +0200)]
[IR] Restore vector support for deprecated CreateGEP methods

As pointed out in post-commit review on rG8e22539067d9, it's
necessary to call getScalarType() to support GEPs with a vector
base. Dropping that call was an oversight on my side.

3 years ago[libc++][docs] Update documentation to reflect libc++'s compiler support policy
Louis Dionne [Tue, 6 Jul 2021 19:47:29 +0000 (15:47 -0400)]
[libc++][docs] Update documentation to reflect libc++'s compiler support policy

In https://lists.llvm.org/pipermail/llvm-dev/2021-March/148881.html, we
discussed updating the compiler support policy for libc++ to match more
closely what we do actually support.

This commit enshrines that policy decision in libc++'s documentation.

Differential Revision: https://reviews.llvm.org/D105563

3 years ago[libc++] Workaround failures with modules on Clang ToT
Louis Dionne [Thu, 8 Jul 2021 15:11:07 +0000 (11:11 -0400)]
[libc++] Workaround failures with modules on Clang ToT

3 years ago[DebugInfo][InstrRef][4/4] Support DBG_INSTR_REF through all backend passes
Jeremy Morse [Wed, 2 Jun 2021 14:58:03 +0000 (15:58 +0100)]
[DebugInfo][InstrRef][4/4] Support DBG_INSTR_REF through all backend passes

This is a cleanup patch -- we're now able to support all flavours of
variable location in instruction referencing mode. This patch updates
various tests for debug instructions to be broader: numerous code paths
try to ignore debug isntructions, and they now have to ignore the
additional DBG_PHI and DBG_INSTR_REFs that we can generate.

A small amount of rework happens for LiveDebugVariables: as we don't need
to track live intervals through regalloc any more, we can get away with
unlinking debug instructions before regalloc, then re-inserting them after.
Note that this isn't (yet) true of DBG_VALUE_LISTs, they still have to go
through live interval tracking.

In SelectionDAG, add a helper lambda that emits half-formed DBG_INSTR_REFs
for arguments in instr-ref mode, DBG_VALUE otherwise. This is one of the
final locations where DBG_VALUEs are emitted for vreg arguments.

X86InstrInfo now un-sets the debug instr number on SUB instructions that
get mutated into CMP instructions. As the instruction no longer computes a
subtraction, we can't use it for variable locations.

Differential Revision: https://reviews.llvm.org/D88898

3 years ago[gn build] Port 321c2ea91cb1
LLVM GN Syncbot [Thu, 8 Jul 2021 15:35:54 +0000 (15:35 +0000)]
[gn build] Port 321c2ea91cb1

3 years ago[libc++][NFC] Move monostate to its own header.
Mark de Wever [Wed, 7 Jul 2021 19:27:27 +0000 (21:27 +0200)]
[libc++][NFC] Move monostate to its own header.

The format library uses `std::monostate`, but not a `std::variant`.
Moving `std::monostate` to its own header allows the format library to
reduce the amount of included code.

Reviewed By: #libc, ldionne

Differential Revision: https://reviews.llvm.org/D105582

3 years ago[libc++] Guard testing implementation details.
Mark de Wever [Wed, 7 Jul 2021 18:22:19 +0000 (20:22 +0200)]
[libc++] Guard testing implementation details.

The unit tests test some implementation details. As @Quuxplusone pointed
out in D96664 this should only be tested when the tests use libc++. This
addresses the issue for code already in main.

Reviewed By: #libc, ldionne

Differential Revision: https://reviews.llvm.org/D105568

3 years agoRecommit: Support: add llvm::thread class that supports specifying stack size.
Tim Northover [Wed, 26 May 2021 10:25:11 +0000 (11:25 +0100)]
Recommit: Support: add llvm::thread class that supports specifying stack size.

This adds a new llvm::thread class with the same interface as std::thread
except there is an extra constructor that allows us to set the new thread's
stack size. On Darwin even the default size is boosted to 8MB to match the main
thread.

It also switches all users of the older C-style `llvm_execute_on_thread` API
family over to `llvm::thread` followed by either a `detach` or `join` call and
removes the old API.

Moved definition of DefaultStackSize into the .cpp file to hopefully
fix the build on some (GCC-6?) machines.

3 years ago[Instcombine]Transform reduction+(sext/zext(<n x i1>) to <n x im>) to [-]zext/trunc...
Alexey Bataev [Wed, 7 Jul 2021 20:02:54 +0000 (13:02 -0700)]
[Instcombine]Transform reduction+(sext/zext(<n x i1>) to <n x im>) to [-]zext/trunc(ctpop(bitcast <n x i1> to in)) to im.

Some of the SPEC tests end up with reduction+(sext/zext(<n x i1>) to <n x im>) pattern, which can be transformed to [-]zext/trunc(ctpop(bitcast <n x i1> to in)) to im.
Also, reduction+(<n x i1>) can be transformed to ctpop(bitcast <n x i1> to in) & 1 != 0.

Differential Revision: https://reviews.llvm.org/D105587

3 years ago[Internalize] Preserve variables externally initialized.
Michael Liao [Tue, 29 Jun 2021 15:03:52 +0000 (11:03 -0400)]
[Internalize] Preserve variables externally initialized.

- ``externally_initialized`` variables would be initialized or modified
  elsewhere. Particularly, CUDA or HIP may have host code to initialize
  or modify ``externally_initialized`` device variables, which may not
  be explicitly referenced on the device side but may still be used
  through the host side interfaces. Not preserving them triggers the
  elimination of them in the GlobalDCE and breaks the user code.

Reviewed By: yaxunl

Differential Revision: https://reviews.llvm.org/D105135

3 years ago[mlir] Fully qualify types and expressions in Interfaces
Markus Böck [Thu, 8 Jul 2021 14:44:16 +0000 (16:44 +0200)]
[mlir] Fully qualify types and expressions in Interfaces

This patch adds full qualification to the types and function calls used inside of (Static)InterfaceMethod in OpInterfaces. Without this patch using many of these interfaces in a downstream project yields compiler errors as the types and default implementations are mostly copied verbatim. Without then putting using namespace mlir; in the header file of the implementations of those interfaces, compilation is impossible.

Using fully qualified lookup fixes this issue.

Differential Revision: https://reviews.llvm.org/D105619

3 years ago[Instcombine][NFC]Add a test for reduce+([sext/zext](<n x i1)) case, NFC.
Alexey Bataev [Thu, 8 Jul 2021 14:38:11 +0000 (07:38 -0700)]
[Instcombine][NFC]Add a test for reduce+([sext/zext](<n x i1)) case, NFC.

3 years ago[amdgpu] Remove the GlobalDCE pass prior to the internalization pass.
Michael Liao [Wed, 7 Jul 2021 20:44:47 +0000 (16:44 -0400)]
[amdgpu] Remove the GlobalDCE pass prior to the internalization pass.

- In [D98783](https://reviews.llvm.org/D98783), an extra GlobalDCE pass
  is inserted before the internalization pass to ensure a global
  variable without users could be internalized even if there are dead
  users. Instead of inserting a dedicated optimization pass, the
  dead user checking, i.e. 'use_empty()', should be preceeded with
  constant dead user removal to ensure an accurate result.

Differential Revision: https://reviews.llvm.org/D105590

3 years agoRevert "Support: add llvm::thread class that supports specifying stack size."
Tim Northover [Thu, 8 Jul 2021 13:59:47 +0000 (14:59 +0100)]
Revert "Support: add llvm::thread class that supports specifying stack size."

It's causing build failures because DefaultStackSize isn't defined everywhere
it should be and I need time to investigate.

3 years agoSupport: add llvm::thread class that supports specifying stack size.
Tim Northover [Wed, 26 May 2021 10:25:11 +0000 (11:25 +0100)]
Support: add llvm::thread class that supports specifying stack size.

This adds a new llvm::thread class with the same interface as std::thread
except there is an extra constructor that allows us to set the new thread's
stack size. On Darwin even the default size is boosted to 8MB to match the main
thread.

It also switches all users of the older C-style `llvm_execute_on_thread` API
family over to `llvm::thread` followed by either a `detach` or `join` call and
removes the old API.

3 years ago[NFC] Mark Expected<T>::assertIsChecked() as const
xndcn [Thu, 1 Jul 2021 15:21:29 +0000 (23:21 +0800)]
[NFC] Mark Expected<T>::assertIsChecked() as const

Some const methods of Expected<T> invoke assertIsChecked(),
so we should mark it as const too.

Differential Revision: https://reviews.llvm.org/D105292

3 years ago[mlir-reduce] Fix the memory leak and recycle unused modules.
Chia-hung Duan [Thu, 8 Jul 2021 12:03:23 +0000 (20:03 +0800)]
[mlir-reduce] Fix the memory leak and recycle unused modules.

Reviewed By: jpienaar

Differential Revision: https://reviews.llvm.org/D105416

3 years ago[AArch64][SVE] Add ISel patterns for floating point compare with zero instructions
Bradley Smith [Tue, 6 Jul 2021 14:12:04 +0000 (15:12 +0100)]
[AArch64][SVE] Add ISel patterns for floating point compare with zero instructions

Additionally, lower the floating point compare SVE intrinsics to
SETCC_MERGE_ZERO ISD nodes to avoid duplicating ISel patterns.

Differential Revision: https://reviews.llvm.org/D105486

3 years ago[Test] Add loop deletion switch tests
Max Kazantsev [Thu, 8 Jul 2021 10:27:18 +0000 (17:27 +0700)]
[Test] Add loop deletion switch tests

Patch by Dmitry Makogon!

Differential Revision: https://reviews.llvm.org/D105543

3 years agoRevert "[mlir][MemRef] Fix DimOp folding of OffsetSizeAndStrideInterface."
Nicolas Vasilache [Thu, 8 Jul 2021 10:09:00 +0000 (10:09 +0000)]
Revert "[mlir][MemRef] Fix DimOp folding of OffsetSizeAndStrideInterface."

This reverts commit 6c0fd4db79f2def432f761627bb8c7d4171a3237.

This simple implementation is unfortunately not extensible and needs to be reverted.
The extensible way should be to extend https://reviews.llvm.org/D104321.

3 years ago[IR] Added operator delete to subclasses of User to avoid UB
Moritz Sichert [Wed, 26 May 2021 08:50:15 +0000 (10:50 +0200)]
[IR] Added operator delete to subclasses of User to avoid UB

Several subclasses of User override operator new without also overriding
operator delete. This means that delete expressions fall back to using
operator delete of the base class, which would be User. However, this is
only allowed if the base class has a virtual destructor which is not the
case for User, so this is UB.

See also [expr.delete] (3) for the exact wording.

This is actually detected in some cases by GCC 11's
-Wmismatched-new-delete now which is how I found this error.

Differential Revision: https://reviews.llvm.org/D103143

3 years ago[libcxx] [test] Fix spurious failures in the thread detach test on Windows
Martin Storsjö [Wed, 7 Jul 2021 21:06:08 +0000 (21:06 +0000)]
[libcxx] [test] Fix spurious failures in the thread detach test on Windows

Make sure that the detached thread has started up before exiting
the process.

If the detached thread hasn't started up at all, and the main thread
exits, global data structures in the process are torn down, which
then can cause crashes when the thread starts up late after required
mutexes have been destroyed. (In particular, the mutex used internally
in _Init_thread_header, which is used in the initialization of
__thread_local_data()::__p, can cause crashes if the main thread already
has finished and progressed far with destruction.)

Differential Revision: https://reviews.llvm.org/D105592

3 years ago[mlir][linalg][python] Add exp and log to the OpDSL.
Tobias Gysi [Thu, 8 Jul 2021 08:48:23 +0000 (08:48 +0000)]
[mlir][linalg][python] Add exp and log to the OpDSL.

Introduce the exp and log function in OpDSL. Add the soft plus operator to test the emitted IR in Python and C++.

Reviewed By: nicolasvasilache

Differential Revision: https://reviews.llvm.org/D105420

3 years ago[mlir][linalg] Remove GenericOpBase.
Tobias Gysi [Thu, 8 Jul 2021 07:02:15 +0000 (07:02 +0000)]
[mlir][linalg] Remove GenericOpBase.

Remove the GenericOpBase class formerly used to factor out common logic shared be GenericOp and IndexedGenericOp. After removing IndexedGenericOp, the base class is not used anymore.

Differential Revision: https://reviews.llvm.org/D105307

3 years ago[mlir][MemRef] Fix DimOp folding of OffsetSizeAndStrideInterface.
Nicolas Vasilache [Wed, 7 Jul 2021 16:11:10 +0000 (16:11 +0000)]
[mlir][MemRef] Fix DimOp folding of OffsetSizeAndStrideInterface.

This addresses the issue reported in

https://llvm.discourse.group/t/rank-reducing-memref-subview-offsetsizeandstrideopinterface-interface-issues/3805

Differential Revision: https://reviews.llvm.org/D105558

3 years ago[mlir] factor out ConvertToLLVMPattern
Alex Zinenko [Wed, 7 Jul 2021 09:45:27 +0000 (11:45 +0200)]
[mlir] factor out ConvertToLLVMPattern

This class and classes that extend it are general utilities for any dialect
that is being converted into the LLVM dialect. They are in no way specific to
Standard-to-LLVM conversion and should not make their users depend on it.

Reviewed By: nicolasvasilache

Differential Revision: https://reviews.llvm.org/D105542

3 years ago[AMDGPU] Fix typo
Sebastian Neubauer [Thu, 8 Jul 2021 08:07:33 +0000 (10:07 +0200)]
[AMDGPU] Fix typo

3 years ago[lld/mac] Fix warning about unused variable [NFC]
Mikael Holmen [Thu, 8 Jul 2021 07:46:30 +0000 (09:46 +0200)]
[lld/mac] Fix warning about unused variable [NFC]

Change "dyn_cast" to "isa" to get rid of the unused
variable "bitcodeFile".

gcc warned with

lld/MachO/Driver.cpp:531:17: warning: unused variable 'bitcodeFile' [-Wunused-variable]
531 |       if (auto *bitcodeFile = dyn_cast<BitcodeFile>(file)) {
    |                 ^~~~~~~~~~~

3 years ago[mlir][linalg] Tighter StructuredOp Verification.
Tobias Gysi [Thu, 8 Jul 2021 06:23:55 +0000 (06:23 +0000)]
[mlir][linalg] Tighter StructuredOp Verification.

Verify the number of results matches exactly the number of output tensors. Simplify the FillOp verification since part of it got redundant.

Differential Revision: https://reviews.llvm.org/D105427

3 years ago[ORC] Introduce ExecutorAddress type, fix broken LLDB bot.
Lang Hames [Thu, 8 Jul 2021 06:29:39 +0000 (16:29 +1000)]
[ORC] Introduce ExecutorAddress type, fix broken LLDB bot.

ExecutorAddressRange depended on JITTargetAddress, but JITTargetAddress is
defined in ExecutionEngine, which OrcShared should not depend on.

This seems like as good a time as any to introduce a new ExecutorAddress type
to eventually replace JITTargetAddress. For now it's just another uint64_t
alias, but it will soon be changed to a class type to provide greater type
safety.

3 years ago[ORC] Improve computeLocalDeps / computeNamedSymbolDependencies performance.
Lang Hames [Thu, 8 Jul 2021 05:29:47 +0000 (15:29 +1000)]
[ORC] Improve computeLocalDeps / computeNamedSymbolDependencies performance.

The computeNamedSymbolDependencies and computeLocalDeps methods on
ObjectLinkingLayerJITLinkContext are responsible for computing, for each symbol
in the current MaterializationResponsibility, the set of non-locally-scoped
symbols that are depended on. To calculate this we have to consider the effect
of chains of dependence through locally scoped symbols in the LinkGraph. E.g.

        .text
        .globl  foo
foo:
        callq   bar                    ## foo depneds on external 'bar'
        movq    Ltmp1(%rip), %rcx      ## foo depends on locally scoped 'Ltmp1'
        addl    (%rcx), %eax
        retq

        .data
Ltmp1:
        .quad   x                      ## Ltmp1 depends on external 'x'

In this example symbol 'foo' depends directly on 'bar', and indirectly on 'x'
via 'Ltmp1', which is locally scoped.

Performance of the existing implementations appears to have been mediocre:
Based on flame graphs posted by @drmeister (in #jit on the LLVM discord server)
the computeLocalDeps function was taking up a substantial amount of time when
starting up Clasp (https://github.com/clasp-developers/clasp).

This commit attempts to address the performance problems in three ways:

1. Using jitlink::Blocks instead of jitlink::Symbols as the nodes of the
dependencies-introduced-by-locally-scoped-symbols graph.

Using either Blocks or Symbols as nodes provides the same information, but since
there may be more than one locally scoped symbol per block the block-based
version of the dependence graph should always be a subgraph of the Symbol-based
version, and so faster to operate on.

2. Improved worklist management.

The older version of computeLocalDeps used a fixed worklist containing all
nodes, and iterated over this list propagating dependencies until no further
changes were required. The worklist was not sorted into a useful order before
the loop started.

The new version uses a variable work-stack, visiting nodes in DFS order and
only adding nodes when there is meaningful work to do on them.

Compared to the old version the new version avoids revisiting nodes which
haven't changed, and I suspect it converges more quickly (due to the DFS
ordering).

3. Laziness and caching.

Mappings of...

jitlink::Symbol* -> Interned Name (as SymbolStringPtr)
jitlink::Block* -> Immediate dependencies (as SymbolNameSet)
jitlink::Block* -> Transitive dependencies (as SymbolNameSet)

are all built lazily and cached while running computeNamedSymbolDependencies.

According to @drmeister these changes reduced Clasp startup time in his test
setup (averaged over a handful of starts) from 4.8 to 2.8 seconds (with
ORC/JITLink linking ~11,000 object files in that time), which seems like
enough to justify switching to the new algorithm in the absence of any other
perf numbers.

3 years ago[WebAssembly][lld] Fix segfault on .bss sections in mapfile
Thomas Lively [Thu, 8 Jul 2021 06:31:48 +0000 (23:31 -0700)]
[WebAssembly][lld] Fix segfault on .bss sections in mapfile

When memory is declared in the Wasm module, we rely on the implicit zero
initialization behavior and do not explicitly output .bss sections. The means
that they do not have associated `outputSec` entries, which was causing
segfaults in the mapfile support. Fix the issue by guarding against null
`outputSec` and falling back to using a zero offset.

Differential Revision: https://reviews.llvm.org/D102951

3 years ago[WebAssembly] Optimize out shift masks
Thomas Lively [Thu, 8 Jul 2021 06:14:31 +0000 (23:14 -0700)]
[WebAssembly] Optimize out shift masks

WebAssembly's shift instructions implicitly masks the shift count, so optimize
out redundant explicit masks of the shift count. For vector shifts, this
currently only works if the mask is applied before splatting the shift count,
but this should be addressed in a future commit. Resolves PR49655.

Differential Revision: https://reviews.llvm.org/D105600

3 years ago[ORC] Replace MachOJITDylibInitializers::SectionExtent with ExecutorAddressRange
Lang Hames [Thu, 8 Jul 2021 04:10:15 +0000 (14:10 +1000)]
[ORC] Replace MachOJITDylibInitializers::SectionExtent with ExecutorAddressRange

MachOJITDylibInitializers::SectionExtent represented the address range of a
section as an (address, size) pair. The new ExecutorAddressRange type
generalizes this to an address range (for any object, not necessarily a section)
represented as a (start-address, end-address) pair.

The aim is to express more of ORC (and the ORC runtime) in terms of simple types
that can be serialized/deserialized via SPS. This will simplify SPS-based RPC
involving arguments/return-values of these types.

3 years ago[ORC] Fix file comments.
Lang Hames [Wed, 7 Jul 2021 11:16:06 +0000 (21:16 +1000)]
[ORC] Fix file comments.

3 years agoRevert "[MCA] [AMDGPU] Adding an implementation to AMDGPUCustomBehaviour for handling...
Patrick Holland [Thu, 8 Jul 2021 03:48:42 +0000 (20:48 -0700)]
Revert "[MCA] [AMDGPU] Adding an implementation to AMDGPUCustomBehaviour for handling s_waitcnt instructions."

Build failures when building with shared libraries. Reverting until I can fix.

Differential Revision: https://reviews.llvm.org/D104730

3 years ago[PowerPC] Fix i64 to vector lowering on big endian
Qiu Chaofan [Thu, 8 Jul 2021 03:05:09 +0000 (11:05 +0800)]
[PowerPC] Fix i64 to vector lowering on big endian

Lowering for scalar to vector would skip if current subtarget is big
endian and the scalar is larger or equal than 64 bits. However there's
some issue in implementation that SToVRHS may refer to SToVLHS's scalar
size if SToVLHS is present, which leads to some crash.o

Reviewed By: nemanjai, shchenz

Differential Revision: https://reviews.llvm.org/D105094

3 years ago[AIX] Don't pass no-integrated-as by default
Jinsong Ji [Thu, 8 Jul 2021 02:24:48 +0000 (02:24 +0000)]
[AIX] Don't pass no-integrated-as by default

D105314 added the abibility choose to use AsmParser for parsing inline
asm. -no-intergrated-as will override this default if specified
explicitly.

If toolchain choose to use MCAsmParser for inline asm, don't pass
the option to disable integrated-as explictly unless set by user.

Reviewed By: #powerpc, shchenz

Differential Revision: https://reviews.llvm.org/D105512

3 years ago[gn build] (manually) port ef16c8eaa5cd5679759 (MCACustomBehaviorAMDGPU)
Nico Weber [Thu, 8 Jul 2021 01:59:07 +0000 (21:59 -0400)]
[gn build] (manually) port ef16c8eaa5cd5679759 (MCACustomBehaviorAMDGPU)

3 years ago[Bazel] Fixes for b5d847b1b95750d0af40cfc8c71a8fec50bb8613 and 6412a13539ab2914eed8e1...
Jordan Rupprecht [Wed, 7 Jul 2021 23:50:23 +0000 (16:50 -0700)]
[Bazel] Fixes for b5d847b1b95750d0af40cfc8c71a8fec50bb8613 and 6412a13539ab2914eed8e1df83c399b9a16e3408

3 years ago[gn build] (semi-manually) port 966386514bec
Nico Weber [Wed, 7 Jul 2021 23:27:19 +0000 (19:27 -0400)]
[gn build] (semi-manually) port 966386514bec

3 years ago[AMDGPU] Disable garbage collection passes
Stanislav Mekhanoshin [Wed, 7 Jul 2021 21:25:24 +0000 (14:25 -0700)]
[AMDGPU] Disable garbage collection passes

Differential Revision: https://reviews.llvm.org/D105593

3 years ago[compiler-rt][Fuchsia] Disable interceptors while enabling new/delete replacements
Leonard Chan [Wed, 2 Jun 2021 18:33:49 +0000 (11:33 -0700)]
[compiler-rt][Fuchsia] Disable interceptors while enabling new/delete replacements

This disables use of hwasan interceptors which we do not use on Fuchsia. This
explicitly sets the macro for defining the hwasan versions of new/delete.

Differential Revision: https://reviews.llvm.org/D103544

3 years ago[clang] disable P2266 simpler implicit moves under -fms-compatibility
Matheus Izvekov [Wed, 7 Jul 2021 00:22:45 +0000 (02:22 +0200)]
[clang] disable P2266 simpler implicit moves under -fms-compatibility

The Microsoft STL currently has some issues with P2266.
We disable it for now in that mode, but we might come back later with a
more targetted approach.

Signed-off-by: Matheus Izvekov <mizvekov@gmail.com>
Reviewed By: aaron.ballman

Differential Revision: https://reviews.llvm.org/D105518

3 years ago[compiler-rt][hwasan] Setup hwasan thread handling on Fuchsia
Leonard Chan [Fri, 11 Jun 2021 17:32:04 +0000 (10:32 -0700)]
[compiler-rt][hwasan] Setup hwasan thread handling on Fuchsia

This patch splits up hwasan thread creation between `__sanitizer_before_thread_create_hook`,
`__sanitizer_thread_create_hook`, and `__sanitizer_thread_start_hook`.
The linux implementation creates the hwasan thread object inside the
new thread. On Fuchsia, we know the stack bounds before thread creation,
so we can initialize part of the thread object in `__sanitizer_before_thread_create_hook`,
then initialize the stack ring buffer in `__sanitizer_thread_start_hook`
once we enter the thread.

Differential Revision: https://reviews.llvm.org/D104085

3 years ago[llvm-nm][test] Fix just-symbols.test
Fangrui Song [Wed, 7 Jul 2021 22:04:18 +0000 (15:04 -0700)]
[llvm-nm][test] Fix just-symbols.test

3 years ago[OpaquePtr] Use ArgListEntry::IndirectType for lowering ABI attributes
Arthur Eubanks [Wed, 7 Jul 2021 21:50:30 +0000 (14:50 -0700)]
[OpaquePtr] Use ArgListEntry::IndirectType for lowering ABI attributes

Consolidate PreallocatedType and ByValType into IndirectType, and use that for inalloca.

3 years ago[PowerPC] Add P7 RUN line for load and splat test
Jinsong Ji [Wed, 7 Jul 2021 21:35:56 +0000 (21:35 +0000)]
[PowerPC] Add P7 RUN line for load and splat test

3 years ago[OpaquePtr] Remove checking pointee type for byval/preallocated type
Arthur Eubanks [Wed, 7 Jul 2021 21:28:41 +0000 (14:28 -0700)]
[OpaquePtr] Remove checking pointee type for byval/preallocated type

These currently always require a type parameter. The bitcode reader
already upgrades old bitcode without the type parameter to use the
pointee type.

In cases where the caller does not have byval but the callee does, we
need to follow CallBase::paramHasAttr() and also look at the callee for
the byval type so that CallBase::isByValArgument() and
CallBase::getParamByValType() are in sync. Do the same for preallocated.

While we're here add a corresponding version for inalloca since we'll
need it soon.

Reviewed By: nikic

Differential Revision: https://reviews.llvm.org/D104663

3 years agoutils: add a revert checker
George Burgess IV [Wed, 7 Jul 2021 18:00:27 +0000 (11:00 -0700)]
utils: add a revert checker

Chrome OS and Android have found it useful to have an automated revert
checker. It was requested to upstream it, since other folks in the LLVM
community may also find value in it.

The tests depend on having a full (non-shallow) checkout of LLVM. This
seems reasonable to me, since:

- the tests should only be run if the user is developing on this script
- it's kind of hard to develop on this script without local git history
  :)

If people really want, the tests' dependency on LLVM's history can be
removed. It's mostly just effort/complexity that doesn't seem necessary.

Differential Revision: https://reviews.llvm.org/D105578

3 years ago[MCA] [AMDGPU] Adding an implementation to AMDGPUCustomBehaviour for handling s_waitc...
Patrick Holland [Sat, 19 Jun 2021 00:33:19 +0000 (17:33 -0700)]
[MCA] [AMDGPU] Adding an implementation to AMDGPUCustomBehaviour for handling s_waitcnt instructions.

This commit also makes some slight changes to the scheduling model for AMDGPU to set the RetireOOO flag for all scheduling classes.

This flag is only used by llvm-mca and allows instructions to retire out of order.

See the differential link below for a deeper explanation of everything.

Differential Revision: https://reviews.llvm.org/D104730

3 years ago[ARM] Add some opaque pointer gather/scatter tests. NFC
David Green [Wed, 7 Jul 2021 21:03:53 +0000 (22:03 +0100)]
[ARM] Add some opaque pointer gather/scatter tests. NFC

They seem to work OK. Some other test cleanups at the same time.

3 years ago[AsmWriter] Simplify type attribute printing (NFC)
Nikita Popov [Wed, 7 Jul 2021 20:46:57 +0000 (22:46 +0200)]
[AsmWriter] Simplify type attribute printing (NFC)

Avoid enumerating all supported type attributes, instead fetch
their name from the attribute kind.

3 years ago[IR] Simplify Attribute::getAsString() (NFC)
Nikita Popov [Wed, 7 Jul 2021 20:41:12 +0000 (22:41 +0200)]
[IR] Simplify Attribute::getAsString() (NFC)

Avoid enumerating all attributes here and instead use
getNameFromAttrKind(), which is based on the tablegen data.

This only leaves us with custom handling for int attributes,
which don't have uniform printing.

3 years ago[llvm-nm] Switch command line parsing from llvm::cl to OptTable
Fangrui Song [Wed, 7 Jul 2021 20:34:33 +0000 (13:34 -0700)]
[llvm-nm] Switch command line parsing from llvm::cl to OptTable

Part of https://lists.llvm.org/pipermail/llvm-dev/2021-July/151622.html
"Binary utilities: switch command line parsing from llvm::cl to OptTable"

Users should generally observe no difference as long as they only use intended
option forms. Behavior changes:

* `-t=d` is removed. Use `-t d` instead.
* `--demangle=0` cannot be used. Omit the option or use `--no-demangle` instead.
* `--help-list` is removed. This is a `cl::` specific option.

Note:

* `-t` diagnostic gets improved.
* This patch avoids cl::opt collision if we decide to support multiplexing for binary utilities
* One-dash long options are still supported.
* The `-s` collision (`-s segment section` for Mach-O) is unfortunate. `-s` means `--print-armap` in GNU nm.
* This patch removes the last `cl::multi_val` use case from the `llvm/lib/Support/CommandLine.cpp` library

`-M` (`--print-armap`), `-U` (`--defined-only`), and `-W` (`--no-weak`)
are now deprecated. They could conflict with future GNU nm options.
(--print-armap has an existing alias -s, so GNU will unlikely add a new one.
--no-weak (not in GNU nm) is rarely used anyway.)

`--just-symbol-name` is now deprecated in favor of
`--format=just-symbols` and `-j`.

Reviewed By: jhenderson

Differential Revision: https://reviews.llvm.org/D105330

3 years ago[IR] Make some pointer element type accesses explicit (NFC)
Nikita Popov [Wed, 7 Jul 2021 19:56:32 +0000 (21:56 +0200)]
[IR] Make some pointer element type accesses explicit (NFC)

Explicitly fetch the pointer element type in various deprecated
methods, so we can hopefully remove support from this from the
base GEP constructor.

3 years agoGlobalISel/AArch64: don't optimize away redundant branches at -O0
Adrian Prantl [Wed, 30 Jun 2021 22:40:45 +0000 (15:40 -0700)]
GlobalISel/AArch64: don't optimize away redundant branches at -O0

This patch prevents GlobalISel from optimizing out redundant branch
instructions when compiling without optimizations.

The motivating example is code like the following common pattern in
Swift, where users expect to be able to set a breakpoint on the early
exit:

public func f(b: Bool) {
  guard b else {
    return // I would like to set a breakpoint here.
  }
  ...
}

The patch modifies two places in GlobalISEL: The first one is in
IRTranslator.cpp where the removal of redundant branches is made
conditional on the optimization level. The second one is in
AArch64InstructionSelector.cpp where an -O0 *only* optimization is
being removed.

Disabling these optimizations increases code size at -O0 by
~8%. However, doing so improves debuggability, and debug builds are
the primary reason why developers compile without optimizations. We
thus concluded that this is the right trade-off.

rdar://79515454

Differential Revision: https://reviews.llvm.org/D105238

3 years ago[AArch64] Simplify sve-breakdown-scalable-vectortype.ll.
Eli Friedman [Wed, 7 Jul 2021 19:27:33 +0000 (12:27 -0700)]
[AArch64] Simplify sve-breakdown-scalable-vectortype.ll.

Fix the calling convention so we don't spill every SVE register.

3 years ago[SCF] Handle lowering of Execute region to Standard CFG
William S. Moses [Wed, 7 Jul 2021 18:27:35 +0000 (14:27 -0400)]
[SCF] Handle lowering of Execute region to Standard CFG

Lower SCF.executeregionop to llvm by essentially inlining the region and replacing the return

Differential Revision: https://reviews.llvm.org/D105567

3 years ago[MLIR] Provide lowering of std switch to llvm switch
William S. Moses [Wed, 7 Jul 2021 19:14:36 +0000 (15:14 -0400)]
[MLIR] Provide lowering of std switch to llvm switch

This patch allows lowering of std switch to llvm switch

Differential Revision: https://reviews.llvm.org/D105580

3 years ago[CodeView] Add missing cases for new enum values
Martin Storsjö [Wed, 7 Jul 2021 19:15:33 +0000 (22:15 +0300)]
[CodeView] Add missing cases for new enum values

This fixes warnings while building llvm-pdbutil after
d20b013b490e0603ba21b5ccff966d7e11025775.

3 years ago[LLD] [COFF] Avoid thread exhaustion on 32-bit Windows host
Jeremy Drake [Wed, 7 Jul 2021 18:45:00 +0000 (21:45 +0300)]
[LLD] [COFF] Avoid thread exhaustion on 32-bit Windows host

LLD on 32-bit Windows would frequently fail on large projects with
an exception "thread constructor failed: Exec format error".  The stack
trace pointed to this usage of std::async, and looking at the
implementation in libc++ it seems using std::async with
std::launch::async results in the immediate creation of a new thread
for every call.  This could result in a potentially unbounded number
of threads, depending on the number of input files.  This seems to
be hitting some limit in 32-bit Windows host.

I took the easy route, and only use threads on 64-bit Windows, not all
Windows as before.  I was thinking a more proper solution might
involve using a thread pool rather than blindly spawning any number
of new threads, but that may have other unforeseen consequences.

Reviewed By: rnk

Differential Revision: https://reviews.llvm.org/D105506

3 years ago[COFF] [CodeView] Add a few new enum values
Martin Storsjö [Tue, 6 Jul 2021 21:21:05 +0000 (00:21 +0300)]
[COFF] [CodeView] Add a few new enum values

These are undocumented, but are visible in the SDK headers since some
versions ago.

Differential Revision: https://reviews.llvm.org/D105513

3 years ago[PowerPC] Disable permuted SCALAR_TO_VECTOR on LE without direct moves
Nemanja Ivanovic [Wed, 7 Jul 2021 18:38:47 +0000 (13:38 -0500)]
[PowerPC] Disable permuted SCALAR_TO_VECTOR on LE without direct moves

There are some patterns involving the permuted scalar to vector node
for which we don't have patterns without direct moves on little endian
subtargets. This causes selection errors. While we can of course add
the missing patterns, any additional effort to make this work is not
useful since there is no support for any CPU that can run in
little endian mode and does not support direct moves.

3 years ago[SCEVExpander] Support opaque pointers
Nikita Popov [Sat, 3 Jul 2021 16:09:19 +0000 (18:09 +0200)]
[SCEVExpander] Support opaque pointers

This adds support for opaque pointers to expandAddToGEP() by always
generating an i8 GEP for opaque pointers. After looking at some other
cases (constexpr GEP folding, SROA GEP generation), I've come around
to the idea that we should use i8 GEPs for opaque pointers, because
the alternative would be to guess a GEP type from surrounding code,
which will not be reliable. Ultimately, i8 GEPs is where we want to
end up anyway, and opaque pointers just make that the natural choice.

There are a couple of other places in SCEVExpander that check pointer
element types, I plan to update those when I run across usable test
coverage that doesn't assert elsewhere.

Differential Revision: https://reviews.llvm.org/D105398

3 years ago[SLP] rename variable to not be misleading; NFC
Sanjay Patel [Wed, 7 Jul 2021 13:33:15 +0000 (09:33 -0400)]
[SLP] rename variable to not be misleading; NFC

The reduction matching was probably only dealing with binops
when it was written, but we have now generalized it to handle
select and intrinsics too, so assert on that too.

3 years ago[mlir] Allow conversion to LLVM for ElementsAttr's with size 0
Sean Silva [Fri, 2 Jul 2021 22:54:46 +0000 (15:54 -0700)]
[mlir] Allow conversion to LLVM for ElementsAttr's with size 0

The code seems to correctly handle the case that this assertion was
guarding.

Differential Revision: https://reviews.llvm.org/D105379

3 years ago[dfsan][NFC] Add Origin Tracking into doc
Jianzhou Zhao [Fri, 2 Jul 2021 22:17:26 +0000 (22:17 +0000)]
[dfsan][NFC] Add Origin Tracking into doc

Reviewed By: morehouse

Differential Revision: https://reviews.llvm.org/D105378

3 years ago[mlir][vector] Refactor Vector Unrolling and remove Tuple ops
thomasraoux [Fri, 2 Jul 2021 22:58:52 +0000 (15:58 -0700)]
[mlir][vector] Refactor Vector Unrolling and remove Tuple ops

Simplify vector unrolling pattern to be more aligned with rest of the
patterns and be closer to vector distribution.
The new implementation uses ExtractStridedSlice/InsertStridedSlice
instead of the Tuple ops. After this change the ops based on Tuple don't
have any more used so they can be removed.

This allows removing signifcant amount of dead code and will allow
extending the unrolling code going forward.

Differential Revision: https://reviews.llvm.org/D105381

3 years agoFix a failing assertion with -Wcast-align
Queen Dela Cruz [Wed, 7 Jul 2021 18:00:31 +0000 (14:00 -0400)]
Fix a failing assertion with -Wcast-align

When there is unknown type in a struct in code compiled with
-Wcast-align, the compiler crashes due to
clang::ASTContext::getASTRecordLayout() failing an assert.

Added check that the RecordDecl is valid before calling
getASTRecordLayout().

3 years ago[lldb/lua] Add scripted watchpoints for Lua
Siger Yang [Sun, 4 Jul 2021 22:38:12 +0000 (19:38 -0300)]
[lldb/lua] Add scripted watchpoints for Lua

Add support for Lua scripted watchpoints, with basic tests.

Differential Revision: https://reviews.llvm.org/D105034

3 years ago[lldb][docs] Force documentation emission of special Python class members
Raphael Isemann [Wed, 7 Jul 2021 17:28:47 +0000 (19:28 +0200)]
[lldb][docs] Force documentation emission of special Python class members

The current LLDB Python docs are missing documentation for all the special
members such as conversion functions (`__int__`) and other special functions
(`__len__`).

The reason for that is that the `automodapi` plugin we're using to generate the
*.rst files simply doesn't emit them. There doesn't seem to be any config option
to enable those in `automodapi` and it's not even clear why they are filtered. I
assume the leading underscore in their names makes them look like private
methods.

This patch just forcibly adds a few selected special members functions to the
list of functions that sphinx should always document.  This will cause sphinx to
warn if a class doesn't have one of those functions but it's better than not
having them documented.

The main motivation here is that since `SBAddress.__int__` is one of the few
functions that is only available in the embedded Python REPL which would be good
to have in the public documentation.

Fixes rdar://64647665

Reviewed By: JDevlieghere

Differential Revision: https://reviews.llvm.org/D105480

3 years ago[libTooling] Add support for implicit `this` to `buildAddressOf`.
Yitzhak Mandelbaum [Wed, 7 Jul 2021 14:26:06 +0000 (14:26 +0000)]
[libTooling] Add support for implicit `this` to `buildAddressOf`.

Changes `buildAddressOf` to return `this` when given an implicit `this` expression.

Differential Revision: https://reviews.llvm.org/D105551

3 years ago[ScalarEvolution] Make sure getMinusSCEV doesn't negate pointers.
Eli Friedman [Wed, 7 Jul 2021 17:27:10 +0000 (10:27 -0700)]
[ScalarEvolution] Make sure getMinusSCEV doesn't negate pointers.

Add a function removePointerBase that returns, essentially, S -
getPointerBase(S).  Use it in getMinusSCEV instead of actually
subtracting pointers.

Differential Revision: https://reviews.llvm.org/D105503

3 years ago[lld-macho][nfc] Rename test file to be more descriptive (rather than referencing...
Vy Nguyen [Wed, 7 Jul 2021 16:36:56 +0000 (12:36 -0400)]
[lld-macho][nfc] Rename test file to be more descriptive (rather than referencing the bug number)

Differential Revision: https://reviews.llvm.org/D105559

3 years ago[lld/mac] Don't crash when dead-stripping removes all unwind info
Nico Weber [Wed, 7 Jul 2021 15:28:27 +0000 (11:28 -0400)]
[lld/mac] Don't crash when dead-stripping removes all unwind info

If the input has compact unwind info but all of it is removed
after dead stripping, we would crash. Now we don't write any
__unwind_info section at all, like ld64.

This is a bit awkward to implement because we only know the final
state of unwind info after UnwindInfoSectionImpl<Ptr>::finalize(),
which is called after sections are added. So add a small amount of
bookkeeping to relocateCompactUnwind() instead (which runs earlier)
so that we can predict what finalize() will do before it runs.

Fixes PR51010.

Differential Revision: https://reviews.llvm.org/D105557

3 years ago[NFC][lldb-vscode] Fix launch test
Walter Erquinigo [Wed, 7 Jul 2021 16:59:41 +0000 (09:59 -0700)]
[NFC][lldb-vscode] Fix launch test

Using br for creating breakpoints fails if there are other commands that
start with br.

3 years agoFix broken libc test
Guillaume Chatelet [Wed, 7 Jul 2021 16:47:49 +0000 (16:47 +0000)]
Fix broken libc test

3 years ago[X86][Atom] Fix vector fp<->int resource/throughputs
Simon Pilgrim [Wed, 7 Jul 2021 14:27:14 +0000 (15:27 +0100)]
[X86][Atom] Fix vector fp<->int resource/throughputs

Match whats documented in the Intel AOM - almost all the conversion instructions requires BOTH ports (apart from the MMX cvtpi2ps/cvtpi2ps instructions which we already override) - this was being incorrectly modelled as EITHER port.

Now that we can use in-order models in llvm-mca, the atom model is a good "worst case scenario" analysis for x86.

3 years ago[lld/mac] Tweak reserve() argument in unwind code
Nico Weber [Wed, 7 Jul 2021 15:44:22 +0000 (11:44 -0400)]
[lld/mac] Tweak reserve() argument in unwind code

addEntriesForFunctionsWithoutUnwindInfo() can add entries to cuVector, so
cuCount can be stale. Use cuVector.size() instead.

No behavior change.

3 years ago[Flang][Docs] Update meeting URL
Johannes Doerfert [Wed, 7 Jul 2021 15:34:17 +0000 (10:34 -0500)]
[Flang][Docs] Update meeting URL

3 years ago[LLDB][GUI] Add initial forms support
Omar Emara [Wed, 7 Jul 2021 15:14:13 +0000 (17:14 +0200)]
[LLDB][GUI] Add initial forms support

This patch adds initial support for forms for the LLDB GUI. The currently
supported form elements are Text fields, Integer fields, Boolean fields, Choices
fields, File fields, Directory fields, and List fields.

A form can be created by subclassing FormDelegate. In the constructor, field
factory methods can be used to add new fields, storing the returned pointer in a
member variable. One or more actions can be added using the AddAction method.
The method takes a function with an interface void(Window &). This function will
be executed whenever the user executes the action.

Example form definition:

```lang=cpp
class TestFormDelegate : public FormDelegate {
public:
  TestFormDelegate() {
    m_text_field = AddTextField("Text", "The big brown fox.");
    m_file_field = AddFileField("File", "/tmp/a");
    m_directory_field = AddDirectoryField("Directory", "/tmp/");
    m_integer_field = AddIntegerField("Number", 5);
    std::vector<std::string> choices;
    choices.push_back(std::string("Choice 1"));
    choices.push_back(std::string("Choice 2"));
    choices.push_back(std::string("Choice 3"));
    choices.push_back(std::string("Choice 4"));
    choices.push_back(std::string("Choice 5"));
    m_choices_field = AddChoicesField("Choices", 3, choices);
    m_bool_field = AddBooleanField("Boolean", true);
    TextFieldDelegate default_field =
        TextFieldDelegate("Text", "The big brown fox.");
    m_text_list_field = AddListField("Text List", default_field);

    AddAction("Submit", [this](Window &window) { Submit(window); });
  }

  void Submit(Window &window) { SetError("An example error."); }

protected:
  TextFieldDelegate *m_text_field;
  FileFieldDelegate *m_file_field;
  DirectoryFieldDelegate *m_directory_field;
  IntegerFieldDelegate *m_integer_field;
  BooleanFieldDelegate *m_bool_field;
  ChoicesFieldDelegate *m_choices_field;
  ListFieldDelegate<TextFieldDelegate> *m_text_list_field;
};
```

Reviewed By: clayborg

Differential Revision: https://reviews.llvm.org/D104395

3 years ago[coro async] Cap the alignment of spilled values (vs. allocas) at the max frame...
Arnold Schwaighofer [Wed, 7 Jul 2021 13:21:08 +0000 (06:21 -0700)]
[coro async] Cap the alignment of spilled values (vs.  allocas) at the max frame alignment

Before this patch we would normally use the ABI alignment which can be
to high for the context alginment.

For spilled values we don't need ABI alignment, since the frame entry's
address is not escaped.

rdar://79664965

Differential Revision: https://reviews.llvm.org/D105288

3 years ago[LIBC] Add an optimized memcmp implementation for AArch64
Andre Vieira [Wed, 7 Jul 2021 14:57:15 +0000 (15:57 +0100)]
[LIBC] Add an optimized memcmp implementation for AArch64

Differential Revision: https://reviews.llvm.org/D105441

3 years ago[SystemZ][z/OS][libcxx] mark aligned allocation tests UNSUPPORTED on z/OS
Daniel McIntosh [Wed, 28 Apr 2021 16:15:42 +0000 (12:15 -0400)]
[SystemZ][z/OS][libcxx] mark aligned allocation tests UNSUPPORTED on z/OS

zOS doesn't support aligned allocation, so these tests are failing.
For more details on aligned allocation in zOS, see
https://reviews.llvm.org/D87611 and https://reviews.llvm.org/D90178

Reviewed By: ldionne, #libc

Differential Revision: https://reviews.llvm.org/D102798

3 years ago[LV] Unconditionally branch from middle to scalar preheader if the scalar loop must...
Philip Reames [Wed, 7 Jul 2021 14:40:36 +0000 (07:40 -0700)]
[LV] Unconditionally branch from middle to scalar preheader if the scalar loop must execute (try 4)

Resubmit after the following changes:

* Fix a latent bug related to unrolling with required epilogue (see e49d65f). I believe this is the cause of the prior PPC buildbot failure.
* Disable non-latch exits for epilogue vectorization to be safe (9ffa90d)
* Split out assert movement (600624a) to reduce churn if this gets reverted again.

Previous commit message (try 3)

Resubmit after fixing test/Transforms/LoopVectorize/ARM/mve-gather-scatter-tailpred.ll

Previous commit message...

This is a resubmit of 3e5ce4 (which was reverted by 7fe41ac).  The original commit caused a PPC build bot failure we never really got to the bottom of.  I can't reproduce the issue, and the bot owner was non-responsive.  In the meantime, we stumbled across an issue which seems possibly related, and worked around a latent bug in 80e8025.  My best guess is that the original patch exposed that latent issue at higher frequency, but it really is just a guess.

Original commit message follows...

If we know that the scalar epilogue is required to run, modify the CFG to end the middle block with an unconditional branch to scalar preheader. This is instead of a conditional branch to either the preheader or the exit block.

The motivation to do this is to support multiple exit blocks. Specifically, the current structure forces us to identify immediate dominators and *which* exit block to branch from in the middle terminator. For the multiple exit case - where we know require scalar will hold - these questions are ill formed.

This is the last change needed to support multiple exit loops, but since the diffs are already large enough, I'm going to land this, and then enable separately. You can think of this as being NFCIish prep work, but the changes are a bit too involved for me to feel comfortable tagging the review that way.

Differential Revision: https://reviews.llvm.org/D94892

3 years ago[AArch64][GlobalISel] Lower vector types for min/max
Irina Dobrescu [Mon, 5 Jul 2021 14:06:20 +0000 (15:06 +0100)]
[AArch64][GlobalISel] Lower vector types for min/max

Differential Revision: https://reviews.llvm.org/D105433

3 years ago[SVE] Fix ShuffleVector cast<FixedVectorType> in truncateToMinimalBitwidths
Dylan Fleming [Wed, 7 Jul 2021 13:28:13 +0000 (14:28 +0100)]
[SVE] Fix ShuffleVector cast<FixedVectorType> in truncateToMinimalBitwidths

Depends on D104239

Reviewed By: sdesmalen

Differential Revision: https://reviews.llvm.org/D105341

3 years ago[Polly][Isl] Use isl::union_set::unite() instead of isl::union_set::add_set(). NFC
patacca [Wed, 7 Jul 2021 14:26:44 +0000 (16:26 +0200)]
[Polly][Isl] Use isl::union_set::unite() instead of isl::union_set::add_set(). NFC

This is part of an effort to reduce the differences between the custom C++ bindings used right now by polly in `lib/External/isl/include/isl/isl-noxceptions.h` and the official isl C++ interface.

Changes made:
 - Use `isl::union_set::unite()` instead of `isl::union_set::add_set()`
 - `isl-noexceptions.h` has been generated by this https://github.com/patacca/isl/commit/390c44982b5cee7eb43f8f7a80e185e6d21466b2

Depends on D104994

Reviewed By: Meinersbur

Differential Revision: https://reviews.llvm.org/D105444

3 years agounittests: Fix library dependency name
Tom Stellard [Wed, 7 Jul 2021 13:56:15 +0000 (06:56 -0700)]
unittests: Fix library dependency name

Corrects the library name of LLVMAsmParser added in
2e4ec3e5d6a3bf7f61bea6898286cba64be7b764.

3 years agounittests: Fix build with LLVM_LINK_LLVM_DYLIB=ON
Tom Stellard [Wed, 7 Jul 2021 02:46:21 +0000 (19:46 -0700)]
unittests: Fix build with LLVM_LINK_LLVM_DYLIB=ON

The build system was linking the PluginsTests unittest against libLLVM.so
and LLVMAsmParser which was causing the test to fail with this error:

LLVM ERROR: inconsistency in registered CommandLine options

We need to add llvm libraries to LLVM_LINK_COMPONENTS so that
they are dropped from the linker arguments when linking with
LLVM_LINK_LLVM_DYLIB=ON

Reviewed By: aeubanks

Differential Revision: https://reviews.llvm.org/D105523

3 years ago[libc++] NFC: Fix incorrect comments in CMake
Louis Dionne [Wed, 7 Jul 2021 13:45:26 +0000 (09:45 -0400)]
[libc++] NFC: Fix incorrect comments in CMake

3 years ago[CostModel] Express cost(urem) as cost(div+mul+sub) when set to Expand.
Sander de Smalen [Wed, 7 Jul 2021 12:19:59 +0000 (13:19 +0100)]
[CostModel] Express cost(urem) as cost(div+mul+sub) when set to Expand.

The Legalizer expands the operations of urem/srem into a div+mul+sub or divrem
when those are legal/custom. This patch changes the cost-model to reflect that
cost.

Since there is no 'divrem' Instruction in LLVM IR, the cost of divrem
is assumed to be the same as div+mul+sub since the three operations will
need to be executed at runtime regardless.

Patch co-authored by David Sherwood (@david-arm)

Reviewed By: RKSimon, paulwalker-arm

Differential Revision: https://reviews.llvm.org/D103799

3 years ago[mlir] Use indices instead of affine maps when composing 2 reshape ops.
Alexander Belyaev [Wed, 7 Jul 2021 13:09:59 +0000 (15:09 +0200)]
[mlir] Use indices instead of affine maps when composing 2 reshape ops.

https://llvm.discourse.group/t/rfc-reshape-ops-restructuring/3310

Differential Revision: https://reviews.llvm.org/D105550