Keith Smiley [Sun, 9 Oct 2022 04:28:02 +0000 (21:28 -0700)]
[lld-macho] Add --ignore-auto-link-option
This provides a workaround for a small difference in ld64 behavior where
ld64 ignores invalid LC_LINKER_OPTIONS unless the link fails. Instead of
fully adopting that behavior, this provides an escape hatch by allowing
users to specify `--ignore-auto-link-option` passing the invalid library
or framework name
Fixes https://github.com/llvm/llvm-project/issues/56939
Differential Revision: https://reviews.llvm.org/D135530
Jan Svoboda [Tue, 11 Oct 2022 22:38:48 +0000 (15:38 -0700)]
[clang][deps] Prevent emitting diagnostics outside of source file
The dependency scanner needs to report the module map file describing the module whose implementation is being compiled (see D134222). However, calling `Preprocessor::getCurrentModuleImplementation()` in the scanner might cause a diagnostic during module map parsing and emitting a diagnostic without being "in" a source file is illegal (e.g. in `TextDiagnosticPrinter`). This patch ensures the module map parse is triggered while the compiler is still "in" a source file, avoiding the failure case.
Reviewed By: Bigcheese
Differential Revision: https://reviews.llvm.org/D135637
Jan Svoboda [Tue, 11 Oct 2022 22:38:41 +0000 (15:38 -0700)]
[clang][deps] Remove more codegen options
Codegen options are typically unused by modules. Reset some of them to increase sharing between TUs with different flags.
Reviewed By: Bigcheese
Differential Revision: https://reviews.llvm.org/D135720
Joseph Huber [Tue, 11 Oct 2022 21:11:21 +0000 (16:11 -0500)]
[Clang] Do not build the OffloadActionBuilder when using the new driver
The Offloading toolchain currently has two methods for construction the
requires actions. The "new" driver and the old `OffloadActionBuilder`.
Using either one is mutually exclusive, so we should not initialize this
when using the new driver. This was causing some error messages to be
printed multiple times because we were checking them in both the old and
the new driver.
Reviewed By: tra
Differential Revision: https://reviews.llvm.org/D135715
Jeffrey Tan [Fri, 30 Sep 2022 19:11:58 +0000 (12:11 -0700)]
Prevent lldb-vscode tests from source lldbinit file
lldb-vscode is hard-coded to source .lldbinit file which causes some tests to
fail on my machine.
This patch adds a new option to control this:
1. vscode.py and lldb-vscode tests will not source .lldbinit by default
2. lldb-vscode will source .lldbinit in production if not specified otherwise
Differential Revision: https://reviews.llvm.org/D135620
Jessica Paquette [Tue, 11 Oct 2022 21:49:41 +0000 (14:49 -0700)]
[GlobalISel] Allow vectors in redundant or + add combines
We support KnownBits for vectors, so we can enable these.
https://godbolt.org/z/r9a9W4Gj1
Differential Revision: https://reviews.llvm.org/D135719
Leonard Chan [Tue, 11 Oct 2022 21:10:07 +0000 (21:10 +0000)]
[llvm] Update WPD tests to use opaque pointers
Differential Revision: https://reviews.llvm.org/D135611
Fangrui Song [Tue, 11 Oct 2022 22:30:07 +0000 (15:30 -0700)]
[LTO] Make local linkage GlobalValue in non-prevailing COMDAT available_externally
For a local linkage GlobalObject in a non-prevailing COMDAT, it remains defined while its
leader has been made available_externally. This violates the COMDAT rule that
its members must be retained or discarded as a unit.
To fix this, update the regular LTO change D34803 to track local linkage
GlobalValues, and port the code to ThinLTO (GlobalAliases are not handled.)
This fixes two problems.
(a) `__cxx_global_var_init` in a non-prevailing COMDAT group used to
linger around (unreferenced, hence benign), and is now correctly discarded.
```
int foo();
inline int v = foo();
```
(b) Fix https://github.com/llvm/llvm-project/issues/58215:
as a size optimization, we place private `__profd_` in a COMDAT with a
`__profc_` key. When FuncImport.cpp makes `__profc_` available_externally due to
a non-prevailing COMDAT, `__profd_` incorrectly remains private. This change
makes the `__profd_` available_externally.
```
cat > c.h <<'eof'
extern void bar();
inline __attribute__((noinline)) void foo() {}
eof
cat > m1.cc <<'eof'
int main() {
bar();
foo();
}
eof
cat > m2.cc <<'eof'
__attribute__((noinline)) void bar() {
foo();
}
eof
clang -O2 -fprofile-generate=./t m1.cc m2.cc -flto -fuse-ld=lld -o t_gen
rm -fr t && ./t_gen && llvm-profdata show -function=foo t/default_*.profraw
clang -O2 -fprofile-generate=./t m1.cc m2.cc -flto=thin -fuse-ld=lld -o t_gen
rm -fr t && ./t_gen && llvm-profdata show -function=foo t/default_*.profraw
```
Reviewed By: tejohnson
Differential Revision: https://reviews.llvm.org/D135427
bixia1 [Tue, 11 Oct 2022 20:47:45 +0000 (13:47 -0700)]
[mlir][sparse] Add rewriting rules for the sparse_tensor.new operator.
Reviewed By: aartbik
Differential Revision: https://reviews.llvm.org/D135692
Fangrui Song [Tue, 11 Oct 2022 22:07:14 +0000 (15:07 -0700)]
[MC] .addrsig_sym: ignore unregistered symbols
.addrsig_sym forces registering the symbol regardless whether it is otherwise
registered. This creates an undefined symbol which is inconvenient/undesired:
* `extern int x; void f() { (void)x; }` has inconsistent behavior whether `x` is emitted as an undefined symbol.
`-O0 -faddrsig` makes `x` undefined while other -O levels and -fno-addrsig eliminate the symbol.
* In ThinLTO, after a non-prevailing linkonce_odr definition is converted to available_externally, and then a declaration,
the addrsig code emits a symbol while the symbol is otherwise unseen.
D135427 fixed a bug that a non-prevailing `__cxx_global_var_init` was
incorrectly retained. However, the IR declaration causes an undesired
`.addrsig_sym __cxx_global_var_init`. This can be addressed in a way similar
to D101512 (`isTransitiveUsedByMetadataOnly`) but the increased
`OutStreamer->emitAddrsigSym(getSymbol(&GV));` complexity makes me nervous.
Just ignoring unregistered symbols circumvents the problem.
Reviewed By: rnk
Differential Revision: https://reviews.llvm.org/D135642
wren romano [Mon, 10 Oct 2022 20:41:58 +0000 (13:41 -0700)]
[mlir][sparse] Renaming mlir_sparse_tensor_utils library to SparseTensorRuntime
The "mlir_xxx_utils" naming scheme is reserved/intended for shared libraries, whereas this library must be static due to issues of linking DLLs on Windows. So we rename the library to avoid any potential confusion. In addition we also rename the ExecutionEngine/SparseTensorUtils.{h,cpp} files to match the new library name.
Reviewed By: aartbik, stella.stamenova
Differential Revision: https://reviews.llvm.org/D135613
Arthur Eubanks [Fri, 7 Oct 2022 21:08:43 +0000 (14:08 -0700)]
[CallGraph] Port -print-callgraph-sccs to new pass manager
And remove the legacy opt-specific pass.
Reviewed By: asbirlea
Differential Revision: https://reviews.llvm.org/D135487
bixia1 [Tue, 11 Oct 2022 20:22:14 +0000 (13:22 -0700)]
[mlir][sparse] Move a few routines to CodegenUtils.
Move a few supporting routines for generating function calls to CodegenUtils so
that they can be used by the codegen path for sparse tensor file input and
output.
Reviewed By: aartbik
Differential Revision: https://reviews.llvm.org/D135691
Alexander Belyaev [Tue, 11 Oct 2022 14:26:42 +0000 (16:26 +0200)]
[flang] Use the ShapedType::kDynamicSize constant instead of hardcoding it.
Differential Revision: https://reviews.llvm.org/D135675
Kai Nacke [Tue, 11 Oct 2022 20:59:16 +0000 (20:59 +0000)]
[SystemZ][NFC] Opaque pointer migration.
The LIT test cases were migrated with the script provided by
Nikita Popov.
No manual changes were made. Committed without review since
no functional changes, after consultation with uweigand.
wren romano [Fri, 7 Oct 2022 21:21:02 +0000 (14:21 -0700)]
[mlir][sparse] Converting SparseTensorCOO to use standard C++-style iterators.
This differential comprises three related changes: (1) it gives SparseTensorCOO standard C++-style iterators; (2) it removes the old iterator stuff from SparseTensorCOO; and (3) it introduces SparseTensorIterator which behaves like the old SparseTensorCOO iterator stuff used to.
The SparseTensorIterator class is needed because the MLIR codegen cannot easily use the C++-style iterators (hence why SparseTensorCOO had the old iterator stuff). Distinguishing SparseTensorIterator from SparseTensorCOO also helps improve API hygiene since these two classes are used for distinct purposes. And having SparseTensorIterator as its own class enables changing the underlying implementation in the future, without needing to worry about updating all the codegen tests etc.
Reviewed By: aartbik
Differential Revision: https://reviews.llvm.org/D135485
Eli Friedman [Tue, 11 Oct 2022 21:00:33 +0000 (14:00 -0700)]
[clang][codegen] Don't emit atomic loads for threadsafe init if they aren't inline
Performing a load before calling __cxa_guard_acquire is supposed to be
an optimization, but it isn't much of one if we're just going to emit a
call to __atomic_load_1 instead. Instead, just skip the load, and
let __cxa_guard_acquire do whatever it wants.
(In practice, on such targets, the C++ library is just built with
threading turned off, so the result isn't actually threadsafe, but
there's not really anything clang can do about that.)
The alternative here is that we try to define some ABI for threadsafe
init that allows the speculative load without full atomics. Almost any
target without full atomics has a load that's s "atomic enough" for this
purpose. But it's not clear how we emit an "atomic enough" load in LLVM
IR, and there isn't any ABI document we can refer to.
Or I guess we could turn off -fthreadsafe-statics by default on
Cortex-M0, but that seems like it would be surprising.
Fixes https://github.com/llvm/llvm-project/issues/58184
Differential Revision: https://reviews.llvm.org/D135628
Argyrios Kyrtzidis [Fri, 7 Oct 2022 20:51:00 +0000 (13:51 -0700)]
[clang/Sema] Follow-up for fix of non-deterministic order of `-Wunused-variable` diagnostic
Commit `
371883f46dc23f8464cbf578e2d12a4f92e61917` caused a noticeable compile-time regression (about 0.4% geomean at -O0):
http://llvm-compile-time-tracker.com/compare.php?from=
92233159035d1b50face95d886901cf99035bd99&to=
371883f46dc23f8464cbf578e2d12a4f92e61917&stat=instructions
To address this switch `Scope::DeclSetTy` back to a `SmallPtrSet` and change `Sema::ActOnPopScope` to explicitly order the diagnostics that this function emits.
Differential Revision: https://reviews.llvm.org/D135490
Michele Scandale [Tue, 11 Oct 2022 20:28:59 +0000 (13:28 -0700)]
[Sema] Fix `ExtVectorElementExpr` tree transform for the `isArrow` case.
Make sure we propagate the value for `IsArrow` to
`RebuildExtVectorElementExpr` in order to be able to handle correctly
vector component accesses where the base value is a pointer.
Reviewed By: rjmccall
Differential Revision: https://reviews.llvm.org/D131698
Louis Dionne [Tue, 11 Oct 2022 19:58:35 +0000 (15:58 -0400)]
[libc++][NFC] Change _VSTD to std as a prereq for D122780
Florian Mayer [Tue, 11 Oct 2022 19:37:02 +0000 (12:37 -0700)]
[MC] [NFC] replace tabs with space in test
Haojian Wu [Tue, 11 Oct 2022 12:58:22 +0000 (14:58 +0200)]
[TokenLexer][NFC] Rename the InstLoc to ExpandLoc
We don't use the "instantiate" word for the macro expansion in LLVM,
see
c9c8419c383d0b53c40973f7587003ef45daf481.
Sterling Augustine [Mon, 10 Oct 2022 22:26:14 +0000 (15:26 -0700)]
Reenable gdb pretty printers, and update them.
Libcxx gdb pretty printers were disabled due to an old version
of gdb in the release testing. This reenables them, and fixes
various bit rot issues from not running them.
Chris Bieneman [Tue, 11 Oct 2022 17:09:30 +0000 (12:09 -0500)]
[DX] Add analysis and printer for shader flags
This adds infrastructural pieces for an analysis to compute the DXIL
shader flags. In this state the analysis can compute two fairly
straightforward feature flags for use of double-precision floating
point values and the DX 11.1 extended double support.
This patch does conflict with D135190, conflicts will be resolved prior
to merging.
Reviewed By: python3kgae
Differential Revision: https://reviews.llvm.org/D135393
# Conflicts:
# llvm/lib/Target/DirectX/CMakeLists.txt
# llvm/lib/Target/DirectX/DirectXTargetMachine.cpp
Michele Scandale [Tue, 11 Oct 2022 19:26:08 +0000 (12:26 -0700)]
[NFC] Test commit.
Louis Dionne [Tue, 11 Oct 2022 14:05:56 +0000 (10:05 -0400)]
[runtimes] Add the ability to customize the output name of libc++, libc++abi and libunwind
We already had the ability to do that for libc++.dylib, so this only adds
consistency for all the runtime libraries. This should allow working around
difficulties on AIX as described in https://llvm.org/D134221.
Differential Revision: https://reviews.llvm.org/D135669
Louis Dionne [Tue, 11 Oct 2022 13:19:55 +0000 (09:19 -0400)]
[libunwind] Install the headers by default
Just like we install libc++ and libc++abi headers by default when we
install the library, it makes sense to install the libunwind headers
by default when we build libunwind. In the current state of things,
there is an increased risk that folks are using older (previously
installed) libunwind headers along with a recent libunwind dylib,
which is not ideal.
Differential Revision: https://reviews.llvm.org/D135663
Joseph Huber [Tue, 11 Oct 2022 18:39:06 +0000 (13:39 -0500)]
[OpenMP] Fix `-foffload-lto` for offloading to Nvidia
Summary:
A previous patch ensured that we can't use `-foffload-lto` with CUDA in
non-RDC mode. This did not correctly check for if we were actually
offloading to CUDA so it ended up preventing us from using LTO for
OpenMP.
Joseph Huber [Tue, 11 Oct 2022 17:00:06 +0000 (12:00 -0500)]
[OpenMP][Docs] Add documentation for linking OpenMP with CUDA/HIP
Summary:
This patch adds an entry to the FAQ that shows how to link CUDA with
OpenMP.
Joseph Huber [Tue, 11 Oct 2022 16:42:40 +0000 (11:42 -0500)]
[Clang] Fix use of `hasArg` when `hasFlag` should be used instead
Summary:
This option forwards a clang flag with a `-no` variant to the Clang
compiler. It should use the `hasFlag` so it works properly when the
option is overridden.
Joseph Huber [Tue, 11 Oct 2022 16:30:03 +0000 (11:30 -0500)]
[OpenMP][Docs] Document multi-architecture binary handling
Summary:
This patch adds some documentation in the FAQ regarding
multi-architecture binary support using the `--offload-arch` flag.
Abinav Puthan Purayil [Tue, 11 Oct 2022 18:24:01 +0000 (23:54 +0530)]
[docs] Fix warning in AMDGPUUsage.rst after
3d9f011a9c624b3128bc6b5e71ed456eb92e268c
Jakub Kuderski [Tue, 11 Oct 2022 18:24:38 +0000 (14:24 -0400)]
[mlir][arith] Improve EmulateWideInt diagnostics
Print unsupported types on match failures.
Suggested by @Mogball and @jpienaar in D135204.
Reviewed By: Mogball
Differential Revision: https://reviews.llvm.org/D135673
Arthur Eubanks [Fri, 7 Oct 2022 17:08:25 +0000 (10:08 -0700)]
[LLDB] Fix crash when printing a struct with a static wchar_t member
Similar to D135170.
Reviewed By: DavidSpickett
Differential Revision: https://reviews.llvm.org/D135461
Abinav Puthan Purayil [Tue, 27 Sep 2022 05:36:35 +0000 (11:06 +0530)]
[AMDGPU] Make the uses_dynamic_stack field in the kernel descriptor and the metadata map specific to code object v5 and later
Unfortunately, we have a broken handling of this in the runtime of rocm
5.3. The runtime is expected to handle this correctly when v5 becomes
the default.
Differential Revision: https://reviews.llvm.org/D134714
Yuanfang Chen [Tue, 11 Oct 2022 17:18:11 +0000 (10:18 -0700)]
[clang-format] update --files help description
correlates the option with reponse file concept.
Reviewed By: HazardyKnusperkeks
Differential Revision: https://reviews.llvm.org/D135115
Kai Nacke [Fri, 7 Oct 2022 18:34:40 +0000 (18:34 +0000)]
[PPC] Opaque pointer migration, part 2.
The LIT test cases were migrated with the script provided by
Nikita Popov. Due to the size of the change it is split into
several parts.
Reviewed By: nemanja, nikic
Differential Revision: https://reviews.llvm.org/D135474
Kai Nacke [Fri, 7 Oct 2022 17:50:35 +0000 (17:50 +0000)]
[PPC] Opaque pointer migration, part 1.
The LIT test cases were migrated with the script provided by
Nikita Popov. Due to the size of the change it is split into
several parts.
Reviewed By: nemanja, amyk, nikic, PowerPC
Differential Revision: https://reviews.llvm.org/D135470
Mark de Wever [Wed, 5 Oct 2022 17:21:43 +0000 (19:21 +0200)]
[NFC][libc++][format] Improves tests.
This is mainly to improve the readability of the tests. As a side
effects the tests run faster too,
Reviewed By: ldionne, #libc
Differential Revision: https://reviews.llvm.org/D135288
Mehdi Amini [Thu, 6 Oct 2022 19:07:20 +0000 (19:07 +0000)]
Apply clang-tidy fixes for llvm-qualified-auto in Tiling.cpp (NFC)
Mehdi Amini [Thu, 6 Oct 2022 18:58:57 +0000 (18:58 +0000)]
Apply clang-tidy fixes for readability-identifier-naming in GPUTransformOps.cpp (NFC)
Jessica Paquette [Thu, 6 Oct 2022 18:03:43 +0000 (11:03 -0700)]
[GlobalISel] Combine (X op Y) == X --> Y == 0
This matches patterns of the form
```
(X op Y) == X
```
And transforms them to
```
Y == 0
```
where appropriate.
Example: https://godbolt.org/z/hfW811c7W
Differential Revision: https://reviews.llvm.org/D135380
Philip Reames [Tue, 11 Oct 2022 16:32:49 +0000 (09:32 -0700)]
[SDAG] Treat DemandedElts argument to isSplatVector as splat for scalable vectors [nfc]
The previous code used a APInt(1, 0) to represent the demanded elts of a scalable vector, and then ignored that argument if type was scalable. This was inconsistent with the UndefElts parameter which is set to either APInt(1, 0) or APInt(1,1) - that is, implicitly broadcast across all lanes. Particularly since the undef code relied on the DemandedElts parameter having bitwidth 1 to achieve that result!
This change switches the demanded parameter to APInt(1,1), documents the broadcast semantics, and takes advantage of it to remove one special case for scalable vectors which is no longer required.
Xiang Li [Thu, 6 Oct 2022 00:35:32 +0000 (17:35 -0700)]
[HLSL] Add Resource kind for HLSLResourceAttr.
A new EnumArgument ResourceKind is added for HLSLResourceAttr.
This will be use to get resource kind instead of parse it from the type name.
Reviewed By: aaron.ballman
Differential Revision: https://reviews.llvm.org/D135335
Slava Zakharin [Tue, 11 Oct 2022 15:54:58 +0000 (08:54 -0700)]
[flang] Fix buildbot failure after D135610.
Differential Revision: https://reviews.llvm.org/D135684
Alex Zinenko [Tue, 11 Oct 2022 15:31:51 +0000 (15:31 +0000)]
[mlir] generate docs for GPU transform extension
Joe Nash [Tue, 11 Oct 2022 14:24:52 +0000 (10:24 -0400)]
[AMDGPU] Make disassembler convertFMAanyK call more generic
Make support more generic to support future instructions.
Currently NFC.
Reviewed By: foad, arsenm
Differential Revision: https://reviews.llvm.org/D135678
Krzysztof Parzyszek [Tue, 11 Oct 2022 15:04:07 +0000 (08:04 -0700)]
[Hexagon] Remove unused function, NFC
Nico Weber [Tue, 11 Oct 2022 14:26:00 +0000 (10:26 -0400)]
[gn build] Reformat all build files
Ran:
git ls-files '*.gn' '*.gni' | xargs llvm/utils/gn/gn.py format
Pierre van Houtryve [Tue, 4 Oct 2022 11:06:15 +0000 (11:06 +0000)]
[GISel] Add redundant bitcast folding combine
Simply folds away bitcasts that cancel each other.
Reviewed By: arsenm
Differential Revision: https://reviews.llvm.org/D135146
Nikolas Klauser [Sat, 8 Oct 2022 20:17:32 +0000 (22:17 +0200)]
[libc++] static_assert that rebinding the allocator works as expected
Reviewed By: ldionne, #libc
Spies: libcxx-commits
Differential Revision: https://reviews.llvm.org/D133638
Nikita Popov [Tue, 11 Oct 2022 14:32:18 +0000 (16:32 +0200)]
[Intrinsics] Remove duplicate ImmArg attribute on amdgcn.global.load.lds
Nico Weber [Tue, 11 Oct 2022 14:28:56 +0000 (10:28 -0400)]
[gn build] port
243da90ea535 more
Philip Reames [Tue, 11 Oct 2022 14:26:44 +0000 (07:26 -0700)]
[SDAG] Clarify behavior of scalable demanded/undef elts in isSplatValue [nfc]
Update comment, and add an assertion to check property expected by sole (non-test) caller. Remove tests which appear to have been copied from fixed vector tests, and whose demanded bits don't correspond to the way this interface is otherwise used.
Florian Hahn [Tue, 11 Oct 2022 14:25:27 +0000 (15:25 +0100)]
[LoopRotation] Also drop block dispositions.
LoopRotation may also fold basic blocks, so cached block dispositions
also need to be dropped.
Fixes #58291.
Nico Weber [Tue, 11 Oct 2022 14:24:17 +0000 (10:24 -0400)]
[gn build] (semi-automatically) port
243da90ea535
Luke Drummond [Fri, 23 Sep 2022 15:50:51 +0000 (16:50 +0100)]
[NVPTX] Fix a segfault for bitcasted calls with byval params
`getFunctionParamOptimizedAlign` was being passed a null function
argument when getting the callee of a bitcasted function symbol. This is
because `CallBase::getCalledFunction` does not look through bitcasts.
There is already code to handle this case in
`NVPTXTargetLowering::getArgumentAlignment`, which is now hoisted into
an NVPTX util.
The alignment computation now gracefully handles computing alignment of
virtual functions with a check for null.
David Spickett [Wed, 28 Sep 2022 14:00:02 +0000 (14:00 +0000)]
[LLDB] Change RegisterValue::GetAsMemoryData to const RegisterInfo&
Most of the paths to this never passed nullptr intentionally. Those
that possibly could have were assuming it was not null elsehwere,
so would have crashed.
I've added asserts in those cases.
At least one case was relying on GetAsMemoryData to return an error
when it was given nullptr. So I've hoisted that error setting code
out into the caller.
Depends on D134963
Reviewed By: clayborg
Differential Revision: https://reviews.llvm.org/D134965
Sanjay Patel [Tue, 11 Oct 2022 13:28:09 +0000 (09:28 -0400)]
[InstCombine] try harder to cancel out mul/div
((Op1 * X) / Y) / Op1 --> X / Y
https://alive2.llvm.org/ce/z/JYxWjA
InstSimplify handles the more basic mul+div pattern with
shared operand, but we don't seem to have any reassociation
folds to handle cases where the common op is further away.
This is a generalization of
9cff4711ac72 and another
transform derived from issue #58137.
Sanjay Patel [Tue, 11 Oct 2022 12:39:10 +0000 (08:39 -0400)]
[InstCombine] add tests for div with common mul operand; NFC
Adrian Kuegel [Tue, 11 Oct 2022 13:39:28 +0000 (15:39 +0200)]
[mlir][Bazel] Remove unused dependency.
Anush Elangovan [Tue, 11 Oct 2022 13:30:15 +0000 (06:30 -0700)]
Make windows resource generation more robust
This is another attempt at https://reviews.llvm.org/D110489.
When build IREE we run into cases where we don't have / need
LLVM_VERSION_* etc set. Compilation fails if it isn't an integer.
Reviewed By: stellaraccident
Differential Revision: https://reviews.llvm.org/D135650
David Spickett [Wed, 28 Sep 2022 13:15:44 +0000 (13:15 +0000)]
[LLDB] Switch to RegisterInfo& for EmulateInstruction::WriteRegister
WriteRegister and WriteRegisterUnsigned were never pased nullptr,
and only one of them appeared to handle it. Switch to ref to make
the intent clear.
Depends on D134962
Reviewed By: clayborg
Differential Revision: https://reviews.llvm.org/D134963
Tobias Gysi [Tue, 11 Oct 2022 12:58:32 +0000 (15:58 +0300)]
[mlir][llvm] Introduce a mapValue function in LLVMIR import (nfc).
The revision adds a mapValue function to the Importer, which can be used
in the MLIR builders to provide controlled accesses to the result
mapping of the imported instructions. Additionally, the change allows us
to avoid accessing a private member variable of the Importer class,
which simplifies future refactorings that aim at factoring out a
conversion interface (similar to the MLIR to LLVM translation). The
revision also renames the variables used when emitting the MLIR builders
to prepare the generalization to non-intrinsic instructions. In
particular, it renames callInst to inst and it passes in the instruction
arguments using an llvmOperands array rather than accessing the call
arguments directly.
Reviewed By: ftynse
Differential Revision: https://reviews.llvm.org/D135645
Nikita Popov [Tue, 11 Oct 2022 13:01:48 +0000 (15:01 +0200)]
[TableGen] Change representation of ArgumentAttributes (NFC)
Instead of a flat list that includes the argument index, use a
nested vector, where each inner vector is the attribute set for
a single argument. This is more obvious and makes followup changes
simpler.
Kai Stierand [Tue, 11 Oct 2022 12:32:43 +0000 (14:32 +0200)]
[libclang] CIndex: Visit UsingTypeLoc as TypeRef
Reviewed By: sammccall
Differential Revision: https://reviews.llvm.org/D135555
Arthur O'Dwyer [Thu, 6 Oct 2022 20:53:30 +0000 (16:53 -0400)]
[libc++] Add the C++17 <memory_resource> header (mono-patch)
This patch is the rebase and squash of three earlier patches.
It supersedes all three of them.
- D47111: experimental monotonic_buffer_resource.
- D47358: experimental pool resources.
- D47360: Copy std::experimental::pmr to std::pmr.
The significant difference between this patch and the-sum-of-those-three
is that this patch does not add `std::experimental::pmr::monotonic_buffer_resource`
and so on. This patch simply adds the C++17 standard facilities, and
leaves the `std::experimental` namespace entirely alone.
Differential Revision: https://reviews.llvm.org/D89057
wanglei [Tue, 11 Oct 2022 12:23:03 +0000 (20:23 +0800)]
Reland "[clang][LoongArch] Set MaxAtomicInlineWidth and MaxAtomicPromoteWidth for LoongArch"
Differential Revision: https://reviews.llvm.org/D135526
Max Kazantsev [Tue, 11 Oct 2022 11:01:58 +0000 (18:01 +0700)]
[NFC] Factor out collection of unswitch candidate to a separate function
Just to make the code more structured and easier to understand.
Max Kazantsev [Tue, 11 Oct 2022 11:53:44 +0000 (18:53 +0700)]
[NFC] Refine API in SimpleLoopUnswitch: add missing const notions
Max Kazantsev [Tue, 11 Oct 2022 11:30:17 +0000 (18:30 +0700)]
[NFC] Refine API: add missing const notion in hasPartialIVCondition
David Truby [Mon, 3 Oct 2022 11:01:50 +0000 (11:01 +0000)]
[flang] Add cpowi function to runtime and use instead of pgmath
This patch adds a cpowi function to the flang runtime, and switches
to using that function instead of pgmath for complex number to
integer power operations.
Differential Revision: https://reviews.llvm.org/D134889
David Spickett [Wed, 28 Sep 2022 12:45:18 +0000 (12:45 +0000)]
[LLDB] Change pointer to ref in EmulateInstruction::ReadRegister methods
ReadRegister and ReadRegisterAsUnsigned are always passed valid pointers,
so the parameter should be a ref to make the intent clear.
Reviewed By: clayborg
Differential Revision: https://reviews.llvm.org/D134962
Simon Tatham [Fri, 7 Oct 2022 09:17:29 +0000 (10:17 +0100)]
[NFC] Pre-commit tests for D135434.
pipeliner-preserve-ties.mir demonstrates a current bug in which the
output of the Modulo Software Pipelining pass has left off a tie
between operands in the conditional `t2ADDri` instruction. It should
look like this:
%19:rgpr = t2ADDri %1, 1, 1 /* CC::ne */, $cpsr, $noreg, implicit %1(tied-def 0)
in which the final input operand is tied to the output, because that's
the input that will become the output value if the conditionalized add
instruction does not execute, and hence, must necessarily be whatever
was in the output register beforehand.
In the input to the pipeliner, those `tied-def` specifications are
present and correct. But when the pipeliner clones MachineInstrs, it
loses them.
pipeliner-inlineasm.mir does not demonstrate any bug: the output is
already correct, because of compensation code in the machine pipeliner
that applies only to INLINEASM instructions. But no test previously
exercised that code, so I add one now before making changes in that
area.
Alex Zinenko [Tue, 11 Oct 2022 11:44:58 +0000 (11:44 +0000)]
[mlir] drop unnecssary transform.with_pdl_patterns from tests, NFC
Many tests wrap the piece of the IR related to the transform dialect
into `transform.with_pdl_patterns` without actually using PDL patterns
inside. Some of these are leftovers from migration to `structured.match`
and some others are cargo cult, both are useless and pollute the tests.
Reviewed By: guraypp
Differential Revision: https://reviews.llvm.org/D135661
Weining Lu [Tue, 11 Oct 2022 11:13:18 +0000 (19:13 +0800)]
Reland "[Clang][LoongArch] Add inline asm support for constraints k/m/ZB/ZC"
Reference: https://gcc.gnu.org/onlinedocs/gccint/Machine-Constraints.html
k: A memory operand whose address is formed by a base register and
(optionally scaled) index register.
m: A memory operand whose address is formed by a base register and
offset that is suitable for use in instructions with the same
addressing mode as st.w and ld.w.
ZB: An address that is held in a general-purpose register. The offset
is zero.
ZC: A memory operand whose address is formed by a base register and
offset that is suitable for use in instructions with the same
addressing mode as ll.w and sc.w.
Note:
The INLINEASM SDNode flags in below tests are updated because the new
introduced enum `Constraint_k` is added before `Constraint_m`.
llvm/test/CodeGen/AArch64/GlobalISel/irtranslator-inline-asm.ll
llvm/test/CodeGen/AMDGPU/GlobalISel/irtranslator-inline-asm.ll
llvm/test/CodeGen/X86/callbr-asm-kill.mir
This patch passes `ninja check-all` on a X86 machine with all official
targets and the LoongArch target enabled.
Differential Revision: https://reviews.llvm.org/D134638
Dmitry Preobrazhensky [Tue, 11 Oct 2022 11:40:23 +0000 (14:40 +0300)]
[AMDGPU][MC] Correct image_gather4h
Correct encoding of image_gather4h for GFX9; disable this instruction for SI, CI and VI.
Differential Revision: https://reviews.llvm.org/D135605
Martin Storsjö [Wed, 5 Oct 2022 10:49:20 +0000 (13:49 +0300)]
[AArch64] Add SEH_Nop opcodes for BTI hints
These are harmless for the unwinder - the unwinder doesn't need to
handle them for being able to unwind correctly.
Only add the opcodes when the branch target is in a SEH prologue;
for jumptables e.g. within a function, we shouldn't add any SEH
opcodes.
Differential Revision: https://reviews.llvm.org/D135277
Martin Storsjö [Wed, 5 Oct 2022 09:04:02 +0000 (12:04 +0300)]
[llvm-readobj] Decode the new ARM64 SEH info for return address signing
This got documented upstream in
https://github.com/MicrosoftDocs/cpp-docs/pull/4202.
Differential Revision: https://reviews.llvm.org/D135275
Weining Lu [Tue, 11 Oct 2022 11:21:28 +0000 (19:21 +0800)]
Revert "[clang][LoongArch] Set MaxAtomicInlineWidth and MaxAtomicPromoteWidth for LoongArch"
This reverts commit
6547565e7bdcd9c3f683ad196b62d08c7061fdf1.
This breaks test: Preprocessor/init-loongarch.c
Simon Pilgrim [Tue, 11 Oct 2022 11:07:13 +0000 (12:07 +0100)]
[CostModel][X86] Add insertelement costs into a known base vector value
We were only testing inserting into undef/poison base vectors
Test coverage for Issue #58261
wanglei [Tue, 11 Oct 2022 10:50:11 +0000 (18:50 +0800)]
[LoongArch] Define getSetCCResultType for setting vector setCC type
To avoid trigger "No default SetCC type for vectors!" Assertion.
Differential Revision: https://reviews.llvm.org/D135527
Alex Zinenko [Tue, 11 Oct 2022 10:55:51 +0000 (10:55 +0000)]
[mlir] use raw function pointer instead of std::function
Accessing the target of std::function apparently requires RTTI, use a
raw pointer instead.
wanglei [Tue, 11 Oct 2022 10:12:28 +0000 (18:12 +0800)]
[clang][LoongArch] Set MaxAtomicInlineWidth and MaxAtomicPromoteWidth for LoongArch
Differential Revision: https://reviews.llvm.org/D135526
wanglei [Tue, 11 Oct 2022 09:43:59 +0000 (17:43 +0800)]
[LoongArch] Add codegen support of GlobalTLSAddress lowering
There are static and dynamic TLS address lowering in DAG stage according
to different TLS models.
TLS address will be lowered to pseudo instruction and then expanded by
the `LoongArch Pre-RA pseudo instruction expansion` pass.
Differential Revision: https://reviews.llvm.org/D134713
Alex Zinenko [Mon, 10 Oct 2022 14:38:31 +0000 (14:38 +0000)]
[mlir] switch the transform loop extension to use types
Add types to the Loop (SCF) extension of the transform dialect.
See https://discourse.llvm.org/t/rfc-type-system-for-the-transform-dialect/65702
Reviewed By: nicolasvasilache
Differential Revision: https://reviews.llvm.org/D135587
Alex Zinenko [Mon, 10 Oct 2022 14:33:59 +0000 (14:33 +0000)]
[mlir] add OperationType to the Transform dialect
Add a new OperationType handle type to the Transform dialect. This
transform type is parameterized by the name of the payload operation it
can point to. It is intended as a constraint on transformations that are
only applicable to a specific kind of payload operations. If a
transformation is applicable to a small set of operation classes, it can
be wrapped into a transform op by using a disjunctive constraint, such
as `Type<Or<[Transform_ConcreteOperation<"foo">.predicate,
Transform_ConcreteOperation<"bar">.predicate]>>` for its operand without
modifying this type. Broader sets of accepted operations should be
modeled as specific types.
Reviewed By: nicolasvasilache
Differential Revision: https://reviews.llvm.org/D135586
Alex Zinenko [Fri, 7 Oct 2022 15:04:36 +0000 (15:04 +0000)]
[mlir] cleanup transform payload setting
Before the multi-handle relaxation, the transform interpreter did not
actually set payload for a handle that had no further uses as a hacky
mechanism to work around the multi-handle problem. This is no longer
necessary and can be removed to avoid debugging surprises when a handle
has no payload even when its producing op assigned it.
Reviewed By: nicolasvasilache
Differential Revision: https://reviews.llvm.org/D135585
Alex Zinenko [Wed, 5 Oct 2022 14:23:19 +0000 (14:23 +0000)]
[mlir] switch transform dialect ops to use TransformTypeInterface
Use the recently introduced TransformTypeInterface instead of hardcoding
the PDLOperationType. This will allow the operations to use more
specific transform types to express pre/post-conditions in the future.
It requires the syntax and Python op construction API to be updated.
Dialect extensions will be switched separately.
Reviewed By: nicolasvasilache
Differential Revision: https://reviews.llvm.org/D135584
Alex Zinenko [Tue, 4 Oct 2022 15:49:30 +0000 (15:49 +0000)]
[mlir] clean up transform dialect definitions, NFC
Refactor the definition of the Transform dialect to move non-trivial
method implementations out of the .td file, and detemplatize functions
when possible while moving their implementations to a .cpp.
Reviewed By: nicolasvasilache
Differential Revision: https://reviews.llvm.org/D135165
Alex Zinenko [Tue, 4 Oct 2022 11:49:21 +0000 (11:49 +0000)]
[mlir] add types to the transform dialect
Introduce a type system for the transform dialect. A transform IR type
captures the expectations of the transform IR on the payload IR
operations that are being transformed, such as being of a certain kind
or implementing an interface that enables the transformation. This
provides stricter checking and better readability of the transform IR
than using the catch-all "handle" type.
This change implements the basic support for a type system amendable to
dialect extensions and adds a drop-in replacement for the unrestricted
"handle" type. The actual switch of transform dialect ops to that type
will happen in a separate commit.
See https://discourse.llvm.org/t/rfc-type-system-for-the-transform-dialect/65702
Reviewed By: nicolasvasilache
Differential Revision: https://reviews.llvm.org/D135164
Ivan Butygin [Wed, 5 Oct 2022 21:57:33 +0000 (23:57 +0200)]
[mlir][gpu] Add `subgroup_reduce` operation
Introduce `subgroup_reduce` operation, similar to `all_reduce`, but operating on subgroup scope instead of workgroup.
It is intended as low-level building block for more high level abstractions (e.g for workgroup-wide `all_reduce` ops).
Only introduce version taking reduce operation enum for simplicity sake.
Differential Revision: https://reviews.llvm.org/D135323
Nicolas Vasilache [Mon, 10 Oct 2022 09:05:14 +0000 (02:05 -0700)]
[mlir][Linalg] Retire LinalgStrategyTilePass and filter-based pattern.
Context: https://discourse.llvm.org/t/psa-retire-linalg-filter-based-patterns/63785
Uses of `LinalgTilingPattern::returningMatchAndRewrite` are replaced by a top-level `tileWithLinalgTilingOptions` function that is marked obsolete and serves
as a temporary means to transition away from `LinalgTilingOptions`-based tiling.
LinalgTilingOptions supports too many options that have been orthogonalized with the use of the transform dialect.
Additionally, the revision introduces a `transform.structured.tile_to_scf_for` structured transform operation that is needed to properly tile `tensor.pad`
via the TilingInterface. Uses of `transform.structured.tile` will be deprecated and replaced by this new op.
This will achieve the deprecation of `linalg::tileLinalgOp`.
Context: https://discourse.llvm.org/t/psa-retire-tileandfuselinalgops-method/63850
In the process of transitioning, tests that were performing tile and distribute on tensors are retired: transformations should be orthogonalized better in the future.
In particular, tiling to specific loop types and tileAndDistribute behavior are not available via the transform ops.
The behavior is still available as part of the `tileWithLinalgTilingOptions` method to allow downstream clients to transition without breakages but is meant to be retired soon.
As more tests are ported to the transform dialect, it became necessary to introduce a test-transform-dialect-erase-schedule-pass to discard the transform specification
once applied so that e2e lowering and execution is possible.
Lastly, a number of redundant tests that were testing composition of patterns are retired as they are available with a better mechanism via the transform dialect.
Differential Revision: https://reviews.llvm.org/D135573
Nikita Popov [Tue, 11 Oct 2022 09:41:28 +0000 (11:41 +0200)]
[SimplifyLibCalls] Use helper methods to query attributes (NFC)
Nikita Popov [Tue, 11 Oct 2022 09:01:29 +0000 (11:01 +0200)]
[Attributes] Return Optional from getAllocSizeArgs() (NFC)
As suggested on D135572, return Optional<> from getAllocSizeArgs()
rather than the peculiar pair(0, 0) sentinel.
The method on Attribute itself does not return Optional, because
the attribute must exist in that case.
Nikita Popov [Mon, 10 Oct 2022 11:57:24 +0000 (13:57 +0200)]
[Attributes] Support int attributes with zero value
This regularly comes up as a stumbling stone when adding int
attributes: They currently need to be encoded in a way to avoids
the zero value.
This adds support for zero-value int attributes by a) making the
ctor determine int/enum attribute based on attribute kind, not
whether the value is non-zero and b) switching getRawIntAttr()
to return an Optional, so that it's possible to distinguish a zero
value from non-existence.
Differential Revision: https://reviews.llvm.org/D135572
Nikita Popov [Tue, 11 Oct 2022 08:29:44 +0000 (10:29 +0200)]
[AttrBuilder] Remove unused vscale accessors (NFC)
These accessors are not used. Generally, nowadays it is preferable
to perform queries on AttributeSets/Lists, rather than the
AttrBuilder, which is optimized towards attribute construction now.
David Green [Tue, 11 Oct 2022 08:09:16 +0000 (09:09 +0100)]
[AArch64][ARM] Alter most of arm_neon.h to be target-based, not preprocessor based.
Similar to D131064, this alters most of the intrinsics in arm_neon.h to
be target based, not preprocessor based. The intrinsics that are changed
are the ones with obvious target features (fp16, fp16fml, cryptos, i8mm
and bf16). The ones that are not yet altered are the ones without target
features like rdma (8.1) and complex (8.3). Those will be switched in a
followup patch that allows targeting architecture versions.
The existing ArchGuard in arm_neon.td is split into ArchGuard that still
adds ifdef defines (for example for intrinsics that require __aarch64__),
and TargetGuards for intrinsics dependant on target features. From there
the TargetGuards are used in two ways:
- For intrinsics emitted as functions, __attribute__((target(TargetGuard)))
is added to the definition of the function. Along with the existing
always_inline intrinsic, this will give a compile time error if the
function is used in a context where the target feature is not available.
- For intrinsics emitted as macros, the __builtins are emitted into
arm_neon.inc using TARGET_BUILTIN as opposed to BUILTIN, which includes
the target feature and gives an error if the builtin is found in a
function without the required features, similar to arm_sve.h.
The second method requires that the intrinsics be separable from the
existing _v intrinsics used in other types. For example
__builtin_neon_splat_lane_bf16 is used as opposed to
__builtin_neon_splat_lane_v. There are some adjustments to the CGBuiltin
to account for intrinsics that can be treated similarly, except for
their target features.
Differential Revision: https://reviews.llvm.org/D132034
Nikita Popov [Tue, 11 Oct 2022 07:56:37 +0000 (09:56 +0200)]
[Attributes] Remove AttrBuilder::hasAlignmentAttr() method (NFC)
This was the odd one out, with similar methods not existing for
any other attributes. In the places where it is used, it is best
replaced by AttrBuilder::getAttribute(), which allows us to both
test for presence of the attribute and retrieve its value at the
same time. (To just check for presence, contains() could be used.)
Nikita Popov [Tue, 11 Oct 2022 07:53:08 +0000 (09:53 +0200)]
[AsmParser] Remove some redundant checks for align attributes
The verifier already has a more general check that the attribute is
legal for the position it is used in.