Craig Topper [Tue, 1 Mar 2022 17:53:26 +0000 (09:53 -0800)]
[Analysis] Simplify the interface to llvm::getICmpCode. NFC
Instead of passing an InstCmpInt * and a bool just pass the predicate
from the caller.
I'm considering moving the similar FCmp functions from InstCombine
over here and this makes the interface consistent with what is used
for FCmp.
Reviewed By: RKSimon
Differential Revision: https://reviews.llvm.org/D120609
Tong Zhang [Tue, 1 Mar 2022 09:58:10 +0000 (10:58 +0100)]
[SanitizerBounds] Add support for NoSanitizeBounds function
Currently adding attribute no_sanitize("bounds") isn't disabling
-fsanitize=local-bounds (also enabled in -fsanitize=bounds). The Clang
frontend handles fsanitize=array-bounds which can already be disabled by
no_sanitize("bounds"). However, instrumentation added by the
BoundsChecking pass in the middle-end cannot be disabled by the
attribute.
The fix is very similar to D102772 that added the ability to selectively
disable sanitizer pass on certain functions.
In this patch, if no_sanitize("bounds") is provided, an additional
function attribute (NoSanitizeBounds) is attached to IR to let the
BoundsChecking pass know we want to disable local-bounds checking. In
order to support this feature, the IR is extended (similar to D102772)
to make Clang able to preserve the information and let BoundsChecking
pass know bounds checking is disabled for certain function.
Reviewed By: melver
Differential Revision: https://reviews.llvm.org/D119816
Malhar Jajoo [Tue, 1 Mar 2022 10:51:21 +0000 (10:51 +0000)]
[Openmp]: Missing import statement in openmp interface for Fortran
Essentially removed the "use omp_lib_kinds" statement and replaced it
with import to maintain consistency (and avoid compilation error
in case the omp_lib_kinds.mod file is not accessible) in header file.
The import is required to access entities in host scoping unit.
Differential Revision: https://reviews.llvm.org/D120707
Louis Dionne [Tue, 1 Mar 2022 17:17:32 +0000 (12:17 -0500)]
[libc++] Re generate header tests
This must have been missed in
368faacac7525.
Siva Chandra Reddy [Tue, 1 Mar 2022 08:54:46 +0000 (08:54 +0000)]
[libc] Remove the remaining uses of stdatomic.h.
New methods to the Atomic class have been added as required. Futex
related types have been consolidated at a common place.
Reviewed By: lntue
Differential Revision: https://reviews.llvm.org/D120705
Lei Zhang [Tue, 1 Mar 2022 17:00:38 +0000 (12:00 -0500)]
[mlir][spirv] Convert gpu.barrier to spv.ControlBarrier
Reviewed By: ThomasRaoux
Differential Revision: https://reviews.llvm.org/D120722
serge-sans-paille [Mon, 28 Feb 2022 13:08:36 +0000 (14:08 +0100)]
Cleanup includes: LLVMAnalysis
Number of lines output by preprocessor:
before:
1065940348
after:
1065307662
Discourse thread: https://discourse.llvm.org/t/include-what-you-use-include-cleanup
Differential Revision: https://reviews.llvm.org/D120659
Jay Foad [Mon, 28 Feb 2022 16:56:19 +0000 (16:56 +0000)]
[AMDGPU] Handle legacy multiply-accumulate opcodes in convertToThreeAddress
Handle V_MAC_LEGACY_F32 and V_FMAC_LEGACY_F32 in
convertToThreeAddress, to avoid the need for an extra mov
instruction in some cases.
Differential Revision: https://reviews.llvm.org/D120704
Jay Foad [Mon, 28 Feb 2022 16:33:20 +0000 (16:33 +0000)]
[AMDGPU] Disentangle MFMA handling in convertToThreeAddress. NFC.
Move MFMA handling to the top of convertToThreeAddress and pull
IsF16 calculation out of the switch. I think this makes it clearer
exactly which mac/fmac opcodes are handled, since they are now
listed in the switch with minimal extra clutter.
Differential Revision: https://reviews.llvm.org/D120703
Martin Storsjö [Mon, 28 Feb 2022 11:01:51 +0000 (13:01 +0200)]
[LLD] [COFF] Use StringTableBuilder to optimize the string table
This does tail merging (and deduplication) of the strings.
On a statically linked clang.exe, this shrinks the ~17 MB string
table by around 0.5 MB. This adds ~160 ms to the linking time
which originally was around 950 ms.
For cases where `-debug:symtab` or `-debug:dwarf` isn't set, the
string table is only used for long section names, where this
shouldn't make any difference at all.
Differential Revision: https://reviews.llvm.org/D120677
Jay Foad [Tue, 1 Mar 2022 16:07:12 +0000 (16:07 +0000)]
[AMDGPU] Fix test_fmaak_otherimm_src0_f64 test
Judging by the name, and comparing with the f32 version, this was
supposed to be testing that FMAC with a non-inlinable constant
operand did not get converted to FMA.
Erich Keane [Tue, 1 Mar 2022 15:22:44 +0000 (07:22 -0800)]
[NFC]Promote addInstantiatedParametersToScope to a private Sema function
This is used a few places in SemaTeplateInstantiateDecl, but is going
to be useful in SemaConcept.cpp as well. This patch switches it to be
a private function in Sema.
Differential Revision: https://reviews.llvm.org/D120729
Kristóf Umann [Fri, 4 Feb 2022 14:40:08 +0000 (15:40 +0100)]
[NFC][analyzer] Allow CallDescriptions to be matched with CallExprs
Since CallDescriptions can only be matched against CallEvents that are created
during symbolic execution, it was not possible to use it in syntactic-only
contexts. For example, even though InnerPointerChecker can check with its set of
CallDescriptions whether a function call is interested during analysis, its
unable to check without hassle whether a non-analyzer piece of code also calls
such a function.
The patch adds the ability to use CallDescriptions in syntactic contexts as
well. While we already have that in Signature, we still want to leverage the
ability to use dynamic information when we have it (function pointers, for
example). This could be done with Signature as well (StdLibraryFunctionsChecker
does it), but it makes it even less of a drop-in replacement.
Differential Revision: https://reviews.llvm.org/D119004
Joe Nash [Tue, 1 Mar 2022 15:25:33 +0000 (10:25 -0500)]
[UpdateTestChecks][AMDGPU] Run test update script
NFC. Run the mir test auto-update script. These tests haven't been updated
since the script changed from inserting CHECK to CHECK-NEXT.
Tue Ly [Mon, 7 Feb 2022 16:46:09 +0000 (11:46 -0500)]
[libc] Add LLVM_LIBC_CLANG_TIDY option and allow LLVM_LIBC_ENABLE_LINTING without full build.
Add LLVM_LIBC_CLANG_TIDY option and allow LLVM_LIBC_ENABLE_LINTING without full build.
Reviewed By: sivachandra
Differential Revision: https://reviews.llvm.org/D119180
Jun Zhang [Wed, 16 Feb 2022 15:48:27 +0000 (23:48 +0800)]
[Clang-tidy] Check the existence of ElaboratedType's qualifiers
The ElaboratedType can have no qualifiers, so we should check it before
use.
Fix #issue53874(https://github.com/llvm/llvm-project/issues/53874)
Differential Revision: https://reviews.llvm.org/D119949
Simon Pilgrim [Tue, 1 Mar 2022 15:40:30 +0000 (15:40 +0000)]
[X86] Add vector shift by scalar test with bitcasted scalar shift amount
As noted on D120553, we didn't have any tests that explicitly showed the bitcast - we were relying on i64 -> i32 legalization on 32-bit targets
Craig Topper [Tue, 1 Mar 2022 15:16:39 +0000 (07:16 -0800)]
[DAGCombiner] Don't expand (neg (abs x)) if the abs has an additional user.
If the types aren't legal, the expansions may get type legalized in a
different way preventing code sharing. If the type is legal, we will
share some instructions between the two expansions, but we will need an
extra register.
Since we don't appear to fold (neg (sub A, B)) if the sub has an
additional user, I think it makes sense not to expand NABS.
Reviewed By: RKSimon
Differential Revision: https://reviews.llvm.org/D120513
Craig Topper [Mon, 28 Feb 2022 20:59:48 +0000 (12:59 -0800)]
[RISCV] Add test cases miscompile of (rotl (grevi X, 24), 16) on RV64. NFC
This pattern was moved from isel to DAG combine in D119527, but
it lost the RV32 qualification in the process.
Nikita Popov [Tue, 1 Mar 2022 14:46:25 +0000 (15:46 +0100)]
[InstCombine] Support phi to cond fold with more than two preds
This transform can still be applied if there are more than two
phi inputs, as long as phi inputs with the same value are dominated
by the same idom edge.
Stefan Pintilie [Mon, 28 Feb 2022 21:34:19 +0000 (15:34 -0600)]
[PowerPC] Remove redundant MMA patterns.
There are two MMA patterns that have been added twice. This patch just removes
one set of petterns. Should not change the way MMA behaves.
Reviewed By: lei, #powerpc
Differential Revision: https://reviews.llvm.org/D120680
Nikita Popov [Tue, 1 Mar 2022 15:07:47 +0000 (16:07 +0100)]
[InstCombine] Add additional test for phi to condition fold (NFC)
This one does not have an intermediate block for the true branch,
and demonstrates the importance of using edge dominance.
Adam Czachorowski [Fri, 25 Feb 2022 16:21:32 +0000 (17:21 +0100)]
[clang] Improve laziness of resolving module map headers.
clang has support for lazy headers in module maps - if size and/or
modtime and provided in the cppmap file, headers are only resolved when
an include directive for a file with that size/modtime is encoutered.
Before this change, the lazy resolution was all-or-nothing per module.
That means as soon as even one file in that module potentially matched
an include, all lazy files in that module were resolved. With this
change, only files with matching size/modtime will be resolved.
The goal is to avoid unnecessary stat() calls on non-included files,
which is especially valuable on networked file systems, with higher
latency.
Differential Revision: https://reviews.llvm.org/D120569
Jay Foad [Tue, 1 Mar 2022 11:12:00 +0000 (11:12 +0000)]
[AMDGPU] Preserve src2_modifiers in convertToThreeAddress
Found by code inspection. I don't think it makes a difference with
current codegen, because if any source modifiers were present we
would have selected mad/fma instead of mac/fmac in the first place.
Differential Revision: https://reviews.llvm.org/D120709
Nikita Popov [Tue, 1 Mar 2022 14:47:28 +0000 (15:47 +0100)]
[InstCombine] Add more tests for phi to cond fold (NFC)
These have more than two predecessors.
Sebastian Neubauer [Tue, 1 Mar 2022 14:28:19 +0000 (15:28 +0100)]
[UpdateTestChecks] Add requires asserts to tests
The tests use debug-only, which is only available in debug mode.
This should fix the failing tests.
Florian Hahn [Tue, 1 Mar 2022 11:28:40 +0000 (11:28 +0000)]
[LV] Add test with multiple use of a FOR chained together.
Additional test coverage for D118642.
Nikita Popov [Tue, 1 Mar 2022 14:05:34 +0000 (15:05 +0100)]
[InstCombine] Slightly relax one-use check in abs canonicalization
Treat the icmp and sub symmetrically, and require that one of them
has one use, not the icmp in particular. This could be further
relaxed in the abs (but not nabs) case to not check one-use at
all.
Florian Hahn [Tue, 1 Mar 2022 14:02:02 +0000 (14:02 +0000)]
[AArch64] Pass Reg instead of MI to tryToFindRenameRegister (NFC).
FirstMI is only used to get the load/store operand and the machine
function. Pass the MF and register explicitly, so the helper can be used
to find rename registers for other instructions in the future.
Nikita Popov [Tue, 1 Mar 2022 14:01:00 +0000 (15:01 +0100)]
[LoopVectorize] Regenerate test checks (NFC)
Sanjay Patel [Tue, 1 Mar 2022 13:48:37 +0000 (08:48 -0500)]
[InstCombine] drop FMF in select->copysign transform
It is not correct to propagate flags from the select
to the new instructions:
https://alive2.llvm.org/ce/z/tNATrd
https://alive2.llvm.org/ce/z/VwcVzn
Fixes #54077
Sanjay Patel [Tue, 1 Mar 2022 13:24:25 +0000 (08:24 -0500)]
[InstCombine] add test for copysign with FMF propagation; NFC
This is a miscompile as noted in #54077.
Nikita Popov [Thu, 24 Feb 2022 14:05:15 +0000 (15:05 +0100)]
[InstCombine] Remove SPF min/max check from select demanded bits (NFCI)
This should no longer be necessary now that we canonicalize to
intrinsics. This may not be entirely NFC in practice if worklist
order gets inverted and we perform demanded bits simplification
of a select user before the select is canonicalized.
Louis Dionne [Tue, 12 Oct 2021 19:59:08 +0000 (15:59 -0400)]
[runtimes] Remove FOO_TARGET_TRIPLE, FOO_SYSROOT and FOO_GCC_TOOLCHAIN
Instead, folks can use the equivalent variables provided by CMake
to set those. This removal aims to reduce complexity and potential
for confusion when setting the target triple for building the runtimes,
and make it correct when `CMAKE_OSX_ARCHITECTURES` is used (right now
both `-arch` and `--target=` will end up being passed, which is downright
incorrect).
Differential Revision: https://reviews.llvm.org/D112155
Louis Dionne [Mon, 28 Feb 2022 21:37:25 +0000 (16:37 -0500)]
[libc++] Revert "Protect users from relying on detail headers" & related changes
This commit reverts
5aaefa51 (and also partly
7f285f48e77 and
b6d75682f9,
which were related to the original commit). As landed,
5aaefa51 had
unintended consequences on some downstream bots and didn't have proper
coverage upstream due to a few subtle things. Implementing this is
something we should do in libc++, however we'll first need to address
a few issues listed in https://reviews.llvm.org/D106124#3349710.
Differential Revision: https://reviews.llvm.org/D120683
Alex Zinenko [Tue, 1 Mar 2022 13:15:13 +0000 (14:15 +0100)]
[mlir] disallow side-effecting ops in llvm.mlir.global
The llvm.mlir.global operation accepts a region as initializer. This region
corresponds to an LLVM IR constant expression and therefore should not accept
operations with side effects. Add a corresponding verifier.
Reviewed By: wsmoses, bondhugula
Differential Revision: https://reviews.llvm.org/D120632
gbtozers [Fri, 25 Feb 2022 17:40:18 +0000 (17:40 +0000)]
[Dexter] Optimize breakpoint deletion in Visual Studio
Breakpoint deletion in visual studio is currently implemented by
iterating over the breakpoints we want to delete, for each of which we
iterate over the complete set of breakpoints in the debugger instance
until we find the one we wish to delete. Ideally we would resolve this
by directly deleting each breakpoint by some ID rather than searching
through the full breakpoint list for them, but in the absence of such a
feature in VS we can instead invert the loop to improve performance.
This patch changes breakpoint deletion to iterate over the complete list
of breakpoints, deleting breakpoints that match the breakpoints we
expect to delete by checking set membership. This represents a
worst-case improvement from O(nm) to O(n), for 'm' breakpoints being
deleted out of 'n' total. In practise this is almost exactly 'm'-times
faster, as when we delete multiple breakpoints they are typically
adjacent in the full breakpoint list.
Differential Revision: https://reviews.llvm.org/D120658
Sockke [Tue, 1 Mar 2022 12:54:10 +0000 (20:54 +0800)]
[clang-tidy] Fix `readability-const-return-type` for pure virtual function.
It cannot match a `pure virtual function`. This patch fixes this behavior.
Reviewed By: aaron.ballman
Differential Revision: https://reviews.llvm.org/D116439
Jeremy Morse [Tue, 1 Mar 2022 12:46:50 +0000 (12:46 +0000)]
[DebugInfo][InstrRef][NFC] Use unique_ptr instead of raw pointers
InstrRefBasedLDV allocates some big tables of ValueIDNum, to store live-in
and live-out block values in, that then get passed around as pointers
everywhere. This patch wraps the allocation in a std::unique_ptr, names
some types based on unique_ptr, and passes references to those around
instead. There's no functional change, but it makes it clearer to the
reader that references to these tables are borrowed rather than owned, and
we get some extra validity assertions too.
Differential Revision: https://reviews.llvm.org/D118774
Nathan Sidwell [Fri, 18 Feb 2022 17:51:24 +0000 (09:51 -0800)]
[demangler] Add co_await demangling
The demangler doesn't understand 'aw' as an operator name. This adds
the necessary smarts -- you may use this as an operator functionname,
but not as an expression operator.
Reviewed By: ChuanqiXu
Differential Revision: https://reviews.llvm.org/D120143
Florian Hahn [Tue, 1 Mar 2022 12:44:03 +0000 (12:44 +0000)]
[AArch64] Remove unused argument from tryToFindRegisterToRename (NFC).
The MI argument is not used by the function. Remove it.
Nathan Sidwell [Thu, 27 Jan 2022 21:23:16 +0000 (13:23 -0800)]
[demangler][NFC] Tabularize operator name parsing
We need to parse operator names in 3 places -- expressions, names &
fold expressions. Currently we have 3 separate pieces to do this, and a FIXME.
The operator name and expression parsing are implemented as
handwritten two-character nested switches, the fold expression is a
sequence of string comparisons.
This adds a new OperatorInfo class to encode the operator info
(encoding, kind, name), and has a table that it can binary search.
From that each of the above 3 uses are altered to use the new scheme.
Existing tests cover parsing operator encodings.
Reviewed By: ChuanqiXu
Differential Revision: https://reviews.llvm.org/D119467
Martin Storsjö [Tue, 1 Mar 2022 12:42:49 +0000 (14:42 +0200)]
Revert "[lit] Read command stdout/stderr as text on Windows"
This reverts commit
640e45b9b2205ba18a4a562a9404418d8b90abda.
That commit seemed to quite conclusively break a number of buildbots.
Nathan Sidwell [Wed, 16 Feb 2022 16:03:24 +0000 (08:03 -0800)]
[demangler] Improve buffer hysteresis
Improve demangler buffer hysteresis. If we needed more than double
the buffer, the original code would allocate exactly the amount
needed, and thus consequently the next request would also realloc.
We're very unlikely to get into wanting more than double, after the
first allocation, as it would require the user to have used an
identifier larger than the hysteresis. With machine generated code
that's possible, but unlikely.
Reviewed By: ChuanqiXu
Differential Revision: https://reviews.llvm.org/D119972
Nathan Sidwell [Mon, 28 Feb 2022 20:04:37 +0000 (12:04 -0800)]
[demangler] Simplify SwapAndRestore
The SwapAndRestore class is over engineered. Nothing makes use of the
early restoration machinery. Let's just remove that cognative burdon.
Reviewed By: ChuanqiXu
Differential Revision: https://reviews.llvm.org/D120673
Egor Zhdan [Fri, 18 Feb 2022 21:04:49 +0000 (21:04 +0000)]
[Clang] Add `-funstable` flag to enable unstable and experimental features
This new flag enables `__has_feature(cxx_unstable)` that would replace libc++ macros for individual unstable/experimental features, e.g. `_LIBCPP_HAS_NO_INCOMPLETE_RANGES` or `_LIBCPP_HAS_NO_INCOMPLETE_FORMAT`.
This would make it easier and more convenient to opt-in into all libc++ unstable features at once.
Differential Revision: https://reviews.llvm.org/D120160
Martin Storsjö [Sat, 26 Feb 2022 22:16:24 +0000 (00:16 +0200)]
[lit] Read command stdout/stderr as text on Windows
This takes care of normalizing newlines back to single LF instead
of CRLF.
This on itself breaks on a couple tests that accidentally seem to
be writing binary data to stdout; make sure those cases are piped
to /dev/null instead of actually written to a terminal.
Differential Revision: https://reviews.llvm.org/D120623
Alexandros Lamprineas [Tue, 1 Mar 2022 11:57:08 +0000 (11:57 +0000)]
[FuncSpec] Remove definitions of fully specialized functions.
A function is basically dead when:
* it has no uses
* it has only self-referencing uses (it's recursive)
Differential Revision: https://reviews.llvm.org/D119878
Alexandros Lamprineas [Tue, 1 Mar 2022 11:41:42 +0000 (11:41 +0000)]
[FuncSpec][NFC] Improve debug messages.
Adds diagnostic messages when debugging the pass.
Differential Revision: https://reviews.llvm.org/D119875
Alexey Lapshin [Thu, 24 Feb 2022 09:58:05 +0000 (12:58 +0300)]
[objcopy] Refactor CommonConfig to add posibility to specify added/updated sections as MemoryBuffer.
Current objcopy implementation has a possibility to add or update sections.
The incoming section is specified as a pair: section name and name of the file
containing section data. The interface does not allow to specify incoming
section as a memory buffer. This patch adds possibility to specify incoming
section as a memory buffer.
Differential Revision: https://reviews.llvm.org/D120486
Alexandros Lamprineas [Tue, 15 Feb 2022 12:19:19 +0000 (12:19 +0000)]
[FuncSpec][NFC] Variable renaming.
Just preparing the ground for follow up patches to make the reviews easier.
Differential Revision: https://reviews.llvm.org/D119874
Sander de Smalen [Mon, 28 Feb 2022 15:42:34 +0000 (15:42 +0000)]
[AArch64] NFC: Change description of Streaming SVE mode.
Streaming SVE mode includes more than just the streaming compatible
SVE/SVE2/NEON instructions.
Jay Foad [Tue, 1 Mar 2022 11:09:54 +0000 (11:09 +0000)]
[AMDGPU] Precommit tests for D120709
Whisperity [Tue, 1 Mar 2022 11:06:59 +0000 (12:06 +0100)]
[NFC][clang-tidy][docs] Remove mention of backported fix of `readability-suspicious-call-argument` from `ReleaseNotes`
Commit
416e689ecda66616da855c82f7ec652657730c6a introduced a fix to
`readability-suspicious-call-argument` which added an entry to the
Release Notes, but the same change was backported to **14.0** in commit
e89602b7b2ec12f20f2618cefb864c2b22d0048a.
Hence, this change is not a new thing of the to-be 15.0 release.
Nikita Popov [Mon, 28 Feb 2022 10:12:42 +0000 (11:12 +0100)]
[SCEV] Only verify BECounts for reachable loops (PR50523)
For unreachable loops, any BECount is legal, and since D98706 SCEV
can make use of this for loops that are unreachable due to constant
branches. To avoid false positives, adjust SCEV verification to only
check BECounts in reachable loops.
Fixes https://github.com/llvm/llvm-project/issues/50523.
Differential Revision: https://reviews.llvm.org/D120651
Florian Hahn [Tue, 1 Mar 2022 10:30:33 +0000 (10:30 +0000)]
[AArch64] Add tests with unnecessary dependency with faddp lowering.
The added tests highlight an unnecessary cross-iteration dependency when
lowering reductions to faddp. This dependency can negatively impact
performance.
Florian Hahn [Tue, 1 Mar 2022 10:30:29 +0000 (10:30 +0000)]
[AArch64] Use common CHECK prefix for test, reducing duplicated checks.
Use the common CHECK prefix with runlines with and without fullfp16.
This means no duplicated checks are generated for tests not using fp16.
Kristina Bessonova [Tue, 1 Mar 2022 10:21:15 +0000 (12:21 +0200)]
[NVPTX] Fix nvvm.match.sync*.i64 intrinsics return type (i64 -> i32)
NVVM IR specification defines them with i32 return type:
declare i32 @llvm.nvvm.match.any.sync.i64(i32 %membermask, i64 %value)
declare {i32, i1} @llvm.nvvm.match.all.sync.i64(i32 %membermask, i64 %value)
...
The i32 return value is a 32-bit mask where bit position in mask corresponds
to thread’s laneid.
as well as PTX ISA:
9.7.12.8. Parallel Synchronization and Communication Instructions: match.sync
match.any.sync.type d, a, membermask;
match.all.sync.type d[|p], a, membermask;
...
Destination d is a 32-bit mask where bit position in mask corresponds
to thread’s laneid.
Additionally, ptxas doesn't accept intructions, produced by NVPTX backend.
After this patch, it compiles with no issues.
Reviewed By: tra
Differential Revision: https://reviews.llvm.org/D120499
Yatao Wang [Tue, 1 Mar 2022 09:54:24 +0000 (10:54 +0100)]
[UpdateLLCTestChecks] Add support for isel debug output in update_llc_test_checks.py
Add a check on run lines to pick up isel options in llc commands and allow
generating check lines of isel final output other than assembly. If llc command
line contains -debug-only=isel, update_llc_test_checks.py will try to scrub isel
output, otherwise, the script will fall back on default behaviour, which is try to
scrub assembly output instead.
The motivation of this change is to allow usage of update_llc_test_checks.py to
autogenerate checks of instruction selection results. In this way, we can detect
errors at an earlier stage before the compilation goes all the way to assembly.
It is an example of having some transparency for the stages between IR and
assembly. These generated tests are almost like "unit tests" of isel stage.
This patch only implements the initial change to differentiate isel output from
assembly output for Lanai. Other targets will not be supported for isel check
generation at the moment. Although adding support for it will only require
implementing the function regex and scrubber for corresponding targets.
The Lanai implementation was chosen mainly for the simplicity of demonstrating
the difference between isel checks and asm checks.
This patch also do not include the implementation of function prefix, which is
required for the generated isel checks to pass. I will put up a follow up revision
for the function prefix change to complete isel support.
Reviewed By: Flakebi
Differential Revision: https://reviews.llvm.org/D119368
Martin Storsjö [Mon, 28 Feb 2022 21:07:16 +0000 (23:07 +0200)]
[LLD] [COFF] Use the new encodeSectionName() helper for long section names
The previous code used an unbounded sprintf, which in theory can
overflow, writing either the null terminator or the last digits
into the next struct member.
In practice, in LLD, all long section names are written sequentially
first at the start of the string table, followed by all the long
symbol names. Due to this, even if the total string table would
end up large, the long section names have fairly short offsets,
which is why this hasn't been an issue in practice.
I don't think it's worth trying to write a test that produces an
executable with enough long section names to make the section names
themselves exceed 10^6 bytes, which is currently necessary to trigger
faults with the previous form.
Differential Revision: https://reviews.llvm.org/D120676
David Spickett [Tue, 1 Mar 2022 09:28:15 +0000 (09:28 +0000)]
[llvm][AArch64] Restore lit cfg for TypePromotion tests
Accidentally deleted in
20d75059a2ea49117a3dc9a78fb5b815a84ae33e.
As seen in failures on https://lab.llvm.org/buildbot/#/builders/171/builds/10952.
Sam Parker [Tue, 1 Mar 2022 08:59:28 +0000 (08:59 +0000)]
Revert "[TypePromotion] Avoid some unnecessary truncs"
This reverts commit
281d29b8fed369c6ebe33ed85c518fc1ed81f44a.
Report of a miscompilation and awaiting a reproducer.
Hans Wennborg [Tue, 1 Mar 2022 08:36:14 +0000 (09:36 +0100)]
[NFC][hwasan] Check __GLIBCXX__ before checking _GLIBCXX_RELEASE in test
_GLIBCXX_RELEASE wasn't defined before GCC 7.1.
This is another follow-up to https://reviews.llvm.org/D119161
Iain Sandoe [Sun, 4 Apr 2021 11:31:31 +0000 (12:31 +0100)]
[C++20][Modules][8/8] Amend module visibility rules for partitions.
Implementation partitions bring two extra cases where we have
visibility of module-private data.
1) When we import a module implementation partition.
2) When a partition implementation imports the primary module intertace.
We maintain a record of direct imports into the current module since
partition decls from direct imports (but not trasitive ones) are visible.
The rules on decl-reachability are much more relaxed (with the standard
giving permission for an implementation to load dependent modules and for
the decls there to be reachable, but not visible).
Differential Revision: https://reviews.llvm.org/D118599
gysit [Tue, 1 Mar 2022 08:10:51 +0000 (08:10 +0000)]
[mlir][OpDSL] Rename function to make signedness explicit (NFC).
The revision renames the following OpDSL functions:
```
TypeFn.cast -> TypeFn.cast_signed
BinaryFn.min -> BinaryFn.min_signed
BinaryFn.max -> BinaryFn.max_signed
```
The corresponding enum values on the C++ side are renamed accordingly:
```
#linalg.type_fn<cast> -> #linalg.type_fn<cast_signed>
#linalg.binary_fn<min> -> #linalg.binary_fn<min_signed>
#linalg.binary_fn<max> -> #linalg.binary_fn<max_signed>
```
Depends On D120110
Reviewed By: aartbik
Differential Revision: https://reviews.llvm.org/D120562
Lian Wang [Tue, 1 Mar 2022 07:35:19 +0000 (07:35 +0000)]
[RISCV] Add FMV_W_X and FMV_H_X instrutions to hasAllNBitUsers
Reviewed By: craig.topper
Differential Revision: https://reviews.llvm.org/D120699
Lorenzo Chelini [Wed, 23 Feb 2022 14:13:15 +0000 (15:13 +0100)]
[MLIR][Standalone] Don't look for Python if bindings are OFF
Reviewed By: stellaraccident
Differential Revision: https://reviews.llvm.org/D120700
gysit [Tue, 1 Mar 2022 07:40:06 +0000 (07:40 +0000)]
[mlir][OpDSL] Add arithmetic function attributes.
The revision extends OpDSL with unary and binary function attributes. A function attribute, makes the operations used in the body of a structured operation configurable. For example, a pooling operation may take an aggregation function attribute that specifies if the op shall implement a min or a max pooling. The goal of this revision is to define less and more flexible operations.
We may thus for example define an element wise op:
```
linalg.elem(lhs, rhs, outs=[out], op=BinaryFn.mul)
```
If the op argument is not set the default operation is used.
Depends On D120109
Reviewed By: nicolasvasilache, aartbik
Differential Revision: https://reviews.llvm.org/D120110
lian wang [Thu, 17 Feb 2022 06:05:53 +0000 (06:05 +0000)]
[RISCV] Add schedule class for Zbp extension and Zbr extension
Reviewed By: craig.topper
Differential Revision: https://reviews.llvm.org/D120012
LLVM GN Syncbot [Tue, 1 Mar 2022 07:28:51 +0000 (07:28 +0000)]
[gn build] Port
d8a2afb244da
Fangrui Song [Tue, 1 Mar 2022 07:23:33 +0000 (23:23 -0800)]
[ELF] isKnownZFlag: move known literal flags to an array. NFC
The chain of == comparisons is a bit unwieldy to update.
While here, sort the entries alphabetically.
Balázs Kéri [Fri, 25 Feb 2022 09:15:06 +0000 (10:15 +0100)]
[clang][analyzer] Add modeling of 'errno'.
Add a checker to maintain the system-defined value 'errno'.
The value is supposed to be set in the future by existing or
new checkers that evaluate errno-modifying function calls.
Reviewed By: NoQ, steakhal
Differential Revision: https://reviews.llvm.org/D120310
Jonas Devlieghere [Mon, 28 Feb 2022 21:59:19 +0000 (13:59 -0800)]
[Support] Allow the ability to change WithColor's auto detection function
WithColor has an "auto detection mode" which looks whether the
corresponding whether the corresponding cl::opt is enabled or not. While
this is great when opting into cl::opt, it's not so great for downstream
users of this utility, which might have their own competing options to
enable or disable colors. The WithColor constructor takes a color mode,
but the big benefit of the class are its static error and warning
helpers and default error handlers.
In order to allow users of this utility to enable or disable colors
globally, this patch adds the ability to specify a global auto detection
function. By default, the auto detection function behaves the way that
it does today. The benefit of this patch lies in that it can be
overwritten. In addition to a ability to change the auto detection
function, I've also made it possible to get your hands on the default
auto detection function, so you swap it back if if you so desire.
This patch allow downstream users (like LLDB) to globally disable colors
with its own command line flag.
Differential revision: https://reviews.llvm.org/D120593
Fangrui Song [Tue, 1 Mar 2022 04:26:33 +0000 (20:26 -0800)]
[asan][test] Remove Linux/asan_prelink_test.cpp
glibc 2.37 will remove prelink support. See
https://sourceware.org/pipermail/libc-alpha/2022-January/135565.html for its
broken current state.
Reviewed By: kstoimenov
Differential Revision: https://reviews.llvm.org/D120520
Weining Lu [Tue, 1 Mar 2022 02:57:14 +0000 (10:57 +0800)]
[LoongArch][NFC] Delete unnecessary return behind of llvm_unreachable
Amir Ayupov [Thu, 24 Feb 2022 06:30:03 +0000 (22:30 -0800)]
[BOLT] Fix X86MCPlusBuilder::replaceRegWithImm
Reassigning the operand didn't update the operand type which resulted in an
assertion (`Assertion `isReg() && "This is not a register operand!"' failed.`)
Reset the instruction instead.
Test Plan:
```
ninja check-bolt
...
PASS: BOLT-Unit :: Core/./CoreTests/X86/MCPlusBuilderTester.ReplaceRegWithImm/0 (90 of 136)
```
Reviewed By: rafauler
Differential Revision: https://reviews.llvm.org/D120263
Jez Ng [Tue, 1 Mar 2022 02:56:38 +0000 (21:56 -0500)]
[lld-macho] Have relocation address included in range-check error message
This makes it easier to debug those errors. See e.g. https://github.com/llvm/llvm-project/issues/52767#issuecomment-
1028713943
We take the approach of 'reverse-engineering' the InputSection from the
output buffer offset. This provides for a cleaner Target API, and is
similar to LLD-ELF's implementation of getErrorPlace().
Reviewed By: #lld-macho, Roger
Differential Revision: https://reviews.llvm.org/D118903
Phoebe Wang [Tue, 1 Mar 2022 01:56:49 +0000 (09:56 +0800)]
[X86] Use bit test instructions to optimize some logic atomic operations
This is to match GCC's optimizations: https://gcc.godbolt.org/z/3odh9e7WE
Reviewed By: craig.topper
Differential Revision: https://reviews.llvm.org/D120199
Lian Wang [Tue, 1 Mar 2022 01:44:38 +0000 (01:44 +0000)]
[RISCV][NFC] Move defined non_imm12 to proper place in RISCVInstrInfoZb.td
Reviewed By: craig.topper
Differential Revision: https://reviews.llvm.org/D120656
Zhihao Yuan [Tue, 1 Mar 2022 01:29:54 +0000 (19:29 -0600)]
[Clang] Remove redundant init-parens in AST print
Given a dependent `T` (maybe an undeduced `auto`),
Before:
new T(z) --> new T((z)) # changes meaning with more args
new T{z} --> new T{z}
T(z) --> T(z)
T{z} --> T({z}) # forbidden if T is auto
After:
new T(z) --> new T(z)
new T{z} --> new T{z}
T(z) --> T(z)
T{z} --> T{z}
Depends on D113393
Reviewed By: aaron.ballman
Differential Revision: https://reviews.llvm.org/D120608
Zhihao Yuan [Tue, 1 Mar 2022 01:17:49 +0000 (19:17 -0600)]
[c++2b] Implement P0849R8 auto(x)
https://wg21.link/p0849
Reviewed By: aaron.ballman, erichkeane
Differential Revision: https://reviews.llvm.org/D113393
Eli Friedman [Mon, 28 Feb 2022 21:32:25 +0000 (13:32 -0800)]
[Windows] Don't try to use x64 linker on ARM64 Windows.
Trying to invoke an x64 binary on ARM64 Windows 10 won't work, and will
print an obscure error message. Choose the 32-bit linker instead, which
will run under emulation.
The x64 linker should in theory run under ARM64 Windows 11. We could
detect this using IsWow64GuestMachineSupported(), but I don't have a
setup to test that with at the moment.
Differential Revision: https://reviews.llvm.org/D120681
Michael Kruse [Tue, 1 Mar 2022 00:44:36 +0000 (18:44 -0600)]
[test] Silence compiler warning.
signed/unsigned comparison in gtest macro.
Also fix buidlbots:
https://lab.llvm.org/buildbot#builders/36/builds/18337
https://lab.llvm.org/buildbot#builders/57/builds/15594
Kirill Stoimenov [Mon, 28 Feb 2022 20:38:31 +0000 (20:38 +0000)]
[ASan] Removed unused AddressSanitizerPass functional pass.
This is a clean-up patch. The functional pass was rolled into the module pass in D112732.
Reviewed By: vitalybuka, aeubanks
Differential Revision: https://reviews.llvm.org/D120674
Michael Kruse [Fri, 25 Feb 2022 23:44:14 +0000 (17:44 -0600)]
[OpenMPIRBuilder] Implement static-chunked workshare-loop schedules.
Add applyStaticChunkedWorkshareLoop method implementing static schedule when chunk-size is specified. Unlike a static schedule without chunk-size (where chunk-size is chosen by the runtime such that each thread receives one chunk), we need two nested loops: one for looping over the iterations of a chunk, and a second for looping over all chunks assigned to the threads.
This patch includes the following related changes:
* Adapt applyWorkshareLoop to triage between the schedule types, now possible since all schedules have been implemented. The default schedule is assumed to be non-chunked static, as without OpenMPIRBuilder.
* Remove the chunk parameter from applyStaticWorkshareLoop, it is ignored by the runtime. Change the value for the value passed to the init function to 0, as without OpenMPIRBuilder.
* Refactor CanonicalLoopInfo::setTripCount and CanonicalLoopInfo::mapIndVar as used by both, applyStaticWorkshareLoop and applyStaticChunkedWorkshareLoop.
* Enable Clang to use the OpenMPIRBuilder in the presence of the schedule clause.
Differential Revision: https://reviews.llvm.org/D114413
Peter Klausler [Wed, 16 Feb 2022 21:26:44 +0000 (13:26 -0800)]
[flang] Allow more concurrently open NEWUNIT= values, with recycling
Add a header-only implementation of Briggs & Torczon's fast small
integer set data structure to flang/include/flang/Common, and use
it in the runtime to manage a pool of Fortran unit numbers with
recycling. This replaces the bit set previously used for that
purpose. The set is initialized on demand with the negations of
all the NEWUNIT= unit numbers that can be returned to any kind
of integer variable.
For programs that require more concurrently open NEWUNIT= unit
numbers than the pool can hold, they are now allocated with a
non-recycling counter. This allows as many open units as the
operating system provides.
Many of the top-line comments in flang/unittests/Runtime had the
wrong path name. I noticed this while adding a unit test for the
fast integer set data structure, and cleaned them up.
Differential Revision: https://reviews.llvm.org/D120685
Arthur O'Dwyer [Mon, 28 Feb 2022 23:48:58 +0000 (18:48 -0500)]
[libc++] [ranges] Use "inline constexpr bool" not "constexpr bool" for helpers.
Reviewed as part of D118616.
Siva Chandra Reddy [Sun, 27 Feb 2022 22:15:21 +0000 (22:15 +0000)]
[libc] Add a class "Atomic" as a simple equivalent of std::atomic.
Only the methods currently required by the libc have been added.
Most of the existing uses of atomic operations have been switched over
to this new class. A future change will clean up the rest of uses.
This change now allows building mutex and condition variable code with a
C++ compiler which does not have stdatomic.h, for example g++.
Reviewed By: lntue
Differential Revision: https://reviews.llvm.org/D120642
Kiran Chandramohan [Mon, 28 Feb 2022 23:39:22 +0000 (23:39 +0000)]
[Flang] NFC: Changes to adhere to coding guidelines
This patch includes some changes which brings the code in line with
llvm coding guidelines.
-> Remove curlies for one line if statements.
-> Remove else after return.
-> Removes a few usage of auto.
-> Add Doxygen comments
Addresses post review comments in D120403 by @schweitz.
Reviewed By: schweitz
Differential Revision: https://reviews.llvm.org/D120657
not-jenni [Mon, 28 Feb 2022 23:30:13 +0000 (15:30 -0800)]
Adds a flag to optionally disable tosa decompositions
Reviewed By: rsuderman
Differential Revision: https://reviews.llvm.org/D120338
Peter Klausler [Fri, 11 Feb 2022 17:44:47 +0000 (09:44 -0800)]
[flang] Catch I/O of bad derived type at compile time
Derived types with allocatable and pointer components cannot
be used in I/O data transfer statements unless they have defined
I/O procedures available (as type-bound or regular generics).
These cases are caught as errors by the I/O runtime library,
but it would be better if they were flagged during compilation.
(Address comment in review: don't use explicit name string lengths.)
Differential Revision: https://reviews.llvm.org/D120675
Jonas Devlieghere [Mon, 28 Feb 2022 23:31:54 +0000 (15:31 -0800)]
Revert "[Support] Allow the ability to change WithColor's auto detection function"
This reverts commit
a83cf7a84628a9e3a24cfd33c69f786cf74df4ec because it
breaks a bunch of build bots.
Hsiangkai Wang [Sat, 26 Feb 2022 02:39:48 +0000 (02:39 +0000)]
[AArch64][SME] Add rdsvl instruction
This patch adds support for the following SME instruction:
* RDSVL
The reference can be found here:
https://developer.arm.com/documentation/ddi0602/2021-12
Differential Revision: https://reviews.llvm.org/D120603
Hsiangkai Wang [Fri, 25 Feb 2022 08:57:45 +0000 (08:57 +0000)]
[AArch64][SME] Add addsvl and addspl instructions
This patch adds support for the following SME instructions:
* ADDSPL, ADDSVL
The reference can be found here:
https://developer.arm.com/documentation/ddi0602/2021-12
Differential Revision: https://reviews.llvm.org/D120554
Okwan Kwon [Tue, 22 Feb 2022 21:50:14 +0000 (21:50 +0000)]
[mlir] Match Arithmetic::ConstantOp and Tensor::ExtractSliceOp.
Add a pattern matcher for ExtractSliceOp when its source is a constant.
The matching heuristics can be governed by the control function since
generating a new constant is not always beneficial.
Differential Revision: https://reviews.llvm.org/D119605
Jonas Devlieghere [Mon, 28 Feb 2022 21:59:19 +0000 (13:59 -0800)]
[Support] Allow the ability to change WithColor's auto detection function
WithColor has an "auto detection mode" which looks whether the
corresponding whether the corresponding cl::opt is enabled or not. While
this is great when opting into cl::opt, it's not so great for downstream
users of this utility, which might have their own competing options to
enable or disable colors. The WithColor constructor takes a color mode,
but the big benefit of the class are its static error and warning
helpers and default error handlers.
In order to allow users of this utility to enable or disable colors
globally, this patch adds the ability to specify a global auto detection
function. By default, the auto detection function behaves the way that
it does today. The benefit of this patch lies in that it can be
overwritten. In addition to a ability to change the auto detection
function, I've also made it possible to get your hands on the default
auto detection function, so you swap it back if if you so desire.
This patch allow downstream users (like LLDB) to globally disable colors
with its own command line flag.
Differential revision: https://reviews.llvm.org/D120593
Clint Caywood [Mon, 28 Feb 2022 22:28:11 +0000 (17:28 -0500)]
Use __builtin_clz to find leading 1 in generic sqrt (where possible)
__builtin_clz requires just a single instruction on x86 and arm, so this is a performance improvement.
Reviewed By: lntue
Differential Revision: https://reviews.llvm.org/D120579
LLVM GN Syncbot [Mon, 28 Feb 2022 22:24:55 +0000 (22:24 +0000)]
[gn build] Port
Louis Dionne [Thu, 17 Feb 2022 16:19:45 +0000 (11:19 -0500)]
[libc++abi] Install the libc++abi headers from libc++abi
libc++abi should be responsible for installing its own headers, it
doesn't make sense for libc++ to be responsible for it.
Differential Revision: https://reviews.llvm.org/D101458
Louis Dionne [Mon, 28 Feb 2022 22:05:35 +0000 (17:05 -0500)]
[libc++][NFC] Fix typo in comment