platform/upstream/llvm.git
3 years ago[C++20] [P1825] More implicit moves
Yang Fan [Tue, 16 Feb 2021 21:09:26 +0000 (16:09 -0500)]
[C++20] [P1825] More implicit moves

Implement all of P1825R0:

- implicitly movable entity can be an rvalue reference to non-volatile
    automatic object.
- operand of throw-expression can be a function or catch-clause parameter
    (support for function parameter has already been implemented).
- in the first overload resolution, the selected function no need to be
    a constructor.
- in the first overload resolution, the first parameter of the selected
    function no need to be an rvalue reference to the object's type.

This patch also removes the diagnostic `-Wreturn-std-move-in-c++11`.

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

3 years ago[MC][ELF] Support for zero flag section groups
Petr Hosek [Mon, 1 Feb 2021 06:42:35 +0000 (22:42 -0800)]
[MC][ELF] Support for zero flag section groups

This change introduces support for zero flag ELF section groups to LLVM.
LLVM already supports COMDAT sections, which in ELF are a special type
of ELF section groups. These are generally useful to enable linker GC
where you want a group of sections to always travel together, that is to
be either retained or discarded as a whole, but without the COMDAT
semantics. Other ELF assemblers already support zero flag ELF section
groups and this change helps us reach feature parity.

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

3 years ago[gn build] Port c761fe77bdca
LLVM GN Syncbot [Tue, 16 Feb 2021 22:13:03 +0000 (22:13 +0000)]
[gn build] Port c761fe77bdca

3 years agoRevert "[SampleFDO][NFC] Refactor SampleProfile.cpp"
Mehdi Amini [Tue, 16 Feb 2021 22:10:51 +0000 (22:10 +0000)]
Revert "[SampleFDO][NFC] Refactor SampleProfile.cpp"

This reverts commit 310b35304cdf5a230c042904655583c5532d3e91.
The build is broken with -DBUILD_SHARED_LIBS=ON :

lib/ProfileData/CMakeFiles/LLVMProfileData.dir/SampleProfileLoaderBaseUtil.cpp.o: In function `llvm::sampleprofutil::callsiteIsHot(llvm::sampleprof::FunctionSamples const*, llvm::ProfileSummaryInfo*, bool)':
SampleProfileLoaderBaseUtil.cpp:(.text._ZN4llvm14sampleprofutil13callsiteIsHotEPKNS_10sampleprof15FunctionSamplesEPNS_18ProfileSummaryInfoEb+0x1a): undefined reference to `llvm::ProfileSummaryInfo::isColdCount(unsigned long) const'
SampleProfileLoaderBaseUtil.cpp:(.text._ZN4llvm14sampleprofutil13callsiteIsHotEPKNS_10sampleprof15FunctionSamplesEPNS_18ProfileSummaryInfoEb+0x28): undefined reference to `llvm::ProfileSummaryInfo::isHotCount(unsigned long) const'
...

3 years agoEffectively revert ba2aa5f49ebb since the object isn't destroyed polymorphically
David Blaikie [Tue, 16 Feb 2021 21:45:25 +0000 (13:45 -0800)]
Effectively revert ba2aa5f49ebb since the object isn't destroyed polymorphically

3 years ago[mlir][Linalg] Add utility method to reshape ops to express output shape in terms...
MaheshRavishankar [Tue, 16 Feb 2021 21:15:55 +0000 (13:15 -0800)]
[mlir][Linalg] Add utility method to reshape ops to express output shape in terms of input shape.

Resolving the dim of outputs of a tensor_reshape op in terms of its
input shape allows the op to be eliminated when its used only in its
dims. The init_tensor -> tensor_reshape canonicalization can be
simplified to use the dims of the output of the tensor_reshape which
gets canonicalized away later making the tensor_reshape dead.

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

3 years ago[llvm-dwp] Join dwo paths correctly when DWOPath is absolute
Simonas Kazlauskas [Tue, 16 Feb 2021 21:35:32 +0000 (13:35 -0800)]
[llvm-dwp] Join dwo paths correctly when DWOPath is absolute

When the `DWOPath` is absolute, we want to use `DWOPath` as is, without prepending any other
components to the path. The `sys::path::append` does not join, but rather unconditionally appends
the paths, so something like `sys::path::append("/tmp", "/tmp/banana")` will result in
`/tmp/tmp/banana` rather than the desired `/tmp/banana`.

This then causes `llvm-dwp` to fail in a following situation:

```
$ clang -gsplit-dwarf /tmp/banana/test.c -c -o /tmp/outdir/foo.o
$ clang outdir/foo.o -o outdir/hm
$ llvm-dwarfdump outdir/hm | grep -C2 foo.dwo
                  DW_AT_comp_dir    ("/tmp")
                  DW_AT_GNU_pubnames  (true)
                  DW_AT_GNU_dwo_name    ("/tmp/outdir/foo.dwo")
                                DW_AT_GNU_dwo_id    (0xde4d396f3bf0e257)
                  DW_AT_low_pc  (0x0000000000401100)
$ strace -o trace llvm-dwp -e outdir/hm -o outdir/hm.dwp
error: No such file or directory
$ cat trace | grep foo.dwo
openat(AT_FDCWD, "/tmp/tmp/outdir/foo.dwo", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
```

Reviewed By: dblaikie

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

3 years agoFix -Wnon-virtual-dtor by making the ctor protected
David Blaikie [Tue, 16 Feb 2021 21:13:21 +0000 (13:13 -0800)]
Fix -Wnon-virtual-dtor by making the ctor protected

3 years ago[OpenMP][FIX] Avoid use of stack allocations in asynchronous calls
Johannes Doerfert [Sun, 14 Feb 2021 18:25:56 +0000 (12:25 -0600)]
[OpenMP][FIX] Avoid use of stack allocations in asynchronous calls

As reported by Guilherme Valarini [0], we used to pass stack allocations
to calls that can nowadays be asynchronous. This is arguably a problem
and it will inevitably result in UB. To remedy the situation we
allocate the locations as part of the AsyncInfoTy object. The lifetime
of that object matches what we need for now. If the synchronization is
not tied to the AsyncInfoTy object anymore we might need to have a
different buffer construct in global space.

This should be back-ported to LLVM 12 but needs slight modifications as
it is based on refactoring patches we do not need to backport.

[0] https://lists.llvm.org/pipermail/openmp-dev/2021-February/003867.html

Reviewed By: JonChesterfield

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

3 years ago[OpenMP] Unify omptarget API and usage wrt. `__tgt_async_info`
Johannes Doerfert [Wed, 10 Feb 2021 17:06:00 +0000 (11:06 -0600)]
[OpenMP] Unify omptarget API and usage wrt. `__tgt_async_info`

This patch unifies our libomptarget API in two ways:
  - always pass a `__tgt_async_info` object, the Queue member decides if
    it is in use or not.
  - (almost) always synchronize in the interface layer and not in the
    omptarget layer.

A side effect is that we now put all constructor and static initializer
kernels in a stream too, if the device utilizes `__tgt_async_info`.

The patch contains a TODO which can be addressed as we add support for
asynchronous malloc and free in the plugin API. This is the only
`synchronizeAsyncInfo` left in the omptarget layer.

Site note: On a V100 system the GridMini performance for small sizes
more than doubled.

Reviewed By: tianshilei1992

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

3 years ago[OpenMP] Move synchronization into `__tgt_async_info`
Johannes Doerfert [Wed, 10 Feb 2021 17:06:00 +0000 (11:06 -0600)]
[OpenMP] Move synchronization into `__tgt_async_info`

The AsyncInfo should be passed everywhere and it should offer a way to
ensure synchronization, given a libomptarget Device.

This replaces D96431.

Reviewed By: tianshilei1992

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

3 years ago[OpenMP][NFC] Unify `target` API with other by passing a `__tgt_async_info` pointer
Johannes Doerfert [Wed, 10 Feb 2021 16:57:24 +0000 (10:57 -0600)]
[OpenMP][NFC] Unify `target` API with other by passing a `__tgt_async_info` pointer

Reviewed By: tianshilei1992

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

3 years ago[OpenMP][NFC] Pass a DeviceTy, not the device number to `target`
Johannes Doerfert [Wed, 10 Feb 2021 16:50:09 +0000 (10:50 -0600)]
[OpenMP][NFC] Pass a DeviceTy, not the device number to `target`

This unifies the API of `target` relative to `targetUpdateData` and
such.

Reviewed By: tianshilei1992, grokos

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

3 years ago[OpenMP][NFC] Clang format the libomptarget plugins
Johannes Doerfert [Wed, 10 Feb 2021 20:16:18 +0000 (14:16 -0600)]
[OpenMP][NFC] Clang format the libomptarget plugins

Reviewed By: tianshilei1992

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

3 years ago[OpenMP][NFC] Eliminate sign comparison warning via explicit casts
Johannes Doerfert [Wed, 10 Feb 2021 20:14:22 +0000 (14:14 -0600)]
[OpenMP][NFC] Eliminate sign comparison warning via explicit casts

Reviewed By: tianshilei1992

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

3 years ago[OpenMP][NFC] Clang format libomptarget code (src & include)
Johannes Doerfert [Wed, 10 Feb 2021 17:45:39 +0000 (11:45 -0600)]
[OpenMP][NFC] Clang format libomptarget code (src & include)

The struct and enum alignments are kept by disabling clang-format for
that code region.

Reviewed By: tianshilei1992, JonChesterfield, grokos

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

3 years ago[NFC][PPC] Refactor TOC representation to allow several entries for the same symbol
Victor Huang [Tue, 16 Feb 2021 21:29:07 +0000 (21:29 +0000)]
[NFC][PPC] Refactor TOC representation to allow several entries for the same symbol

We currently represent TOC entries by an MCSymbol. This is not enough in some situations.
For example, when accessing an initialized TLS variable v on AIX using the general dynamic
model, we need to generate the two following entries for v:

.tc .v[TC],v@m
.tc v[TC],v

One is for the region handle (with the @m relocation), the other is for the variable offset.
This refactoring allows storing several entries for the same symbol with different VariantKind
in the TOC. If the VariantKind is not specified, we default to VK_None.

The AIX TLS implementation using this refactoring to generate the two entries will be posted
in a subsequent patch.

Patched By: bsaleil
Reviewed By: sfertile

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

3 years ago[lldb] [Process/FreeBSD] Ensure that errors are always handled
Michał Górny [Thu, 11 Feb 2021 23:51:42 +0000 (00:51 +0100)]
[lldb] [Process/FreeBSD] Ensure that errors are always handled

Ensure that the llvm::Error instances are always considered handled
by replacing LLDB_LOG with LLDB_LOG_ERROR.

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

3 years ago[SampleFDO] Provide a virtual desructor for SampleProfileLoaderBaseImpl
Kazu Hirata [Tue, 16 Feb 2021 21:17:33 +0000 (13:17 -0800)]
[SampleFDO] Provide a virtual desructor for SampleProfileLoaderBaseImpl

This patch fixes a warning:

  llvm-project/llvm/include/llvm/ProfileData/SampleProfileLoaderBaseImpl.h:69:7:
  error: 'llvm::SampleProfileLoaderBaseImpl' has virtual functions but
  non-virtual destructor [-Werror,-Wnon-virtual-dtor]

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

3 years agoseparate AffineMapAccessInterface from AffineRead/WriteOpInterface
Adam Straw [Tue, 16 Feb 2021 21:03:03 +0000 (13:03 -0800)]
separate AffineMapAccessInterface from AffineRead/WriteOpInterface

Separating the AffineMapAccessInterface from AffineRead/WriteOp interface so that dialects which extend Affine capabilities (e.g. PlaidML PXA = parallel extensions for Affine) can utilize relevant passes (e.g. MemRef normalization).

Reviewed By: bondhugula

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

3 years agoRevert "[DAG] Fold shuffle(bop(shuffle(x,y),shuffle(z,w)),bop(shuffle(a,b),shuffle...
Sterling Augustine [Tue, 16 Feb 2021 20:37:19 +0000 (12:37 -0800)]
Revert "[DAG] Fold shuffle(bop(shuffle(x,y),shuffle(z,w)),bop(shuffle(a,b),shuffle(c,d)))"

This reverts commit 5dfba562dd247f731528448ee83785b099f93629.

That commit causes an assertion failure with the following repro:

typedef long b __attribute__((__vector_size__(16)));
b *d;
b e;
b __attribute__((__always_inline__)) c(b h, b i) {
  return (__attribute__((__vector_size__(8 * sizeof(short)))) short)h + i;
}
j() {
  b k, l, m, n, o[6], p, q;
  m = d[5];
  b r = m;
  b s = f(r, 8);
  q = s;
  l = d[1];
  p = l;
  t(q);
  n = c(m, l);
  o[1] = c(s, f(p, 8));
  k = __builtin_shufflevector(n, o[1], 0, 2);
  e = __builtin_ia32_psrlwi128(k, j);
}

./bin/clang -cc1 -triple x86_64-grtev4-linux-gnu -emit-obj -O1 -std=c99 test.c

3 years ago[doc] Use cmake's -S option to simplify the build instructions
Ebrahim Byagowi [Tue, 16 Feb 2021 20:36:56 +0000 (14:36 -0600)]
[doc] Use cmake's -S option to simplify the build instructions

Now that llvm's minimum version is 3.13.4 anyway and `-S` is
introduced in the same version[1], let's use this little
time saving option to simplify the build instructions.

[1]: https://cgold.readthedocs.io/en/latest/glossary/-S.html

Authored-By: Ebrahim Byagowi <ebrahim@gnu.org>
Differential-Revision: https://reviews.llvm.org/D95049

3 years agoFix flang after D76342
Valentin Clement [Tue, 16 Feb 2021 20:37:46 +0000 (15:37 -0500)]
Fix flang after D76342

Fix Flang build after addition of a new OpenMP clauses for a clang patch (D76342).
Flang is using TableGen to generation the declaration of clause checks and the new clause
was missing a definiton.

Reviewed By: klausler

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

3 years ago[lldb] Delete superfluous semicolon
Pavel Labath [Tue, 16 Feb 2021 20:04:23 +0000 (21:04 +0100)]
[lldb] Delete superfluous semicolon

3 years ago[lldb] Remove some nanosleep preprocessor magic
Pavel Labath [Tue, 16 Feb 2021 19:55:40 +0000 (20:55 +0100)]
[lldb] Remove some nanosleep preprocessor magic

It's obsolete, as we use (portable) std::this_thread::sleep_for now.

3 years ago[RISCV] Add isel patterns for fixed vector fmsub/fnmadd/fnmsub.
Craig Topper [Tue, 16 Feb 2021 20:03:27 +0000 (12:03 -0800)]
[RISCV] Add isel patterns for fixed vector fmsub/fnmadd/fnmsub.

3 years ago[mlir] Fix memref_cast + subview folder when reducing rank
Thomas Raoux [Tue, 16 Feb 2021 19:03:58 +0000 (11:03 -0800)]
[mlir] Fix memref_cast + subview folder when reducing rank

When the destination of the subview has a lower rank than its source we need to
fix the result type of the new subview op.

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

3 years ago[clangd] Fix windows buildbots after ecea7218fb9b994b26471e9877851cdb51a5f1d4
Kadir Cetinkaya [Tue, 16 Feb 2021 19:57:00 +0000 (20:57 +0100)]
[clangd] Fix windows buildbots after ecea7218fb9b994b26471e9877851cdb51a5f1d4

3 years ago[gn build] Port ecea7218fb9b
LLVM GN Syncbot [Tue, 16 Feb 2021 19:23:52 +0000 (19:23 +0000)]
[gn build] Port ecea7218fb9b

3 years ago[gn build] Port 310b35304cdf
LLVM GN Syncbot [Tue, 16 Feb 2021 19:23:52 +0000 (19:23 +0000)]
[gn build] Port 310b35304cdf

3 years ago[FileCollector] Fix that the file system case-sensitivity check was inverted
Raphael Isemann [Tue, 16 Feb 2021 19:19:25 +0000 (20:19 +0100)]
[FileCollector] Fix that the file system case-sensitivity check was inverted

real_path returns an `std::error_code` which evaluates to `true` in case an
error happens and `false` if not. This code was checking the inverse, so
case-insensitive file systems ended up being detected as case sensitive.

Tested using an LLDB reproducer test as we anyway need a real file system and
also some matching logic to detect whether the respective file system is
case-sensitive (which the test is doing via some Python checks that we can't
really emulate with the usual FileCheck logic).

Fixes rdar://67003004

Reviewed By: JDevlieghere

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

3 years ago[clangd] Treat paths case-insensitively depending on the platform
Kadir Cetinkaya [Mon, 15 Feb 2021 08:00:49 +0000 (09:00 +0100)]
[clangd] Treat paths case-insensitively depending on the platform

Path{Match,Exclude} and MountPoint were checking paths case-sensitively
on all platforms, as with other features, this was causing problems on
windows. Since users can have capital drive letters on config files, but
editors might lower-case them.

This patch addresses that issue by:
- Creating regexes with case-insensitive matching on those platforms.
- Introducing a new pathIsAncestor helper, which performs checks in a
  case-correct manner where needed.

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

3 years ago[RISCV] Add add/sub saturation tests that exist on ARM/AArch64/X86
Craig Topper [Tue, 16 Feb 2021 18:32:06 +0000 (10:32 -0800)]
[RISCV] Add add/sub saturation tests that exist on ARM/AArch64/X86

There have been some recent changes to the type legalization for
some of these intrinsics so I thought it would be good to have
coverage.

3 years ago[SampleFDO][NFC] Refactor SampleProfile.cpp
Rong Xu [Tue, 16 Feb 2021 18:53:38 +0000 (10:53 -0800)]
[SampleFDO][NFC] Refactor SampleProfile.cpp

Refactor SampleProfile.cpp to use the core code in CodeGen.
The main changes are:
(1) Move SampleProfileLoaderBaseImpl class to a header file.
(2) Split SampleCoverageTracker to a head file and a cpp file.
(3) Move the common codes (common options and callsiteIsHot())
to the common cpp file.

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

3 years agolibunwind: Don't attempt to authenticate a null return address.
Peter Collingbourne [Fri, 12 Feb 2021 00:16:51 +0000 (16:16 -0800)]
libunwind: Don't attempt to authenticate a null return address.

Null return addresses can appear at the bottom of the stack (i.e. the
frame corresponding to the entry point). Authenticating these addresses
will set the error code in the address, which will lead to a segfault
in the sigreturn trampoline detection code. Fix this problem by not
authenticating null addresses.

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

3 years agoRevert "[AArch64][GlobalISel] Fold constants into G_GLOBAL_VALUE"
Jessica Paquette [Tue, 16 Feb 2021 18:50:12 +0000 (10:50 -0800)]
Revert "[AArch64][GlobalISel] Fold constants into G_GLOBAL_VALUE"

This reverts commit 61b4702a408834228c1c139b0e9af98616774db4.

We were seeing some test failures in SPECINT2006 due to this change. Reverting
to investigate.

3 years ago[SystemZ][ZOS] Prefer -nostdlib++ as opposed to -nodefaultlibs when building c++...
Zbigniew Sarbinowski [Tue, 16 Feb 2021 18:02:22 +0000 (18:02 +0000)]
[SystemZ][ZOS] Prefer -nostdlib++ as opposed to -nodefaultlibs when building c++ libraries

Let's use -nostdlib++ rather than -nodefaultlibs when building libc++/libc++abi/libunwind libraries. The default is -nostdlib++ if supported by a build compiler like it is the case with clang, otherwise -nodefaultlibs is used as before.

This change is needed to avoid additional changes at the link step and not to increase the maintenance costs. If clang with -nodefaultlibs is used all the libraries which are removed but required would have to be manually added in. This set of libraries are unique and will send out.

The propose change will allow to make the link step simple for other platforms as well.

Reviewed By: #libc, #libc_abi, ldionne

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

3 years ago[OpenMP] Implement '#pragma omp tile', by Michael Kruse (@Meinersbur).
Michael Kruse [Fri, 12 Feb 2021 19:26:59 +0000 (11:26 -0800)]
[OpenMP] Implement '#pragma omp tile', by Michael Kruse (@Meinersbur).

The tile directive is in OpenMP's Technical Report 8 and foreseeably will be part of the upcoming OpenMP 5.1 standard.

This implementation is based on an AST transformation providing a de-sugared loop nest. This makes it simple to forward the de-sugared transformation to loop associated directives taking the tiled loops. In contrast to other loop associated directives, the OMPTileDirective does not use CapturedStmts. Letting loop associated directives consume loops from different capture context would be difficult.

A significant amount of code generation logic is taking place in the Sema class. Eventually, I would prefer if these would move into the CodeGen component such that we could make use of the OpenMPIRBuilder, together with flang. Only expressions converting between the language's iteration variable and the logical iteration space need to take place in the semantic analyzer: Getting the of iterations (e.g. the overload resolution of `std::distance`) and converting the logical iteration number to the iteration variable (e.g. overload resolution of `iteration + .omp.iv`). In clang, only CXXForRangeStmt is also represented by its de-sugared components. However, OpenMP loop are not defined as syntatic sugar. Starting with an AST-based approach allows us to gradually move generated AST statements into CodeGen, instead all at once.

I would also like to refactor `checkOpenMPLoop` into its functionalities in a follow-up. In this patch it is used twice. Once for checking proper nesting and emitting diagnostics, and additionally for deriving the logical iteration space per-loop (instead of for the loop nest).

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

3 years ago[mlir] Simplify ModuleTranslation for LLVM IR
Alex Zinenko [Tue, 16 Feb 2021 16:36:45 +0000 (17:36 +0100)]
[mlir] Simplify ModuleTranslation for LLVM IR

A series of preceding patches changed the mechanism for translating MLIR to
LLVM IR to use dialect interface with delayed registration. It is no longer
necessary for specific dialects to derive from ModuleTranslation. Remove all
virtual methods from ModuleTranslation and factor out the entry point to be a
free function.

Also perform some cleanups in ModuleTranslation internals.

Depends On D96774

Reviewed By: nicolasvasilache

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

3 years ago[DAG] PromoteIntRes_ADDSUBSHLSAT - promote ISD::UADDSAT as clamped add
Simon Pilgrim [Tue, 16 Feb 2021 17:37:32 +0000 (17:37 +0000)]
[DAG] PromoteIntRes_ADDSUBSHLSAT - promote ISD::UADDSAT as clamped add

Similar to D96622, we're better off just promoting uaddsat(x,y) -> umin(add(x,y),c) instead of trying to perform a shifted uaddsat.

I initially tried to just use shifted promotion in cases where we didn't have a legal/custom umin - but we don't appear to have any targets that have uaddsat but not umin, so imo we're better off always using the umin and avoid an untested shifted uaddsat code path.

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

3 years ago[RISCV] Add support for fixed vector mask logic operations.
Craig Topper [Tue, 16 Feb 2021 17:26:22 +0000 (09:26 -0800)]
[RISCV] Add support for fixed vector mask logic operations.

Reviewed By: frasercrmck

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

3 years ago[SelectionDAG][AArch64] Restrict matchUnaryPredicate to only handle SPLAT_VECTOR...
Craig Topper [Tue, 16 Feb 2021 17:22:44 +0000 (09:22 -0800)]
[SelectionDAG][AArch64] Restrict matchUnaryPredicate to only handle SPLAT_VECTOR for scalable vectors.

fde24661718c7812a20a10e518cd853e8e060107 added support for
scalable vectors to matchUnaryPredicate by handling SPLAT_VECTOR in
addition to BUILD_VECTOR. This was used to enabled UDIV/SDIV/UREM/SREM
by constant expansion in BuildUDIV/BuildSDIV in TargetLowering.cpp

The caller there expects to call getBuildVector from the match factors.
This leads to a crash right now if there is a SPLAT_VECTOR of
fixed vectors since the number of vectors won't match the number
of elements.

To fix this, this patch updates the callers to check the opcode
instead of whether the type is fixed or scalable. This assumes
that only 3 opcodes are handled by matchUnaryPredicate so
I've added an assertion to the final else to check that opcode.

Reviewed By: RKSimon

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

3 years ago[mlir] tighten LLVM dialect verifiers to generate valid LLVM IR
Alex Zinenko [Tue, 16 Feb 2021 16:36:20 +0000 (17:36 +0100)]
[mlir] tighten LLVM dialect verifiers to generate valid LLVM IR

Verification of the LLVM IR produced when translating various MLIR dialects was
only active when calling the translation programmatically. This has led to
several cases of invalid LLVM IR being generated that could not be caught with
textual mlir-translate tests. Add verifiers for these cases and fix the tests
in preparation for enforcing the validation of LLVM IR.

Reviewed By: nicolasvasilache

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

3 years ago[AArch64] Convert CMP/SELECT sign patterns to OR & ASR.
Florian Hahn [Tue, 16 Feb 2021 17:12:30 +0000 (17:12 +0000)]
[AArch64] Convert CMP/SELECT sign patterns to OR & ASR.

ICMP & SELECT patterns extracting the sign of a value can be simplified
to OR & ASR (see  https://alive2.llvm.org/ce/z/Xx4iZ0).

This does not save any instructions in IR, but it is profitable on
AArch64, because we need at least 2 extra instructions to materialize 1
and -1 for the SELECT.

The improvements result in ~5% speedups on loops of the form

    static int sign_of(int x) {
      if (x < 0) return -1;
      return 1;
    }

    void foo(const int *x, int *res, int cnt) {
      for (int i=0;i<cnt;i++)
        res[i] = sign_of(x[i]);
    }

Reviewed By: dmgreen

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

3 years ago[libc][NFC] Make few maths functions buildable outside of LLVM libc build.
Siva Chandra Reddy [Tue, 16 Feb 2021 06:58:21 +0000 (22:58 -0800)]
[libc][NFC] Make few maths functions buildable outside of LLVM libc build.

Few math functions manipulate errno. They assumed that LLVM libc's errno
is available. However, that might not be the case when these functions
are used in a libc which does not use LLVM libc's errno. This change
switches such uses of LLVM libc's errno to the normal public errno macro.
This does not affect LLVM libc's build because the include order ensures
we get LLVM libc's errno. Also, the header check rule ensures we are only
including LLVM libc's errno.h.

3 years ago[analyzer] Fix a warning
Kazu Hirata [Tue, 16 Feb 2021 17:12:07 +0000 (09:12 -0800)]
[analyzer] Fix a warning

This patch fixes a warning from -Wcovered-switch-default.  The switch
statement in question handles all the enum values.

3 years ago[mlir] add verifiers for NVVM and ROCDL kernel attributes
Alex Zinenko [Tue, 16 Feb 2021 17:05:47 +0000 (18:05 +0100)]
[mlir] add verifiers for NVVM and ROCDL kernel attributes

Make sure they can only be attached to LLVM functions as a result of converting
GPU functions to the LLVM Dialect.

3 years ago[coro async] Don't promote allocas to the frame or rewrite swifterror if there are...
Arnold Schwaighofer [Fri, 12 Feb 2021 18:27:31 +0000 (10:27 -0800)]
[coro async] Don't promote allocas to the frame or rewrite  swifterror if there are no suspend points

Also don't call function to update the call graph if there are no
clones. The function will fail.

rdar://74277860

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

3 years ago[flang][fir] Add fir-opt tool
clementval [Tue, 16 Feb 2021 16:48:20 +0000 (11:48 -0500)]
[flang][fir] Add fir-opt tool

This patch introduce the fir-opt tool. Similar to mlir-opt for FIR.
It will be used in following patches to test fir opt and round-trip.

Reviewed By: schweitz, mehdi_amini

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

3 years ago[ARM] Use rGPR for writeback vldrs
David Green [Tue, 16 Feb 2021 16:44:47 +0000 (16:44 +0000)]
[ARM] Use rGPR for writeback vldrs

From what I can tell, a writeback is unpredictable with LR for both
loads and stores. This changes the operand from a gprnopc to a rGPR in
both cases (which I believe is essentially a NFC due to the tied-def
already being a rGPR.)

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

3 years agoAMDGPU: Remove kills following clusters of memory instruction
Matt Arsenault [Sun, 14 Feb 2021 14:54:25 +0000 (09:54 -0500)]
AMDGPU: Remove kills following clusters of memory instruction

In a future commit, soft clauses will be hinted with kill instructions
rather than forced together with bundles. Look for kills that look
like this, and erase them. I'm not sure if the check for specific uses
is worthwhile, or if it would be better to just unconditionally erase
kills.

This reduces test churn in a future patch.

3 years ago[DAG] Fold shuffle(bop(shuffle(x,y),shuffle(z,w)),bop(shuffle(a,b),shuffle(c,d)))
Simon Pilgrim [Tue, 16 Feb 2021 15:24:23 +0000 (15:24 +0000)]
[DAG] Fold shuffle(bop(shuffle(x,y),shuffle(z,w)),bop(shuffle(a,b),shuffle(c,d)))

Fold shuffle(bop(shuffle(x,y),shuffle(z,w)),bop(shuffle(a,b),shuffle(c,d))) -> bop(shuffle(x,y),shuffle(z,w)),bop(shuffle(a,b),shuffle(c,d))

Attempt to fold from a shuffle of a pair of binops to a binop of shuffles, as long as one/both of the binop sources are also shuffles that can be merged with the outer shuffle. This should guarantee that we remove one binop without introducing any additional shuffles.

Technically there's potential for a merged shuffle's lowering to be poorer than the original shuffle, but it could also be better, and I'm not seeing any regressions as long as we keep the 'don't merge splats' rule already present in MergeInnerShuffle.

This expands and generalizes an existing X86 combine and attempts to merge either of each binop's sources (with an on-the-fly commutation of the shuffle mask) - we couldn't do that in the x86 version as it had to stay in a form that DAGCombine's MergeInnerShuffle would still recognise.

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

3 years agoAMDGPU: Fix debug info handling in post-RA bundler
Matt Arsenault [Sun, 14 Feb 2021 15:46:10 +0000 (10:46 -0500)]
AMDGPU: Fix debug info handling in post-RA bundler

This was allowing debug instructions to break the bundling, which
would change scheduling behavior. Bundle debug info / kills inside
the bundle. This seems to work OK, although the asm printer doesn't
understand these in a bundle. This implicitly expects the memory
legalizer to unbundle. It would probably be slightly nicer to move
these after.

Rewrite the loop to be clearer and make sure we don't end a bundle on
a meta instruction, only allow them in between other valid bundle
instructions.

3 years agoReduce the number of attributes attached to each function
serge-sans-paille [Wed, 10 Feb 2021 08:42:50 +0000 (09:42 +0100)]
Reduce the number of attributes attached to each function

This takes advantage of the implicit default behavior to reduce the number of
attributes, which in turns reduces compilation time. I've observed -3% in
instruction count when compiling sqlite3 amalgamation with -O0

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

3 years ago[mlir][vector] Add missing support for contract of integer lowering.
Thomas Raoux [Wed, 10 Feb 2021 23:57:02 +0000 (15:57 -0800)]
[mlir][vector] Add missing support for contract of integer lowering.

Some of the lowering of vector.contract didn't support integer case. Since
reduction of integer cannot accumulate we always break up the reduction op, it
should be merged by a separate canonicalization if possible.

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

3 years ago[mlir] Add canonicalization for tensor_cast + tensor_to_memref
Thomas Raoux [Tue, 16 Feb 2021 05:10:07 +0000 (21:10 -0800)]
[mlir] Add canonicalization for tensor_cast + tensor_to_memref

This helps bufferization passes by removing tensor_cast operations.

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

3 years ago[mlir][vector] Move splitting transfer ops into a separate entry point
Lei Zhang [Tue, 16 Feb 2021 15:00:32 +0000 (10:00 -0500)]
[mlir][vector] Move splitting transfer ops into a separate entry point

These patterns unrolls transfer read/write ops if the vector consumers/
producers are extract/insert slices op. Transfer ops can map to hardware
load/store functionalities, where the vector size matters for bandwidth
considerations. So these patterns should be collected separately, instead
of being generic canonicalization patterns.

Reviewed By: nicolasvasilache

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

3 years ago[libc++] Build thread_win32.cpp only if LIBCXX_HAS_PTHREAD_API is not set
Colin Finck [Tue, 16 Feb 2021 15:03:04 +0000 (10:03 -0500)]
[libc++] Build thread_win32.cpp only if LIBCXX_HAS_PTHREAD_API is not set

This allows building libc++ against winpthreads from mingw-w64 to support
operating systems older than Windows 7. The remaining libc++ code already
supports `WIN32` with `LIBCXX_HAS_PTHREAD_API`.

Note that there is also the older "pthreads-win32". However, that support
library implements `pthread_t` as a struct, which violates the libc++
assumption that `pthread_t` is always a scalar and can be compared,
ordered, and set to zero.

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

3 years ago[mlir][vector] Add support for unrolling vector.fma
Lei Zhang [Tue, 16 Feb 2021 14:56:01 +0000 (09:56 -0500)]
[mlir][vector] Add support for unrolling vector.fma

Reviewed By: nicolasvasilache

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

3 years ago[lldb/test] Test lldb-server named pipe functionality on windows
Pavel Labath [Mon, 8 Feb 2021 09:28:42 +0000 (10:28 +0100)]
[lldb/test] Test lldb-server named pipe functionality on windows

lldb-server can use a named pipe to communicate the port number it is
listening on. This windows bits of this are already implemented, but we
did not have a test for that, most likely because python does not have
native pipe functionality.

This patch implements the windows bits necessary to test this. I'm using
the ctypes package to call the native APIs directly to avoid a
dependency to non-standard python packages. This introduces some amount
of boilerplate, but our named pipe use case is fairly limited, so we
should not end up needing to wrap large chunks of windows APIs.

Surprisingly to changes to lldb-server were needed to make the test
pass.

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

3 years ago[clangd] Give modules access to filesystem, scheduler, and index.
Sam McCall [Mon, 15 Feb 2021 19:26:48 +0000 (20:26 +0100)]
[clangd] Give modules access to filesystem, scheduler, and index.

This finally makes it possible to implement useful modules.

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

3 years ago[gn build] Port 40cc63ea6eec
LLVM GN Syncbot [Tue, 16 Feb 2021 14:23:58 +0000 (14:23 +0000)]
[gn build] Port 40cc63ea6eec

3 years ago[clangd] Modules can have a public API. NFC
Sam McCall [Mon, 15 Feb 2021 20:43:11 +0000 (21:43 +0100)]
[clangd] Modules can have a public API. NFC

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

3 years ago[NFC][LoopInterchange] Explicitly pass both `InnerLoop` and `OuterLoop` to `processLoop`
Ta-Wei Tu [Tue, 16 Feb 2021 14:16:53 +0000 (22:16 +0800)]
[NFC][LoopInterchange] Explicitly pass both `InnerLoop` and `OuterLoop` to `processLoop`

This is a split patch of D96644.

Explicitly pass both `InnerLoop` and `OuterLoop` to function `processLoop` to remove the need to swap elements in loop list and allow making loop list an `ArrayRef`.
Also, fix inconsistent spellings of `OuterLoopId` and `Inner Loop Id` in debug log.

Reviewed By: fhahn

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

3 years ago[llvm][Aarch64][SVE] Remove extra fmov instruction with certain literals
David Truby [Tue, 16 Feb 2021 14:15:28 +0000 (14:15 +0000)]
[llvm][Aarch64][SVE] Remove extra fmov instruction with certain literals

When a literal that cannot fit in the immediate form of the fmov instruction
is used to initialise an SVE vector, an extra unnecessary fmov is currently
generated. This patch adds an extra codegen pattern preventing the extra
instruction from being generated.

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

Co-Authored-By: Paul Walker <paul.walker@arm.com>
3 years ago[clang][cli] Add explicit round-trip test
Jan Svoboda [Tue, 16 Feb 2021 13:41:25 +0000 (14:41 +0100)]
[clang][cli] Add explicit round-trip test

This patch adds a test that verifies all `CompilerInvocation` members are filled correctly during command line round-trip.

Reviewed By: dexonsmith

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

3 years ago[VPlan] Remove unused Phi member from VPWidenPHIRecipe (NFC).
Florian Hahn [Tue, 16 Feb 2021 13:46:01 +0000 (13:46 +0000)]
[VPlan] Remove unused Phi member from VPWidenPHIRecipe (NFC).

The member is not needed any longer after recent changes.

3 years ago[DAG] Avoid APInt copies by directly using the APInt reference from getAPIntValue...
Simon Pilgrim [Tue, 16 Feb 2021 12:40:10 +0000 (12:40 +0000)]
[DAG] Avoid APInt copies by directly using the APInt reference from getAPIntValue. NFCI.

3 years ago[DAG] Use APInt::extractBits instead of lshr().trunc(). NFCI.
Simon Pilgrim [Tue, 16 Feb 2021 12:02:41 +0000 (12:02 +0000)]
[DAG] Use APInt::extractBits instead of lshr().trunc(). NFCI.

Avoids so many APInt instances by directly using the APInt reference from getAPIntValue.

3 years ago[SVE] Add support for scalable vectorization of loops with int/fast FP reductions
Kerry McLaughlin [Tue, 16 Feb 2021 10:43:42 +0000 (10:43 +0000)]
[SVE] Add support for scalable vectorization of loops with int/fast FP reductions

This patch enables scalable vectorization of loops with integer/fast reductions, e.g:

```
unsigned sum = 0;
for (int i = 0; i < n; ++i) {
  sum += a[i];
}
```

A new TTI interface, isLegalToVectorizeReduction, has been added to prevent
reductions which are not supported for scalable types from vectorizing.
If the reduction is not supported for a given scalable VF,
computeFeasibleMaxVF will fall back to using fixed-width vectorization.

Reviewed By: david-arm, fhahn, dmgreen

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

3 years ago[clang][cli] Generate -f[no-]finite-loops arguments
Jan Svoboda [Tue, 16 Feb 2021 13:27:21 +0000 (14:27 +0100)]
[clang][cli] Generate -f[no-]finite-loops arguments

This patch generates the `-f[no-]finite-loops` arguments from `CompilerInvocation` (added in D96419), fixing test failures of Clang built with `-DCLANG_ROUND_TRIP_CC1_ARGS=ON`.

Reviewed By: fhahn

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

3 years ago[analyzer] Rework SValBuilder::evalCast function into maintainable and clear way
Denys Petrov [Tue, 16 Feb 2021 12:29:45 +0000 (14:29 +0200)]
[analyzer] Rework SValBuilder::evalCast function into maintainable and clear way

Summary: Refactor SValBuilder::evalCast function. Make the function clear and get rid of redundant and repetitive code. Unite SValBuilder::evalCast, SimpleSValBuilder::dispatchCast, SimpleSValBuilder::evalCastFromNonLoc and SimpleSValBuilder::evalCastFromLoc functions into single SValBuilder::evalCast.
This patch shall not change any previous behavior.

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

3 years ago[flang][driver] Add extension options and -finput-charset
Faris Rehman [Thu, 4 Feb 2021 21:11:22 +0000 (21:11 +0000)]
[flang][driver] Add extension options and -finput-charset

Add the following options:
* -fimplicit-none and -fno-implicit-none
* -fbackslash and -fno-backslash
* -flogical-abbreviations and -fno-logical-abbreviations
* -fxor-operator and -fno-xor-operator
* -falternative-parameter-statement
* -finput-charset=<value>

Summary of changes:
- Enable extensions in CompilerInvocation#ParseFrontendArgs
- Add encoding_ to Fortran::frontend::FrontendOptions
- Add encoding to Fortran::parser::Options

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

3 years ago[mlir] Don't return nullptrs from scf::IfOp::getSuccessorRegions
Tres Popp [Tue, 16 Feb 2021 10:31:41 +0000 (11:31 +0100)]
[mlir] Don't return nullptrs from scf::IfOp::getSuccessorRegions

Previously this might happen if there was no elseRegion and the method
was asked for all successor regions.

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

3 years ago[llvm-symbolizer][test] Add explicit tests for CODE and DATA
James Henderson [Mon, 15 Feb 2021 15:42:31 +0000 (15:42 +0000)]
[llvm-symbolizer][test] Add explicit tests for CODE and DATA

These directives force the associated address to be interpreted as a
function or data respectively. CODE is the default when not specified.

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

Reviewed by: MaskRay

3 years ago[RISCV] Remove unused CHECKs from recent test addition
Fraser Cormack [Tue, 16 Feb 2021 10:33:33 +0000 (10:33 +0000)]
[RISCV] Remove unused CHECKs from recent test addition

These didn't show up as failures locally.

3 years ago[RISCV] Fix a crash in fixed-length build_vector lowering
Fraser Cormack [Mon, 15 Feb 2021 16:35:34 +0000 (16:35 +0000)]
[RISCV] Fix a crash in fixed-length build_vector lowering

Non-splatted non-integer build_vector nodes were mistakenly being
lowered as VID expressions, which should not happen. VID can only be
used to select integer build_vector nodes.

Reviewed By: craig.topper

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

3 years ago[RISCV] Add patterns for scalable-vector fabs & fcopysign
Fraser Cormack [Thu, 4 Feb 2021 12:07:59 +0000 (12:07 +0000)]
[RISCV] Add patterns for scalable-vector fabs & fcopysign

The patterns mostly follow the scalar counterparts, save for some extra
optimizations to match the vector/scalar forms.

The patch adds a DAGCombine for ISD::FCOPYSIGN to try and reorder
ISD::FNEG around any ISD::FP_EXTEND or ISD::FP_TRUNC of the second
operand. This helps us achieve better codegen to match vfsgnjn.

Reviewed By: craig.topper

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

3 years ago[flang][driver] Remove unused code (nfc)
Andrzej Warzynski [Tue, 16 Feb 2021 10:00:41 +0000 (10:00 +0000)]
[flang][driver] Remove unused code (nfc)

3 years ago[mlir][Linalg] Generalize vector::transfer hoisting on tensors.
Nicolas Vasilache [Tue, 16 Feb 2021 09:24:28 +0000 (09:24 +0000)]
[mlir][Linalg] Generalize vector::transfer hoisting on tensors.

This revision adds support for hoisting "subtensor + vector.transfer_read" / "subtensor_insert + vector.transfer_write pairs" across scf.for.
The unit of hoisting becomes a HoistableRead / HoistableWrite struct which contains a pair of "vector.transfer_read + optional subtensor" / "vector.transfer_write + optional subtensor_insert".
scf::ForOp canonicalization patterns are applied greedily on the successful application of the transformation to cleanup the IR more eagerly and potentially expose more transformation opportunities.

Differential revision: https://reviews.llvm.org/D96731

3 years ago[flang][driver] Add options for unparsing
Andrzej Warzynski [Thu, 4 Feb 2021 11:14:57 +0000 (11:14 +0000)]
[flang][driver] Add options for unparsing

This patch adds the following compiler frontend driver options:
  * -fdebug-unparse (f18 spelling: -funparse)
  * -fdebug-unparse-with-symbols (f18 spelling: -funparse-with-symbols)
The new driver will only accept the new spelling. `f18` will accept both
the original and the new spelling.

A new base class for frontend actions is added: `PrescanAndSemaAction`.
This is added to reduce code duplication that otherwise these new
options would lead to. Implementation from
  * `ParseSyntaxOnlyAction::ExecutionAction`
is moved to:
  * `PrescanAndSemaAction::BeginSourceFileAction`
This implementation is now shared between:
  * PrescanAndSemaAction
  * ParseSyntaxOnlyAction
  * DebugUnparseAction
  * DebugUnparseWithSymbolsAction

All tests that don't require other yet unimplemented options are
updated. This way `flang-new -fc1` is used instead of `f18` when
`FLANG_BUILD_NEW_DRIVER` is set to `On`. In order to facilitate this,
`%flang_fc1` is added in the LIT configuration (lit.cfg.py).

`asFortran` from f18.cpp is duplicated as `getBasicAsFortran` in
FrontendOptions.cpp. At this stage it's hard to find a good place to
share this method. I suggest that we revisit this once a switch from
`f18` to `flang-new` is complete.

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

3 years ago[SCEVExpander] Migrate costAndCollectOperands to use InstructionCost.
Sander de Smalen [Tue, 16 Feb 2021 08:42:19 +0000 (08:42 +0000)]
[SCEVExpander] Migrate costAndCollectOperands to use InstructionCost.

This patch changes costAndCollectOperands to use InstructionCost for
accumulated cost values.

isHighCostExpansion will return true if the cost has exceeded the budget.

Reviewed By: CarolineConcatto, ctetreau

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

3 years agoLower math.expm1 to intrinsics in the GPUToNVVM and GPUToROCDL conversions.
Adrian Kuegel [Tue, 16 Feb 2021 08:18:34 +0000 (09:18 +0100)]
Lower math.expm1 to intrinsics in the GPUToNVVM and GPUToROCDL conversions.

This adds the lowering for expm1 for GPU backends.

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

3 years ago[flang][f18] Make -fdebug-dump-{symbols|parse-tree} imply -fsyntax-only
Andrzej Warzynski [Thu, 11 Feb 2021 18:28:25 +0000 (18:28 +0000)]
[flang][f18] Make -fdebug-dump-{symbols|parse-tree} imply -fsyntax-only

The following _action_ options are always used with `-fsyntax-only`
(also an _action_ option):
  * -fdebug-dump-symbols
  * -fdebug-dump-parse-tree
This patch makes the above options imply `-fsyntax-only`.

From the perspective of `f18` this change saves typing and is otherwise
a non-functional change. But it will simplify things in the new driver,
`flang-new`, in which only the last action option is taken into account
and executed. In other words, the following would only run
`-fsyntax-only`:
```
flang-new -fdebug-dump-symbols -fsyntax-only <input>
```
whereas this would only run `-fdebug-dump-symbols`:
```
flang-new -fsyntax-only -fdebug-dump-symbols <input>
```

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

3 years ago[gn build] Port 9510b0940265
LLVM GN Syncbot [Tue, 16 Feb 2021 09:12:07 +0000 (09:12 +0000)]
[gn build] Port 9510b0940265

3 years ago[clangd] Factor out the heuristic resolver code into its own class
Nathan Ridge [Mon, 18 Jan 2021 07:58:43 +0000 (02:58 -0500)]
[clangd] Factor out the heuristic resolver code into its own class

The patch also does some cleanup on the interface of the entry
points from TargetFinder into the heuristic resolution code.

Since the heuristic resolver is created in a place where the
ASTContext is available, it can store the ASTContext and the
NameFactory hack can be removed.

Differential revision: https://reviews.llvm.org/D92290

3 years ago[VPlan] Manage scalarized values using VPValues.
Florian Hahn [Tue, 16 Feb 2021 09:04:10 +0000 (09:04 +0000)]
[VPlan] Manage scalarized values using VPValues.

This patch updates codegen to use VPValues to manage the generated
scalarized instructions.

Reviewed By: gilr

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

3 years agoAdd Expm1 op to the math dialect.
Adrian Kuegel [Mon, 15 Feb 2021 12:56:12 +0000 (13:56 +0100)]
Add Expm1 op to the math dialect.

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

3 years ago[mlir] Drop reliance of SliceAnalysis on specific ops.
Nicolas Vasilache [Mon, 15 Feb 2021 21:44:44 +0000 (21:44 +0000)]
[mlir] Drop reliance of SliceAnalysis on specific ops.

SliceAnalysis originally was developed in the context of affine.for within mlfunc.
It predates the notion of region.
This revision updates it to not hardcode specific ops like scf::ForOp.
When rooted at an op, the behavior of the slice computation changes as it recurses into the regions of the op. This does not support gathering all values transitively depending on a loop induction variable anymore.
Additional variants rooted at a Value are added to also support the existing behavior.

Differential revision: https://reviews.llvm.org/D96702

3 years ago[NewPM] Introduce (GPU)DivergenceAnalysis in the new pass manager
Sameer Sahasrabuddhe [Tue, 16 Feb 2021 04:56:45 +0000 (10:26 +0530)]
[NewPM] Introduce (GPU)DivergenceAnalysis in the new pass manager

The GPUDivergenceAnalysis is now renamed to just "DivergenceAnalysis"
since there is no conflict with LegacyDivergenceAnalysis. In the
legacy PM, this analysis can only be used through the legacy DA
serving as a wrapper. It is now made available as a pass in the new
PM, and has no relation with the legacy DA.

The new DA currently cannot handle irreducible control flow; its
presence can cause the analysis to run indefinitely. The analysis is
now modified to detect this and report all instructions in the
function as divergent. This is super conservative, but allows the
analysis to be used without hanging the compiler.

Reviewed By: aeubanks

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

3 years ago[debugserver] Correctly pass argv[0] to execl
Jonas Devlieghere [Tue, 16 Feb 2021 02:38:21 +0000 (18:38 -0800)]
[debugserver] Correctly pass argv[0] to execl

The execl function takes both the executable and argv[0].

3 years ago[lldb] Remove very old misleading comment (NFC)
Dave Lee [Tue, 16 Feb 2021 02:14:47 +0000 (18:14 -0800)]
[lldb] Remove very old misleading comment (NFC)

3 years ago[lldb] Remove unused ThreadPlan tracer utilities (NFC)
Dave Lee [Sat, 13 Feb 2021 23:48:05 +0000 (15:48 -0800)]
[lldb] Remove unused ThreadPlan tracer utilities (NFC)

Delete unused `EnableTracer()` and `SetTracer()` functions on `Thread`. By deleting
these, their `ThreadPlan` counterparts also become unused.

Then, by deleting `ThreadPlanStack::EnableTracer`, `EnableSingleStep` becomes unused.
With no more callers to `EnableSingleStep`, the value `m_single_step` is always true and
can be removed as well.

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

3 years ago[lldb] Lower GetRealStopInfo into ThreadPlanCallFunction (NFC)
Dave Lee [Mon, 15 Feb 2021 06:59:31 +0000 (22:59 -0800)]
[lldb] Lower GetRealStopInfo into ThreadPlanCallFunction (NFC)

`GetRealStopInfo` has only one call site, and in that call site a reference to the
concrete thread plan is available (`ThreadPlanCallUserExpression`), from which
`GetRealStopInfo` can be called.

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

3 years ago[lldb] Minor refinements to ThreadPlan::RestoreThreadState (NFC)
Dave Lee [Mon, 15 Feb 2021 06:49:16 +0000 (22:49 -0800)]
[lldb] Minor refinements to ThreadPlan::RestoreThreadState (NFC)

Correct `RestoreThreadState` to a `void` return type. Also, update the signature of its
callee, `Thread::RestoreThreadStateFromCheckpoint`, by updating it to a `void` return
type, and making it non-`virtual`.

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

3 years ago[ObjC][ARC] Do not perform code motion on precise release calls
Akira Hatanaka [Tue, 16 Feb 2021 01:39:36 +0000 (17:39 -0800)]
[ObjC][ARC] Do not perform code motion on precise release calls

This fixes a bug where an object can get deallocated before reaching the
end of its full formal lifetime.

rdar://72110887
rdar://74123176

3 years ago[CodeGen] Use range-based for loops (NFC)
Kazu Hirata [Mon, 15 Feb 2021 22:46:10 +0000 (14:46 -0800)]
[CodeGen] Use range-based for loops (NFC)

3 years ago[Support] Use ListSeparator (NFC)
Kazu Hirata [Mon, 15 Feb 2021 22:46:09 +0000 (14:46 -0800)]
[Support] Use ListSeparator (NFC)

3 years ago[LazyCallGraph] Remove forward declarations of nonexistent classes (NFC)
Kazu Hirata [Mon, 15 Feb 2021 22:46:07 +0000 (14:46 -0800)]
[LazyCallGraph] Remove forward declarations of nonexistent classes (NFC)

3 years ago[RISCV] Add expicit i32/i64 types to RV32 or RV64 only isel patterns. NFC
Craig Topper [Mon, 15 Feb 2021 22:23:42 +0000 (14:23 -0800)]
[RISCV] Add expicit i32/i64 types to RV32 or RV64 only isel patterns. NFC

This stops tablegen from generating patterns with the opposite type
in the opposite HwMode. This just adds wasted bytes to the isel table.

This reduces the isel table by about 1800 bytes.