Vladislav Vinogradov [Mon, 11 Oct 2021 14:02:03 +0000 (17:02 +0300)]
[mlir] Allow to use vformat utility with MLIR classes
Make `raw_ostream operator<<` follow const correctness semantic,
since it is a requirement of FormatVariadic implementation.
Reviewed By: rriddle
Differential Revision: https://reviews.llvm.org/D111547
jacquesguan [Tue, 12 Oct 2021 09:54:40 +0000 (09:54 +0000)]
[RISCV][Clang] Fix RISCV vector header comment.
Reviewed By: khchen
Differential Revision: https://reviews.llvm.org/D111597
Jan Svoboda [Tue, 12 Oct 2021 07:34:43 +0000 (09:34 +0200)]
[clang][lex] Remark on search path usage
For dependency scanning, it would be useful to collect header search paths (provided on command-line via `-I` and friends) that were actually used during preprocessing. This patch adds that feature to `HeaderSearch` along with a new remark that reports such paths as they get used.
Previous version of this patch tried to use the existing `LookupFileCache` to report used paths via `HitIdx`. That doesn't work for `ComputeUserEntryUsage` (which is intended to be called *after* preprocessing), because it indexes used search paths by the file name. This means the values get overwritten when the code contains `#include_next`.
Note that `HeaderSearch` doesn't use `HeaderSearchOptions::UserEntries` directly. Instead, `InitHeaderSearch` pre-processes them (adds platform-specific paths, removes duplicates, removes paths that don't exist) and creates `DirectoryLookup` instances. This means we need a mechanism for translating between those two. It's not possible to go from `DirectoryLookup` back to the original `HeaderSearch`, so `InitHeaderSearch` now tracks the relationships explicitly.
Depends on D111557.
Reviewed By: dexonsmith
Differential Revision: https://reviews.llvm.org/D102923
Louis Dionne [Mon, 23 Aug 2021 19:32:36 +0000 (15:32 -0400)]
[libc++] Add an option to disable wide character support in libc++
Some embedded platforms do not wish to support the C library functionality
for handling wchar_t because they have no use for it. It makes sense for
libc++ to work properly on those platforms, so this commit adds a carve-out
of functionality for wchar_t.
Unfortunately, unlike some other carve-outs (e.g. random device), this
patch touches several parts of the library. However, despite the wide
impact of this patch, I still think it is important to support this
configuration since it makes it much simpler to port libc++ to some
embedded platforms.
Differential Revision: https://reviews.llvm.org/D111265
Caitlyn Cano [Thu, 1 Jul 2021 20:41:51 +0000 (20:41 +0000)]
[mlir] Make ConversionTarget dynamic legality callbacks composable
* Change callback signature `bool(Operation *)` -> `Optional<bool>(Operation *)`
* addDynamicallyLegalOp add callback to the chain
* If callback returned empty `Optional` next callback in chain will be called
Differential Revision: https://reviews.llvm.org/D110487
Andrew Ng [Thu, 7 Oct 2021 16:57:57 +0000 (17:57 +0100)]
[ELF][test] Add testing for dynamic TLS relocations in .debug_info
Differential Revision: https://reviews.llvm.org/D111436
Sven van Haastregt [Tue, 12 Oct 2021 09:45:30 +0000 (10:45 +0100)]
[OpenCL] Add atomic_half type builtins
Add atomic_half types and builtins operating on the types from the
cl_ext_float_atomics extension.
Patch by Haonan Yang.
Differential Revision: https://reviews.llvm.org/D109740
Nimish Mishra [Tue, 12 Oct 2021 09:41:29 +0000 (15:11 +0530)]
[flang][OpenMP] Added test case for OpenMP 5.0 specification based semantic checks for parallel sections construct
Parallel sections directive borrows the semantic checks from both sections directive and parallel directive. Semantic checks for both are merged in main branch; this test case is added to make sure correct semantic checks upon merging the two.
Reviewed By: kiranchandramohan
Differential Revision: https://reviews.llvm.org/D111438
Vladislav Vinogradov [Mon, 11 Oct 2021 11:52:06 +0000 (14:52 +0300)]
[mlir] Fix AsmPrinter for types with sub elements
Call `printType(subElemType)` instead of `os << subElemType` for them.
It allows to handle type aliases inside complex types.
As a side effect, fixed `test.int` parsing.
Reviewed By: rriddle
Differential Revision: https://reviews.llvm.org/D111536
Vladislav Vinogradov [Mon, 20 Sep 2021 14:35:57 +0000 (17:35 +0300)]
[mlir] Clean up boolean flags usage in LIT tests
* Call `llvm_canonicalize_cmake_booleans` for all CMake options,
which are propagated to `lit.local.cfg` files.
* Use Python native boolean values instead of strings for such options.
This fixes the cases, when CMake variables have values other than `ON` (like `TRUE`).
This might happen due to IDE integration or due to CMake preset usage.
Reviewed By: ftynse
Differential Revision: https://reviews.llvm.org/D110073
Roger Ferrer Ibanez [Tue, 12 Oct 2021 08:27:01 +0000 (10:27 +0200)]
[SelectionDAG] Fix typo in VPLoadStoreSDNode
There is no code that uses this base class yet, hence the typo went
unnoticed when this class was added in D105871
Differential Revision: https://reviews.llvm.org/D110930
Diana Picus [Wed, 6 Oct 2021 10:56:10 +0000 (10:56 +0000)]
[flang] Add runtime interface for GET_ENVIRONMENT_VARIABLE
Split into 2 entry points, one for the length and one for the value.
Differential Revision: https://reviews.llvm.org/D111392
Qiu Chaofan [Tue, 12 Oct 2021 08:03:17 +0000 (16:03 +0800)]
Pre-commit pre-inc-disable.ll to avoid dead code
The case was added in 728e139, testing it outputs lxsibzx instead of
lbzux. Here we need some minimal update to avoid DCE in future patches.
Jan Svoboda [Tue, 12 Oct 2021 07:55:40 +0000 (09:55 +0200)]
[clang][modules] Default `SourceLocation` parameter in `HeaderSearch::lookupModule`
This fixes an LLDB build failure where the `ImportLoc` argument is missing: https://lab.llvm.org/buildbot#builders/68/builds/19975
This change also makes it possible to drop `SourceLocation()` in `Preprocessor::getCurrentModule`.
Victor Campos [Tue, 12 Oct 2021 07:41:07 +0000 (08:41 +0100)]
[docs] List support for Armv9-A, Armv9.1-A and Armv9.2-A in LLVM and Clang
Reviewed By: pratlucas
Differential Revision: https://reviews.llvm.org/D110241
Jan Svoboda [Tue, 12 Oct 2021 07:04:37 +0000 (09:04 +0200)]
[clang][modules] NFC: Propagate import `SourceLocation` into `HeaderSearch::lookupModule`
This patch propagates the import `SourceLocation` into `HeaderSearch::lookupModule`. This enables remarks on search path usage (implemented in D102923) to point to the source code that initiated header search.
Reviewed By: dexonsmith
Differential Revision: https://reviews.llvm.org/D111557
Valentin Clement [Tue, 12 Oct 2021 07:24:58 +0000 (09:24 +0200)]
[fir][NFC] Add two negative tests for needExternalNameMangling
Add two test for needExternalNameMangling.
- One varibale in a function
- One namelist in a module
This patch is part of the upstreaming effort from fir-dev branch.
Reviewed By: schweitz
Differential Revision: https://reviews.llvm.org/D111544
jacquesguan [Tue, 12 Oct 2021 06:46:46 +0000 (06:46 +0000)]
[RISCV] Rename assembler mnemonic of unordered floating-point reductions for v1.0-rc change
Rename vfredsum and vfwredsum to vfredusum and vfwredusum. Add aliases for vfredsum and vfwredsum.
Reviewed By: luismarques, HsiangKai, khchen, frasercrmck, kito-cheng, craig.topper
Differential Revision: https://reviews.llvm.org/D105690
Lang Hames [Tue, 12 Oct 2021 05:32:07 +0000 (22:32 -0700)]
[ORC] More attempts to work around compiler failures.
Commit
731f991cdc4 seems to have helped, but did not catch all instances (see
https://lab.llvm.org/buildbot/#/builders/193/builds/104). Switch more inner
structs to C++98 initializers to work around the issue. Add FIXMEs to revisit
in the future.
Lang Hames [Tue, 12 Oct 2021 05:19:46 +0000 (22:19 -0700)]
[ORC] Attempt to work around compile failure on some bots.
See e.g. https://lab.llvm.org/buildbot/#/builders/193/builds/98.
I think this failure is related to a C++ standard defect, 1397 --"Class
completeness in non-static data member initializers" [1]. If so, moving
to C++98 initialization should work around the issue.
[1] http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#1397
Yonghong Song [Mon, 11 Oct 2021 23:37:36 +0000 (16:37 -0700)]
[Clang][Attr] rename btf_tag to btf_decl_tag
Current btf_tag is applied to declaration only.
Per discussion in https://reviews.llvm.org/D111199,
we plan to introduce btf_type_tag attribute for types.
So rename btf_tag to btf_decl_tag to make it easily
differentiable from btf_type_tag.
Differential Revision: https://reviews.llvm.org/D111588
modimo [Tue, 12 Oct 2021 05:03:32 +0000 (22:03 -0700)]
[NFC][LangRef] Update description for FuncFlags
Add the additional flags from D36850 as well as noInline/alwaysInline from previous changes.
Reviewed By: tejohnson
Differential Revision: https://reviews.llvm.org/D111600
Lang Hames [Tue, 12 Oct 2021 04:59:22 +0000 (21:59 -0700)]
[ORC] Add more explicit narrowing casts.
This should fix the buildbot failure at
https://lab.llvm.org/buildbot/#/builders/187/builds/2140
LLVM GN Syncbot [Tue, 12 Oct 2021 04:51:58 +0000 (04:51 +0000)]
[gn build] Port
962a2479b57f
Lang Hames [Tue, 12 Oct 2021 04:50:46 +0000 (21:50 -0700)]
[ORC] Fix a typo in a variable name.
Lang Hames [Tue, 12 Oct 2021 03:55:30 +0000 (20:55 -0700)]
Re-apply
e50aea58d59, "Major JITLinkMemoryManager refactor". with fixes.
Adds explicit narrowing casts to JITLinkMemoryManager.cpp.
Honors -slab-address option in llvm-jitlink.cpp, which was accidentally
dropped in the refactor.
This effectively reverts commit
6641d29b70993bce6dbd7e0e0f1040753d38842f.
hsmahesha [Tue, 12 Oct 2021 04:34:06 +0000 (10:04 +0530)]
[CFE][Codegen] Remove CodeGenFunction::InitTempAlloca()
Sequel patch to https://reviews.llvm.org/D111316
Finally, remove the defintion of CodeGenFunction::InitTempAlloca().
Reviewed By: rjmccall
Differential Revision: https://reviews.llvm.org/D111324
Yonghong Song [Tue, 12 Oct 2021 00:11:22 +0000 (17:11 -0700)]
BPF: rename BTF_KIND_TAG to BTF_KIND_DECL_TAG
Per discussion in https://reviews.llvm.org/D111199,
the existing btf_tag attribute will be renamed to
btf_decl_tag. This patch updated BTF backend to
use btf_decl_tag attribute name and also
renamed BTF_KIND_TAG to BTF_KIND_DECL_TAG.
Differential Revision: https://reviews.llvm.org/D111592
hsmahesha [Tue, 12 Oct 2021 04:31:31 +0000 (10:01 +0530)]
[CFE][Codegen][In-progress] Remove CodeGenFunction::InitTempAlloca()
Sequel patch to https://reviews.llvm.org/D111293.
Remove call to CodeGenFunction::InitTempAlloca() from OpenMP related
codegen part.
Also remove the metadata `!llvm.access.group` from the updated lit
tests.
Reviewed By: rjmccall
Differential Revision: https://reviews.llvm.org/D111316
hsmahesha [Tue, 12 Oct 2021 04:28:34 +0000 (09:58 +0530)]
[AMDGPU] Remove dead frame indices after sgpr spill.
All those frame indices which are dead after sgpr spill should be removed from
the function frame. Othewise, there is a side effect such as re-mapping of free
frame index ids by the later pass(es) like "stack slot coloring" which in turn
could mess-up with the book keeping of "frame index to VGPR lane".
Reviewed By: cdevadas
Differential Revision: https://reviews.llvm.org/D111150
Yonghong Song [Mon, 11 Oct 2021 23:51:42 +0000 (16:51 -0700)]
[NFC][Attr] rename attribute btf_tag to btf_decl_tag
Per discussion in https://reviews.llvm.org/D111199,
the existing btf_tag attribute will be renamed to
btf_decl_tag. This patch mostly updated the Bitcode and
DebugInfo test cases with new attribute name.
Differential Revision: https://reviews.llvm.org/D111591
Lang Hames [Tue, 12 Oct 2021 03:53:15 +0000 (20:53 -0700)]
[llvm-jitlink] Fix a broken warning.
This warning should only be issued if -slab-page-size has not been used.
Freddy Ye [Tue, 12 Oct 2021 01:57:26 +0000 (09:57 +0800)]
[X86][ISel] Lowering llvm.thread.pointer
Reviewed By: pengfei
Differential Revision: https://reviews.llvm.org/D110681
Hsiangkai Wang [Wed, 29 Sep 2021 07:34:57 +0000 (15:34 +0800)]
[RISCV] Define _m intrinsics as builtins, instead of macros.
In the original design, we levarage _mt intrinsics to define macros for
_m intrinsics. Such as,
```
__builtin_rvv_vadd_vv_i8m1_mt((vbool8_t)(op0), (vint8m1_t)(op1), (vint8m1_t)(op2), (vint8m1_t)(op3), (size_t)(op4), (size_t)VE_TAIL_AGNOSTIC)
```
However, we could not define generic interface for mask intrinsics any
more due to clang_builtin_alias only accepts clang builtins as its
argument.
In the example,
```
__rvv_overloaded
__attribute__((clang_builtin_alias(__builtin_rvv_vadd_vv_i8m1_mt)))
vint8m1_t vadd(vbool8_t op0, vint8m1_t op1, vint8m1_t op2, vint8m1_t
op3, size_t op4, size_t op5);
```
op5 is the tail policy argument. When users want to use vadd generic
interface for masked vector add, they need to specify tail policy in the
previous design. In this patch, we define _m intrinsics as clang
builtins to solve the problem.
Differential Revision: https://reviews.llvm.org/D110684
Lang Hames [Tue, 12 Oct 2021 02:23:41 +0000 (19:23 -0700)]
Revert "[JITLink][ORC] Major JITLinkMemoryManager refactor."
This reverts commit
e50aea58d59c8cfae807a7fee21c4227472c0678 while I
investigate bot failures.
Lang Hames [Mon, 11 Oct 2021 00:39:24 +0000 (17:39 -0700)]
[JITLink][ORC] Major JITLinkMemoryManager refactor.
This commit substantially refactors the JITLinkMemoryManager API to: (1) add
asynchronous versions of key operations, (2) give memory manager implementations
full control over link graph address layout, (3) enable more efficient tracking
of allocated memory, and (4) support "allocation actions" and finalize-lifetime
memory.
Together these changes provide a more usable API, and enable more powerful and
efficient memory manager implementations.
To support these changes the JITLinkMemoryManager::Allocation inner class has
been split into two new classes: InFlightAllocation, and FinalizedAllocation.
The allocate method returns an InFlightAllocation that tracks memory (both
working and executor memory) prior to finalization. The finalize method returns
a FinalizedAllocation object, and the InFlightAllocation is discarded. Breaking
Allocation into InFlightAllocation and FinalizedAllocation allows
InFlightAllocation subclassses to be written more naturally, and FinalizedAlloc
to be implemented and used efficiently (see (3) below).
In addition to the memory manager changes this commit also introduces a new
MemProt type to represent memory protections (MemProt replaces use of
sys::Memory::ProtectionFlags in JITLink), and a new MemDeallocPolicy type that
can be used to indicate when a section should be deallocated (see (4) below).
Plugin/pass writers who were using sys::Memory::ProtectionFlags will have to
switch to MemProt -- this should be straightworward. Clients with out-of-tree
memory managers will need to update their implementations. Clients using
in-tree memory managers should mostly be able to ignore it.
Major features:
(1) More asynchrony:
The allocate and deallocate methods are now asynchronous by default, with
synchronous convenience wrappers supplied. The asynchronous versions allow
clients (including JITLink) to request and deallocate memory without blocking.
(2) Improved control over graph address layout:
Instead of a SegmentRequestMap, JITLinkMemoryManager::allocate now takes a
reference to the LinkGraph to be allocated. The memory manager is responsible
for calculating the memory requirements for the graph, and laying out the graph
(setting working and executor memory addresses) within the allocated memory.
This gives memory managers full control over JIT'd memory layout. For clients
that don't need or want this degree of control the new "BasicLayout" utility can
be used to get a segment-based view of the graph, similar to the one provided by
SegmentRequestMap. Once segment addresses are assigned the BasicLayout::apply
method can be used to automatically lay out the graph.
(3) Efficient tracking of allocated memory.
The FinalizedAlloc type is a wrapper for an ExecutorAddr and requires only
64-bits to store in the controller. The meaning of the address held by the
FinalizedAlloc is left up to the memory manager implementation, but the
FinalizedAlloc type enforces a requirement that deallocate be called on any
non-default values prior to destruction. The deallocate method takes a
vector<FinalizedAlloc>, allowing for bulk deallocation of many allocations in a
single call.
Memory manager implementations will typically store the address of some
allocation metadata in the executor in the FinalizedAlloc, as holding this
metadata in the executor is often cheaper and may allow for clean deallocation
even in failure cases where the connection with the controller is lost.
(4) Support for "allocation actions" and finalize-lifetime memory.
Allocation actions are pairs (finalize_act, deallocate_act) of JITTargetAddress
triples (fn, arg_buffer_addr, arg_buffer_size), that can be attached to a
finalize request. At finalization time, after memory protections have been
applied, each of the "finalize_act" elements will be called in order (skipping
any elements whose fn value is zero) as
((char*(*)(const char *, size_t))fn)((const char *)arg_buffer_addr,
(size_t)arg_buffer_size);
At deallocation time the deallocate elements will be run in reverse order (again
skipping any elements where fn is zero).
The returned char * should be null to indicate success, or a non-null
heap-allocated string error message to indicate failure.
These actions allow finalization and deallocation to be extended to include
operations like registering and deregistering eh-frames, TLS sections,
initializer and deinitializers, and language metadata sections. Previously these
operations required separate callWrapper invocations. Compared to callWrapper
invocations, actions require no extra IPC/RPC, reducing costs and eliminating
a potential source of errors.
Finalize lifetime memory can be used to support finalize actions: Sections with
finalize lifetime should be destroyed by memory managers immediately after
finalization actions have been run. Finalize memory can be used to support
finalize actions (e.g. with extra-metadata, or synthesized finalize actions)
without incurring permanent memory overhead.
Ahmed Bougacha [Tue, 12 Oct 2021 01:31:01 +0000 (18:31 -0700)]
[Driver] Re-enable aarch64-cpus.c test for arm64-apple.
"darwin" is ambiguous. When there isn't a better source
of truth (e.g., SDKs), the driver will either interpret it
as "iOS" when cross-compiling to a different architecture,
or "the host" when not. That's now the case on AS Macs.
Update the test to more explicitly test the OS.
aarch64-mac-cpus.c already tests the mac-specific driver logic.
Haowei Wu [Tue, 12 Oct 2021 00:44:09 +0000 (17:44 -0700)]
Reland "[clang][Fuchsia] Support availability attr on Fuchsia"
This reland commit
1131b1eb3509b47d30a36ea9b42367ab1d7373a2, which
adds support to __attribute__((availability)) annotation for Fuchsia
platform. This patch also adds '-ffuchsia-api-level' to allow specify
Fuchsia API level from the command line.
Differential Revision: https://reviews.llvm.org/D108592
Joe Loser [Tue, 12 Oct 2021 01:40:14 +0000 (21:40 -0400)]
[libc++][docs] Mark LWG3447 as complete
Mark LWG3447 as complete since it was not an issue since the original
implementation of `take_view` from
0f4b41e038537ab2ab6fa2aa048e55c28a03ab68. Currently, `take_view`'s
deduction guide does not constrain the range on the `range` concept.
Reviewed By: ldionne, Mordante, #libc
Differential Revision: https://reviews.llvm.org/D111501
Haowei Wu [Tue, 12 Oct 2021 00:32:38 +0000 (17:32 -0700)]
Revert "[clang][Fuchsia] Support availability attr on Fuchsia"
This reverts commit
1131b1eb3509b47d30a36ea9b42367ab1d7373a2, which
breaks several llvm bots.
Chris Lattner [Tue, 12 Oct 2021 00:26:30 +0000 (17:26 -0700)]
LLVM_ATTRIBUTE_NODEBUG: GCC 4.0 apparently had ((nodebug)) but removed it.
This should fix a bunch of warnings on the flang-aarch64-latest-gcc builder.
Richard Smith [Mon, 11 Oct 2021 23:16:32 +0000 (16:16 -0700)]
PR52139: Properly handle more kinds of declaration when checking for
usage of an abstract class type within itself.
We were missing handling for deduction guides (which would assert),
friend declarations, and variable templates. We were mishandling inline
variables and other variables defined inside the class definition.
These diagnostics should be downgraded to warnings, or perhaps removed
entirely, once we implement P0929R2.
Arthur Eubanks [Mon, 11 Oct 2021 23:36:35 +0000 (16:36 -0700)]
Revert "Remove checks for old gcc versions for LLVM_ATTRIBUTE_*"
This reverts commit
f5b524530ab4d9e13279ac23e67f3bac8edb4e76.
Breaks bots, e.g. https://lab.llvm.org/buildbot/#/builders/169/builds/3147
Arthur Eubanks [Mon, 11 Oct 2021 21:45:34 +0000 (14:45 -0700)]
Remove checks for old gcc versions for LLVM_ATTRIBUTE_*
According to [1] we only support gcc 5.1+. So these checks for older gcc versions are not supported.
[1] https://llvm.org/docs/GettingStarted.html#host-c-toolchain-both-compiler-and-standard-library
Reviewed By: MaskRay
Differential Revision: https://reviews.llvm.org/D111581
Ben Shi [Mon, 11 Oct 2021 13:48:25 +0000 (13:48 +0000)]
[RISCV][test] Add more tests of immediate materialisation
Reviewed By: craig.topper
Differential Revision: https://reviews.llvm.org/D111483
Amara Emerson [Mon, 11 Oct 2021 21:19:41 +0000 (14:19 -0700)]
[AArch64][GlobalISel] Fix combiner assertion in matchConstantOp().
We shouldn't call APInt::getSExtValue() on a >64b value.
Yonghong Song [Mon, 11 Oct 2021 22:34:26 +0000 (15:34 -0700)]
Revert "[Clang] Ignore BTFTag attr if used as a type attribute"
This reverts commit
b875343873a584965daf507d73ff1fe71eab1953.
Per discussion in https://reviews.llvm.org/D111199, instead to make
existing btf_tag attribute as a type-or-decl attribute, we will
make existing btf_tag attribute as a decl only attribute, and
introduce btf_type_tag as a type only attribute. This will make
it easy for cases like typedef where an attribute may be applied
as either a type attribute or a decl attribute.
Haowei Wu [Mon, 27 Sep 2021 20:47:08 +0000 (13:47 -0700)]
[clang][Fuchsia] Support availability attr on Fuchsia
This patch adds support to __attribute__((availability)) annotation for
Fuchsia platform. This patch also adds '-ffuchsia-api-level' to allow
specify Fuchsia API level from the command line.
Differential Revision: https://reviews.llvm.org/D108592
Guozhi Wei [Mon, 11 Oct 2021 22:28:31 +0000 (15:28 -0700)]
[TwoAddressInstructionPass] Improve the SrcRegMap and DstRegMap computation
This patch contains following enhancements to SrcRegMap and DstRegMap:
1 In findOnlyInterestingUse not only check if the Reg is two address usage,
but also check after commutation can it be two address usage.
2 If a physical register is clobbered, remove SrcRegMap entries that are
mapped to it.
3 In processTiedPairs, when create a new COPY instruction, add a SrcRegMap
entry only when the COPY instruction is coalescable. (The COPY src is
killed)
With these enhancements isProfitableToCommute can do better commute decision,
and finally more register copies are removed.
Differential Revision: https://reviews.llvm.org/D108731
Jacques Pienaar [Mon, 11 Oct 2021 21:56:28 +0000 (14:56 -0700)]
[mlir] Restrict to requiring traits when using InferTensorType trait.
Avoids running into segfaults accidentally.
Differential Revision: https://reviews.llvm.org/D110297
Amara Emerson [Mon, 11 Oct 2021 21:40:02 +0000 (14:40 -0700)]
[GlobalISel] Regenerate some MIR tests with CHECK-NEXT for another patch.
Jinsong Ji [Mon, 11 Oct 2021 21:33:50 +0000 (21:33 +0000)]
[AIX] Unsupported newly added AMDGPU clang test
Alina Sbirlea [Mon, 11 Oct 2021 20:45:57 +0000 (13:45 -0700)]
[LoopSimplifyCFG] Do not require MSSA. Continue to preserve if available.
LoopSimplifyCFG does not need MSSA, but should preserve it if it's available.
This is a legacy PM change, aimed to denoise the test changes in D109958.
Differential Revision: https://reviews.llvm.org/D111578
Lang Hames [Mon, 11 Oct 2021 20:42:39 +0000 (13:42 -0700)]
[ORC] Propagate errors to handlers when sendMessage fails.
In SimpleRemoteEPC, calls to from callWrapperAsync to sendMessage may fail.
The handlers may or may not be sent failure messages by handleDisconnect,
depending on when that method is run. This patch adds a check for an un-failed
handler, and if it finds one sends it a failure message.
Lang Hames [Mon, 11 Oct 2021 20:42:21 +0000 (13:42 -0700)]
[ORC] Destroy FinalizeErr if there is a serialization error.
If there is a serialization error then FinalizeErr should never be set, so we
can use cantFail rather than consumeError here.
Lang Hames [Mon, 11 Oct 2021 19:34:08 +0000 (12:34 -0700)]
[ORC] Propagate out-of-band errors in callAsync.
Returned out-of-band errors should be wrapped as llvm::Errors and passed to the
SendDeserializedResult function. Failure to do this results in an assertion when
we try to deserialize from the WrapperFunctionResult while it's in the
out-of-band error state.
Nikita Popov [Sat, 9 Oct 2021 14:51:52 +0000 (16:51 +0200)]
[IVUsers] Check for preheader instead of loop simplify form
IVUsers currently makes sure that all loops dominating a user are
in loop simplify form, because SCEVExpander needs a preheader to
insert into. However, loop simplify form requires much more than
that. In particular, it requires dedicated exits, which means that
exits need to be found and walked. For large functions with many
nested loops, this can result in pathological compile-time explosion.
Fix this by only checking the property we're actually interested in,
which is incidentally cheap to check.
Differential Revision: https://reviews.llvm.org/D111493
David Green [Mon, 11 Oct 2021 20:51:45 +0000 (21:51 +0100)]
[ARM] Be more explicit about disabling CombineBaseUpdate for MVE.
This shouldn't be called for non-neon targets at the moment in either
case, but it is good to be expliit about the CombineBaseUpdate being a
NEON function, not expecting to be run under MVE.
Roman Lebedev [Mon, 11 Oct 2021 20:27:12 +0000 (23:27 +0300)]
[KnownBits] Introduce `countMaxActiveBits()` and use it in a few places
Arthur Eubanks [Wed, 6 Oct 2021 21:32:08 +0000 (14:32 -0700)]
[LCG] Don't skip invalidation of LazyCallGraph if CFG analyses are preserved
The CFG being changed and the overall call graph are not related, we can introduce/remove calls without changing the CFG.
Resolves one of the issues in PR51946.
Reviewed By: asbirlea
Differential Revision: https://reviews.llvm.org/D111275
Sanjay Patel [Mon, 11 Oct 2021 19:21:51 +0000 (15:21 -0400)]
[InstCombine] fold signbit check of X | (X -1)
There may be some other patterns like this or a generalization,
but this is an example that I noticed would definitely regress
with a planned follow-up to D111410.
https://alive2.llvm.org/ce/z/GVpQDb
Sanjay Patel [Mon, 11 Oct 2021 18:42:12 +0000 (14:42 -0400)]
[InstCombine] add signbit check for or'd operands; NFC
Arthur Eubanks [Wed, 6 Oct 2021 21:43:59 +0000 (14:43 -0700)]
[SCCP] Properly report changes when changing a pointer argument
Fixes one of the issues in PR51946.
Reviewed By: asbirlea
Differential Revision: https://reviews.llvm.org/D111277
Chris Lattner [Mon, 11 Oct 2021 04:21:27 +0000 (21:21 -0700)]
[TypeSwitch/Compiler.h] Provide a LLVM_NODEBUG macro and use it in TypeSwitch.h
TypeSwitch.h is used pervasively in MLIR and often has dozens of types switched
over. It uses "zero cost" variadic templates to implement the dispatching
mechanism... which isn't zero cost in debug builds, and which causes a massive
problem for actually debugging things that use it - you get dozens of nonsense
frames in the debugger for simple things like a visitor.
Fix this by marking the key method in TypeSwitch as nodebug + alwaysinline.
This resolves LLVM PR49301
Differential Revision: https://reviews.llvm.org/D111520
Daniel Resnick [Thu, 7 Oct 2021 00:50:38 +0000 (18:50 -0600)]
[mlir][ODS] Support result type inference in custom assembly format
Operations that have the InferTypeOpInterface trait can now omit the return
types in their custom assembly formats.
Differential Revision: https://reviews.llvm.org/D111326
James King [Mon, 11 Oct 2021 19:56:10 +0000 (19:56 +0000)]
Add release note about `TypeLoc` matchers.
Reviewed By: ymandel, aaron.ballman
Differential Revision: https://reviews.llvm.org/D111518
Chris Bieneman [Mon, 11 Oct 2021 17:31:02 +0000 (12:31 -0500)]
AddGlobalAnnotations for function with or without function body.
When AnnotateAttr is on a function, AddGlobalAnnotations is only called
in CodeGenModule::EmitGlobalFunctionDefinition which means AnnotateAttr
on function declaration without function body will be ignored.
The patch will move AddGlobalAnnotations to
CodeGenModule::SetFunctionAttributes, so with or without function body,
the AnnotateAttr will get code gen for a function.
It'll help case when AnnotateAttr is on external function, and the
AnnotateAttr will be consumed in IR level.
For example, a pass to collect num of uses for functions with
__attribute((annotate("count_use"))) after optimizations,
As long as there's __attribute((annotate("count_use"))), function with
or without function body should be counted.
Reviewed By: aaron.ballman
Differential Revision: https://reviews.llvm.org/D111109
Patch by: python3kgae (Xiang Li)
Jay Foad [Mon, 11 Oct 2021 15:02:40 +0000 (16:02 +0100)]
[PHIElimination] Fix accounting for undef uses when updating LiveVariables
PHI elimination updates LiveVariables info as described here:
// We only need to update the LiveVariables kill of SrcReg if this was the
// last PHI use of SrcReg to be lowered on this CFG edge and it is not live
// out of the predecessor. We can also ignore undef sources.
Unfortunately if the last use also happened to be an undef use then it
would fail to update the LiveVariables at all. Fix this by not counting
undef uses in the VRegPHIUse map.
Thanks to Mikael Holmén for the test case!
Differential Revision: https://reviews.llvm.org/D111552
Jay Foad [Mon, 11 Oct 2021 14:11:36 +0000 (15:11 +0100)]
[AMDGPU] Fix copying a machine operand
Without this I get:
*** Bad machine code: Instruction has operand with wrong parent set ***
- function: available_externally_test
- basic block: %bb.0 (0x7dad598)
- instruction: %0:r600_treg32_x = MOV 1, 0, 0, 0, $alu_literal_x, 0, 0, 0, -1, 1, $pred_sel_off, @available_externally, 0
Differential Revision: https://reviews.llvm.org/D111549
Roman Lebedev [Mon, 11 Oct 2021 19:13:18 +0000 (22:13 +0300)]
[NFC][X86][Codegen] Add semi-negative PAVG chain test (PR52131)
Florian Hahn [Mon, 11 Oct 2021 18:36:23 +0000 (19:36 +0100)]
[VPlan] Print live-in backedge taken count as part of plan.
At the moment, a VPValue is created for the backedge-taken count, which
is used by some recipes. To make it easier to identify the operands of
recipes using the backedge-taken count, print it at the beginning of the
VPlan if it is used.
Reviewed By: a.elovikov
Differential Revision: https://reviews.llvm.org/D111298
Stefan Gränitz [Mon, 11 Oct 2021 18:37:47 +0000 (20:37 +0200)]
[Orc] Handle hangup messages in SimpleRemoteEPC
On the controller-side, handle `Hangup` messages from the executor. The executor passed `Error::success()` or a failure message as payload.
Hangups cause an immediate disconnect of the transport layer. The disconnect function may be called later again and so implementations should be prepared. `FDSimpleRemoteEPCTransport::disconnect()` already has a flag to check that:
https://github.com/llvm/llvm-project/blob/
cd1bd95d8707371da0e4f75cd01669c427466931/llvm/lib/ExecutionEngine/Orc/Shared/SimpleRemoteEPCUtils.cpp#L112
Reviewed By: lhames
Differential Revision: https://reviews.llvm.org/D111527
Michał Górny [Sun, 26 Sep 2021 20:02:54 +0000 (22:02 +0200)]
[lldb] Remove "0x" prefix from hex values in dirty-pages
Remove the redudant "0x" prefix in the "dirty-pages" key of
qMemoryRegionInfo packet. The client accepts hex values both with
and without the prefix.
Differential Revision: https://reviews.llvm.org/D110510
Aart Bik [Fri, 8 Oct 2021 23:13:29 +0000 (16:13 -0700)]
[mlir][sparse] accept affine subscripts in outer dimensions of dense memrefs
This relaxes vectorization of dense memrefs a bit so that affine expressions
are allowed in more outer dimensions. Vectorization of non unit stride
references is disabled though, since this seems ineffective anyway.
Reviewed By: bixia
Differential Revision: https://reviews.llvm.org/D111469
Geoffrey Martin-Noble [Mon, 11 Oct 2021 18:22:27 +0000 (11:22 -0700)]
[Bazel] Update config for
070315d04c6b
This updates the Bazel configuration for
https://github.com/llvm/llvm-project/commit/
070315d04c6b which moved
`LLVM_SUPPORT_XCODE_SIGNPOSTS` from llvm-config.h.cmake to
config.h.cmake.
Also adds a comment for `HAVE_PROC_PID_RUSAGE`, that I spotted was
missing.
Differential Revision: https://reviews.llvm.org/D111569
Roman Lebedev [Mon, 11 Oct 2021 18:42:12 +0000 (21:42 +0300)]
[NFC][X86][Codegen] Add basic PAVG chain test (PR52131)
Joe Loser [Mon, 11 Oct 2021 18:34:37 +0000 (14:34 -0400)]
[libc++] P2401: conditional noexcept for std::exchange
Implement P2401 which adds a `noexcept` specification to
`std::exchange`. Treated as a defect fix which is the motivation for
applying this change to all standards mode rather than just C++23 or
later as the paper suggests.
Reviewed By: Quuxplusone, Mordante, #libc
Differential Revision: https://reviews.llvm.org/D111481
Nico Weber [Mon, 11 Oct 2021 18:30:22 +0000 (14:30 -0400)]
[gn build] (manually) port
070315d04c6b
Joe Loser [Mon, 11 Oct 2021 18:28:00 +0000 (14:28 -0400)]
[libc++] Verify span and string_view are trivially copyable
Implement P2251 which requires `span` and `basic_string_view` to be
trivially copyable. They already are - this just adds tests to bind that
behavior.
Reviewed By: ldionne, Quuxplusone, Mordante, #libc
Differential Revision: https://reviews.llvm.org/D111197
Nico Weber [Mon, 11 Oct 2021 18:24:58 +0000 (14:24 -0400)]
[clang] Remove an else-after-return
Nico Weber [Mon, 11 Oct 2021 18:24:32 +0000 (14:24 -0400)]
[clang] Convert a few loops to for-each
Nico Weber [Mon, 11 Oct 2021 18:23:51 +0000 (14:23 -0400)]
[clang/CFG] Rewrap a line to 80 columns
Jonas Devlieghere [Mon, 11 Oct 2021 16:59:21 +0000 (09:59 -0700)]
Revert "Allow signposts to take advantage of deferred string substitution"
This reverts commits
f9aba9a5afe09788eceb9879aa5c3ad345e0f1e9 and
035217ff515b8ecdc871e39fa840f3cba1b9cec7.
As explained in the original commit message, this didn't have the
intended effect of improving the common LLDB use case, but still
provided a marginal improvement for the places where LLDB creates a
scoped time with a string literal.
The reason for the revert is that this change pulls in the os/signpost.h
header in Signposts.h. The former transitively includes loader.h, which
contains a series of macro defines that conflict with MachO.h. There are
ways to work around that, but Adrian and I concluded that none of them
are worth the trade-off in complicating Signposts.h even further.
Kazu Hirata [Mon, 11 Oct 2021 18:06:44 +0000 (11:06 -0700)]
[Sema] Use llvm::is_contained (NFC)
peter klausler [Mon, 4 Oct 2021 19:40:35 +0000 (12:40 -0700)]
[flang][NFC] Document behavior for nonspecified/ambiguous cases
Add explicit documentation for a couple of cases where the Fortran
standard has been observed to be ambiguous or nonspecific and we've
had to choose the behavior of the implementation from some possible
alternatives (and may be distinct from other implementations).
Differential Revision: https://reviews.llvm.org/D111446
Kostya Kortchinsky [Fri, 8 Oct 2021 21:12:34 +0000 (14:12 -0700)]
[scudo] Skip AllocAfterFork test on machines with low max_map_count
Reducing the number of iterations in that test with D111342 helped,
but the failure still occured flakily when the test is ran as part
of a large test suite.
Reducing further the number of iterations might not be good enough,
so we will skip the test if the `max_map_count` variable can be
read, and if lower than a given threshold.
Differential Revision: https://reviews.llvm.org/D111465
Joe Nash [Mon, 4 Oct 2021 14:56:30 +0000 (10:56 -0400)]
[AMDGPU] Support shared literals in FMAMK/FMAAK
These instructions should allow src0 to be a literal with the same
value as the mandatory other literal. Enable it by introducing an
operand that defers adding its value to the MI when decoding till
the mandatory literal is parsed.
Reviewed By: dp, foad
Differential Revision: https://reviews.llvm.org/D111067
Change-Id: I22b0ae0d35bad17b6f976808e48bffe9a6af70b7
Arthur Eubanks [Mon, 11 Oct 2021 17:19:43 +0000 (10:19 -0700)]
[docs] Mention in release notes that we now support 2^32 alignment
Missed in D110451.
Reviewed By: hans
Differential Revision: https://reviews.llvm.org/D111472
Arthur Eubanks [Mon, 11 Oct 2021 17:16:30 +0000 (10:16 -0700)]
[llc] Support -time-trace in llc
Mostly copied from opt.cpp.
Reviewed By: hans
Differential Revision: https://reviews.llvm.org/D111466
Philip Reames [Mon, 11 Oct 2021 16:32:25 +0000 (09:32 -0700)]
[SCEV] Extend trip count to avoid overflow by default
As a brief reminder, an "exit count" is the number of times the backedge executes before some event. It can be zero if we exit before the backedge is reached. A "trip count" is the number of times the loop header is entered if we branch into the loop. In general, TC = BTC + 1 and thus a zero trip count is ill defined
There is a cornercases which we don't handle well. Let's assume i8 for our examples to keep things simple. If BTC = 255, then the correct trip count is 256. However, 256 is not representable in i8.
In theory, code which needs to reason about trip counts is responsible for checking for this cornercase, and either bailing out, or handling it correctly. Historically, we don't have a great track record about actually doing so.
When reviewing D109676, I found myself asking a basic question. Was there any good reason to preserve the current wrap-to-zero behavior when converting from backedge taken counts to trip counts? After reviewing existing code, I could not find a single case which appears to correctly and precisely handle the overflow case.
This patch changes the default behavior to extend instead of wrap. That is, if the result might be 256, we return a value of i9 type to ensure we interpret the count correctly. I did leave the legacy behavior as an option since a) loop-flatten stops triggering if I extend due to weirdly specific pattern matching I didn't understand and b) we could reasonably use the mode if we'd externally established a lack of overflow.
I want to emphasize that this change is *not* NFC. There are two call sites (one in ScalarEvolution.cpp, one in LoopCacheAnalysis.cpp) which are switched to the extend semantics. The former appears imprecise (but correct) for a constant 255 BTC. The later appears incorrect, though I don't have a test case.
Differential Revision: https://reviews.llvm.org/D110587
Craig Topper [Mon, 11 Oct 2021 16:43:51 +0000 (09:43 -0700)]
[RISCV] Require tail policy argument to builtins to be an integer constant expression
The IR intrinsics use ImmArg for the policy operand so this needs to be enforced as a constant in the frontend.
Differential Revision: https://reviews.llvm.org/D110779
Lang Hames [Mon, 11 Oct 2021 16:53:05 +0000 (09:53 -0700)]
[ORC] Fix an 80 column violation.
Fangrui Song [Mon, 11 Oct 2021 16:46:31 +0000 (09:46 -0700)]
[ELF] Demote !isUsedInRegularObj lazy symbol
I think D79300 has fixed the D51892 (`__i686.get_pc_thunk.bx`) issue, so
we can bring back rL330869.
D79300 says `would error undefined symbol instead of the more relevant discarded section`
but it doesn't reproduce now.
This avoids a quirk in `isUndefWeak()`.
Reviewed By: peter.smith
Differential Revision: https://reviews.llvm.org/D111365
Victor Campos [Wed, 8 Sep 2021 13:58:20 +0000 (14:58 +0100)]
[Clang][ARM][AArch64] Add support for Armv9-A, Armv9.1-A and Armv9.2-A
armv9-a, armv9.1-a and armv9.2-a can be targeted using the -march option
both in ARM and AArch64.
- Armv9-A maps to Armv8.5-A.
- Armv9.1-A maps to Armv8.6-A.
- Armv9.2-A maps to Armv8.7-A.
- The SVE2 extension is enabled by default on these architectures.
- The cryptographic extensions are disabled by default on these
architectures.
The Armv9-A architecture is described in the Arm® Architecture Reference
Manual Supplement Armv9, for Armv9-A architecture profile
(https://developer.arm.com/documentation/ddi0608/latest).
Reviewed By: SjoerdMeijer
Differential Revision: https://reviews.llvm.org/D109517
Tommi Pisto [Mon, 11 Oct 2021 16:19:17 +0000 (09:19 -0700)]
[ORC] Add static and dynamic library generator support to C API.
Adds LLVMOrcCreateStaticLibrarySearchGeneratorForPath and
LLVMOrcCreateDynamicLibrarySearchGeneratorForPath functions to create generators
for static and dynamic libraries.
Reviewed By: lhames
Differential Revision: https://reviews.llvm.org/D108535
AndreyChurbanov [Mon, 11 Oct 2021 16:25:00 +0000 (19:25 +0300)]
[OpenMP] libomp: add OpenMP 5.1 memory allocation routines.
Aligned allocation routines added.
Fortran interfaces added for all allocation routines.
Differential Revision: https://reviews.llvm.org/D110923
hyeongyu kim [Mon, 11 Oct 2021 16:00:32 +0000 (01:00 +0900)]
[SimpleLoopUnswitch] Re-fix introduction of UB when hoisted condition may be undef or poison
https://bugs.llvm.org/show_bug.cgi?id=27506
https://bugs.llvm.org/show_bug.cgi?id=31652
https://bugs.llvm.org/show_bug.cgi?id=51043
Problems with SimpleLoopUnswitch cause the bug reports above.
```
while (...) {
if (C) { A }
else { B }
}
Into:
C' = freeze(C)
if (C') {
while (...) { A }
} else {
while (...) { B }
}
```
This problem can be solved by adding a freeze on hoisted branches(above transform) and has been solved by D29015.
However, D29015 is now reverted by performance regression(https://github.com/llvm/llvm-project/commit/
2b5a8976514de326bb84f0913d9d451089c11d22)
It is not the first time that an added freeze has caused performance regression.
SimplifyCFG also had a problem with UB caused by branching-on-undef, which was solved by adding freeze to the branching condition. (D104569)
Performance regression occurred in D104569, and patches such as D105344 and D105392 were written to minimize it.
This patch will correct the SimpleLoopUnswitch as D104569 handles the SimplyCFG while minimizing performance loss by introducing patches like D105344 and D105392(This patch was rebased with the author's permission)
Reviewed By: reames
Differential Revision: https://reviews.llvm.org/D106041
Alex Zinenko [Mon, 11 Oct 2021 15:21:44 +0000 (17:21 +0200)]
[mlir] add user-level documentation for Python bindings
Until now, we only had documentation oriented towards developers of the
bindings. Provide some documentation for users of the bindings that don't want
or need to understand the inner workings.
Reviewed By: nicolasvasilache
Differential Revision: https://reviews.llvm.org/D111540
Hans Wennborg [Fri, 8 Oct 2021 12:21:50 +0000 (14:21 +0200)]
[MS compat] Handle #pragma fenv_access like #pragma STDC FENV_ACCESS (PR50694)
This adds support for the MSVC spelling of the pragma in -fms-extensions
mode.
Differential revision: https://reviews.llvm.org/D111440
Michał Górny [Fri, 8 Oct 2021 16:09:19 +0000 (18:09 +0200)]
[lldb] [DynamicRegisterInfo] Support setting from vector<Register>
Add an overload of DynamicRegisterInfo::SetRegisterInfo() that accepts
a std::vector<Register> as an argument. This moves the conversion
from DRI::Register to RegisterInfo directly into DynamicRegisterInfo,
and avoids the necessity of creating fully-compatible intermediate
RegisterInfo instances.
While the new method could technically reuse AddRegister(), the ultimate
goal is to replace AddRegister() with SetRegisterInfo() entirely.
Differential Revision: https://reviews.llvm.org/D111435