Philip Reames [Mon, 28 Feb 2022 21:17:35 +0000 (13:17 -0800)]
[SLP] Check invariant that all instructions in bundle are in same block [NFC]
Scott Linder [Mon, 28 Feb 2022 20:20:25 +0000 (20:20 +0000)]
[YAMLParser] Add multi-line literal folding support
Last year I was working at Swift to add support for [Localization of Compiler Diagnostic Messages](https://forums.swift.org/t/localization-of-compiler-diagnostic-messages/36412/41). We are currently using YAML as the new diagnostic format. The LLVM::YAMLParser didn't have a support for multiline string literal folding and it's crucial to have that for the diagnostic message to help us keep up with the 80 columns rule. Therefore, I decided to add a multiline string literal folding support to the YAML parser.
Patch By: @HassanElDesouky (Hassan ElDesouky)
Differential Revision: https://reviews.llvm.org/D102590
Jorge Gorbe Moya [Mon, 28 Feb 2022 20:52:43 +0000 (12:52 -0800)]
[NFC] Don't pass temporary LangOptions to Lexer
Since https://reviews.llvm.org/D120334, passing a temporary LangOptions
object to Lexer results in stack-use-after-scope.
Arthur Eubanks [Mon, 28 Feb 2022 17:30:42 +0000 (09:30 -0800)]
[docs] Add note about interaction between clang plugins and -clear-ast-before-backend
Reviewed By: rnk
Differential Revision: https://reviews.llvm.org/D120666
Craig Topper [Mon, 28 Feb 2022 20:46:31 +0000 (12:46 -0800)]
[RISCV] Only enable combineROTR_ROTL_RORW_ROLW with Zbp.
I think the immediate values we check for on the GREV nodes already
protect this, but better to be explicit.
Valentin Clement [Mon, 28 Feb 2022 20:37:18 +0000 (21:37 +0100)]
[flang][NFC] Add complex operations lowering tests
Just adds some lowering test for complex operations. These were not
added when the lowering landed.
This patch is part of the upstreaming effort from fir-dev branch.
Reviewed By: schweitz
Differential Revision: https://reviews.llvm.org/D120672
Dávid Bolvanský [Mon, 28 Feb 2022 20:20:59 +0000 (21:20 +0100)]
[Clang] noinline call site attribute
Motivation:
```
int foo(int x, int y) { // any compiler will happily inline this function
return x / y;
}
int test(int x, int y) {
int r = 0;
[[clang::noinline]] r += foo(x, y); // for some reason we don't want any inlining here
return r;
}
```
In 2018, @kuhar proposed "Introduce per-callsite inline intrinsics" in https://reviews.llvm.org/D51200 to solve this motivation case (and many others).
This patch solves this problem with call site attribute. The implementation is "smaller" wrt approach which uses new intrinsics and thanks to https://reviews.llvm.org/D79121 (Add nomerge statement attribute to clang), we have got some basic infrastructure to deal with attrs on statements with call expressions.
GCC devs are more inclined to call attribute solution as well, as builtins are problematic for them - https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104187. But they have no patch proposal yet so.. We have free hands here.
If this approach makes sense, next future steps would be support for call site attributes for always_inline / flatten.
Reviewed By: aaron.ballman, kuhar
Differential Revision: https://reviews.llvm.org/D119061
Erich Keane [Mon, 28 Feb 2022 20:13:16 +0000 (12:13 -0800)]
[NFC] Make 1st param to getTemplateInstantiationArgs const correct
The function doesn't modify anything, and took minimal effort to get
const-correct, AND is necessary for a patch I've been working on for
concepts.
LLVM GN Syncbot [Mon, 28 Feb 2022 20:01:32 +0000 (20:01 +0000)]
[gn build] Port
a3255f219a86
Arthur O'Dwyer [Thu, 2 Dec 2021 00:55:26 +0000 (19:55 -0500)]
[libc++] Explicitly reject `uniform_int_distribution<bool>` and `<char>`.
`uniform_int_distribution<T>` is UB unless `T` is one of the non-character,
non-boolean integer types (`short` or larger). However, libc++ has never
enforced this. D114129 accidentally made `uniform_int_distribution<bool>`
into an error. Make it now *intentionally* an error; and likewise for the
character types and all user-defined class and enum types; but permit
`__[u]int128_t` to continue working.
Apply the same static_assert to all the integer distributions.
Differential Revision: https://reviews.llvm.org/D114920
Arthur O'Dwyer [Fri, 18 Feb 2022 16:36:59 +0000 (11:36 -0500)]
[libc++] [ranges] Permit std::mergeable and std::sortable with HAS_NO_INCOMPLETE_RANGES.
This follows the general direction of D118736 that
`_LIBCPP_HAS_NO_INCOMPLETE_RANGES` does *not* guard anything outside
of the `std::ranges::` namespace itself. This means we must permit
`ranges::less` etc. in no-ranges mode; that seems fine to me.
Differential Revision: https://reviews.llvm.org/D120139
Dawid Jurczak [Mon, 28 Feb 2022 19:14:44 +0000 (20:14 +0100)]
[NFC] Don't pass temporary LangOptions to Lexer
Since https://reviews.llvm.org/D120334 we shouldn't pass temporary LangOptions to Lexer.
This change fixes stack-use-after-scope UB in LocalizationChecker found by sanitizer-x86_64-linux-fast buildbot
and resolve similar issue in HeaderIncludes.
Stanislav Mekhanoshin [Thu, 24 Feb 2022 19:13:46 +0000 (11:13 -0800)]
[AMDGPU] Extend SILoadStoreOptimizer to handle flat load/stores
TODO: merge flat with global promoting to flat.
Differential Revision: https://reviews.llvm.org/D120351
Fangrui Song [Mon, 28 Feb 2022 19:19:00 +0000 (11:19 -0800)]
[ELF] Change some non-null pointer parameters to references. NFC
To decrease difference for D120650. Also, rename some `OutputSection *sec` (and
`cmd`) to the more common `osec`.
Haowei Wu [Fri, 28 Jan 2022 23:30:43 +0000 (15:30 -0800)]
[doc] Add llvm-ifs commandline guide
This patch adds llvm-ifs commandline guide
Differential Review: https://reviews.llvm.org/D118514
Okwan Kwon [Mon, 28 Feb 2022 19:11:29 +0000 (19:11 +0000)]
Revert "[mlir] Fold Arithmetic::ConstantOp and Tensor::ExtractSliceOp."
This reverts commit
3104994104f0c2f274acf5e01eb6cc82e9cca06b.
Sanjay Patel [Mon, 28 Feb 2022 17:13:55 +0000 (12:13 -0500)]
[InstCombine] fold mul-with-overflow intrinsic with -1 operand
extractvalue (any_mul_with_overflow X, -1), 0 --> -X
There are similar other potential transforms that we could do as
noted by the last TODO in the test diffs.
Fixes #54053
Andrei Elovikov [Mon, 28 Feb 2022 17:46:51 +0000 (09:46 -0800)]
[NFC][LoopVectorizer] Simplify LoopVectorize/X86/gather_scatter.ll
The test used to run whole O3 pipeline. Modify it to contain LLVM IR right
before LV and limit passes to "-loop-vectorizer -simplifycfg".
For the RUN line with forced VF force interleave factor as well to simplify
CHECKs as interleaving isn't related to the purpose of the test.
I also tried to add "noalias" to pointer arguments in
@test_gather_not_profitable_pr48429 but LAI seems unable to use them.
Reviewed By: fhahn
Differential Revision: https://reviews.llvm.org/D119786
Craig Topper [Mon, 28 Feb 2022 18:53:35 +0000 (10:53 -0800)]
[RISCV] Don't call combineROTR_ROTL_RORW_ROLW for SLLW/SRLW/SRAW nodes. NFC
I think the function does the correct thing internally, but it's
confusing to read.
Chia-hung Duan [Mon, 28 Feb 2022 18:21:28 +0000 (18:21 +0000)]
[mlir-tblgen] Fix non-deterministic generating static verifier in DRR.
Use SetVector instead of DenseSet to ensure we always generate the same
name for the same function. This issue is found in
https://github.com/llvm/llvm-project/issues/53768.
Reviewed By: quinnp, rdzhabarov
Differential Revision: https://reviews.llvm.org/D120514
Joseph Huber [Mon, 28 Feb 2022 18:14:54 +0000 (13:14 -0500)]
[OpenMP] Add verbose output for linker wrapper
Summary;
This path adds printing support for the linker wrapper. When the user
passes `-v` it will not print the commands used by the linker wrapper to
indicate to the user what is happening during the linking.
Fangrui Song [Mon, 28 Feb 2022 18:25:21 +0000 (18:25 +0000)]
[ELF] Rename Symbol::compare to shouldReplace. NFC
The return value is not a boolean instead of a tri-state.
Suggested by Peter Smith in D120640.
Konstantin Varlamov [Mon, 28 Feb 2022 17:55:27 +0000 (12:55 -0500)]
[libc++] Fix double file closing in `std::filesystem::remove_all()`.
According to Linux documentation (see e.g. https://linux.die.net/man/3/closedir):
> A successful call to `closedir()` also closes the underlying file
> descriptor associated with `dirp`.
Thus, calling `close()` after a successful call to `closedir()` is at
best redundant. Worse, should a different thread open a file in-between
the calls to `closedir()` and `close()` and get the same file descriptor,
the call to `close()` might actually close a different file than was
intended.
rdar://
89251874
Differential Revision: https://reviews.llvm.org/D120453
Okwan Kwon [Tue, 22 Feb 2022 21:50:14 +0000 (21:50 +0000)]
[mlir] Fold Arithmetic::ConstantOp and Tensor::ExtractSliceOp.
Fold ExtractSliceOp when the source is a constant.
luxufan [Tue, 22 Feb 2022 10:56:32 +0000 (18:56 +0800)]
[JITLink] Add R_RISCV_SUB6 relocation
Add R_RISCV_SUB6 relocation
Differential Revision: https://reviews.llvm.org/D120001
Craig Topper [Mon, 28 Feb 2022 17:30:27 +0000 (09:30 -0800)]
[RISCV] Custom type legalize i32 ISD::ABS on RV64 without Zbb.
Default type legalization will create sext_inreg+abs, but we may
not be able to remove the sext_inreg.
Instead this patch expands abs during type legalization to
Y = sraiw X, 31; subw(xor X, Y), Y) which doesn't require the input
to be sign extended.
This gives a big improvement for some neg-abs tests where the
abs is used more than the the neg. Previously the abs was expanded
a different way before and after type legalization. Now they are
expanded in a similar way enabling more CSE.
Reviewed By: asb
Differential Revision: https://reviews.llvm.org/D120636
Arthur O'Dwyer [Sun, 27 Feb 2022 15:36:25 +0000 (10:36 -0500)]
[clang] Remove unused variable AllElementsInt.
This has been unused ever since it was committed in
b8a501ccf1.
Differential Revision: https://reviews.llvm.org/D120629
Sanjay Patel [Mon, 28 Feb 2022 17:03:11 +0000 (12:03 -0500)]
[InstCombine] fold select-of-zero-or-ones with negated op
(X u< 2) ? -X : -1 --> sext (X != 0)
(X u> 1) ? -1 : -X --> sext (X != 0)
https://alive2.llvm.org/ce/z/U3y5Bb
https://alive2.llvm.org/ce/z/hgi-4p
This is part of solving:
Sanjay Patel [Mon, 28 Feb 2022 16:20:02 +0000 (11:20 -0500)]
[InstCombine] add tests for select of zero or all ones; NFC
See #54053
Sanjay Patel [Mon, 28 Feb 2022 14:21:23 +0000 (09:21 -0500)]
[InstCombine] add tests for mul-with-overflow by -1; NFC
Erich Keane [Mon, 28 Feb 2022 15:03:55 +0000 (07:03 -0800)]
Clarify documentation of cpu_dispatch/cpu_specific
There has been some internal confusion lately as to how cpu_dispatch and
cpu_specific dispatch to processors, so this patch clarifies the
documentation to make it more clear that:
1- Unlike ICC, we do not consider the vendor string (that is, an AMD
processor might result in something other than generic)
2- there are some processors that aren't really distinguishable thanks
to the library limitation, so the variant being selected is unspecified.
In reality, I believe the 'stable_sort' makes it so the 1st one that
meets the requirements is the one that is selected (and that matches my
experimented result), but I don't want to limit our implementation.
Alexey Bataev [Tue, 22 Feb 2022 21:50:17 +0000 (13:50 -0800)]
[SLP]Improve bottom-to-top reordering.
Currently bottom-to-top reordering analysis counts orders of the
operands and then adds natural order counts for the operand users. It is
very conservative, this the user nodes themselves may require
reordering. Patch improves bottom-to-top analysis by checking for the
user nodes if they require/allows the reordring. If the user node must
be reordered, has reused scalars, is an alternate op vectorization node,
is a non-ordered gather node or may allow reordering because of the
reordered operands, such node is considered as the node that allows
reodring and is not counted as a node with the natural order.
Differential Revision: https://reviews.llvm.org/D120492
Dawid Jurczak [Fri, 25 Feb 2022 11:07:33 +0000 (12:07 +0100)]
[NFC][Lexer] Make Lexer::LangOpts const reference
This change can be seen as code cleanup but motivation is more performance related.
While browsing perf reports captured during Linux build we can notice unusual portion of instructions executed in std::vector<std::string> copy constructor like:
0.59% 0.58% clang-14 clang-14 [.] std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >,
std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >::vector
or even:
1.42% 0.26% clang clang-14 [.] clang::LangOptions::LangOptions
|
--1.16%--clang::LangOptions::LangOptions
|
--0.74%--std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >,
std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >::vector
After more digging we can see that relevant LangOptions std::vector members (*Files, ModuleFeatures and NoBuiltinFuncs)
are constructed when Lexer::LangOpts field is initialized on list:
Lexer::Lexer(..., const LangOptions &langOpts, ...)
: ..., LangOpts(langOpts),
Since LangOptions copy constructor is called by Lexer(..., const LangOptions &LangOpts,...) and local Lexer objects are created thousands times
(in Lexer::getRawToken, Preprocessor::EnterSourceFile and more) during single module processing in frontend it makes std::vector copy constructors surprisingly hot.
Unfortunately even though in current Lexer implementation mentioned std::vector members are unused and most of time empty,
no compiler is smart enough to optimize their std::vector copy constructors out (take a look at test assembly): https://godbolt.org/z/hdoxPfMYY even with LTO enabled.
However there is simple way to fix this. Since Lexer doesn't access *Files, ModuleFeatures, NoBuiltinFuncs and any other LangOptions fields (but only LangOptionsBase)
we can simply get rid of redundant copy constructor assembly by changing LangOpts type to more appropriate const LangOptions reference: https://godbolt.org/z/fP7de9176
Additionally we need to store LineComment outside LangOpts because it's written in SkipLineComment function.
Also FormatTokenLexer need to be adjusted a bit to avoid lifetime issues related to passing local LangOpts reference to Lexer.
After this change I can see more than 1% speedup in some of my microbenchmarks when using Clang release binary built with LTO.
For Linux build gains are not so significant but still nice at the level of -0.4%/-0.5% instructions drop.
Differential Revision: https://reviews.llvm.org/D120334
Nikita Popov [Mon, 28 Feb 2022 14:25:03 +0000 (15:25 +0100)]
[InlineCost] Use SmallPtrSet for DeadBlocks (NFC)
This set is only used with contains operations, so there is no
need to use a SetVector.
Archibald Elliott [Fri, 25 Feb 2022 18:39:34 +0000 (18:39 +0000)]
[NFC][Clang][AArch64] Clean up AArch64TargetInfo::hasFeature
Sander de Smalen [Mon, 28 Feb 2022 12:17:25 +0000 (12:17 +0000)]
[AArch64][SVE] Fold away SETCC if original input was predicate vector.
This adds the following two folds:
Fold 1:
setcc_merge_zero(
all_active, extend(nxvNi1 ...), != splat(0))
-> nxvNi1 ...
Fold 2:
setcc_merge_zero(
pred, extend(nxvNi1 ...), != splat(0))
-> nxvNi1 and(pred, ...)
Reviewed By: david-arm
Differential Revision: https://reviews.llvm.org/D119334
Florian Hahn [Mon, 28 Feb 2022 14:12:20 +0000 (14:12 +0000)]
Recommit "[VPlan] Introduce recipe to build scalar steps."
This reverts the revert commit
ff93260bf6bddfbad1fa65c4d5184988885b900f.
The underlying issue causing the PPC bot failures has been fixed in
cbaac1473403 and a corresponding test case has been added in
ad2cad1c521c.
Original message:
This patch adds a new VPScalarIVStepsRecipe to handle building scalar
steps.
In the first patch, it only handles the case where there is no vector
induction variable needed.
Reviewed By: Ayal
Differential Revision: https://reviews.llvm.org/D115953
Timm Bäder [Mon, 28 Feb 2022 06:45:35 +0000 (07:45 +0100)]
[clang][tests] Fix ve-toolchain tests with CLANG_DEFAULT_UNWINDLIB
Otherwise, the driver will insert e.g. -lgcc_s when
CLANG_DEFAULT_UNWINDLIB=libgcc is set during the clang build.
Differential Revision: https://reviews.llvm.org/D120644
Valentin Clement [Mon, 28 Feb 2022 13:48:40 +0000 (14:48 +0100)]
[flang] Lower power operations
Lower the power operation for real, integer
and complex.
The power operation is lowered to library calls.
This patch is part of the upstreaming effort from fir-dev branch.
Depends on D120403
Reviewed By: schweitz
Differential Revision: https://reviews.llvm.org/D120556
Momchil Velikov [Mon, 28 Feb 2022 11:51:17 +0000 (11:51 +0000)]
[AArch64] Async unwind - function prologues
This patch rearranges emission of CFI instructions, so the resulting
DWARF and `.eh_frame` information is precise at every instruction.
The current state is that the unwind info is emitted only after the
function prologue. This is fine for synchronous (e.g. C++) exceptions,
but the information is generally incorrect when the program counter is
at an instruction in the prologue or the epilogue, for example:
```
stp x29, x30, [sp, #-16]! // 16-byte Folded Spill
mov x29, sp
.cfi_def_cfa w29, 16
...
```
after the `stp` is executed the (initial) rule for the CFA still says
the CFA is in the `sp`, even though it's already offset by 16 bytes
A correct unwind info could look like:
```
stp x29, x30, [sp, #-16]! // 16-byte Folded Spill
.cfi_def_cfa_offset 16
mov x29, sp
.cfi_def_cfa w29, 16
...
```
Having this information precise up to an instruction is useful for
sampling profilers that would like to get a stack backtrace. The end
goal (towards this patch is just a step) is to have fully working
`-fasynchronous-unwind-tables`.
Reviewed By: danielkiss, MaskRay
Differential Revision: https://reviews.llvm.org/D111411
Adrian Kuegel [Mon, 28 Feb 2022 12:17:34 +0000 (13:17 +0100)]
[mlir] Apply ClangTidy performance fixes (NFC)
Sander de Smalen [Mon, 28 Feb 2022 11:32:05 +0000 (11:32 +0000)]
[AArch64][SVE] Handle more cases in findMoreOptimalIndexType.
This patch addresses @paulwalker-arm's comment on D117900 to
only update/write the by-ref operands iff the function returns
true. It also handles a few more cases where a series of added
offsets can be folded into the base pointer, rather than just looking
at a single offset.
Reviewed By: paulwalker-arm
Differential Revision: https://reviews.llvm.org/D119728
David Spickett [Mon, 28 Feb 2022 11:56:07 +0000 (11:56 +0000)]
[compiler-rt] Disable coverage trace pc guard tests on Thumb
These are failing on our silent bot:
https://lab.llvm.org/staging/#/builders/162/builds/358
$ <run cmd>
main
foo
bar
baz
SanitizerCoverage: ./sanitizer_coverage_trace_pc_guard-dso.cpp.tmp.2122517.sancov: 2 PCs written
SanitizerCoverage: ./sanitizer_coverage_trace_pc_guard-dso.cpp.tmp_2.so.2122517.sancov: 1 PCs written
SanitizerCoverage: ./sanitizer_coverage_trace_pc_guard-dso.cpp.tmp_1.so.2122517.sancov: 1 PCs written
$ <sancov cmd>
ERROR: Coverage points in binary and .sancov file do not match.
Also reproduces if you build for Thumb on v8 hardware.
Doesn't fail when built with Arm only code so I guess the Thumb mode bit
in the PCs might be the issue.
gysit [Mon, 28 Feb 2022 11:25:12 +0000 (11:25 +0000)]
[mlir][linalg] Check the iterator types are valid.
Improve the LinalgOp verification to ensure the iterator types is known. Previously, unknown iterator types have been ignored without warning, which can lead to confusing bugs.
Reviewed By: nicolasvasilache
Differential Revision: https://reviews.llvm.org/D120649
Florian Hahn [Mon, 28 Feb 2022 11:14:21 +0000 (11:14 +0000)]
[LV] Remove induction recipes only used outside vector loop.
Exit values of vector inductions are generated completely independent of
the induction recipes. Consider them for removal, if they are not used
in loop.
This fixes a crash exposed by
49b23f451cf7130.
David Green [Mon, 28 Feb 2022 10:58:52 +0000 (10:58 +0000)]
Partially revert "[SchedModels][CortexA55] Add ASIMD integer instructions"
The Cortex-A55 scheduling model is used for -mcpu=generic, meaning it
can have a wider effect than just the A55. The changes to the A55
scheduling model seems to have caused performance regressions on
Cortex-A510 device which have latencies closer to the original and
different forwarding paths.
This partially reverts the changes from D117003, at least until we can
do something to improve Cortex-A510. According to my results, this
improves the A510 results without altering the A55 very much.
Luis Penagos [Mon, 28 Feb 2022 10:30:30 +0000 (11:30 +0100)]
[clang-format] Treat && followed by noexcept operator as a binary operator inside template arguments
Fixes https://github.com/llvm/llvm-project/issues/44544.
Reviewed By: curdeius, MyDeveloperDay
Differential Revision: https://reviews.llvm.org/D120445
Adrian Kuegel [Mon, 28 Feb 2022 10:52:39 +0000 (11:52 +0100)]
[mlir] Remove unused static variables (NFC)
Florian Hahn [Mon, 28 Feb 2022 10:39:08 +0000 (10:39 +0000)]
[LV] Add test with dead induction in vector loop used outside.
Add test with a induction phi that is not used in the vector loop, but
by an lcssa phi in the loop exit.
Endre Fülöp [Mon, 21 Feb 2022 22:10:24 +0000 (23:10 +0100)]
[analyzer] Add more sources to Taint analysis
Add more functions as taint sources to GenericTaintChecker.
Reviewed By: steakhal
Differential Revision: https://reviews.llvm.org/D120236
LLVM GN Syncbot [Mon, 28 Feb 2022 10:06:58 +0000 (10:06 +0000)]
[gn build] Port
61835d19a848
Nikita Popov [Thu, 24 Feb 2022 13:39:59 +0000 (14:39 +0100)]
[InstCombine] Remove not of SPF min/max fold (NFCI)
This should no longer be necessary now that we canonicalize to
intrinsics. Might not be strictly NFC due to worklist order.
esmeyi [Mon, 28 Feb 2022 09:59:46 +0000 (04:59 -0500)]
[llvm-objcopy] Initial XCOFF32 support.
Summary: This is an initial implementation of lvm-objcopy for XCOFF32.
Currently only supports simple copying, op-passthrough to follow.
Reviewed By: jhenderson, shchenz
Differential Revision: https://reviews.llvm.org/D97656
Nikita Popov [Thu, 24 Feb 2022 13:38:04 +0000 (14:38 +0100)]
[InstCombine] Remove sub of SPF min/max fold (NFCI)
This isn't necessary anymore, now that we canonicalize SPF min/max
to intrinsics. Might not be strictly NFC due to worklist order
changes.
Florian Hahn [Mon, 28 Feb 2022 09:46:18 +0000 (09:46 +0000)]
[LV] Add test with IV that needs scalar steps and user outside of loop.
Also add a run line to check interleaving only. This test covers the PPC
buildbot failures caused by
49b23f451cf71.
Nikita Popov [Mon, 28 Feb 2022 09:41:56 +0000 (10:41 +0100)]
[InstCombine] Don't call matchSAddSubSat() for SPF (NFC)
Only call it for intrinsic min/max. The moved implementation is
unchanged apart from the one-use check: It is now hardcoded to
one-use, without the two-use special case for SPF.
Nikita Popov [Mon, 28 Feb 2022 09:28:16 +0000 (10:28 +0100)]
[InstCombine] Remove SPF moveAddAfterMinMax() (NFC)
As SPF min/max is canonicalized to intrinsics before this point,
this change should be entirely NFC.
Nikita Popov [Thu, 24 Feb 2022 13:35:18 +0000 (14:35 +0100)]
[InstCombine] Remove SPF moveNotAfterMinMax() (NFC)
This happens after SPF -> intrinsic canonicalization, and as such
should be entirely NFC.
Nikita Popov [Thu, 24 Feb 2022 12:19:00 +0000 (13:19 +0100)]
[InstCombine] Remove SPF factorizeMinMaxTree() (NFC)
SPF integer min/max is canonicalized to min/max intrinsics before
this code is reached, so this should be entirely NFC.
Mehdi Amini [Mon, 28 Feb 2022 08:54:38 +0000 (08:54 +0000)]
Add explicit `this->` to access method in attempt to fix gcc5 build (NFC)
Shraiysh Vaishay [Mon, 28 Feb 2022 08:38:31 +0000 (14:08 +0530)]
[mlir][OpenMP][NFC] Removing unnecessary builders for wsloop
This patch removes the builders for `omp.wsloop` operation that aren't
specifically needed anywhere. We can add them later if the need arises.
Reviewed By: kiranchandramohan
Differential Revision: https://reviews.llvm.org/D120533
Iain Sandoe [Sat, 1 May 2021 12:07:45 +0000 (13:07 +0100)]
[C++20][Modules][7/8] Find the primary interface name for a module.
When we are building modules, there are cases where the only way to determine
validity of access is by comparing primary interface names. This is because we need
to be able to associate a primary interface name with an imported partition, but
before the primary interface module is complete - so that textual comparison is
necessary.
If this turns out to be needed many times, we could cache the result, but it seems
unlikely to be significant (at this time); cases with very many imported partitions
would seem unusual.
Differential Revision: https://reviews.llvm.org/D118598
Fangrui Song [Mon, 28 Feb 2022 08:50:06 +0000 (00:50 -0800)]
[ELF] Replace an unneeded dyn_cast_or_null with dyn_cast. NFC
Fangrui Song [Mon, 28 Feb 2022 08:24:25 +0000 (00:24 -0800)]
[ELF] Optimize SectionBase::Kind values to make isa<InputSection> more efficient. NFC
Surprisingly my lld executable is 1.5KiB smaller.
Fangrui Song [Mon, 28 Feb 2022 08:16:45 +0000 (00:16 -0800)]
[ELF] Make InputSection::classof inline. NFC
Alexander Belyaev [Mon, 28 Feb 2022 07:47:01 +0000 (08:47 +0100)]
[mlir] Purge linalg.tiled_loop.
Differential Revision: https://reviews.llvm.org/D119415
Fangrui Song [Mon, 28 Feb 2022 07:28:51 +0000 (23:28 -0800)]
[ELF] Move SyntheticSection check from InputSection::writeTo to OutputSection::writeTo. NFC
Simplify code and make the heavyweight operation to the call site so that it is
clearer how to improve the inefficient scheduling in the future.
Ilya Nozhkin [Mon, 28 Feb 2022 06:27:32 +0000 (14:27 +0800)]
Set error message if ValueObjectRegister fails to write back to register
SetValueFromCString and SetData methods return false if register can't
be written but they don't set a error message. It sometimes confuses
callers of these methods because they try to get the error message in case of
failure but Status::AsCString returns nullptr.
For example, lldb-vscode crashes due to this bug if some register can't
be written. It invokes SBError::GetCString in case of error and doesn't
check whether the result is nullptr (see request_setVariable implementation in
lldb-vscode.cpp for more info).
Reviewed By: labath, clayborg
Differential Revision: https://reviews.llvm.org/D120319
eric.tang [Wed, 19 Jan 2022 02:44:23 +0000 (10:44 +0800)]
[RISCV] Support hypervisor extention instructions
According to privileged spec version-
20211203
Add the following hypervisor instructions:
- HLV.B HLV.BU
- HLV.H HLV.HU HLVX.HU
- HLV.W HLV.WU HLVX.WU
- HLV.D
- HSV.B HSV.H HSV.W HSV.D
Signed-off-by: eric.tang <eric.tang@starfivetech.com>
Differential Revision: https://reviews.llvm.org/D117733
eric.tang [Fri, 14 Jan 2022 07:14:16 +0000 (15:14 +0800)]
[RISCV] Support Sinval extension and hypervisor memory management fence instructions
According to Privileged spec version-
20211203
Add Supervisor Memory-Management Instructions:
- SINVAL.VMA, SFENCE.W.INVAL, SFENCE.INVAL.IR
Add Hypervisor Memory-Management Instructions:
- HFENCE.VVMA, HFENCE.GVMA, HINVAL.VVMA, HINVAL.GVMA
Signed-off-by: eric.tang <eric.tang@starfivetech.com>
Differential Revision: https://reviews.llvm.org/D117654
Eric Tang [Thu, 17 Feb 2022 05:54:57 +0000 (13:54 +0800)]
[RISCV] Change GPRMemAtomic to GPRMemZeroOffset for general usage
Not only some AMO instructions but also other instructions need to
process (${gpr}) or 0(${gpr}), where the 0 is be silently ignored.
This patch does some changes for general usage.
Signed-off-by: Eric Tang <eric.tang@starfivetech.com>
Differential Revision: https://reviews.llvm.org/D120017
Zi Xuan Wu [Mon, 28 Feb 2022 05:47:55 +0000 (13:47 +0800)]
[Support] Fix the build errors because missing CSKYTargetParser.def in module.modulemap of
21bce9007ae8
Add textual header "Support/CSKYTargetParser.def" in module.modulemap.
Build Failure: https://green.lab.llvm.org/green/job/lldb-cmake/41771
Zi Xuan Wu [Tue, 15 Feb 2022 07:26:39 +0000 (15:26 +0800)]
[Support] Add CSKY target parser and attributes parser
Construct LLVM Support module about CSKY target parser and attribute parser.
It refers CSKY ABIv2 and implementation of GNU binutils and GCC.
https://github.com/c-sky/csky-doc/blob/master/C-SKY_V2_CPU_Applications_Binary_Interface_Standards_Manual.pdf
Now we only support CSKY 800 series cpus and newer cpus in the future undering CSKYv2 ABI specification.
There are 11 archs including ck801, ck802, ck803, ck803s, ck804, ck805, ck807, ck810, ck810v, ck860, ck860v.
Every arch has base extensions, the cpus of that arch family have more extended extensions than base extensions.
We need specify extended extensions for every cpu. Every extension has its enum value, name and related llvm feature string with +/-.
Every enum value represents a bit of uint64_t integer.
Differential Revision: https://reviews.llvm.org/D119917
Chenbing Zheng [Mon, 28 Feb 2022 01:43:04 +0000 (09:43 +0800)]
[RISCV] Optimize (sext.w, srli) to sraiw with Zba.
In this patch, we add a more narrower exclusion for
zeroext (srl x) -> srli (slli x), so that it provides an opportunity
for the selection of sraiw.
Reviewed By: craig.topper
Differential Revision: https://reviews.llvm.org/D120467
Kai Luo [Mon, 28 Feb 2022 02:27:26 +0000 (02:27 +0000)]
[AIX][cmake][NFC] Customize name of output atomic library
Let `archive-aix-libatomic` accept additional argument to customize name of output atomic library.
Reviewed By: jsji
Differential Revision: https://reviews.llvm.org/D120534
Todd Mortimer [Mon, 28 Feb 2022 00:43:49 +0000 (19:43 -0500)]
[Driver][OpenBSD] Enable unwind tables on all architectures
Mehdi Amini [Sun, 27 Feb 2022 21:41:23 +0000 (21:41 +0000)]
Add explicit capture for `this` pointer in attempt to fix gcc5 build (NFC)
Fangrui Song [Sun, 27 Feb 2022 20:49:36 +0000 (20:49 +0000)]
[ELF] Enforce double-dash form --error-limit
It's ld.lld specific and by convention we enforce the double-dash form to avoid
collision with the short option -e (--entry).
Jessica Clarke [Sun, 27 Feb 2022 20:48:52 +0000 (20:48 +0000)]
[RISCV] Fix parseBareSymbol to not double-parse top-level operators
By failing to lex the token we end up both parsing it as a binary
operator ourselves and parsing it as a unary operator when calling
parseExpression on the RHS. For plus this is harmless but for minus this
parses "foo - 4" as "foo - -4", effectively treating a top-level minus
as a plus.
Fixes https://github.com/llvm/llvm-project/issues/54105
Reviewed By: asb, MaskRay
Differential Revision: https://reviews.llvm.org/D120635
Fangrui Song [Sun, 27 Feb 2022 20:47:37 +0000 (20:47 +0000)]
[ELF] Use --error-limit instead of -error-limit
Fangrui Song [Sun, 27 Feb 2022 20:33:28 +0000 (20:33 +0000)]
[ELF] Change global variable backwardReferences to a LinkerDriver member variable. NFC
Similar to whyExtract.
Fangrui Song [Sun, 27 Feb 2022 20:23:09 +0000 (20:23 +0000)]
[ELF] Move --print-archive-stats= and --why-extract= beside --warn-backrefs report
So that early errors don't suppress their output.
Martin Storsjö [Mon, 10 Jan 2022 23:08:19 +0000 (23:08 +0000)]
[libcxx] [test] Fix one failing part of dsl.sh.py on Windows.
Windows UCRT has got a bug in older versions (present in CI), where
it successfully does set a locale named
`for_sure_this_is_not_an_existing_locale`. By adjusting the tested
locale name to `forsurethisisnotanexistinglocale`, that test works
as expected, failing to set the locale.
The bug is reported upstream at
https://developercommunity.visualstudio.com/t/setlocale-succeeds-for-bogus-locale-names-in-older/1652241,
but as it already is working correctly in newer versions, no action
was prompted there.
We could of course add a bug detection in features.py like other
existing `broken-*` features, but that would seem kinda
pointless as it would be doing exactly what this test does.
Instead just adjust the tested dummy locale name.
This bit was approved to be committed on its own, in
https://reviews.llvm.org/D120546 (which is left open to follow up on
review of the rest of that patch).
Martin Storsjö [Tue, 18 Jan 2022 09:20:04 +0000 (09:20 +0000)]
[libcxx] [test] Fix the monetary locale pos/neg_format test for Windows and macOS
The zh_CN.UTF-8 locale on Glibc has got `n_sign_posn == 4` (which means
having the negative sign just after the currency symbol), but has
`int_n_sign_posn == 1` (which means before the string).
On Windows, there's no separate `int_n_sign_posn` field, so the same
`n_sign_posn` (which is 4 there too) is used for international currency
formatting too. This makes the ordering for the international case on
Windows be the same as for the national one right above it.
On Apple platforms, the fr_FR.UTF-8 locale has got `n_sign_posn == 2`
but `p_sign_posn == 1`, giving a different order for the French locale
for the negative format.
On Apple platforms for the zh_CN.UTF-8 locale, both `n_sign_posn` and
`int_n_sign_posn` are 4, but `p_sign_posn` and `int_p_sign_posn` are 1.
Differential Revision: https://reviews.llvm.org/D120550
Xiaodong Liu [Sun, 27 Feb 2022 19:10:51 +0000 (19:10 +0000)]
[sancov] Add SPARC support for getPreviousInstructionPc
The SPARC and MIPS branching operations have a branch delay slot, 4 more bytes occupied.
Depends on D120381
Reviewed By: ro, MaskRay
Differential Revision: https://reviews.llvm.org/D120451
Philip Reames [Sun, 27 Feb 2022 18:18:03 +0000 (10:18 -0800)]
[SLP] Remove field unused after 33ce97f to silence buildbots [NFC]
Florian Hahn [Sun, 27 Feb 2022 17:51:19 +0000 (17:51 +0000)]
Revert "[VPlan] Introduce recipe to build scalar steps."
This reverts commit
49b23f451cf713036c99573a35daed308d2ac894.
This appears to break some PPC build bots. Revert while I investigate.
Philip Reames [Sun, 27 Feb 2022 17:44:11 +0000 (09:44 -0800)]
[SLP] Use BatchAA to reduce capture analysis cost [NFC]
SLP makes very heavy use of aliasing queries to construct pointer dependencies for scheduling purposes. AA internally usings pointerMayBeCaptured to prove some noalias results. In a local profile, we were spending about 4% of total O2 time in capture tracking. By using BatchAA interface - which caches capture results - this drops to 2%.
Note that there is no invalidation of BatchAA here. This assumes that no transformation done by SLP invalidates alias or capture results. This is the same assumption made by the existing AliasCache, so this is not a new assumption in the code.
Florian Hahn [Sun, 27 Feb 2022 17:32:41 +0000 (17:32 +0000)]
[VPlan] Introduce recipe to build scalar steps.
This patch adds a new VPScalarIVStepsRecipe to handle building scalar
steps.
In the first patch, it only handles the case where there is no vector
induction variable needed.
Reviewed By: Ayal
Differential Revision: https://reviews.llvm.org/D115953
Arthur O'Dwyer [Sun, 27 Feb 2022 17:19:21 +0000 (12:19 -0500)]
[libc++] [test] Check the presence of "pragma include_instead" in newly added headers.
Unless/until we revert D106124, we should make sure that every newly added
detail header includes this line.
Groverkss [Sun, 27 Feb 2022 16:57:15 +0000 (22:27 +0530)]
[MLIR][Presburger] Move IntegerPolyhedron::reset to FlatAffineConstraints::reset
This patch moves IntegerPolyhedron::reset to FlatAffineConstraints::reset. This
function is not required in IntegerPolyhedron and creates ambiguity while
shifting implementations to IntegerRelation.
This patch is part of a series of patches to introduce relations in Presburger
library.
Reviewed By: arjunp
Differential Revision: https://reviews.llvm.org/D120628
Sanjay Patel [Sun, 27 Feb 2022 16:26:26 +0000 (11:26 -0500)]
[SDAG] fold (rotate X) eq/ne (0/-1)
This is the SDAG equivalent of an instcombine transform added with:
fd807601a78
This is another step towards solving #49541 and part of an alternative
set of more general transforms than what is proposed in D111530.
https://alive2.llvm.org/ce/z/ToxaE8
Sanjay Patel [Sun, 27 Feb 2022 15:44:02 +0000 (10:44 -0500)]
[x86] add tests for setcc eq/ne 0/-1 of rotate; NFC
The tests are adapted from a similar file for instcombine:
fd807601a78
Simon Pilgrim [Sun, 27 Feb 2022 15:17:42 +0000 (15:17 +0000)]
[X86][SSE] Attempt to lower vec_reduce_add patterns with PSADBW for zero-extended vXi8 sources
For i16/32/64 vectors, if the upper bits are known to be zero, then we can try to truncate to vXi8 (if its worth it) and perform this as a PSADBW to add+zext each v4i8 subvector to a i64 sum, which we can then reduce together.
This addresses some of the PR42674 test cases where the source data was vXi8 but had been extended to match a wider unsigned integer accumulator.
Differential Revision: https://reviews.llvm.org/D120193
Sanjay Patel [Sun, 27 Feb 2022 13:33:43 +0000 (08:33 -0500)]
[SDAG] fold bitwise logic with shifted operands
LOGIC (LOGIC (SH X0, Y), Z), (SH X1, Y) --> LOGIC (SH (LOGIC X0, X1), Y), Z
https://alive2.llvm.org/ce/z/QmR9rR
This is a reassociation + factoring fold. The common shift operation is moved
after a bitwise logic op on 2 input operands.
We get simpler cases of these patterns in IR, but I suspect we would miss all
of these exact tests in IR too. We also handle the simpler form of this plus
several other folds in DAGCombiner::hoistLogicOpWithSameOpcodeHands().
This is a partial implementation of a transform suggested in D111530
(only handles 'or' bitwise logic as a first step - need to stamp out more
tests for other opcodes).
Several of the same tests added for D111530 are altered here (but not
fully optimized). I'm not sure yet if this would help/hinder that patch,
but this should be an improvement for all tests added with
ecf606cb4329ae
since it removes a shift operation in those examples.
Differential Revision: https://reviews.llvm.org/D120516
Yevgeny Rouban [Sun, 27 Feb 2022 14:46:10 +0000 (21:46 +0700)]
Revert "[Support] Reset option to its default if its Default field is undefined"
This reverts commit
7fb39fb6d6665cd469557b43eb205cc32b0a7ac3 as clang buildbots failed.
Yevgeny Rouban [Sun, 27 Feb 2022 12:56:31 +0000 (19:56 +0700)]
[Support] Reset option to its default if its Default field is undefined
opt::setDefaultImpl() is changed to set the option value to the option
type's default if the Default field is not set. This results in option
value reset by Option::reset() or ResetAllOptionOccurrences() even if
the cl::init() is not specified.
Example:
StackOption<std::string> Str("str"); // No cl::init().
Str = "some value";
cl::ResetAllOptionOccurrences();
EXPECT_EQ("", Str); // The Str is reset.
Reviewed By: lattner
Differential Revision: https://reviews.llvm.org/D115433
Florian Hahn [Sun, 27 Feb 2022 12:44:07 +0000 (12:44 +0000)]
[VPlan] Add recipe to handle SCEV expansion (NFC).
This can be used to explicitly model VPValues that depend on SCEV
expansion, like the step for inductions.
Reviewed By: Ayal
Differential Revision: https://reviews.llvm.org/D116288
Simon Pilgrim [Sun, 27 Feb 2022 11:33:14 +0000 (11:33 +0000)]
[lldb] BreakpointOptions::CommandData::CreateFromStructuredData - remove dead code + variable. NFCI.
The found_something bool is only ever read after it has always been set to true.
Looks to be a leftover debugging variable.
Fixes static analyzer warning: https://llvm.org/reports/scan-build/report-BreakpointOptions.cpp-CreateFromStructuredData-8-4055b9.html#EndPath
Simon Pilgrim [Sun, 27 Feb 2022 11:25:17 +0000 (11:25 +0000)]
[DAG] Ensure type is legal for bswap(shl(x,c)) -> zext(bswap(trunc(shl(x,c-bw/2)))) fold
As reported on D120192