platform/upstream/llvm.git
2 years ago[clang-format] Avoid parsing "requires" as a keyword in non-C++-like languages.
Marek Kurdej [Tue, 22 Feb 2022 14:46:28 +0000 (15:46 +0100)]
[clang-format] Avoid parsing "requires" as a keyword in non-C++-like languages.

Fixes the issue raised post-review in D113319 (cf. https://reviews.llvm.org/D113319#3337485).

Reviewed By: krasimir

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

2 years ago[PowerPC] Allow absolute expressions in relocations
Nemanja Ivanovic [Tue, 22 Feb 2022 15:52:19 +0000 (09:52 -0600)]
[PowerPC] Allow absolute expressions in relocations

The Linux kernel build uses absolute expressions suffixed with @lo/@ha
relocations. This currently doesn't work for DS/DQ form instructions and
there is no reason for it not to. It also works with GAS.
This patch allows this as long as the value is a multiple of 4/16
for DS/DQ form.

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

2 years ago[clang-format] Use FormatToken::is* functions without passing through `Tok`. NFC.
Marek Kurdej [Tue, 22 Feb 2022 15:40:30 +0000 (16:40 +0100)]
[clang-format] Use FormatToken::is* functions without passing through `Tok`. NFC.

2 years agoFix docs build after f8cedc642d9b85720cb7175ef25ddde90a3fbca2
Timm Bäder [Tue, 22 Feb 2022 15:34:12 +0000 (16:34 +0100)]
Fix docs build after f8cedc642d9b85720cb7175ef25ddde90a3fbca2

Looks like rst doesn't like '#' in link texts. Just remove it.

2 years ago[CodeGen] Add test for PR53990 (NFC)
Nikita Popov [Tue, 22 Feb 2022 15:31:46 +0000 (16:31 +0100)]
[CodeGen] Add test for PR53990 (NFC)

2 years ago[clang] Never wrap a nullptr in CXXNewExpr::getArraySize()
Timm Bäder [Fri, 11 Feb 2022 07:27:33 +0000 (08:27 +0100)]
[clang] Never wrap a nullptr in CXXNewExpr::getArraySize()

Otherwise callers of these functions have to check both the return value
for and the contents of the returned llvm::Optional.

Fixes #53742

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

2 years ago[mlir][bufferize] Fix GCC build
Matthias Springer [Tue, 22 Feb 2022 14:58:57 +0000 (23:58 +0900)]
[mlir][bufferize] Fix GCC build

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

2 years ago[lldb] Remove HostProcess:GetMainModule
Pavel Labath [Mon, 21 Feb 2022 14:38:52 +0000 (15:38 +0100)]
[lldb] Remove HostProcess:GetMainModule

the function is unused, and the posix implementation is only really correct on linux.

2 years ago[clang][www] Port make_cxx_dr_status script to Python3
Timm Bäder [Tue, 22 Feb 2022 10:07:39 +0000 (11:07 +0100)]
[clang][www] Port make_cxx_dr_status script to Python3

And run it to re-generate the cxx_dr_status.html

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

2 years ago[clang-format] Fix preprocessor nesting after commit 529aa4b011c4ae808d658022ef643c44...
Krasimir Georgiev [Tue, 22 Feb 2022 14:43:09 +0000 (15:43 +0100)]
[clang-format] Fix preprocessor nesting after commit 529aa4b011c4ae808d658022ef643c44dd9b2c9c

In https://github.com/llvm/llvm-project/commit/529aa4b011c4ae808d658022ef643c44dd9b2c9c
by setting the identifier info to nullptr, we started to subtly
interfere with the parts in the beginning of the function,
https://github.com/llvm/llvm-project/blob/529aa4b011c4ae808d658022ef643c44dd9b2c9c/clang/lib/Format/UnwrappedLineParser.cpp#L991
causing the preprocessor nesting to change in some cases. E.g., for the
added regression test, clang-format started incorrectly guessing the
language as C++.

This tries to address this by introducing an internal identifier info
element to use instead.

Reviewed By: curdeius, MyDeveloperDay

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

2 years ago[AArch64][SME] Remove term 'streaming-sve' from assembler diagnostics.
Sander de Smalen [Tue, 22 Feb 2022 13:48:21 +0000 (13:48 +0000)]
[AArch64][SME] Remove term 'streaming-sve' from assembler diagnostics.

'streaming-sve' is not a feature that users should be able to set,
hence why it shouldn't show up in user-diagnostics. The only
flag that end-users should be able to set is '+sme'.

Reviewed By: paulwalker-arm

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

2 years agoAdd DriverKit support
Egor Zhdan [Mon, 24 Jan 2022 14:18:14 +0000 (14:18 +0000)]
Add DriverKit support

This patch is the first in a series of patches to upstream the support for Apple's DriverKit. Once complete, it will allow targeting DriverKit platform with Clang similarly to AppleClang.

This code was originally authored by JF Bastien.

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

2 years ago[VE] Split unsupported v512.32 ops
Simon Moll [Tue, 22 Feb 2022 13:29:29 +0000 (14:29 +0100)]
[VE] Split unsupported v512.32 ops

Split v512.32 binary ops into two v256.32 ops using packing support
opcodes (vec_unpack_lo|hi, vec_pack).

Depends on D120053 for packing opcodes.

Reviewed By: kaz7

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

2 years ago[SVE] Add isel patterns for SABA/UABA.
Paul Walker [Mon, 14 Feb 2022 20:01:29 +0000 (20:01 +0000)]
[SVE] Add isel patterns for SABA/UABA.

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

2 years ago[x86] add load folding restriction to pushAddIntoCmovOfConsts()
Sanjay Patel [Tue, 22 Feb 2022 13:01:09 +0000 (08:01 -0500)]
[x86] add load folding restriction to pushAddIntoCmovOfConsts()

With only a load-fold the diffs look neutral. If there's a load and store (rmw)
fold opportunity as shown in the test based on #53862, then we end up with an
extra instruction.

Fixes #53862

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

2 years ago[Flang] Initial patch to lower a Fortran intrinsic
Kiran Chandramohan [Tue, 22 Feb 2022 10:12:04 +0000 (10:12 +0000)]
[Flang] Initial patch to lower a Fortran intrinsic

This patch brings in some initial changes for lowering Fortran
intrinsics. Intrinsics are generally lowered to a mix of FIR and
MLIR operations, runtime calls or LLVM intrinsics. This patch
particularly brings in the lowering of the Fortran `andi` intrinsic
to `arith.andi` in MLIR.

The significant changes are in ConvertExpr.cpp and IntrinsicCall.cpp.
Intrinsic functions occur as part of expressions. Lowering deals with this
in ConvertExpr.cpp in `genval(const Fortran::evaluate::FunctionRef<A> &funcRef)`.
The code in the above mentioned function kicks of a sequence of calls
that ultimately results in a call to the `genIand ` function in
IntrinsicCall.cpp which creates the MLIR `arith.andi` operation.

A few tests are also included.

Note: Generally intrinsics like `iand` can occur in array (elemental)
context, but since that part is not fully supported in lowering, tests
are only added for the scalar context.

This patch is part of upstreaming from the fir-dev branch of
https://github.com/flang-compiler/f18-llvm-project.

Reviewed By: clementval

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

Co-authored-by: Jean Perier <jperier@nvidia.com>
Co-authored-by: Eric Schweitz <eschweitz@nvidia.com>
Co-authored-by: zacharyselk <zrselk@gmail.com>
Co-authored-by: V Donaldson <vdonaldson@nvidia.com>
Co-authored-by: Valentin Clement <clementval@gmail.com>
2 years ago[AMDGPU] Fix typo in comment [NFC]
Thomas Symalla [Tue, 22 Feb 2022 12:27:26 +0000 (13:27 +0100)]
[AMDGPU] Fix typo in comment [NFC]

This replaces "V_MOB_B32" with "V_MOV_B32" in some comment.

2 years ago[GISel] Silence 'sideeffect in assertion' coverity warnings. NFCI.
Simon Pilgrim [Tue, 22 Feb 2022 11:52:45 +0000 (11:52 +0000)]
[GISel] Silence 'sideeffect in assertion' coverity warnings. NFCI.

Use llvm::enumerate to keep track of index.

2 years ago[LoopVectorize] Support conditional in-loop vector reductions
Kerry McLaughlin [Tue, 22 Feb 2022 10:49:34 +0000 (10:49 +0000)]
[LoopVectorize] Support conditional in-loop vector reductions

Extends getReductionOpChain to look through Phis which may be part of
the reduction chain. adjustRecipesForReductions will now also create a
CondOp for VPReductionRecipe if the block is predicated and not only if
foldTailByMasking is true.

Changes were required in tryToBlend to ensure that we don't attempt
to convert the reduction Phi into a select by returning a VPBlendRecipe.
The VPReductionRecipe will create a select between the Phi and the reduction.

Reviewed By: david-arm

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

2 years ago[lldb] Fix race condition between lldb-vscode and stop hooks executor
Ilya Nozhkin [Tue, 22 Feb 2022 11:48:32 +0000 (12:48 +0100)]
[lldb] Fix race condition between lldb-vscode and stop hooks executor

The race is between these two pieces of code that are executed in two separate
lldb-vscode threads (the first is in the main thread and another is in the
event-handling thread):

```
// lldb-vscode.cpp
g_vsc.debugger.SetAsync(false);
g_vsc.target.Launch(launch_info, error);
g_vsc.debugger.SetAsync(true);
```

```
// Target.cpp
bool old_async = debugger.GetAsyncExecution();
debugger.SetAsyncExecution(true);
debugger.GetCommandInterpreter().HandleCommands(GetCommands(), exc_ctx,
                                                options, result);
debugger.SetAsyncExecution(old_async);
```

The sequence that leads to the bug is this one:
1. Main thread enables synchronous mode and launches the process.
2. When the process is launched, it generates the first stop event.
3. This stop event is catched by the event-handling thread and DoOnRemoval
   is invoked.
4. Inside DoOnRemoval, this thread runs stop hooks. And before running stop
   hooks, the current synchronization mode is stored into old_async (and
   right now it is equal to "false").
5. The main thread finishes the launch and returns to lldb-vscode, the
   synchronization mode is restored to asynchronous by lldb-vscode.
6. Event-handling thread finishes stop hooks processing and restores the
   synchronization mode according to old_async (i.e. makes the mode synchronous)
7. And now the mode is synchronous while lldb-vscode expects it to be
   asynchronous. Synchronous mode forbids the process to broadcast public stop
   events, so, VS Code just hangs because lldb-vscode doesn't notify it about
   stops.

So, this diff makes the target intercept the first stop event if the process is
launched in the synchronous mode, thus preventing stop hooks execution.

The bug is only present on Windows because other platforms already
intercept this event using their own hijacking listeners.

So, this diff also fixes some problems with lldb-vscode tests on Windows to make
it possible to run the related test. Other tests still can't be enabled because
the debugged program prints something into stdout and LLDB can't intercept this
output and redirect it to lldb-vscode properly.

Reviewed By: jingham

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

2 years ago[MergeICmps] Don't call comesBefore() if in different blocks (PR53959)
Nikita Popov [Tue, 22 Feb 2022 11:25:30 +0000 (12:25 +0100)]
[MergeICmps] Don't call comesBefore() if in different blocks (PR53959)

Only call comesBefore() if the instructions are in the same block.
Otherwise make a conservative assumption.

Fixes https://github.com/llvm/llvm-project/issues/53959.

2 years ago[mlir][spirv] Fix SPIR-V spec parser
Alexander Batashev [Tue, 22 Feb 2022 11:04:21 +0000 (14:04 +0300)]
[mlir][spirv] Fix SPIR-V spec parser

Header class in SPIR-V HTML spec has changed. Update script to reflect that.

Reviewed By: antiagainst

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

2 years ago[MLIR][Presburger] rename get*LexMin -> find*LexMin
Arjun P [Tue, 22 Feb 2022 08:48:55 +0000 (08:48 +0000)]
[MLIR][Presburger] rename get*LexMin -> find*LexMin

This reflects the fact that we are performing some non-trivial computations
here. Also, this is more uniform in line with findIntegerSample.

2 years ago[SCEV] Do not erase LoopUsers. PR53969
Max Kazantsev [Tue, 22 Feb 2022 09:54:27 +0000 (16:54 +0700)]
[SCEV] Do not erase LoopUsers. PR53969

This patch fixes a logical error in how we work with `LoopUsers` map.
It maps a loop onto a set of AddRecs that depend on it. The Addrecs
are added to this map only once when they are created and put to
the UniqueSCEVs` map.

The only purpose of this map is to make sure that, whenever we forget
a loop, all (directly or indirectly) dependent SCEVs get forgotten too.

Current code erases SCEVs from dependent set of a given loop whenever
we forget this loop. This is not a correct behavior due to the following scenario:

1. We have a loop `L` and an AddRec `AR` that depends on it;
2. We modify something in the loop, but don't destroy it. We still call forgetLoop on it;
3. `AR` is no longer dependent on `L` according to `LoopUsers`. It is erased from
    ValueExprMap` and `ExprValue map, but still exists in UniqueSCEVs;
4. We can later request the very same AddRec for the very same loop again, and get existing
    SCEV `AR`.
5. Now, `AR` exists and is used again, but its notion that it depends on `L` is lost;
6. Then we decide to delete `L`. `AR` will not be forgotten because we have lost it;
7. Just you wait when you run into a dangling pointer problem, or any other kind of problem
   because an active SCEV is now referecing a non-existent loop.

The solution to this is to stop erasing values from `LoopUsers`. Yes, we will maybe forget something
that is already not used, but it's cheap.

This fixes a functional bug and potentially may have negative compile time impact on methods with
huge or numerous loops.

Differential Revision: https://reviews.llvm.org/D120303
Reviewed By: nikic

2 years ago[OpenCL] opencl-c.h: use uint/ulong consistently
Sven van Haastregt [Tue, 22 Feb 2022 10:15:40 +0000 (10:15 +0000)]
[OpenCL] opencl-c.h: use uint/ulong consistently

Most places already seem to use the short spelling instead of
'unsigned int/long', so perform the following substitutions:

  s/unsigned int /uint /g
  s/unsigned long /ulong /g

This simplifies completeness comparisons against OpenCLBuiltins.td.

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

2 years ago[StructurizeCFG] Precommit test case for D120312
Jay Foad [Tue, 22 Feb 2022 09:40:05 +0000 (09:40 +0000)]
[StructurizeCFG] Precommit test case for D120312

2 years ago[C++20][Modules][2/8] Add enumerations for partition modules and stream them.
Iain Sandoe [Mon, 29 Nov 2021 08:05:56 +0000 (08:05 +0000)]
[C++20][Modules][2/8] Add enumerations for partition modules and stream them.

This is an initial enabling patch for module partition support.
We add enumerations for partition interfaces/implementations.

This means that the module kind enumeration now occupies three
bits, so the AST streamer is adjusted for this.  Adding one bit there
seems preferable to trying to overload the meanings of existing
kinds (and we will also want to add a C++20 header unit case later).

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

2 years ago[AARCH64][DAGCombine] Add combine for negation of CSEL absolute value pattern.
Sunho Kim [Tue, 22 Feb 2022 09:59:36 +0000 (09:59 +0000)]
[AARCH64][DAGCombine] Add combine for negation of CSEL absolute value pattern.

This folds a negation through a csel, which can come up during the
lowering of negative abs.

Fixes https://github.com/llvm/llvm-project/issues/51558.

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

2 years ago[libcxx][ci] Switch to CMAKE_CXX_COMPILER_TARGET for Arm bots
David Spickett [Thu, 17 Feb 2022 11:57:26 +0000 (11:57 +0000)]
[libcxx][ci] Switch to CMAKE_CXX_COMPILER_TARGET for Arm bots

As suggested by the cmake warning:
CMake Warning at <...>/llvm-project/libcxx-ci/libcxx/CMakeLists.txt:289 (message):
  LIBCXX_TARGET_TRIPLE is deprecated, please use CMAKE_CXX_COMPILER_TARGET instead

Depends on D119948

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

2 years ago[libcxx][CI] Set Arm triples to match native clang build's default
David Spickett [Wed, 16 Feb 2022 15:47:16 +0000 (15:47 +0000)]
[libcxx][CI] Set Arm triples to match native clang build's default

We were using:
armv8-linux-gnueabihf
But for a native clang build the default target is:
armv8l-linux-gnueabihf

(ditto for v7)

Add the "l" to the target triples and update the one test
that is unsupported to look for the various possible names.

armv(7 or 8)(m or l, optionally)

The UNSUPPORTED does not include aarch64 because aarch64 Linux
(and others that follow Arm's AAPCS64) use quad precision for
long double where arm64 (darwin) does not:
https://developer.apple.com/documentation/xcode/writing-arm64-code-for-apple-platforms
https://github.com/ARM-software/abi-aa/blob/main/aapcs64/aapcs64.rst#811arithmetic-types

Reviewed By: rovka

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

2 years agoFix warning introduced by 47eff645d8e873ba531014751c1c06a716a367e9
David Sherwood [Tue, 22 Feb 2022 09:36:52 +0000 (09:36 +0000)]
Fix warning introduced by 47eff645d8e873ba531014751c1c06a716a367e9

2 years ago[NFC][AARCH64] Add test cases for negation of select
Sunho Kim [Tue, 22 Feb 2022 09:26:47 +0000 (09:26 +0000)]
[NFC][AARCH64] Add test cases for negation of select

Add tests to demonstrate new dag combine pattern.

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

2 years ago[InstCombine] Bail out of load-store forwarding for scalable vector types
David Sherwood [Mon, 21 Feb 2022 10:38:08 +0000 (10:38 +0000)]
[InstCombine] Bail out of load-store forwarding for scalable vector types

This patch fixes an invalid TypeSize->uint64_t implicit conversion in
FoldReinterpretLoadFromConst. If the size of the constant is scalable
we bail out of the optimisation for now.

Tests added here:

  Transforms/InstCombine/load-store-forward.ll

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

2 years ago[ARM][AArch64] Add missing v8.x checks
tyb0807 [Thu, 3 Feb 2022 22:30:41 +0000 (22:30 +0000)]
[ARM][AArch64] Add missing v8.x checks

Summary:
This patch adds checks that were missing in clang for Armv8.5/6/7-A. These include:
* ACLE macro defines for AArch32.
* Handling of crypto and SM4, SHA and AES feature flags on clang's driver.

Reviewers: dmgreen, SjoerdMeijer, tmatheson

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

2 years ago[GlobalStatus] Keep Visited set in isSafeToDestroyConstant()
Nikita Popov [Tue, 22 Feb 2022 08:53:32 +0000 (09:53 +0100)]
[GlobalStatus] Keep Visited set in isSafeToDestroyConstant()

Constants cannot be cyclic, but they can be tree-like. Keep a
visited set to ensure we do not degenerate to exponential run-time.

This fixes the problem reported in https://reviews.llvm.org/D117223#3335482,
though I haven't been able to construct a concise test case for
the issue. This requires a combination of dead constants and the
kind of constant expression tree that textual IR cannot represent
(because the textual representation, unlike the in-memory
representation, is also exponential in size).

2 years ago[Format] Remove unused LineContainsContinuedForLoopSection. NFC
Sam McCall [Mon, 21 Feb 2022 21:42:35 +0000 (22:42 +0100)]
[Format] Remove unused LineContainsContinuedForLoopSection. NFC

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

2 years ago[mlir][bufferize] Do not assert destination passing style for non-bufferizable ops
Matthias Springer [Tue, 22 Feb 2022 08:39:04 +0000 (17:39 +0900)]
[mlir][bufferize] Do not assert destination passing style for non-bufferizable ops

2 years ago[mlir][bufferize][NFC] Rename `comprehensive-function-bufferize` to `one-shot-bufferize`
Matthias Springer [Tue, 22 Feb 2022 08:14:03 +0000 (17:14 +0900)]
[mlir][bufferize][NFC] Rename `comprehensive-function-bufferize` to `one-shot-bufferize`

The related functionality is moved over to the bufferization dialect. Test cases are cleaned up a bit.

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

2 years ago[RISCV] Add patterns for vector widening integer reduction instructions
jacquesguan [Wed, 19 Jan 2022 07:32:06 +0000 (15:32 +0800)]
[RISCV] Add patterns for vector widening integer reduction instructions

Add patterns for vector widening integer reduction instructions.

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

2 years ago[Driver][OpenBSD] Add comments for C++ tests
Brad Smith [Tue, 22 Feb 2022 05:20:46 +0000 (00:20 -0500)]
[Driver][OpenBSD] Add comments for C++ tests

2 years ago[Driver][OpenBSD] Test tweaking and clean up
Brad Smith [Tue, 22 Feb 2022 04:44:18 +0000 (23:44 -0500)]
[Driver][OpenBSD] Test tweaking and clean up

2 years ago[clang-format] Add option to insert braces after control statements
owenca [Tue, 8 Feb 2022 06:58:50 +0000 (22:58 -0800)]
[clang-format] Add option to insert braces after control statements

Adds a new option InsertBraces to insert the optional braces after
if, else, for, while, and do in C++.

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

2 years ago[Driver][OpenBSD] Pass sysroot to the linker
Brad Smith [Tue, 22 Feb 2022 04:11:13 +0000 (23:11 -0500)]
[Driver][OpenBSD] Pass sysroot to the linker

2 years agoUpdate references to the mailing lists that have moved to Discourse.
Tanya Lattner [Tue, 22 Feb 2022 02:58:48 +0000 (18:58 -0800)]
Update references to the mailing lists that have moved to Discourse.

2 years ago[LLDB] Remove recursive include of GDBRemoteCommunicationServerCommon.h
Shafik Yaghmour [Tue, 22 Feb 2022 02:46:12 +0000 (18:46 -0800)]
[LLDB] Remove recursive include of GDBRemoteCommunicationServerCommon.h

GDBRemoteCommunicationServerCommon.h includes itself, removing this include.

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

2 years ago[OpenMP] Ensure offloading sections do not have SHF_ALLOC flag
Joseph Huber [Mon, 21 Feb 2022 17:40:16 +0000 (12:40 -0500)]
[OpenMP] Ensure offloading sections do not have SHF_ALLOC flag

We use offloading sections in the new Clang driver scheme to embed
device code into the host. We later use these sections to link the
device image, after which point they are completely unused and should
not be loaded into memory if they are still in the executable.

Reviewed By: JonChesterfield

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

2 years ago[RISCV] Add more tests for SHLFI and UNSHFLI aliaes in Zbp extension
Lian Wang [Tue, 22 Feb 2022 02:20:32 +0000 (02:20 +0000)]
[RISCV] Add more tests for SHLFI and UNSHFLI aliaes in Zbp extension

RV32/RV64:
zip.n/zip2.b/zip.b/zip4.h/zip2.h/zip.h
unzip.n/unzip2.b/unzip.b/unzip4.h/unzip2.h/unzip.h

Reviewed By: craig.topper

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

2 years ago[MachineOutliner][AArch64] NFC: Split MBBs into "outlinable ranges"
Jessica Paquette [Wed, 16 Feb 2022 20:50:31 +0000 (12:50 -0800)]
[MachineOutliner][AArch64] NFC: Split MBBs into "outlinable ranges"

We found a case in the Swift benchmarks where the MachineOutliner introduces
about a 20% compile time overhead in comparison to building without the
MachineOutliner.

The origin of this slowdown is that the benchmark has long blocks which incur
lots of LRU checks for lots of candidates.

Imagine a case like this:

```
bb:
  i1
  i2
  i3
  ...
  i123456
```

Now imagine that all of the outlining candidates appear early in the block, and
that something like, say, NZCV is defined at the end of the block.

The outliner has to check liveness for certain registers across all candidates,
because outlining from areas where those registers are used is unsafe at call
boundaries.

This is fairly wasteful because in the previously-described case, the outlining
candidates will never appear in an area where those registers are live.

To avoid this, precalculate areas where we will consider outlining from.
Anything outside of these areas is mapped to illegal and not included in the
outlining search space. This allows us to reduce the size of the outliner's
suffix tree as well, giving us a potential memory win.

By precalculating areas, we can also optimize other checks too, like whether
or not LR is live across an outlining candidate.

Doing all of this is about a 16% compile time improvement on the case.

This is likely useful for other targets (e.g. ARM + RISCV) as well, but for now,
this only implements the AArch64 path. The original "is the MBB safe" method
still works as before.

2 years ago[AMDGPU] Remove redundand check in the SILoadStoreOptimizer
Stanislav Mekhanoshin [Mon, 21 Feb 2022 19:22:11 +0000 (11:22 -0800)]
[AMDGPU] Remove redundand check in the SILoadStoreOptimizer

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

2 years ago[RISCV] Optimize tail agnostic vmv.s.x which don't need to select tail value.
Zakk Chen [Mon, 21 Feb 2022 22:31:14 +0000 (14:31 -0800)]
[RISCV] Optimize tail agnostic vmv.s.x which don't need to select tail value.

Reviewed By: craig.topper

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

2 years ago[move-function] Make test more generally by removing unneeded line.
Michael Gottesman [Mon, 21 Feb 2022 20:07:31 +0000 (12:07 -0800)]
[move-function] Make test more generally by removing unneeded line.

Otherwise this is can be sensitive in the face of changes in register names.

I also gardened the test case a little to make it look a little nicer.

Reviewed By: fhahn

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

2 years ago[AMDGPU] Regenerate tests to include -NEXT. NFC.
Vang Thao [Mon, 21 Feb 2022 22:14:25 +0000 (14:14 -0800)]
[AMDGPU] Regenerate tests to include -NEXT. NFC.

2 years ago[gn build] Port 68f4131c94d4
LLVM GN Syncbot [Mon, 21 Feb 2022 22:08:44 +0000 (22:08 +0000)]
[gn build] Port 68f4131c94d4

2 years ago[libc++][ranges] Add ranges::in_found_result
Nikolas Klauser [Mon, 21 Feb 2022 22:07:02 +0000 (23:07 +0100)]
[libc++][ranges] Add ranges::in_found_result

Reviewed By: Quuxplusone, #libc

Spies: libcxx-commits, mgorny

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

2 years ago[libc++] Replace [[no_unique_addredd]] with _LIBCPP_NO_UNIQUE_ADDRESS in __algorithm...
Nikolas Klauser [Mon, 21 Feb 2022 21:56:14 +0000 (22:56 +0100)]
[libc++] Replace [[no_unique_addredd]] with _LIBCPP_NO_UNIQUE_ADDRESS in __algorithm/min_max_result.h

2 years ago[gn build] Port 807766be3a89
LLVM GN Syncbot [Mon, 21 Feb 2022 21:52:37 +0000 (21:52 +0000)]
[gn build] Port 807766be3a89

2 years ago[libc++][ranges] Add ranges::min_max_result
Nikolas Klauser [Mon, 21 Feb 2022 21:48:36 +0000 (22:48 +0100)]
[libc++][ranges] Add ranges::min_max_result

Reviewed By: Quuxplusone, #libc

Spies: libcxx-commits, mgorny

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

2 years ago[x86] add tests for rmw add with cmov; NFC
Sanjay Patel [Mon, 21 Feb 2022 20:19:23 +0000 (15:19 -0500)]
[x86] add tests for rmw add with cmov; NFC

2 years ago[CMake][Fuchsia] Disable assertions and analyzer for stage 1
Petr Hosek [Mon, 21 Feb 2022 21:23:39 +0000 (13:23 -0800)]
[CMake][Fuchsia] Disable assertions and analyzer for stage 1

We don't need these in the first stage compiler and disabling these
helps a bit with the compile time and runtime performance.

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

2 years ago[MLIR][Presburger] Add support for IntegerRelation
Groverkss [Mon, 21 Feb 2022 20:57:26 +0000 (02:27 +0530)]
[MLIR][Presburger] Add support for IntegerRelation

This patch adds a class to represent a relation in Presburger Library.

This patch only adds the skeleton class. Functionality from IntegerPolyhedron
will be moved to IntegerRelation in later patches to make it easier to review.

This patch is a part of a series of patches adding support for relations in
Presburger Library.

Reviewed By: arjunp

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

2 years ago[libcxx] [test] Fix the thousands_sep expectation for fr_FR locales on Windows
Martin Storsjö [Thu, 13 Jan 2022 10:28:41 +0000 (10:28 +0000)]
[libcxx] [test] Fix the thousands_sep expectation for fr_FR locales on Windows

Windows uses U+00A0 NO-BREAK SPACE as thousands separator in the
fr_FR locale.

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

2 years ago[libcxx] [test] Fix moneypunct grouping tests on Windows
Martin Storsjö [Tue, 18 Jan 2022 09:33:08 +0000 (09:33 +0000)]
[libcxx] [test] Fix moneypunct grouping tests on Windows

For grouping strings, "\3" and "\3\3" are equivalent.

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

2 years ago[MLIR][Presburger] Support finding integer lexmin in IntegerPolyhedron
Arjun P [Mon, 21 Feb 2022 19:04:12 +0000 (19:04 +0000)]
[MLIR][Presburger] Support finding integer lexmin in IntegerPolyhedron

Note: this does not yet support PrebsurgerSets.

Reviewed By: Groverkss

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

2 years ago[NFC][DAGCombine] Use isOperandOf() in combineCarryDiamond
Paweł Bylica [Mon, 21 Feb 2022 19:27:47 +0000 (20:27 +0100)]
[NFC][DAGCombine] Use isOperandOf() in combineCarryDiamond

Pre-commit for https://reviews.llvm.org/D118362.

2 years ago[libunwind] Further fix for 32-bit PowerPC processors without AltiVec
George Koehler [Mon, 21 Feb 2022 20:15:53 +0000 (15:15 -0500)]
[libunwind] Further fix for 32-bit PowerPC processors without AltiVec

https://reviews.llvm.org/D91906 did most of the work necessary to fix libunwind on
32-bit PowerPC processors without AltiVec, but there was one more piece necessary.

Reviewed By: luporl

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

2 years ago[OPENMP]Fix PR49366: crash on VLAs in task untied regions.
Alexey Bataev [Fri, 26 Mar 2021 19:43:25 +0000 (12:43 -0700)]
[OPENMP]Fix PR49366: crash on VLAs in task untied regions.

We need to capture the local variables into a record in task untied
regions but clang does not support record with VLA data members.

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

2 years ago[RISCV] Teach shouldSinkOperands to sink splat operands of vp.fma intrinsics.
Craig Topper [Mon, 21 Feb 2022 19:52:57 +0000 (11:52 -0800)]
[RISCV] Teach shouldSinkOperands to sink splat operands of vp.fma intrinsics.

Reviewed By: frasercrmck

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

2 years agoCreate office hours documentation.
Kristof Beyls [Wed, 16 Feb 2022 13:53:18 +0000 (14:53 +0100)]
Create office hours documentation.

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

2 years ago[Clang][OpenMP] Add Sema support for atomic compare capture
Shilei Tian [Mon, 21 Feb 2022 16:47:02 +0000 (11:47 -0500)]
[Clang][OpenMP] Add Sema support for atomic compare capture

This patch adds Sema support for `atomic compare capture`.

Reviewed By: ABataev

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

2 years ago[libcxx][test] array and basic_string_view iterators are not portably pointers
Casey Carter [Wed, 29 Dec 2021 22:26:30 +0000 (14:26 -0800)]
[libcxx][test] array and basic_string_view iterators are not portably pointers

Fixup tests that believe them to be so. Most notably including some heavy refactoring in `std/iterators/iterator.primitives/iterator.traits/cxx20_iterator_traits.compile.pass.cpp`, which now detects pointers and validates that `iterator_concept` is present only for pointers.

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

2 years agoRevert "[ArgPromotion] Regenerate test checks for crash.ll - removed ALL_NEWPM prefix."
Nico Weber [Mon, 21 Feb 2022 18:29:37 +0000 (13:29 -0500)]
Revert "[ArgPromotion] Regenerate test checks for crash.ll - removed ALL_NEWPM prefix."

This reverts commit 52577cd26f26f6428c72395e7337af3fc84bc6f6.
Breaks check-llvm, see comments on https://reviews.llvm.org/D120207

2 years ago[MLIR][PDL] Fix C++20 build. concept is a new keyword. NFC.
Benjamin Kramer [Mon, 21 Feb 2022 17:37:19 +0000 (18:37 +0100)]
[MLIR][PDL] Fix C++20 build. concept is a new keyword. NFC.

2 years ago[MemCpyOpt] Check all access for MemoryUses in writtenBetween.
Florian Hahn [Mon, 21 Feb 2022 16:54:02 +0000 (16:54 +0000)]
[MemCpyOpt] Check all access for MemoryUses in writtenBetween.

Currently writtenBetween can miss clobbers of Loc between End and Start,
if End is a MemoryUse.

To guarantee we see all write clobbers of Loc between Start and End
for MemoryUses, restrict to Start and End being in the same block
and check all accesses between them.

This fixes 2 mis-compiles illustrated in
llvm/test/Transforms/MemCpyOpt/memcpy-byval-forwarding-clobbers.ll

Reviewed By: nikic

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

2 years ago[Clang][OpenMP] Fix wrong form of 'cond-update-stmt' in atomic_ast_print.cpp
Shilei Tian [Mon, 21 Feb 2022 16:40:01 +0000 (11:40 -0500)]
[Clang][OpenMP] Fix wrong form of 'cond-update-stmt' in atomic_ast_print.cpp

In `clang/test/OpenMP/atomic_ast_print.cpp` for `atomic compare capture`,
it was using 'cond-expr-stmt' instead of 'cond-update-stmt'. The spec only supports
'cond-update-stmt'.

Reviewed By: ABataev

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

2 years ago[ARM] Addition SSAT/USAT tests for min/max patterns. NFC
David Green [Mon, 21 Feb 2022 16:24:58 +0000 (16:24 +0000)]
[ARM] Addition SSAT/USAT tests for min/max patterns. NFC

2 years ago[ArgPromotion] Regenerate test checks for crash.ll - removed ALL_NEWPM prefix.
Valery Pykhtin [Sun, 20 Feb 2022 12:15:31 +0000 (15:15 +0300)]
[ArgPromotion] Regenerate test checks for crash.ll - removed ALL_NEWPM prefix.

Rename %tmp => %temp IR values to avoid update warning.

Reviewed by Nikita Popov

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

2 years ago[MLIR] replace C++ function type defintion in the C API's Interfaces.h
fuzzypixelz [Mon, 21 Feb 2022 15:53:27 +0000 (07:53 -0800)]
[MLIR] replace C++ function type defintion in the C API's Interfaces.h

Clearly this something of a typo, and it obviously doesn't even compile.

Reviewed By: ftynse

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

2 years ago[AArch64] Alter mull shuffle(ext(..)) combine to work on buildvectors
David Green [Mon, 21 Feb 2022 15:44:30 +0000 (15:44 +0000)]
[AArch64] Alter mull shuffle(ext(..)) combine to work on buildvectors

We have a combine for converting mul(dup(ext(..)), ...) into
mul(ext(dup(..)), ..), for allowing more uses of smull and umull
instructions. Currently it looks for vector insert and shuffle vectors
to detect the element that we can convert to a vector extend. Not all
cases will have a shufflevector/insert element though.

This started by extending the recognition to buildvectors (with elements
that may be individually extended). The new method seems to cover all
the cases that the old method captured though, as the shuffle will
eventually be lowered to buildvectors, so the old method has been
removed to keep the code a little simpler. The new code detects legal
build_vector(ext(a), ext(b), ..), converting them to ext(build_vector(a,
b, ..)) providing all the extends/types match up.

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

2 years agoMIR: Start diagnosing too many operands on an instruction
Matt Arsenault [Fri, 18 Feb 2022 21:22:20 +0000 (16:22 -0500)]
MIR: Start diagnosing too many operands on an instruction

Previously this would just assert which was annoying and didn't point
to the specific instruction/operand.

2 years ago[InstSimplify] add tests for funnel shift with redundant shift; NFC
Sanjay Patel [Mon, 21 Feb 2022 14:26:07 +0000 (09:26 -0500)]
[InstSimplify] add tests for funnel shift with redundant shift; NFC

2 years ago[AArch64][RISCV][x86] add tests for funnel shift with shift logic; NFC
Sanjay Patel [Mon, 21 Feb 2022 14:07:59 +0000 (09:07 -0500)]
[AArch64][RISCV][x86] add tests for funnel shift with shift logic; NFC

2 years agoFix llvm-objcopy shared lib build
Sven van Haastregt [Mon, 21 Feb 2022 13:55:29 +0000 (13:55 +0000)]
Fix llvm-objcopy shared lib build

Fix after ddf528b7a092 ("[llvm-objcopy][COFF] Fix section name
encoding", 2022-02-21) caused "undefined reference to
`llvm::COFF::encodeSectionName" failures.

2 years ago[X86] use-cr-result-of-dom-icmp-st.ll - add checks without -cgp-icmp-eq2icmp-st flag
Simon Pilgrim [Mon, 21 Feb 2022 13:44:36 +0000 (13:44 +0000)]
[X86] use-cr-result-of-dom-icmp-st.ll - add checks without -cgp-icmp-eq2icmp-st flag

2 years ago[Clang][Sema] Check unexpected else statement in cond-update-stmt
Shilei Tian [Mon, 21 Feb 2022 13:20:26 +0000 (08:20 -0500)]
[Clang][Sema] Check unexpected else statement in cond-update-stmt

In 'cond-update-stmt', `else` statement is not expected. This patch adds
the check in Sema.

Reviewed By: ABataev

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

2 years ago[SCEV][NFC] Replace contains+insert check with insert.second
Max Kazantsev [Mon, 21 Feb 2022 13:10:42 +0000 (20:10 +0700)]
[SCEV][NFC] Replace contains+insert check with insert.second

2 years ago[DAG] visitBSWAP - pull out repeated SDLoc. NFC
Simon Pilgrim [Mon, 21 Feb 2022 13:07:51 +0000 (13:07 +0000)]
[DAG] visitBSWAP - pull out repeated SDLoc. NFC

Cleanup for D120192

2 years ago[NFC][RISCV] Fix path checking issue if default sysroot is given
Kito Cheng [Mon, 21 Feb 2022 12:43:40 +0000 (20:43 +0800)]
[NFC][RISCV] Fix path checking issue if default sysroot is given

2 years ago[clangd] Treat 'auto' params as deduced if there's a single instantiation.
Sam McCall [Fri, 11 Feb 2022 11:09:57 +0000 (12:09 +0100)]
[clangd] Treat 'auto' params as deduced if there's a single instantiation.

This makes hover/go-to-definition/expand-auto etc work for auto params in many
common cases.
This includes when a generic lambda is passed to a function accepting
std::function. (The tests don't use this case, it requires a lot of setup).

Note that this doesn't affect the AST of the function body itself, cause its
nodes not to be dependent, improve code completion etc.
(These sort of improvements seem possible, in a similar "if there's a single
instantiation, traverse it instead of the primary template" way).

Fixes https://github.com/clangd/clangd/issues/493
Fixes https://github.com/clangd/clangd/issues/1015

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

2 years agoissue-subscriber: Fix handling of labels with spaces
Tom Stellard [Mon, 21 Feb 2022 12:02:55 +0000 (04:02 -0800)]
issue-subscriber: Fix handling of labels with spaces

Fixes #53288

Reviewed By: mehdi_amini, asl, Quuxplusone

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

2 years ago[mlir] Annotate methods on a correct class in PybindAdaptors.h
Alex Zinenko [Wed, 19 Jan 2022 12:43:24 +0000 (13:43 +0100)]
[mlir] Annotate methods on a correct class in PybindAdaptors.h

The `.def` and `.def_property_readonly` functions in PybindAdaptors.h should
construct the functions as method of the current class rather than as method of
pybind11:none(), which is an object and not even a class.

Depends On D117658

Reviewed By: gysit

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

2 years ago[gn build] Port 85f4023e731c
LLVM GN Syncbot [Mon, 21 Feb 2022 11:51:36 +0000 (11:51 +0000)]
[gn build] Port 85f4023e731c

2 years ago[llvm-objcopy][COFF] Fix section name encoding
Nicolas Miller [Sat, 19 Feb 2022 18:28:38 +0000 (20:28 +0200)]
[llvm-objcopy][COFF] Fix section name encoding

The section name encoding for `llvm-objcopy` had two main issues, the
first is that the size used for the `snprintf` in the original code is
incorrect because `snprintf` adds a null byte, so this code was only
able to encode offsets of 6 digits - `/`, `\0` and 6 digits of the
offset - rather than the 7 digits it should support.

And the second part is that it didn't support the base64 encoding for
offsets larger than 7 digits.

This issue specifically showed up when using the `clang-offload-bundler`
with a binary containing a lot of symbols/sections, since it uses
`llvm-objcopy` to add the sections containing the offload code.

Reviewed By: jhenderson

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

2 years ago[COFF] Move section name encoding into BinaryFormat
Nicolas Miller [Sat, 19 Feb 2022 18:29:08 +0000 (20:29 +0200)]
[COFF] Move section name encoding into BinaryFormat

Large COFF section names are moved into the string table and the
section header field is the offset into the string table encoded in
ASCII for offset smaller than 7 digits and in base64 for larger
offsets.

The operation of taking the string table offsets is done in a few
places in the codebase, so it is helpful to move this operation into
`BinaryFormat` so that it can be shared everywhere it's done.

So this patch takes the implementation of this operation from
`llvm/lib/MC/WinCOFFObjectWriter.cpp` and moves it into `BinaryFormat`.

Reviewed By: jhenderson, rnk

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

2 years ago[Test] Move test for PR53969 to LoopDeletion folder where it truly belongs
Max Kazantsev [Mon, 21 Feb 2022 11:39:04 +0000 (18:39 +0700)]
[Test] Move test for PR53969 to LoopDeletion folder where it truly belongs

2 years ago[OpenCL] opencl-c.h: remove arg names from atomics; NFC
Sven van Haastregt [Mon, 21 Feb 2022 11:29:10 +0000 (11:29 +0000)]
[OpenCL] opencl-c.h: remove arg names from atomics; NFC

This simplifies completeness comparisons against OpenCLBuiltins.td and
also makes the header no longer "claim" the identifiers "success",
"failure", "desired", "value".

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

2 years agoRevert "[AArch64][GlobalISel] Optimize conjunctions of compares to conditional compares."
Florian Hahn [Mon, 21 Feb 2022 10:52:09 +0000 (10:52 +0000)]
Revert "[AArch64][GlobalISel] Optimize conjunctions of compares to conditional compares."

This reverts commit 2a46450849de6904fc64f9a65303b20ca7fc9dbd.

This triggers the following assertion in an internal project:

    Assertion failed: (VRegInfo[Reg.id()].first.is<const TargetRegisterClass
    *>() && "Register class not set, wrong accessor"), function getRegClass,
    file MachineRegisterInfo.h, line 646.

I'll work with the author directly to get a reproducer.

2 years ago[AMDGPU] SILoadStoreOptimizer: avoid unbounded register pressure increases
Jay Foad [Fri, 28 Jan 2022 13:49:12 +0000 (13:49 +0000)]
[AMDGPU] SILoadStoreOptimizer: avoid unbounded register pressure increases

Previously when combining two loads this pass would sink the
first one down to the second one, putting the combined load
where the second one was. It would also sink any intervening
instructions which depended on the first load down to just
after the combined load.

For example, if we started with this sequence of
instructions (code flowing from left to right):

  X A B C D E F Y

After combining loads X and Y into XY we might end up with:

  A B C D E F XY

But if B D and F depended on X, we would get:

  A C E XY B D F

Now if the original code had some short disjoint live ranges
from A to B, C to D and E to F, in the transformed code
these live ranges will be long and overlapping. In this way
a single merge of two loads could cause an unbounded
increase in register pressure.

To fix this, change the way the way that loads are moved in
order to merge them so that:
- The second load is moved up to the first one. (But when
  merging stores, we still move the first store down to the
  second one.)
- Intervening instructions are never moved.
- Instead, if we find an intervening instruction that would
  need to be moved, give up on the merge. But this case
  should now be pretty rare because normal stores have no
  outputs, and normal loads only have address register
  inputs, but these will be identical for any pair of loads
  that we try to merge.

As well as fixing the unbounded register pressure increase
problem, moving loads up and stores down seems like it
should usually be a win for memory latency reasons.

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

2 years ago[Test] Add failing test for PR53969
Max Kazantsev [Mon, 21 Feb 2022 10:48:08 +0000 (17:48 +0700)]
[Test] Add failing test for PR53969

2 years agoIncrease the limit on parser diagnostics
Benjamin Kramer [Mon, 21 Feb 2022 10:43:40 +0000 (11:43 +0100)]
Increase the limit on parser diagnostics

We're really close to the limit
$ grep -c DIAG tools/clang/include/clang/Basic/DiagnosticParseKinds.inc
598

2 years ago[StableHashing] Hash vregs with multiple defs
Jay Foad [Fri, 18 Feb 2022 11:55:09 +0000 (11:55 +0000)]
[StableHashing] Hash vregs with multiple defs

This allows stableHashValue to be used on Machine IR that is
not in SSA form.

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