Denys Shabalin [Mon, 14 Jun 2021 14:07:40 +0000 (16:07 +0200)]
Add AutomaticAllocationScope to memref.alloca_scope
This change adds `AutomaticAllocationScope` to the
memref.alloca_scope op. Additionally, it also clarifies
that alloca_scope is is conceptually a passthrough operation.
Reviewed By: ftynse, bondhugula
Differential Revision: https://reviews.llvm.org/D104227
Peter Steinfeld [Mon, 14 Jun 2021 13:21:37 +0000 (06:21 -0700)]
[flang] Fix compilation problem with rename of "MemRefDataFlow"
Revision https://reviews.llvm.org/D104190 renamed MemRefDataFlow -> AffineScalarReplacement. After this rename, mlir failed to build. With this change, all of clang, mlir, and flang build and test correctly.
Differential Revision: https://reviews.llvm.org/D104223
David Spickett [Mon, 14 Jun 2021 12:11:58 +0000 (13:11 +0100)]
Reland "[lldb] Set return status to failed when adding a command error"
This reverts commit
ac031c8db2ce454a9b08f23192ce698e8bde4447.
SB API usage has been corrected.
Roman Lebedev [Mon, 14 Jun 2021 13:25:59 +0000 (16:25 +0300)]
[NFC][DAGCombine] Extract getFirstIndexOf() lambda back into a function
Not all supported compilers like such lambdas, at least one buildbot is unhappy.
Roman Lebedev [Mon, 14 Jun 2021 12:59:03 +0000 (15:59 +0300)]
[DAGCombine] reduceBuildVecToShuffle(): sort input vectors by decreasing size
The sorting, obviously, must be stable, else we will have random assembly fluctuations.
Apparently there was no test coverage that would benefit from that,
so i've added one test.
The sorting consists of two parts - just sort the input vectors,
and recompute the shuffle mask -> input vector mapping.
I don't believe we need to do anything else.
Reviewed By: RKSimon
Differential Revision: https://reviews.llvm.org/D104187
Jan Svoboda [Mon, 14 Jun 2021 13:08:02 +0000 (15:08 +0200)]
[clang][deps] NFC: Stop using moved-from object
The dependency scanning worker uses `std::move` to "reset" `DependencyOutputOptions` in the `CompilerInstance` that performs the implicit build. It's probably preferable to replace the object with value-initialized instance, rather than depending on the behavior of a moved-from object.
Reviewed By: dexonsmith
Differential Revision: https://reviews.llvm.org/D104106
Jan Svoboda [Mon, 14 Jun 2021 13:06:13 +0000 (15:06 +0200)]
[clang][deps] NFC: Handle `DependencyOutputOptions` only once
There's no need to pass `DependencyOutputOptions` to each call of `handleFileDependency`, since the options don't ever change.
This patch adds new `handleDependencyOutputOpts` method to the `DependencyConsumer` interface and the dependency scanner uses it to report the options only once.
Reviewed By: dexonsmith
Differential Revision: https://reviews.llvm.org/D104104
Jeroen Dobbelaere [Mon, 14 Jun 2021 12:52:29 +0000 (14:52 +0200)]
Intrinsic::getName: require a Module argument
Ensure that we provide a `Module` when checking if a rename of an intrinsic is necessary.
This fixes the issue that was detected by https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=32288
(as mentioned by @fhahn), after committing D91250.
Note that the `LLVMIntrinsicCopyOverloadedName` is being deprecated in favor of `LLVMIntrinsicCopyOverloadedName2`.
Reviewed By: nikic
Differential Revision: https://reviews.llvm.org/D99173
Louis Dionne [Mon, 14 Jun 2021 12:41:56 +0000 (08:41 -0400)]
[libc++] NFC: More refactoring in the prev/next/advance tests per review comments
Jan Svoboda [Fri, 11 Jun 2021 11:52:38 +0000 (13:52 +0200)]
[clang][deps] NFC: Fix an XFAIL test on Windows
The `sed` command ensures Windows-specific path separators (single and double backslashes) are replaced by forward slashes in the output file. FileCheck can continue using forward slashes in paths this way.
Uday Bondhugula [Sat, 12 Jun 2021 23:19:20 +0000 (04:49 +0530)]
[MLIR][NFC] Rename MemRefDataFlow -> AffineScalarReplacement
NFC. Rename MemRefDataFlow -> AffineScalarReplacement and move to
AffineTransforms library. Pass command line rename: -memref-dataflow-opt
-> affine-scalrep. Update outdated pass documentation.
Rationale:
https://llvm.discourse.group/t/move-and-rename-memref-dataflow-opt-lib-transforms-lib-affine-dialect-transforms/3640
Differential Revision: https://reviews.llvm.org/D104190
Louis Dionne [Thu, 27 May 2021 18:15:11 +0000 (14:15 -0400)]
[libc++] Refactor the tests for std::prev, next and advance
This started as an attempt to fix a GCC 11 warning of misplaced parentheses.
I then noticed that trying to fix the parentheses warning actually triggered
errors in the tests, showing that we were incorrectly assuming that the
implementation of ranges::advance was using operator+= or operator-=.
This commit fixes that issue and makes the tests easier to follow by
localizing the assertions it makes.
Differential Revision: https://reviews.llvm.org/D103272
David Spickett [Mon, 14 Jun 2021 12:08:40 +0000 (12:08 +0000)]
Revert "[lldb] Set return status to failed when adding a command error" (and fixups)
This reverts commit
f583029da3d6dbabe82f48b160227eb0120abd33,
0f94d68a2e15d50796439f20bcb508b95931d2ae and
a2363c0cf9b6a9a81c76ac652da667f73845d38b.
Due to test failures from incorrect SB API usage.
Jan Svoboda [Mon, 14 Jun 2021 10:24:54 +0000 (12:24 +0200)]
[clang][deps] Prevent unintended modifications of the original TU command-line
One of the goals of the dependency scanner is to generate command-lines that can be used to explicitly build modular dependencies of a translation unit. The only modifications to these command-lines should be for the purposes of explicit modular build.
However, the current version of dependency scanner leaks its implementation details into the command-lines.
The first problem is that the `clang-scan-deps` tool adjusts the original textual command-line (adding `-Eonly -M -MT <target> -sys-header-deps -Wno-error -o /dev/null `, removing `--serialize-diagnostics`) in order to set up the `DependencyScanning` library. This has been addressed in D103461, D104012, D104030, D104031, D104033. With these patches, the `DependencyScanning` library receives the unmodified `CompilerInvocation`, sets it up and uses it for the implicit modular build.
Finally, to prevent leaking the implementation details to the resulting command-lines, this patch generates them from the **original** unmodified `CompilerInvocation` rather than from the one that drives the implicit build.
Reviewed By: dexonsmith
Differential Revision: https://reviews.llvm.org/D104036
Jan Svoboda [Thu, 10 Jun 2021 12:13:25 +0000 (14:13 +0200)]
[clang][deps] NFC: Check the correct context hashes in tests
The `clang-scan-deps` tests for the full output format were written under the assumption that most TUs/modules have the same context hash. This is no longer true, since we're changing the original compilation options. This patch updates the tests, which no longer conflate multiple context hashes into a single FileCheck variable.
Raphael Isemann [Mon, 14 Jun 2021 11:03:02 +0000 (13:03 +0200)]
[lldb][docs] Document SBType
This documents the behaviour of the different SBType functions with notes for
the language-specific behaviour for C/C++/Objective-C. All of this reflects the
current behaviour of LLDB (even though that also means some functions behave
kinda weird but at least they are now documented to be weird)
Reviewed By: #lldb, mib
Differential Revision: https://reviews.llvm.org/D103454
Jan Svoboda [Mon, 14 Jun 2021 10:55:32 +0000 (12:55 +0200)]
[clang][deps] Fix failing modules.cpp test
Commit
d8bab69ead22a10dc4cdb2e36f6ea6fdfe774e2e updated the ClangScanDeps/modules.cpp test. The new `{{.*}}` regex is supposed to only match `modules_cdb_input.o`, `a.o` or `b.o`. However, due to non-determinism, this can sometimes also match `modules_cdb_input2.o`, causing match failure on the next line. This commit changes the regex to only match one of the three valid cases.
Buildbot failure: https://lab.llvm.org/buildbot/#/builders/109/builds/16675
Florian Hahn [Sun, 13 Jun 2021 15:29:18 +0000 (16:29 +0100)]
[VPlan] Add additional tests for region merging.
Add additional tests suggested in D100260.
Also drop the unneeded `indvars.` prefix from induction phi name.
Jan Svoboda [Mon, 14 Jun 2021 10:12:23 +0000 (12:12 +0200)]
[clang][deps] Move enabling system header deps from `clang-scan-deps` to `DependencyScanning` library
This patch moves enabling system header deps from `clang-scan-deps` into the `DependencyScanning` library. This will make it easier to preserve semantics of the original TU command-line for modular dependencies (see D104036).
Reviewed By: arphaman
Differential Revision: https://reviews.llvm.org/D104033
Jan Svoboda [Mon, 14 Jun 2021 10:09:54 +0000 (12:09 +0200)]
[clang][deps] Move injection of `-Wno-error` from `clang-scan-deps` to `DependencyScanning` library
This moves another piece of logic specific to `clang-scan-deps` into the `DependencyScanning` library. This makes it easier to check how the original command-line looked like in the library and will enable the library to stop inventing `-Wno-error` for modular dependencies (see D104036).
Reviewed By: arphaman
Differential Revision: https://reviews.llvm.org/D104031
Jan Svoboda [Mon, 14 Jun 2021 10:06:08 +0000 (12:06 +0200)]
[clang][deps] Move invocation adjustments from `clang-scan-deps` to `DependencyScanning` library
The `clang-scan-deps` tool has some logic that parses and modifies the original Clang command-line. The goal is to setup `DependencyOutputOptions` by injecting `-M -MT <target>` and prevent the creation of output files.
This patch moves the logic into the `DependencyScanning` library, and uses the parsed `CompilerInvocation` instead of the raw command-line. The code simpler and can be used from the C++ API as well.
The `-o /dev/null` arguments are not necessary, since the `DependencyScanning` library only runs a preprocessing action, so there's no way it'll produce an actual object file.
Related: The `-M` argument implies `-w`, which would appear on the command-line of modular dependencies even though it was not on the original TU command line (see D104036).
Some related tests were updated.
Reviewed By: arphaman
Differential Revision: https://reviews.llvm.org/D104030
Jan Svoboda [Mon, 14 Jun 2021 10:02:19 +0000 (12:02 +0200)]
[clang][deps] Move stripping of diagnostic serialization from `clang-scan-deps` to `DependencyScanning` library
To prevent the creation of diagnostics file, `clang-scan-deps` strips the corresponding command-line argument. This behavior is useful even when using the C++ `DependencyScanner` library.
This patch transforms stripping of command-line in `clang-scan-deps` into stripping of `CompilerInvocation` in `DependencyScanning`.
AFAIK, the `clang-cl` driver doesn't even accept `--serialize-diagnostics`, so I've removed the test. (It would fail with an unknown command-line argument otherwise.)
Note: Since we're generating command-lines for modular dependencies from `CompilerInvocation`, the `--serialize-diagnostics` will be dropped. This was already happening in `clang-scan-deps` before this patch, but it will now happen also when using `DependencyScanning` library directly. This is resolved in D104036.
Reviewed By: dexonsmith, arphaman
Differential Revision: https://reviews.llvm.org/D104012
Gabor Marton [Fri, 28 May 2021 13:18:28 +0000 (15:18 +0200)]
[Analyzer][solver] Simplify existing eq classes and constraints when a new constraint is added
Update `setConstraint` to simplify existing equivalence classes when a
new constraint is added. In this patch we iterate over all existing
equivalence classes and constraints and try to simplfy them with
simplifySVal. This solves problematic cases where we have two symbols in
the tree, e.g.:
```
int test_rhs_further_constrained(int x, int y) {
if (x + y != 0)
return 0;
if (y != 0)
return 0;
clang_analyzer_eval(x + y == 0); // expected-warning{{TRUE}}
clang_analyzer_eval(y == 0); // expected-warning{{TRUE}}
return 0;
}
```
Differential Revision: https://reviews.llvm.org/D103314
Jan Svoboda [Mon, 14 Jun 2021 09:30:26 +0000 (11:30 +0200)]
[clang][deps] Handle modular dependencies present in PCH
When a translation unit uses a PCH and imports the same modules as the PCH, we'd prefer to resolve to those modules instead of inventing new modules and reporting them as modular dependencies. Since the PCH modules have already been built nudge the compiler to reuse them when deciding whether to build a new module and don't report them as regular modular dependencies.
Depends on D103524 & D103802.
Reviewed By: dexonsmith
Differential Revision: https://reviews.llvm.org/D103526
Haojian Wu [Mon, 14 Jun 2021 09:51:00 +0000 (11:51 +0200)]
Diana Picus [Wed, 9 Jun 2021 09:47:10 +0000 (09:47 +0000)]
[flang] Add POSIX implementation for CPU_TIME
Add an implementation for CPU_TIME using the POSIX function
clock_gettime. I think on most POSIX systems this will be included for
free via <ctime>, which corresponds to "time.h" (YMMV, we can fix the
code if the need arises).
Detecting that clock_gettime is available is tricky. For instance, commit
827407a86aa07 used the following incantation in f18-parse-demo.cpp:
#if _POSIX_C_SOURCE >= 199309L && _POSIX_TIMERS > 0 && _POSIX_CPUTIME && \
defined CLOCK_PROCESS_CPUTIME_ID
This doesn't work on my AArch64 Ubuntu system, which provides
clock_gettime but doesn't define _POSIX_TIMERS. Since finding the right
combination of macros requires infinite time, patience and access to
sundry POSIX systems, we should probably try a different approach.
This patch attempts to use SFINAE instead of the preprocessor to choose
an implementation for CPU_TIME. We define a helper function template
which helps us check if clock_gettime is available (and has the
interface we expect). I hope the comments explain it well enough.
This approach has the advantage that it keeps the detection of
clock_gettime close to the code that uses it. An alternative would be to
use CMake to check for the symbol (I personally haven't used this before
so I don't know if there are any quirks).
Differential Revision: https://reviews.llvm.org/D104020
David Spickett [Mon, 14 Jun 2021 09:35:14 +0000 (09:35 +0000)]
[lldb] Correct "else if" to "elif" in TestRegisters
Guillaume Chatelet [Mon, 14 Jun 2021 09:33:39 +0000 (09:33 +0000)]
Revert "[libc] Add a set of elementary operations"
This reverts commit
e63f27a3cf8129cb66b8350ad50bf19633554a6b.
Jan Svoboda [Mon, 14 Jun 2021 09:15:03 +0000 (11:15 +0200)]
[clang][deps] Handle precompiled headers' AST files
The `PreprocessOnlyAction` doesn't support loading the AST file of a precompiled header. This is problematic for dependency scanning, since the `#include` manufactured for the PCH is treated as textual. This means the PCH contents get scanned with each TU, which is redundant. Moreover, dependencies of the PCH end up being considered dependency of the TU.
To handle AST file of PCH properly, this patch creates new `FrontendAction` that behaves the same way `PreprocessorOnlyAction` does, but treats the manufactured PCH `#include` as a normal compilation would (by not claiming it only uses a preprocessor and creating the default AST consumer).
The AST file is now reported as a file dependency of the TU.
Depends on D103519.
Reviewed By: Bigcheese
Differential Revision: https://reviews.llvm.org/D103524
David Spickett [Mon, 14 Jun 2021 09:23:05 +0000 (09:23 +0000)]
[lldb] Add missing changes to
a2363c0cf9b6a9a81c76ac652da667f73845d38b
Completely forgot to actually update the change before relanding it.
This adds the Darwin AVX changes.
David Spickett [Mon, 14 Jun 2021 09:19:25 +0000 (09:19 +0000)]
Reland "[lldb] Set return status to failed when adding a command error"
This reverts commit
db93e4e70aa453e5ba04ba0d9e01f581882b6c81.
This modifies TestRegsters.py to account for Darwin showing
AVX registers as part of "Floating Point Registers" instead
of in a separate "Advanced Vector Extensions" category.
Jan Svoboda [Mon, 14 Jun 2021 08:51:04 +0000 (10:51 +0200)]
[clang][modules][pch] Allow loading PCH with different modules cache path
It's useful to be able to load explicitly-built PCH files into an implicit build (e.g. during dependency scanning). That's currently impossible, since the explicitly-built PCH has an empty modules cache path, while the current compilation has (and needs to have) a valid path, triggering an error in the `PCHValidator`.
This patch adds a preprocessor option and command-line flag that can be used to omit this check.
Reviewed By: dexonsmith
Differential Revision: https://reviews.llvm.org/D103802
Guillaume Chatelet [Mon, 14 Jun 2021 09:01:06 +0000 (09:01 +0000)]
[libc] Add a set of elementary operations
Each of these elementary operations can be assembled to support higher order constructs (Overlapping access, Loop, Aligned Loop).
The patch does not compile yet as it depends on other ones (D100571, D100631) but it allows to get the conversation started.
Differential Revision: https://reviews.llvm.org/D100646
Jan Svoboda [Mon, 14 Jun 2021 08:32:48 +0000 (10:32 +0200)]
[clang][deps] NFC: Preserve the original frontend action
This patch stops adjusting the frontend action when `clang-scan-deps` is configured to use the full output format.
In a future patch, the dependency scanner needs to check whether the original compiler invocation builds a PCH. That's impossible when `-Eonly` et al. override `-emit-pch`.
The `-Eonly` flag is not needed - the dependency scanner explicitly sets up its own frontend action anyways.
Reviewed By: dexonsmith
Differential Revision: https://reviews.llvm.org/D103461
Guillaume Chatelet [Mon, 14 Jun 2021 08:27:41 +0000 (08:27 +0000)]
[llvm] remove Sequence::asSmallVector()
There's no need for `toSmallVector()` as `SmallVector.h` already provides a `to_vector` free function that takes a range.
Reviewed By: Quuxplusone
Differential Revision: https://reviews.llvm.org/D104024
Diana Picus [Wed, 9 Jun 2021 08:19:43 +0000 (08:19 +0000)]
[flang] Add initial implementation for CPU_TIME
Add an implementation for CPU_TIME based on std::clock(), which should
be available on all the platforms that we support.
Also add a test that's basically just a sanity check to make sure we
return positive values and that the value returned at the start of some
amount of work is larger than the one returned after the end.
Differential Revision: https://reviews.llvm.org/D104019
Simon Moll [Mon, 14 Jun 2021 06:51:24 +0000 (08:51 +0200)]
[VP] Binary floating-point intrinsics.
This patch implements vector-predicated intrinsics on IR level for fadd,
fsub, fmul, fdiv and frem. There operate in the default floating-point
environment. We will use constrained fp operand bundles for constrained
vector-predicated fp math (D93455).
Reviewed By: craig.topper
Differential Revision: https://reviews.llvm.org/D93470
Adrian Kuegel [Fri, 11 Jun 2021 10:24:40 +0000 (12:24 +0200)]
[mlir] Remove traits that require vector type support from ops in Complex dialect.
Actually, no vector types are supported so far. We should add the traits once
the vector types are supported (e.g. ElementwiseMappable.traits).
Instead add Elementwise trait to each op.
Differential Revision: https://reviews.llvm.org/D104103
Tobias Gysi [Mon, 14 Jun 2021 05:59:33 +0000 (05:59 +0000)]
[mlir][linalg] Add support for scalar input operands.
Up to now all structured op operands are assumed to be shaped. The patch relaxes this assumption and allows scalar input operands. In contrast to shaped operands scalar operands are not indexed and directly forwarded to the body of the operation. As all other operands, scalar operands are associated to an indexing map that in case of a scalar or a 0D-operand has an empty range.
We will use scalar operands as a replacement for the capture mechanism. In contrast to captures, the approach ensures we can generate the function signature from the operand list and it prevents outdated capture values in case a transformation updates only the capture operand but not the hidden body of a named operation.
Removing captures and updating existing operations such as linalg.fill is left for a later patch.
The patch depends on https://reviews.llvm.org/D103891 and https://reviews.llvm.org/D103890.
Differential Revision: https://reviews.llvm.org/D104109
Matthias Springer [Mon, 14 Jun 2021 06:00:30 +0000 (15:00 +0900)]
[mlir][linalg] Lower PadTensorOps with non-constant pad value
The padding of such ops is not generated in a vectorized way. Instead, emit a tensor::GenerateOp.
We may vectorize GenerateOps in the future.
Differential Revision: https://reviews.llvm.org/D103879
Adrian Kuegel [Fri, 11 Jun 2021 11:37:51 +0000 (13:37 +0200)]
[mlir] Add ExpOp to Complex dialect.
Also add a conversion pattern from Complex to Standard/Math dialect.
Differential Revision: https://reviews.llvm.org/D104108
Stephan Bergmann [Mon, 14 Jun 2021 05:57:22 +0000 (07:57 +0200)]
Only consider built-in compound assignment operators for -Wunused-but-set-*
At least LibreOffice has, for mainly historic reasons that would be hard to
change now, a class Any with an overloaded operator >>= that semantically does
not assign to the LHS but rather extracts into the (by-reference) RHS. Which
thus caused false positive -Wunused-but-set-parameter and
-Wunused-but-set-variable after those have been introduced recently.
This change is more conservative about the assumed semantics of overloaded
operators, excluding compound assignment operators but keeping plain operator =
ones. At least for LibreOffice, that strikes a good balance of not producing
false positives but still finding lots of true ones.
(The change to the BinaryOperator case in MaybeDecrementCount is necessary
because e.g. the template f4 test code in warn-unused-but-set-variables-cpp.cpp
turns the += into a BinaryOperator.)
Differential Revision: https://reviews.llvm.org/D103949
Mindong Chen [Mon, 14 Jun 2021 05:55:14 +0000 (13:55 +0800)]
[LoopVectorize] precommit pr50686.ll for D104148
Matthias Springer [Mon, 14 Jun 2021 05:41:07 +0000 (14:41 +0900)]
[mlir][linalg] Vectorize linalg.pad_op source copying (improved)
Vectorize linalg.pad_op source copying if source or result shape are static.
Differential Revision: https://reviews.llvm.org/D103791
Matthias Springer [Mon, 14 Jun 2021 05:30:02 +0000 (14:30 +0900)]
[mlir][linalg] Vectorize linalg.pad_op source copying (static source shape)
If the source operand of a linalg.pad_op operation has static shape, vectorize the copying of the source.
Differential Revision: https://reviews.llvm.org/D103747
Matthias Springer [Mon, 14 Jun 2021 05:20:11 +0000 (14:20 +0900)]
[mlir][linalg] Lower PadTensorOp to InitTensorOp + FillOp + SubTensorInitOp
Currently limited to constant pad values. Any combination of dynamic/static tensor sizes and padding sizes is supported.
Differential Revision: https://reviews.llvm.org/D103679
serge-sans-paille [Fri, 11 Jun 2021 13:42:26 +0000 (15:42 +0200)]
AMD k8 family does not support SSE4.x which are required by x86-64-v2+
So don't define __tune__k8__ for these micro architecture.
SSE, SSE2 and SSE3 appear in https://www.amd.com/system/files/TechDocs/25112.PDF
but not SSE4.x.
Differential Revision: https://reviews.llvm.org/D104116
Xuanda Yang [Mon, 14 Jun 2021 04:46:12 +0000 (12:46 +0800)]
[LLParser] Remove outdated deplibs
The comment mentions deplibs should be removed in 4.0. Removing it in this patch.
Reviewed By: compnerd, dexonsmith, lattner
Differential Revision: https://reviews.llvm.org/D102763
Chris Lattner [Mon, 14 Jun 2021 04:35:24 +0000 (21:35 -0700)]
[Testsuite] Change these tests to only have a single verification error, NFC.
These are testing for various verification failures, but have missing returns
at the end of their function. Add the returns to focus the tests better.
Jez Ng [Mon, 14 Jun 2021 03:30:33 +0000 (23:30 -0400)]
[lld-macho] Try to fix MSAN "uninitialized memory" error
I *think* this is the fix, with the regression being introduced by
D104199. Not 100% sure since MSAN isn't supported on my Mac machine, and
it'll take some time to spin up a Linux box... will look at the
buildbots for answers
RamNalamothu [Mon, 14 Jun 2021 01:27:58 +0000 (06:57 +0530)]
Implement DW_CFA_LLVM_* for Heterogeneous Debugging
Add support in MC/MIR for writing/parsing, and DebugInfo.
This is part of the Extensions for Heterogeneous Debugging defined at
https://llvm.org/docs/AMDGPUDwarfExtensionsForHeterogeneousDebugging.html
Specifically the CFI instructions implemented here are defined at
https://llvm.org/docs/AMDGPUDwarfExtensionsForHeterogeneousDebugging.html#cfa-definition-instructions
Reviewed By: clayborg
Differential Revision: https://reviews.llvm.org/D76877
Aditya Kumar [Sun, 13 Jun 2021 18:32:28 +0000 (11:32 -0700)]
Calculate getTerminator only when necessary
Differential Revision: https://reviews.llvm.org/D104202
Lang Hames [Mon, 14 Jun 2021 00:35:20 +0000 (10:35 +1000)]
[ORC-RT] Fix an error check.
Matthias Springer [Mon, 14 Jun 2021 01:40:50 +0000 (10:40 +0900)]
[mlir][linalg] Remove generic PadTensorOp vectorization pattern
The generic vectorization pattern handles only those cases, where
low and high padding is zero. This is already handled by a
canonicalization pattern.
Also add a new canonicalization test case to ensure that tensor cast ops
are properly inserted.
A more general vectorization pattern will be added in a subsequent commit.
Differential Revision: https://reviews.llvm.org/D103590
Chris Lattner [Mon, 14 Jun 2021 01:24:53 +0000 (18:24 -0700)]
[DominanceInfo] Make the ctor take a defaulted value for the operand. NFC.
This allows it to be default constructible, which makes sense given it
ignores the operand.
Matthias Springer [Mon, 14 Jun 2021 01:16:22 +0000 (10:16 +0900)]
[mlir] Vectorize linalg.pad_tensor consumed by transfer_write
Vectorize linalg.pad_tensor without generating a linalg.init_tensor when consumed by a transfer_write.
Differential Revision: https://reviews.llvm.org/D103137
Matthias Springer [Mon, 14 Jun 2021 00:58:26 +0000 (09:58 +0900)]
[mlir] Vectorize linalg.pad_tensor consumed by subtensor_insert
Vectorize linalg.pad_tensor without generating a linalg.init_tensor when consumed by a subtensor_insert.
Differential Revision: https://reviews.llvm.org/D103780
Matthias Springer [Mon, 14 Jun 2021 00:51:50 +0000 (09:51 +0900)]
[mlir] Vectorize linalg.pad_tensor consumed by transfer_read
Vectorize linalg.pad_tensor without generating a linalg.init_tensor when consumed by a transfer_read.
Differential Revision: https://reviews.llvm.org/D103735
Matthias Springer [Mon, 14 Jun 2021 00:43:02 +0000 (09:43 +0900)]
[mlir][linalg] Add constant padding helper to PadTensorOp
* Add a helper function that returns the constant padding value (if applicable).
* Remove existing getConstantYieldValueFromBlock function, which does almost the same.
* Adapted from D103243.
Differential Revision: https://reviews.llvm.org/D104004
Juneyoung Lee [Mon, 14 Jun 2021 00:21:01 +0000 (09:21 +0900)]
[Utils] Add missing freeze and poison keyword highlights
This patch adds missing keyword highlights for freeze and poison
Reviewed By: MaskRay, porglezomp
Differential Revision: https://reviews.llvm.org/D104017
Jez Ng [Sun, 13 Jun 2021 23:43:37 +0000 (19:43 -0400)]
[lld-macho][nfc] Add `final` to classes where possible
I wanted to see if we would get any perf wins out of this, but
it doesn't seem to be the case. But it still seems worth committing.
Reviewed By: MaskRay
Differential Revision: https://reviews.llvm.org/D104200
Jez Ng [Sun, 13 Jun 2021 23:43:36 +0000 (19:43 -0400)]
[lld-macho][nfc] Represent the image loader cache with a ConcatInputSection
We don't need to define any special behavior for this section,
so creating a subclass for it is redundant.
Reviewed By: #lld-macho, thakis
Differential Revision: https://reviews.llvm.org/D104199
Jez Ng [Sun, 13 Jun 2021 23:43:34 +0000 (19:43 -0400)]
[lld-macho][nfc] Remove InputSection::outSecFileOff
`outSecFileOff` and the associated `getFileOffset()` accessors were
unnecessary.
For all the cases we care about, `outSecFileOff` is the same as
`outSecOff`. The only time they deviate is if there are zerofill
sections within a given segment. But since zerofill sections are always
at the end of a segment, the only sections where the two values deviate
are zerofill sections themselves. And we never actually query the
outSecFileOff of zerofill sections.
As for `getFileOffset()`, the only place it was being used was to
calculate the offset of the entry symbol. However, we can compute that
value by just taking the difference between the address of the entry
symbol and the address of the Mach-O header. In fact, this appears to be
what ld64 itself does. This difference is the same as the file offset as
long as there are no intervening zerofill sections, but since `__text`
is the first section in `__TEXT`, this never happens, so our previous
use of `getFileOffset()` was not wrong -- just inefficient.
Reviewed By: #lld-macho, thakis
Differential Revision: https://reviews.llvm.org/D104177
Eric Astor [Sun, 13 Jun 2021 22:35:51 +0000 (18:35 -0400)]
[ms] [llvm-ml] When parsing MASM, "jmp short" instructions are case insensitive
Handle "short" in a case-insensitive fashion in MASM.
Required to correctly parse z_Windows_NT-586_asm.asm from the OpenMP runtime.
Reviewed By: thakis
Differential Revision: https://reviews.llvm.org/D104195
Eric Astor [Sun, 13 Jun 2021 22:27:06 +0000 (18:27 -0400)]
[ms] [llvm-ml] Fix capitalization of the ignored CPU directives
These directives are matched in lowercase, so make sure to use lowercase for their P suffix.
Differential Revision: https://reviews.llvm.org/D104206
Eric Astor [Sun, 13 Jun 2021 22:33:55 +0000 (18:33 -0400)]
Fix misspelled instruction in X86 assembly parser
Did not correctly handle "jecxz short <address>".
Discovered while working on LLVM-ML; shows up in z_Windows_NT-586_asm.asm from the OpenMP runtime
Reviewed By: MaskRay
Differential Revision: https://reviews.llvm.org/D104194
Saleem Abdulrasool [Sun, 13 Jun 2021 21:28:43 +0000 (14:28 -0700)]
unwind: allow building with GCC
This was regressed in
adf1561d6ce8. Since gcc does not support
`__has_feature`, this adjusts the build to use the
`__SANITIZE_ADDRESS__` macro which GCC defines to identify if ASAN is
enabled (similar to `__has_feature`). This allows building libunwind
with gcc again.
Patch by Daniel Levin!
Reviewed By: compnerd
Differential Revision: https://reviews.llvm.org/D104176
David Green [Sun, 13 Jun 2021 21:30:42 +0000 (22:30 +0100)]
[DSE] Extra multiblock loop tests, NFC.
Some of these can be DSE'd, some of which cannot. Useful in D100464.
Hanhan Wang [Sun, 13 Jun 2021 20:45:33 +0000 (13:45 -0700)]
Introduce tensor.insert op to Tensor dialect.
Add `tensor.insert` op to make `tensor.extract`/`tensor.insert` work in pairs
for `scalar` domain. Like `subtensor`/`subtensor_insert` work in pairs in
`tensor` domain, and `vector.transfer_read`/`vector.transfer_write` work in
pairs in `vector` domain.
Reviewed By: silvas
Differential Revision: https://reviews.llvm.org/D104139
Fangrui Song [Sun, 13 Jun 2021 19:41:11 +0000 (12:41 -0700)]
[ELF] Add OVERWRITE_SECTIONS command
This implements https://sourceware.org/bugzilla/show_bug.cgi?id=26404
An `OVERWRITE_SECTIONS` command is a `SECTIONS` variant which contains several
output section descriptions. The output sections do not have specify an order.
Similar to `INSERT [BEFORE|AFTER]`, `LinkerScript::hasSectionsCommand` is not
set, so the built-in rules (see `docs/ELF/linker_script.rst`) still apply.
`OVERWRITE_SECTIONS` can be more convenient than `INSERT` because it does not
need an anchor section.
The initial syntax is intentionally narrow to facilitate backward compatible
extensions in the future. Symbol assignments cannot be used.
This feature is versatile. To list a few usage:
* Use `section : { KEEP(...) }` to retain input sections under GC
* Define encapsulation symbols (start/end) for an output section
* Use `section : ALIGN(...) : { ... }` to overalign an output section (similar to ld64 `-sectalign`)
When an output section is specified by both `OVERWRITE_SECTIONS` and
`INSERT`, `INSERT` is processed after overwrite sections. To make this work,
this patch changes `InsertCommand` to use name based matching instead of pointer
based matching. (This may cause a difference when `INSERT` moves one output
section more than once. Such duplicate commands should not be used in practice
(seems that in GNU ld the output sections may just disappear).)
A linker script can be used without -T/--script. The traditional `SECTIONS`
commands are concatenated, so a wrong rule can be more noticeable from the
section order. This feature if misused can be less noticeable, just like
`INSERT`.
Differential Revision: https://reviews.llvm.org/D103303
Khem Raj [Sun, 13 Jun 2021 19:32:07 +0000 (12:32 -0700)]
[fuzzer] Fix build on musl
cstddef is needed for size_t definition.
(Multiple headers can provide size_t but none of them exists.)
Reviewed By: MaskRay
Differential Revision: https://reviews.llvm.org/D96213
Fred Grim [Sun, 13 Jun 2021 14:36:42 +0000 (16:36 +0200)]
[clang-format] Adds a formatter for aligning arrays of structs
This adds a new formatter to arrange array of struct initializers into
neat columns.
Differential Revision: https://reviews.llvm.org/D101868
LemonBoy [Sun, 13 Jun 2021 18:03:42 +0000 (20:03 +0200)]
[SPARC] Legalize truncation and extension between fp128 and half
Lower truncations and expansions between fp128 and half values into libcalls.
Expand truncating stores into two separate truncation and a store operations.
Reviewed By: jrtc27
Differential Revision: https://reviews.llvm.org/D104185
Saleem Abdulrasool [Sun, 13 Jun 2021 17:52:27 +0000 (10:52 -0700)]
DirectoryWatcher: also wait for the notifier thread
Ultimately the DirectoryWatcher is not ready until the notifier thread
is also active. Failure to wait for the notifier thread may result in
loss of events. While this is not catastrophic in practice, the tests
are sensitive to this as depending on the thread scheduler, the thread
may fail to being execution before the operations are completed by the
fixture. Running this in a tight loop shows no regressions locally as
previously, but this failure mode was been sighted once on a builder.
Nico Weber [Sun, 13 Jun 2021 17:30:05 +0000 (13:30 -0400)]
[lld/mac] clarify comment
This is a "we should do X in the future" fixme, not an "X might go wrong"
fixme.
Nikita Popov [Sun, 13 Jun 2021 16:16:51 +0000 (18:16 +0200)]
[LoopUnroll] Test multi-exit runtime unrolling with predictable exit (NFC)
The (prior to prologue insertion) predictable exit shouldn't get
folded here. Make sure it isn't...
Simon Pilgrim [Sun, 13 Jun 2021 16:32:57 +0000 (17:32 +0100)]
RawError.h - remove unused <string> include. NFCI.
Simon Pilgrim [Sun, 13 Jun 2021 16:08:15 +0000 (17:08 +0100)]
BoundsChecking.cpp - tidy implicit header dependencies. NFCI.
We don't use <vector> but we do use std::pair (<utility>)
Simon Pilgrim [Sun, 13 Jun 2021 16:00:15 +0000 (17:00 +0100)]
DIPrinter.h - tidy implicit header dependencies. NFCI.
We don't use <string> but we do use std::unique_ptr (<memory>) and llvm::Optional<>
Simon Pilgrim [Sun, 13 Jun 2021 15:49:40 +0000 (16:49 +0100)]
DetailedRecordsBackend.cpp - printSectionHeading - avoid std::string creation/copies.
Don't create std::string from constant c-strings or pass std::string by value - we can use StringRef instead.
Simon Pilgrim [Sun, 13 Jun 2021 15:27:17 +0000 (16:27 +0100)]
DetailedRecordsBackend.cpp - tidy implicit header dependencies. NFCI.
We don't use <algorithm>, <set> or <vector>, but we do use std::pair (<utility>).
Simon Pilgrim [Sun, 13 Jun 2021 14:16:09 +0000 (15:16 +0100)]
ProfiledCallGraph.h - remove unused <string> include. NFCI.
Simon Pilgrim [Sun, 13 Jun 2021 14:07:14 +0000 (15:07 +0100)]
RegUsageInfoPropagate.cpp - remove unused <string> and <map> includes. NFCI.
Simon Pilgrim [Sun, 13 Jun 2021 13:49:41 +0000 (14:49 +0100)]
MachOObjectFile.cpp - remove unused <string> include. NFCI.
Simon Pilgrim [Sun, 13 Jun 2021 13:28:45 +0000 (14:28 +0100)]
DWARFDebugFrame.cpp - remove unused <string> include. NFCI.
Nico Weber [Sun, 13 Jun 2021 14:18:51 +0000 (10:18 -0400)]
fix comment typos to cycle bots
Simon Pilgrim [Sun, 13 Jun 2021 12:54:57 +0000 (13:54 +0100)]
GVN.cpp - remove unused <vector> include. NFCI.
Simon Pilgrim [Sun, 13 Jun 2021 12:53:03 +0000 (13:53 +0100)]
LoopUnrollAndJamPass.cpp - remove unused <vector> include. NFCI.
David Green [Sun, 13 Jun 2021 12:55:34 +0000 (13:55 +0100)]
[ARM] Introduce t2WhileLoopStartTP
This adds t2WhileLoopStartTP, similar to the t2DoLoopStartTP added in
D90591. It keeps a reference to both the tripcount register and the
element count register, so that the ARMLowOverheadLoops pass in the
backend can pick the correct one without having to search for it from
the operand of a VCTP.
Differential Revision: https://reviews.llvm.org/D103236
Markus Böck [Sun, 13 Jun 2021 12:48:27 +0000 (14:48 +0200)]
[clang][NFC] Add IsAnyDestructorNoReturn field to CXXRecord instead of calculating it on demand
This patch addresses a performance issue I noticed when using clang-12 to compile projects of mine. Even though the files weren't too large (around 1k cpp), the compiler was taking more than a minute to compile the source file, much longer than either GCC or MSVC.
Using a profiler it turned out the issue was the isAnyDestructorNoReturn function in CXXRecordDecl. In particular it being recursive, recalculating the property for every invocation, for every field and base class. This showed up in tracebacks in the profiler.
This patch instead adds IsAnyDestructorNoReturn as a Field to the data inside of CXXRecord and updates when a new base class, destructor, or record field member is added.
After this patch the problematic file of mine went from a compile time of 81s, down to 12s.
The patch itself should not change any functionality, just improve performance.
Differential Revision: https://reviews.llvm.org/D104182
Sanjay Patel [Sun, 13 Jun 2021 12:21:23 +0000 (08:21 -0400)]
[InstCombine] fold ctlz/cttz of bool types
https://alive2.llvm.org/ce/z/tX4pUT
Simon Pilgrim [Sun, 13 Jun 2021 12:05:17 +0000 (13:05 +0100)]
SValExplainer.h - get APSInt values by const reference instead of value. NFCI.
Avoid unnecessary copies.
Simon Pilgrim [Sun, 13 Jun 2021 12:03:47 +0000 (13:03 +0100)]
ArgumentPromotion.cpp - remove unused <string> include. NFCI.
Simon Pilgrim [Sun, 13 Jun 2021 11:36:51 +0000 (12:36 +0100)]
VPlanSLP.cpp - tidy implicit header dependencies. NFCI.
We don't use std::string and std::vector, but we do use std::pair and std::max.
Lang Hames [Sun, 13 Jun 2021 10:45:20 +0000 (20:45 +1000)]
[ORC-RT] Remove unused header in unit test.
Lang Hames [Sun, 13 Jun 2021 10:43:49 +0000 (20:43 +1000)]
[JITLink][MachO] Add missing testcase.
This test was accidentally left out of
f9649d123db.
Lang Hames [Sun, 13 Jun 2021 09:31:36 +0000 (19:31 +1000)]
[ORC-RT] Fix a comment.
Matheus Izvekov [Fri, 19 Mar 2021 02:32:06 +0000 (03:32 +0100)]
[clang] Implement P2266 Simpler implicit move
This Implements [[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p2266r1.html|P2266 Simpler implicit move]].
Signed-off-by: Matheus Izvekov <mizvekov@gmail.com>
Reviewed By: Quuxplusone
Differential Revision: https://reviews.llvm.org/D99005
Kristina Bessonova [Wed, 2 Jun 2021 17:51:11 +0000 (19:51 +0200)]
[ARM][NEON] Combine base address updates for vld1Ndup intrinsics
Reviewed By: dmgreen
Differential Revision: https://reviews.llvm.org/D103836
Luo, Yuanke [Thu, 10 Jun 2021 14:50:20 +0000 (22:50 +0800)]
[X86] Check immediate before get it.
For CMP imm instruction, when the operand 1 is symbol address we should
check if it is immediate first. Here is the example code.
`CMP64mi32 $noreg, 8, killed renamable $rcx, @d, $noreg, @a, implicit-def
$eflags`
Many thanks to Craig, Topper for the test case to reproduce this issue.
Differential Revision: https://reviews.llvm.org/D104037