Fangrui Song [Fri, 16 Jul 2021 22:33:42 +0000 (15:33 -0700)]
[Bazel] Delete blank line to make buildifier happy
Vitaly Buka [Fri, 16 Jul 2021 22:28:26 +0000 (15:28 -0700)]
[sanitizer] Fix test build on Windows
Mehdi Amini [Fri, 16 Jul 2021 03:32:59 +0000 (03:32 +0000)]
Build libSupport with -Werror=global-constructors (NFC)
Ensure that libSupport does not carry any static global initializer.
libSupport can be embedded in use cases where we don't want to load all
cl::opt unless we want to parse the command line.
ManagedStatic can be used to enable lazy-initialization of globals.
David Green [Fri, 16 Jul 2021 22:11:42 +0000 (23:11 +0100)]
[ARM] Fix for matching reductions that are both sext and zext.
Fix a silly mistake that was not making sure that _both_ operands were
the correct extend code.
Sami Tolvanen [Fri, 16 Jul 2021 21:47:19 +0000 (14:47 -0700)]
Revert "ThinLTO: Fix inline assembly references to static functions with CFI"
This reverts commit
8e3b5cb39eef462943ed7556469604ce25c07a1d.
Reverting to investigate test failures.
Sami Tolvanen [Fri, 16 Jul 2021 20:56:54 +0000 (13:56 -0700)]
ThinLTO: Fix inline assembly references to static functions with CFI
Create an internal alias with the original name for static functions
that are renamed in promoteInternals to avoid breaking inline
assembly references to them. This version uses module inline assembly
to avoid issues with LowerTypeTestsModule.
Link: https://github.com/ClangBuiltLinux/linux/issues/1354
Reviewed By: nickdesaulniers, pcc
Differential Revision: https://reviews.llvm.org/D104058
Nemanja Ivanovic [Fri, 16 Jul 2021 18:54:21 +0000 (13:54 -0500)]
[PowerPC] Implement intrinsics for mtfsf[i]
This provides intrinsics for emitting instructions that set the FPSCR (`mtfsf/mtfsfi`).
The patch also conservatively marks the rounding mode as an implicit def for both since they both may set the rounding mode depending on the operands.
Reviewed By: #powerpc, qiucf
Differential Revision: https://reviews.llvm.org/D105957
Mehdi Amini [Fri, 16 Jul 2021 21:06:38 +0000 (21:06 +0000)]
Add `lli` as dependency of MLIR integration tests
This fixes running `ninja check-mlir` from a clean build when
the integration tests are enabled.
Geoffrey Martin-Noble [Fri, 2 Jul 2021 16:13:19 +0000 (09:13 -0700)]
[Bazel] Add examples to bazelignore
This avoids Bazel recursing into these directories when overlayed, which
will break if someone has run Bazel in these dirs (which would only be
successful with the http_archive example) because of the Bazel directory
symlinks (already gitignored).
Reviewed By: jpienaar
Differential Revision: https://reviews.llvm.org/D105357
Geoffrey Martin-Noble [Fri, 16 Jul 2021 01:05:57 +0000 (18:05 -0700)]
[Bazel] Make gentbl_test compatible with coverage
Add explicit coverage provider. Also remove output_to_genfiles which
isn't necessary for this test (it's just copy-pasta from gentbl_rule,
which needs it for output C++ header files).
Reviewed By: jpienaar
Differential Revision: https://reviews.llvm.org/D106115
Geoffrey Martin-Noble [Fri, 16 Jul 2021 18:49:50 +0000 (11:49 -0700)]
[Bazel] Use bazel_skylib paths for paths munging
We do a lot of path munging and bazel_sklyib is a pretty reasonable dep.
Reviewed By: jpienaar
Differential Revision: https://reviews.llvm.org/D106175
Alexey Bataev [Thu, 15 Jul 2021 12:12:17 +0000 (05:12 -0700)]
[SLP]Improve calculations of the cost for reused/reordered scalars.
Part of D105020. Also, fixed FIXMEs that need to use wider vector type
when trying to calculate the cost of reused scalars. This may cause
regressions unless D100486 is landed to improve the cost estimations
for long vectors shuffling.
Differential Revision: https://reviews.llvm.org/D106060
LLVM GN Syncbot [Fri, 16 Jul 2021 20:32:47 +0000 (20:32 +0000)]
[gn build] Port
0bf4b81d57b0
Amara Emerson [Fri, 16 Jul 2021 19:56:11 +0000 (12:56 -0700)]
[GlobalISel] Fix non-pow-2 legalization of s56 stores.
s56 stores are broken down into s32 + s24 stores. During this step
both of those new stores use an anyextended s64 value, resulting in
truncating stores. With s56, the s24 requires another lower step to
make it legal, and we were crashing because we didn't expect non-pow-2
stores to also be truncating as well.
Differential Revision: https://reviews.llvm.org/D106183
Fangrui Song [Fri, 16 Jul 2021 20:28:46 +0000 (13:28 -0700)]
[COFF][test] Fix llvm-readobj tests
Emily Shi [Fri, 16 Jul 2021 18:47:16 +0000 (11:47 -0700)]
[NFC][compiler-rt][test] pass through MallocNanoZone to iossim env
This is required for no-fd.cpp test
rdar://
79354597
Differential Revision: https://reviews.llvm.org/D106174
Martin Storsjö [Tue, 13 Jul 2021 12:38:56 +0000 (12:38 +0000)]
[libcxx] [test] Fix experimental/memory.resource.adaptor.mem/db_deallocate on Windows
The checks within the libc++experimental memory_resource class uses this
limit:
_MaxAlign = _LIBCPP_ALIGNOF(max_align_t);
Therefore, only use max_align_t for this limit instead of using
`__STDCPP_DEFAULT_NEW_ALIGNMENT__` if available.
Differential Revision: https://reviews.llvm.org/D105905
Alexey Bataev [Fri, 16 Jul 2021 19:42:19 +0000 (12:42 -0700)]
[PATCH] D105827: [SLP]Workaround for InsertSubVector cost.
The cost of the InsertSubvector shuffle kind cost is not complete and
may end up with just extracts + inserts costs in many cases. Added
a workaround to represent it as a generic PermuteSingleSrc, which is
still pessimistic but better than InsertSubvector.
Differential Revision: https://reviews.llvm.org/D105827
Nico Weber [Fri, 16 Jul 2021 19:54:13 +0000 (15:54 -0400)]
[gn build] (semi-manually) port
6a4054ef060b
Jon Roelofs [Fri, 16 Jul 2021 17:59:56 +0000 (10:59 -0700)]
[RISCV] Compose vector subregs hierarchically
This fixes the test I broke in: https://reviews.llvm.org/D105953#2883579
Differential revision: https://reviews.llvm.org/D106168
Mark Leair [Mon, 12 Jul 2021 19:38:55 +0000 (12:38 -0700)]
Add a scalar argument case for the Fortran spread intrinsic unit test.
Fangrui Song [Fri, 16 Jul 2021 19:03:08 +0000 (12:03 -0700)]
[llvm-readelf/llvm-readobj] Remove one-dash long options
llvm-readelf is a user-facing tool which emulates GNU readelf. Remove one-dash
long options which are not recognized by GNU style `getopt_long`. This ensures
long options cannot collide with grouped short options.
Note: the documentation (D63719)/help messages have recommended the double-dash
forms since LLVM 9.0.0.
llvm-readobj is intended as an internal tool which has some flexibility.
llvm-readelf/llvm-readobj use the same option parsing code and llvm-readobj's
one-dash long options aren't used after test migration.
Differential Revision: https://reviews.llvm.org/D106037
Fangrui Song [Fri, 16 Jul 2021 19:02:49 +0000 (12:02 -0700)]
[test] Avoid llvm-readelf/llvm-readobj one-dash long options
David Green [Fri, 16 Jul 2021 19:01:52 +0000 (20:01 +0100)]
[ARM] Extra MLA vecreduce tests. NFC
Simon Pilgrim [Fri, 16 Jul 2021 17:50:12 +0000 (18:50 +0100)]
[X86][SSE] combineX86ShufflesRecursively - bail if constant folding fails due to oneuse limits.
Fixes issue reported on D105827 where a single shuffle of a constant (with multiple uses) was caught in an infinite loop where one shuffle (UNPCKL) used an undef arg but then that got recombined to SHUFPS as the constant value had its own undef that confused matching.....
Lei Huang [Tue, 13 Jul 2021 19:32:36 +0000 (14:32 -0500)]
[PowerPC] Implement XL compact math builtins
Implement a subset of builtins required for compatiblilty with AIX XL compiler.
Reviewed By: nemanjai
Differential Revision: https://reviews.llvm.org/D105930
Joseph Huber [Fri, 16 Jul 2021 18:12:42 +0000 (14:12 -0400)]
[OpenMP][NFC] Update the comment header for optimizations.
Joseph Huber [Wed, 14 Jul 2021 21:04:54 +0000 (17:04 -0400)]
[OpenMP] Add remark documentation to the OpenMP webpage
This patch begins adding documentation for each remark emitted by
`openmp-opt`. This builds on the IDs introduced in D105939 so that users
can more easily identify each remark in the webpage.
Depends on D105939.
Reviewed By: jdoerfert
Differential Revision: https://reviews.llvm.org/D106018
Joseph Huber [Tue, 13 Jul 2021 19:31:44 +0000 (15:31 -0400)]
[OpenMP] Add IDs to OpenMP remarks
This patch adds unique idenfitiers to the existing OpenMP remarks. This makes
it easier to identify the corresponding documentation for each remark that will
be hosted in the OpenMP webpage.
Depends on D105898
Reviewed By: jdoerfert
Differential Revision: https://reviews.llvm.org/D105939
Joseph Huber [Tue, 13 Jul 2021 14:01:21 +0000 (10:01 -0400)]
[OpenMP] Rework OpenMP remarks
This patch rewrites and reworks a few of the existing remarks to make the mmore
concise and consistent prior to writing the documentation for them.
Reviewed By: jdoerfert
Differential Revision: https://reviews.llvm.org/D105898
Dmitry Vyukov [Fri, 16 Jul 2021 17:55:32 +0000 (19:55 +0200)]
sanitizer_common: link Synchronization.lib on Windows
Windows bot failed with:
sanitizer_win.cpp.obj : error LNK2019: unresolved external symbol WaitOnAddress referenced in function "void __cdecl __sanitizer::FutexWait(struct __sanitizer::atomic_uint32_t *,unsigned int)" (?FutexWait@__sanitizer@@YAXPEAUatomic_uint32_t@1@I@Z)
sanitizer_win.cpp.obj : error LNK2019: unresolved external symbol WakeByAddressSingle referenced in function "void __cdecl __sanitizer::FutexWake(struct __sanitizer::atomic_uint32_t *,unsigned int)" (?FutexWake@__sanitizer@@YAXPEAUatomic_uint32_t@1@I@Z)
sanitizer_win.cpp.obj : error LNK2019: unresolved external symbol WakeByAddressAll referenced in function "void __cdecl __sanitizer::FutexWake(struct __sanitizer::atomic_uint32_t *,unsigned int)" (?FutexWake@__sanitizer@@YAXPEAUatomic_uint32_t@1@I@Z)
https://lab.llvm.org/buildbot/#/builders/127/builds/14046
According to MSDN we need to link Synchronization.lib:
https://docs.microsoft.com/en-us/windows/win32/api/synchapi/nf-synchapi-waitonaddress
Differential Revision: https://reviews.llvm.org/D106167
Emily Shi [Fri, 25 Jun 2021 20:32:03 +0000 (13:32 -0700)]
[compiler-rt] change write order of frexpl & frexpf so it doesn't corrupt stack ids
This was fixed in the past for `frexp`, but was not made for `frexpl` & `frexpf` https://github.com/google/sanitizers/issues/321
This patch copies the fix over to `frexpl` because it caused `frexp_interceptor.cpp` test to fail on iPhone and `frexpf` for consistency.
rdar://
79652161
Reviewed By: delcypher, vitalybuka
Differential Revision: https://reviews.llvm.org/D104948
Philip Reames [Fri, 16 Jul 2021 17:57:51 +0000 (10:57 -0700)]
[tests] Precommit test for D104140
Aart Bik [Fri, 16 Jul 2021 16:02:58 +0000 (09:02 -0700)]
[mlir][sparse] minor cleanup of Merger
Removed inconsistent name prefixes, added consistency checks
on debug strings, added more assertions to verify assumptions
that may be lifted in the future.
Reviewed By: gussmith23
Differential Revision: https://reviews.llvm.org/D106108
Stefan Pintilie [Thu, 15 Jul 2021 14:23:23 +0000 (09:23 -0500)]
[Clang] Add an empty builtins.h file.
On Power PC some legacy compilers included a number of builtins in a
builtins.h header file. While this header file is not required to hold
builtins for clang some legacy code does try to include this file and so
this patch provides an empty version of that file.
Differential Revision: https://reviews.llvm.org/D106065
Craig Topper [Fri, 16 Jul 2021 17:20:38 +0000 (10:20 -0700)]
[RISCV] Rename the fixed vector vwmacc tests to have the 'm' in their filenames. NFC
Craig Topper [Fri, 16 Jul 2021 17:17:36 +0000 (10:17 -0700)]
[RISCV] Use tail agnostic policy for fixed vector vwmacc(u).
This adds new pseudoinstructions with ForceTailAgnostic set. This
matches what we did for non-widening VMACC. We should move to a
tail policy operand on the pseudos when we expand the intrinsic
interface to include the tail policy.
Craig Topper [Fri, 16 Jul 2021 17:01:05 +0000 (10:01 -0700)]
[RISCV] Refactor where in the multiclass hierarchy we add commutable VFMADD/VFMACC instructions. NFC
I'm preparing to add tail agnostic versions of VWMACC and VFWMACC
so this will make them more consistent.
Fangrui Song [Fri, 16 Jul 2021 17:40:30 +0000 (10:40 -0700)]
[docs] Update llvm-readelf supported options after D105532
Dmitry Vyukov [Thu, 15 Jul 2021 15:15:48 +0000 (17:15 +0200)]
sanitizer_common: add Semaphore
Semaphore is a portable way to park/unpark threads.
The plan is to use it to implement a portable blocking
mutex in subsequent changes. Semaphore can also be used
to efficiently wait for other things (e.g. we currently
spin to synchronize thread creation and start).
Reviewed By: vitalybuka, melver
Differential Revision: https://reviews.llvm.org/D106071
Philip Reames [Fri, 16 Jul 2021 17:24:41 +0000 (10:24 -0700)]
[test] Extend negative stride backedge tests to cover signed comparisons
Guozhi Wei [Fri, 16 Jul 2021 17:16:03 +0000 (10:16 -0700)]
[X86FixupLEAs] Try again to transform the sequence LEA/SUB to SUB/SUB
This patch transforms the sequence
lea (reg1, reg2), reg3
sub reg3, reg4
to two sub instructions
sub reg1, reg4
sub reg2, reg4
Similar optimization can also be applied to LEA/ADD sequence.
The modifications to TwoAddressInstructionPass is to ensure the operands of ADD
instruction has expected order (the dest register of LEA should be src register
of ADD).
Differential Revision: https://reviews.llvm.org/D104684
Philip Reames [Fri, 16 Jul 2021 17:08:20 +0000 (10:08 -0700)]
[SCEV] Add tests for known negative strides in trip count logic
Fangrui Song [Fri, 16 Jul 2021 17:02:47 +0000 (10:02 -0700)]
[ELF][test] Avoid llvm-readelf/llvm-readobj one-dash long options
Jon Roelofs [Fri, 16 Jul 2021 16:53:16 +0000 (09:53 -0700)]
Revert "[MachineVerifier] Diagnose invalid INSERT_SUBREGs"
This reverts commit
dd57ba1a17b93dbe211d04cb2d4de5f6dc898d60.
It broke some tests: http://45.33.8.238/linux/51314/step_12.txt
Simon Pilgrim [Fri, 16 Jul 2021 14:14:05 +0000 (15:14 +0100)]
[X86] Regenerate twoaddr-lea.ll test checks.
Simon Pilgrim [Fri, 16 Jul 2021 11:05:05 +0000 (12:05 +0100)]
[DAG] SelectionDAG::MaskedElementsAreZero - assert we're calling with a vector. NFCI.
Add an assertion that we've calling MaskedElementsAreZero with a vector op and that the DemandedElts arg is a matching width.
Makes the error a lot easier to grok when something else accidentally gets used.
Jon Roelofs [Wed, 14 Jul 2021 00:07:48 +0000 (17:07 -0700)]
[MachineVerifier] Diagnose invalid INSERT_SUBREGs
Differential revision: https://reviews.llvm.org/D105953
Craig Topper [Fri, 16 Jul 2021 16:23:17 +0000 (09:23 -0700)]
[RISCV] Teach constant materialization that it can use zext.w at the end with Zba to reduce number of instructions.
If the upper 32 bits are zero and bit 31 is set, we might be able to
use zext.w to fill in the zeros after using an lui and/or addi.
Most of this patch is plumbing the subtarget features into the constant
materialization.
Reviewed By: luismarques
Differential Revision: https://reviews.llvm.org/D105509
Craig Topper [Fri, 16 Jul 2021 01:06:59 +0000 (18:06 -0700)]
[RISCV] Add curly braces around a case body that declares variables. NFC
This is at the end of the switch so doesn't cause any issues now,
but if a new case is added it will break.
Nikita Popov [Wed, 14 Jul 2021 20:21:06 +0000 (22:21 +0200)]
[Verifier] Require same signature for intrinsic calls
As suggested on D105733, this adds a verifier rule that calls to
intrinsics must match the signature of the intrinsic.
Without opaque pointers this is automatically enforced for all
calls, because the pointer types need to match. If the signatures
don't match, a pointer bitcast has to be inserted. For intrinsics
in particular, such bitcasts are not legal, because the address of
intrinsics cannot be taken.
With opaque pointers, there are no more pointer bitcasts, so it's
generally possible for the call and the callee signature to differ.
However, for intrinsics we still want to enforce that the signatures
must match, the same as was done before through the address taken
check.
We can't enforce this more generally for non-intrinsics, because
calls with mismatched signatures at the very least can legally
occur in unreachable code, and might also be valid in some other
cases, depending on how exactly the signatures differ.
Differential Revision: https://reviews.llvm.org/D106013
madhur13490 [Fri, 16 Jul 2021 16:13:48 +0000 (21:43 +0530)]
[NFC] Fix typo intrinisic
Differential Revision: https://reviews.llvm.org/D106161
Christopher Di Bella [Thu, 15 Jul 2021 06:41:17 +0000 (06:41 +0000)]
[libcxx][modularisation] adds several headers to the module map
* <__algorithm/iter_swap.h>
* <__algorithm/swap_ranges.h>
* <__functional/is_transparent.h>
* <__memory/uses_allocator.h>
* <__ranges/drop_view.h>
* <__ranges/transform_view.h>
* <shared_mutex>
* <span>
Also updates header inclusions that were affected.
**NOTE:** This is a proper subset of D105932. Since the content has
already been LGTM'd, I intend to merge this patch without review,
pending green CI. I decided it would be better to move these changes
into their own commit since the former patch has undergone further
changes and will need yet another light review. In the event any of
that gets rolled back (for whatever reason), the changes in this patch
won't be affected.
Differential Revision: https://reviews.llvm.org/D106040
Andrzej Warzynski [Fri, 16 Jul 2021 16:06:06 +0000 (17:06 +0100)]
[flang][driver] Fix output filename generation in `flang`
In the `flang` bash script, we need to be careful _when_ to use <output>
from `flang -c -o <output> <input>` when generating the relocatable
output file name.
In particular, we should use it in this case:
```compilation only
flang -c -o <output> <input>
```
but leave it for the final executable here:
```compile, assemble and link
flang -o <output> <input>
```
This change is implemented in `get_relocatable_name`.
I've also taken the liberty to fix how errors from sub-commands are
reported (without this change, `flang` always returns `0` on failure).
This is implemented in `main`.
Differential Revision: https://reviews.llvm.org/D105896
Congzhe Cao [Fri, 16 Jul 2021 15:47:11 +0000 (11:47 -0400)]
[LoopInterchange] Check lcssa phis in the inner latch in scenarios of multi-level nested loops
We already know that we need to check whether lcssa
phis are supported in inner loop exit block or in
outer loop exit block, and we have logic to check
them already. Presumably the inner loop latch does
not have lcssa phis and there is no code that deals
with lcssa phis in the inner loop latch. However,
that assumption is not true, when we have loops
with more than two-level nesting. This patch adds
checks for lcssa phis in the inner latch.
Reviewed By: Whitney
Differential Revision: https://reviews.llvm.org/D102300
Louis Dionne [Fri, 16 Jul 2021 15:46:47 +0000 (11:46 -0400)]
[libc++] ci: Create ~/Library/LaunchAgents if it does not exist yet
Matt Arsenault [Fri, 11 Jun 2021 16:17:32 +0000 (12:17 -0400)]
Mips/GlobalISel: Use LLT form of getMachineMemOperand
NFC here since it's just using a scalar anyway.
Matt Arsenault [Fri, 16 Jul 2021 15:25:07 +0000 (11:25 -0400)]
GlobalISel: Preserve memory type for memset expansion
Matt Arsenault [Fri, 16 Jul 2021 13:19:23 +0000 (09:19 -0400)]
AArch64/GlobalISel: Update tests to use correct memory types
Louis Dionne [Fri, 16 Jul 2021 15:37:16 +0000 (11:37 -0400)]
[libc++] CI: Setup BuildKite agents through launchd
This makes sure that even if a node goes down, the BuildKite agent will
be started again when it goes back up.
Alexander Belyaev [Fri, 16 Jul 2021 15:14:34 +0000 (17:14 +0200)]
[mlir] Remove unused functions in LinalgOps.cpp
Geoffrey Martin-Noble [Fri, 16 Jul 2021 01:06:21 +0000 (18:06 -0700)]
[Bazel] Delete deprecated gentbl rule
This has been deprecated for a while. There are no users in tree and I'm
not aware of any out of tree users either.
Reviewed By: ftynse
Differential Revision: https://reviews.llvm.org/D106114
Masoud Ataei [Fri, 16 Jul 2021 14:45:09 +0000 (14:45 +0000)]
[PowerPC] Updated the error message of MASSV pass to mention vectorization
is needed be enable on P8 and later targets.
Differential Revision: https://reviews.llvm.org/D106091
Louis Dionne [Wed, 14 Jul 2021 19:54:13 +0000 (15:54 -0400)]
[runtimes] Simplify how we set the target triple
Instead of using TARGET_TRIPLE, which is always set to LLVM_DEFAULT_TARGET_TRIPLE,
use that variable directly to populate the various XXXX_TARGET_TRIPLE
variables in the runtimes.
This re-applies
77396bbc98 and
5099e01568, which were reverted in
850b57c5fbe because they broke the build.
Differential Revision: https://reviews.llvm.org/D106009
Amy Kwan [Wed, 14 Jul 2021 01:33:23 +0000 (20:33 -0500)]
[PowerPC] Update Refactored Load/Store Implementation, XForm VSX Patterns, and Tests
This patch includes the following updates to the load/store refactoring effort introduced in D93370:
- Update various VSX patterns that use to "force" an XForm, to instead just XForm.
This allows the ability for the patterns to compute the most optimal addressing
mode (and to produce a DForm instruction when possible)
- Update pattern and test case for the LXVD2X/STXVD2X intrinsics
- Update LIT test cases that use to use the XForm instruction to use the DForm instruction
Differential Revision: https://reviews.llvm.org/D95115
Fraser Cormack [Fri, 16 Jul 2021 13:58:39 +0000 (14:58 +0100)]
Revert "[RISCV] Lower more BUILD_VECTOR sequences to RVV's VID"
This reverts commit
a6ca88e908b5befcd9b0f8c8cb40f53095cc17bc.
More caution is required to avoid overflow/underflow. Thanks to the
santizers for catching this.
David Spickett [Wed, 31 Mar 2021 12:35:56 +0000 (13:35 +0100)]
[lldb][AArch64] Add tag packing and repetition memory tag manager
PackTags is used by to compress tags to go in the QMemTags packet
and be passed to ptrace when writing memory tags.
The behaviour of RepeatTagsForRange matches that described for QMemTags
in the GDB documentation:
https://sourceware.org/gdb/current/onlinedocs/gdb/General-Query-Packets.html#General-Query-Packets
In addition, unpacking tags with number of tags 0 now means
do not check that number of tags matches the range.
This will be used by lldb-server to unpack tags before repeating
them to fill the requested range.
Reviewed By: omjavaid
Differential Revision: https://reviews.llvm.org/D105179
Alex Zinenko [Fri, 16 Jul 2021 13:20:07 +0000 (15:20 +0200)]
[mlir] add missing build dependency
Alex Zinenko [Tue, 13 Jul 2021 08:55:35 +0000 (10:55 +0200)]
[mlir] replace llvm.mlir.cast with unrealized_conversion_cast
The dialect-specific cast between builtin (ex-standard) types and LLVM
dialect types was introduced long time before built-in support for
unrealized_conversion_cast. It has a similar purpose, but is restricted
to compatible builtin and LLVM dialect types, which may hamper
progressive lowering and composition with types from other dialects.
Replace llvm.mlir.cast with unrealized_conversion_cast, and drop the
operation that became unnecessary.
Also make unrealized_conversion_cast legal by default in
LLVMConversionTarget as the majority of convesions using it are partial
conversions that actually want the casts to persist in the IR. The
standard-to-llvm conversion, which is still expected to run last, cleans
up the remaining casts standard-to-llvm conversion, which is still
expected to run last, cleans up the remaining casts
Reviewed By: nicolasvasilache
Differential Revision: https://reviews.llvm.org/D105880
Matt Arsenault [Thu, 15 Jul 2021 18:44:03 +0000 (14:44 -0400)]
GlobalISel: Remove dead function
Matt Arsenault [Thu, 15 Jul 2021 18:24:00 +0000 (14:24 -0400)]
AMDGPU/GlobalISel: Preserve more memory types
Matt Arsenault [Thu, 15 Jul 2021 18:23:06 +0000 (14:23 -0400)]
AMDGPU/GlobalISel: Redo kernel argument load handling
This avoids relying on G_EXTRACT on unusual types, and also properly
decomposes structs into multiple registers. This also preserves the
LLTs in the memory operands.
Jeremy Morse [Fri, 16 Jul 2021 12:36:27 +0000 (13:36 +0100)]
[InstrRef][FastISel] Support emitting DBG_INSTR_REF from fast-isel
If you attach __attribute__((optnone)) to a function when using
optimisations, that function will use fast-isel instead of the usual
SelectionDAG method. This is a problem for instruction referencing,
because it means DBG_VALUEs of virtual registers will be created,
triggering some safety assertions in LiveDebugVariables. Those assertions
exist to detect exactly this scenario, where an unexpected piece of code is
generating virtual register references in instruction referencing mode.
Fix this by transforming the DBG_VALUEs created by fast-isel into
half-formed DBG_INSTR_REFs, after which they get patched up in
finalizeDebugInstrRefs. The test modified adds a fast-isel mode to the
instruction referencing isel test.
Differential Revision: https://reviews.llvm.org/D105694
Sanjay Patel [Fri, 16 Jul 2021 12:31:28 +0000 (08:31 -0400)]
[SLP] add tests for poison-safe bool logic reductions; NFC
More coverage for D105730
serge-sans-paille [Thu, 15 Jul 2021 19:55:22 +0000 (21:55 +0200)]
SubstTemplateTypeParmType can contain an 'auto' type in their replacement type
This fixes bug 36064
Differential Revision: https://reviews.llvm.org/D106093
Dmitry Preobrazhensky [Fri, 16 Jul 2021 11:42:30 +0000 (14:42 +0300)]
[AMDGPU][MC] Added missing isCall/isBranch flags
Added isCall for S_CALL_B64; added isBranch for S_SUBVECTOR_LOOP_*.
Differential Revision: https://reviews.llvm.org/D106072
Zarko Todorovski [Fri, 16 Jul 2021 11:49:36 +0000 (07:49 -0400)]
[PowerPC][AIX] Add warning when alignment is incompatible with XL
https://reviews.llvm.org/D105659 implements ByVal handling in llc but
some cases are not compatible with existing XL compiler on AIX. Adding
a clang warning for such cases.
Reviewed By: aaron.ballman
Differential Revision: https://reviews.llvm.org/D105660
Alexander Belyaev [Fri, 16 Jul 2021 11:31:02 +0000 (13:31 +0200)]
[mlir] Move linalg::Expand/CollapseShapeOp to memref dialect.
RFC: https://llvm.discourse.group/t/rfc-reshape-ops-restructuring/3310
Differential Revision: https://reviews.llvm.org/D106141
Serge Pavlov [Fri, 16 Jul 2021 11:19:31 +0000 (18:19 +0700)]
Use update_test_checks.py to auto-generate check lines
Alex Zinenko [Thu, 15 Jul 2021 16:16:07 +0000 (18:16 +0200)]
[mlir] add an interface to support custom types in LLVM dialect pointers
This may be necessary in partial multi-stage conversion when a container type
from dialect A containing types from dialect B goes through the conversion
where only dialect A is converted to the LLVM dialect. We will need to keep a
pointer-to-non-LLVM type in the IR until a further conversion can convert
dialect B types to LLVM types.
Reviewed By: wsmoses
Differential Revision: https://reviews.llvm.org/D106076
Nicholas Guy [Mon, 12 Jul 2021 09:36:35 +0000 (10:36 +0100)]
[AArch64] Update Cortex-A55 SchedModel to improve LDP scheduling
Specifying the latencies of specific LDP variants appears to improve
performance almost universally.
Differential Revision: https://reviews.llvm.org/D105882
Kerry McLaughlin [Fri, 16 Jul 2021 10:04:20 +0000 (11:04 +0100)]
[LV] Avoid scalable vectorization for loops containing alloca
This patch returns an Invalid cost from getInstructionCost() for alloca
instructions if the VF is scalable, as otherwise loops which contain
these instructions will crash when attempting to scalarize the alloca.
Reviewed By: sdesmalen
Differential Revision: https://reviews.llvm.org/D105824
Cullen Rhodes [Fri, 16 Jul 2021 09:14:08 +0000 (09:14 +0000)]
[AArch64][SME] Add load and store instructions
This patch adds support for following contiguous load and store
instructions:
* LD1B, LD1H, LD1W, LD1D, LD1Q
* ST1B, ST1H, ST1W, ST1D, ST1Q
A new register class and operand is added for the 32-bit vector select
register W12-W15. The differences in the following tests which have been
re-generated are caused by the introduction of this register class:
* llvm/test/CodeGen/AArch64/GlobalISel/irtranslator-inline-asm.ll
* llvm/test/CodeGen/AArch64/GlobalISel/regbank-inlineasm.mir
* llvm/test/CodeGen/AArch64/stp-opt-with-renaming-reserved-regs.mir
* llvm/test/CodeGen/AArch64/stp-opt-with-renaming.mir
D88663 attempts to resolve the issue with the store pair test
differences in the AArch64 load/store optimizer.
The GlobalISel differences are caused by changes in the enum values of
register classes, tests have been updated with the new values.
The reference can be found here:
https://developer.arm.com/documentation/ddi0602/2021-06
Reviewed By: CarolineConcatto
Differential Revision: https://reviews.llvm.org/D105572
David Spickett [Thu, 8 Jul 2021 12:17:43 +0000 (13:17 +0100)]
[lldb][AArch64] Refactor memory tag range handling
Previously GetMemoryTagManager checked many things in one:
* architecture supports memory tagging
* process supports memory tagging
* memory range isn't inverted
* memory range is all tagged
Since writing follow up patches for tag writing (in review
at the moment) it has become clear that this gets unwieldy
once we add the features needed for that.
It also implies that the memory tag manager is tied to the
range you used to request it with but it is not. It's a per
process object.
Instead:
* GetMemoryTagManager just checks architecture and process.
* Then the MemoryTagManager can later be asked to check a
memory range.
This is better because:
* We don't imply that range and manager are tied together.
* A slightly diferent range calculation for tag writing
doesn't add more code to Process.
* Range checking code can now be unit tested.
Reviewed By: omjavaid
Differential Revision: https://reviews.llvm.org/D105630
Sander de Smalen [Thu, 15 Jul 2021 14:32:31 +0000 (15:32 +0100)]
Reland "[LV] Print remark when loop cannot be vectorized due to invalid costs."
The original patch was:
https://reviews.llvm.org/D105806
There were some issues with undeterministic behaviour of the sorting
function, which led to scalable-call.ll passing and/or failing. This
patch fixes the issue by numbering all instructions in the array first,
and using that number as the order, which should provide a consistent
ordering.
This reverts commit
a607f64118240f70bf1b14ec121b65f49d63800d.
Fraser Cormack [Thu, 24 Jun 2021 15:32:46 +0000 (16:32 +0100)]
[RISCV] Lower more BUILD_VECTOR sequences to RVV's VID
This patch teaches the compiler to identify a wider variety of
`BUILD_VECTOR`s which form integer arithmetic sequences, and to lower
them to `vid.v` with modifications for non-unit steps and non-zero
addends.
The sequences handled by this optimization must either be monotonically
increasing or decreasing. Consecutive elements holding the same value
indicate a fractional step which, while simple mathematically,
becomes more complex to handle both in the realm of lossy integer
division and in the presence of `undef`s.
For example, a common "interleaving" shuffle index will be lowered by
LLVM to both `<0,u,1,u,2,...>` and `<u,0,u,1,u,...>` `BUILD_VECTOR`
nodes. Either of these would ideally be lowered to `vid.v` shifted right
by 1. Detection of this sequence in presence of general `undef` values
is more complicated, however: `<0,u,u,1,>` could match either
`<0,0,0,1,>` or `<0,0,1,1,>` depending on later values in the sequence.
Both are possible, so backtracking or multiple passes is inevitable.
Sticking to monotonic sequences keeps the logic simpler as it can be
done in one pass. Fractional steps will likely be a separate
optimization in a future patch.
Reviewed By: craig.topper
Differential Revision: https://reviews.llvm.org/D104921
Uday Bondhugula [Fri, 16 Jul 2021 09:29:16 +0000 (14:59 +0530)]
[MLIR][NFC] Improve doc comment and delete stale comment
Remove duplicate and stale doc comment on affineParallelize. NFC.
Timm Bäder [Fri, 16 Jul 2021 08:17:41 +0000 (10:17 +0200)]
[llvm][tools] Hide unrelated llvm-cfi-verify options
Differential Revision: https://reviews.llvm.org/D106055
Vince Bridgers [Wed, 14 Jul 2021 12:00:14 +0000 (07:00 -0500)]
[analyzer] Do not assume that all pointers have the same bitwidth as void*
This change addresses this assertion that occurs in a downstream
compiler with a custom target.
```APInt.h:1151: bool llvm::APInt::operator==(const llvm::APInt &) const: Assertion `BitWidth == RHS.BitWidth && "Comparison requires equal bit widths"'```
No covering test case is susbmitted with this change since this crash
cannot be reproduced using any upstream supported target. The test case
that exposes this issue is as simple as:
```lang=c++
void test(int * p) {
int * q = p-1;
if (q) {}
if (q) {} // crash
(void)q;
}
```
The custom target that exposes this problem supports two address spaces,
16-bit `char`s, and a `_Bool` type that maps to 16-bits. There are no upstream
supported targets with similar attributes.
The assertion appears to be happening as a result of evaluating the
`SymIntExpr` `(reg_$0<int * p>) != 0U` in `VisitSymIntExpr` located in
`SimpleSValBuilder.cpp`. The `LHS` is evaluated to `32b` and the `RHS` is
evaluated to `16b`. This eventually leads to the assertion in `APInt.h`.
While this change addresses the crash and passes LITs, two follow-ups
are required:
1) The remainder of `getZeroWithPtrWidth()` and `getIntWithPtrWidth()`
should be cleaned up following this model to prevent future
confusion.
2) We're not sure why references are found along with the modified
code path, that should not be the case. A more principled
fix may be found after some further comprehension of why this
is the case.
Acks: Thanks to @steakhal and @martong for the discussions leading to this
fix.
Reviewed By: NoQ
Differential Revision: https://reviews.llvm.org/D105974
Simon Giesecke [Wed, 14 Jul 2021 08:21:16 +0000 (08:21 +0000)]
Reformat files.
Differential Revision: https://reviews.llvm.org/D105982
Mehdi Amini [Thu, 15 Jul 2021 23:52:44 +0000 (23:52 +0000)]
Use ManagedStatic and lazy initialization of cl::opt in libSupport to make it free of global initializer
We can build it with -Werror=global-constructors now. This helps
in situation where libSupport is embedded as a shared library,
potential with dlopen/dlclose scenario, and when command-line
parsing or other facilities may not be involved. Avoiding the
implicit construction of these cl::opt can avoid double-registration
issues and other kind of behavior.
Reviewed By: lattner, jpienaar
Differential Revision: https://reviews.llvm.org/D105959
Mehdi Amini [Fri, 16 Jul 2021 07:34:41 +0000 (07:34 +0000)]
Revert "Use ManagedStatic and lazy initialization of cl::opt in libSupport to make it free of global initializer"
This reverts commit
af9321739b20becf170e6bb5060b8d780e1dc8dd.
Still some specific config broken in some way that requires more
investigation.
Timm Bäder [Fri, 16 Jul 2021 07:30:57 +0000 (09:30 +0200)]
Revert "[llvm][tools] Hide unrelated llvm-cfi-verify options"
This reverts commit
7c63726072005cc331bb21694c9022e6d18a3b93.
Timm Bäder [Thu, 15 Jul 2021 11:01:00 +0000 (13:01 +0200)]
[llvm][tools] Hide unrelated llvm-cfi-verify options
Differential Revision: https://reviews.llvm.org/D106055
Marcos Horro [Fri, 16 Jul 2021 07:10:50 +0000 (09:10 +0200)]
[llvm-mca][JSON] Store extra information about driver flags used for the simulation
Added information stored in PipelineOptions and the MCSubtargetInfo.
Bug: https://bugs.llvm.org/show_bug.cgi?id=51041
Reviewed By: andreadb
Differential Revision: https://reviews.llvm.org/D106077
Deep Majumder [Fri, 16 Jul 2021 07:04:30 +0000 (12:34 +0530)]
[analyzer] Handle << operator for std::unique_ptr
This patch handles the `<<` operator defined for `std::unique_ptr` in
the std namespace (ignores custom overloads of the operator).
Differential Revision: https://reviews.llvm.org/D105421
Mehdi Amini [Thu, 15 Jul 2021 23:52:44 +0000 (23:52 +0000)]
Use ManagedStatic and lazy initialization of cl::opt in libSupport to make it free of global initializer
We can build it with -Werror=global-constructors now. This helps
in situation where libSupport is embedded as a shared library,
potential with dlopen/dlclose scenario, and when command-line
parsing or other facilities may not be involved. Avoiding the
implicit construction of these cl::opt can avoid double-registration
issues and other kind of behavior.
Reviewed By: lattner, jpienaar
Differential Revision: https://reviews.llvm.org/D105959
Mehdi Amini [Fri, 16 Jul 2021 06:49:57 +0000 (06:49 +0000)]
Fix mismatch between the provisioning of asyncExecutors and the actual thread count currently in the context (NFC)
This fixes an assert in some deployment where the threadpool is
customized.
Jonas Devlieghere [Fri, 16 Jul 2021 06:16:43 +0000 (23:16 -0700)]
[debugserver] Un-conditionalize code guarded by macOS 10.10 checks
We've been requiring macOS 10.11 since 2018 so there's no point in
keeping code for 10.10 around.
Petr Hosek [Sun, 21 Feb 2021 06:11:33 +0000 (22:11 -0800)]
[profile] Decommit memory after counter relocation
After we relocate counters, we no longer need to keep the original copy
around so we can return the memory back to the operating system.
Differential Revision: https://reviews.llvm.org/D104839