Joseph Huber [Fri, 14 Jul 2023 18:05:33 +0000 (13:05 -0500)]
[OpenMP] Add documentation on using the `libc` in OpenMP
This points users to the `libc` documentation and explains the basics of
how it's used inside the runtime.
Reviewed By: jdoerfert
Differential Revision: https://reviews.llvm.org/D155318
Fangrui Song [Fri, 14 Jul 2023 18:27:53 +0000 (11:27 -0700)]
[X86] Fix -Wunused-variable in -DLLVM_ENABLE_ASSERTIONS=off builds after D81833
Craig Topper [Fri, 14 Jul 2023 18:20:03 +0000 (11:20 -0700)]
[RISCV] Support i32 clmul* intrinsics on RV64.
We can use an i64 clmul to emulate i32 clmul.
For clmulh and clmulr we need to zero extend the 32 bit input
to 64 bits then extract either bits [63:32] or [62:31].
Unfortunately, without Zba we need to use 2 shifts for the
zero extends. These can be optimized out later if the producing
instruction already zeroed the upper bits or if we can use lwu.
There are alternative sequences we can use for clmulh/clmulr
when the zero extend isn't free, but those are best handled by
a DAG combine to give the best opportunity for removing the extend.
This allows us to implement i32 clmul C intrinsics proposed in
https://github.com/riscv-non-isa/riscv-c-api-doc/pull/44.
Reviewed By: asb
Differential Revision: https://reviews.llvm.org/D154729
Craig Topper [Fri, 14 Jul 2023 18:09:05 +0000 (11:09 -0700)]
[RISCV] Make __builtin_riscv_clz/ctz return an unsigned int instead of signed int.
This is different than the target independent __builtin_clz/ctz, but
logically makes more sense.
LLVM GN Syncbot [Fri, 14 Jul 2023 18:01:24 +0000 (18:01 +0000)]
[gn build] Port
20c6b9d451ca
Kamau Bridgeman [Fri, 14 Jul 2023 14:01:43 +0000 (09:01 -0500)]
[PowerPC] Add DFP test instruction definitions and MC tests
Adding the td definitions, and their associated assembly and disassembly
test cases for the decimal floating point test instructions defined in
section 5.6.3 of ISA 3.1
Reviewed By: lei, amyk
Differential Revision: https://reviews.llvm.org/D154606
Christian Trott [Fri, 14 Jul 2023 17:47:59 +0000 (11:47 -0600)]
[libc++][mdspan] Implement default_accessor
This commit implements default_accessor in support of C++23 mdspan
(https://wg21.link/p0009). default_accessor is the trivial accessor
using plain pointers and reference to element types.
Co-authored-by: Damien L-G <dalg24@gmail.com>
Differential Revision: https://reviews.llvm.org/D153935
Lang Hames [Fri, 14 Jul 2023 17:37:47 +0000 (10:37 -0700)]
[ORC] Switch from strncpy to memcpy to silence more GCC warnings.
GCC warns when strncpy doesn't copy the null terminator. See discussion at
https://reviews.llvm.org/rG9d701c8a8d65.
Alex Langford [Wed, 12 Jul 2023 00:38:10 +0000 (17:38 -0700)]
[lldb][NFCI] Remove unneeded temporary std::string allocations in SBAPI
This uses some friend class trickery to avoid some unneeded temporary
std::string allocations.
Differential Revision: https://reviews.llvm.org/D155035
Shubham Sandeep Rastogi [Fri, 14 Jul 2023 17:40:48 +0000 (13:40 -0400)]
Disable GetOrCreateModuleWithCachedModule and GetOrCreateModuleWithCachedModuleAndSymbol tests on arm64, because of test failures
Kazuki Sakamoto [Wed, 12 Jul 2023 21:48:13 +0000 (14:48 -0700)]
[lldb][Windows] Fix TestLocateModuleCallback
D153735 added the tests but it is failing due to POSIX path vs Windows path.
https://lab.llvm.org/buildbot/#/builders/219/builds/4084
Fix it.
- MODULE_PLATFORM_PATH is POSIX path.
- Normalize self.input_dir, FileSpec and SymbolFileSpec fullpath.
Differential Revision: https://reviews.llvm.org/D155124
Simon Cook [Fri, 14 Jul 2023 17:21:08 +0000 (18:21 +0100)]
[RISCV] Cleanups in CORE-V (xcv) extensions
This is a mostly NFC change cleaning up and clarifying components of the
in-tree CORE-V (xcv*) extensions following discussions on the remaining
extensions.
This makes the following changes to the xcbitmanip and xcvmac support:
1. Add missing extensions from RISCVISAInfo, such that they can be
supported in clang's -march option.
2. Clarify the extension version number is 1.0.0 in documentation.
3. Clarify the extensions are by OpenHW Group, and the capitilization
of the CORE-V extension family.
4. Add CORE-V to extension name in RISCVFeatures, both to be consistent
with other vendors, and also better distinguish e.g. CORE-V bit
manipulation vs RISC-V's standard Zb extensions.
Differential Revision: https://reviews.llvm.org/D155283
Garvit Gupta [Fri, 14 Jul 2023 16:51:15 +0000 (09:51 -0700)]
[RISCV] Add support for custom CSRs for Sifive S76.
Support for below CSRs is addeed -
1. Branch Prediction Mode CSR
2. Feature Disable CSR
3. Power Dial CSR
4. RNMI CSRs
spec:https://sifive.cdn.prismic.io/sifive/
767804da-53b2-4893-97d5-b7c030ae0a94_s76mc_core_complex_manual_21G3.pdf
This patch removes AltName field from SysReg class because we are now using
separate class for custom vendor CSRs. Also, all use of AltName have been changed
to DeprecatedName because both were interchangeably used for old names which are
not in use in latest RISCV spec.
Reviewed By: craig.topper
Differential Revision: https://reviews.llvm.org/D153499
Dmitry Vyukov [Fri, 14 Jul 2023 16:35:52 +0000 (16:35 +0000)]
ubsan: disable sigaction test for aarch64
The test seems to segfault on aarch64 with tsan:
https://lab.llvm.org/buildbot/#/builders/179/builds/6662
Reason unknown, needs debugging.
Reviewed By: melver, Caslyn
Differential Revision: https://reviews.llvm.org/D155272
Nikita Popov [Fri, 14 Jul 2023 16:32:34 +0000 (18:32 +0200)]
Revert "[InstSimplify] Make simplifyWithOpReplaced() recursive (PR63104)"
This is very likely the cause of a stage 2 failure in
Transforms/LoopVectorize/check-prof-info.ll. Revert until I can
investigate this.
This reverts commit
3d199d086e076f0b9b90d4c59f2226a417a639b5.
Alex Brachet [Fri, 14 Jul 2023 16:23:22 +0000 (16:23 +0000)]
[clang][Sema] Add fixit for scoped enum format error
This helps transition code bases to handle the new warning added in
3632e2f5179
Before:
```
clang/test/FixIt/format.cpp:10:16: warning: format specifies type 'int' but the argument has type 'N::E' [-Wformat]
10 | printf("%d", N::E::One); // expected-warning{{format specifies type 'int' but the argument has type 'N::E'}}
| ~~ ^~~~~~~~~
| %d
```
After:
```
clang/test/FixIt/format.cpp:10:16: warning: format specifies type 'int' but the argument has type 'N::E' [-Wformat]
10 | printf("%d", N::E::One); // expected-warning{{format specifies type 'int' but the argument has type 'N::E'}}
| ~~ ^~~~~~~~~
| static_cast<int>( )
```
Differential Revision: https://reviews.llvm.org/D153623
Alex Brachet [Fri, 14 Jul 2023 16:22:06 +0000 (16:22 +0000)]
[clang][Sema] Suggest static_cast in C++ code
This patch changes the -Wformat diagnostic to suggest static_cast over
a C-style cast for {,Objective}C++ when recommending the argument be
casted rather than changing the format string.
Before:
```
clang/test/FixIt/format.mm:11:16: warning: format specifies type 'unichar' (aka 'unsigned short') but the argument has type 'wchar_t' [-Wformat]
11 | NSLog(@"%C", wchar_data); // expected-warning{{format specifies type 'unichar' (aka 'unsigned short') but the argument has type 'wchar_t'}}
| ~~ ^~~~~~~~~~
| (unsigned short)
```
After:
```
clang/test/FixIt/format.mm:11:16: warning: format specifies type 'unichar' (aka 'unsigned short') but the argument has type 'wchar_t' [-Wformat]
11 | NSLog(@"%C", wchar_data); // expected-warning{{format specifies type 'unichar' (aka 'unsigned short') but the argument has type 'wchar_t'}}
| ~~ ^~~~~~~~~~
| static_cast<unsigned short>( )
```
Differential Revision: https://reviews.llvm.org/D153622
Lei Huang [Tue, 4 Jul 2023 21:41:48 +0000 (17:41 -0400)]
[PowerPC] Add DFP format instructions definitions and MC tests
Add td definitions and asm/disasm tests for the dfp format
instructions in ISA 3.1 section 5.6.6
Reviewed By: stefanp, kamaub
Differential Revision: https://reviews.llvm.org/D154465
David Green [Fri, 14 Jul 2023 15:58:51 +0000 (16:58 +0100)]
[AArch64] Mark some operands as OPERAND_IMMEDIATE.
This allows llvm-exegesis to generate them as constants.
Nikolas Klauser [Fri, 14 Jul 2023 15:19:56 +0000 (08:19 -0700)]
[libc++][NFC] Update emojis in the buildkite pipeline
Shubham Sandeep Rastogi [Fri, 14 Jul 2023 15:18:53 +0000 (11:18 -0400)]
Revert "Revert "[lldb][LocateModuleCallback] Fix LocateModuleCallbackTest""
This reverts commit
668a3efd42e7fea19a0d331f73345f2ac13cdf4f.
Reverting because of build errors:
In file included from /Users/buildslave/jenkins/workspace/as-lldb-cmake/llvm-project/lldb/source/API/SBPlatform.cpp:19:
/Users/buildslave/jenkins/workspace/as-lldb-cmake/llvm-project/lldb/include/lldb/Target/Target.h:1035:18: warning: parameter 'merged' not found in the function declaration [-Wdocumentation]
Shubham Sandeep Rastogi [Fri, 14 Jul 2023 15:18:03 +0000 (11:18 -0400)]
Revert "Revert "[lldb][LocateModuleCallback] Call locate module callback""
This reverts commit
df054499c35cdda02b196b2ca5c0a326abdc0a29.
Reverting because of build errors
In file included from /Users/buildslave/jenkins/workspace/as-lldb-cmake/llvm-project/lldb/source/API/SBPlatform.cpp:19:
/Users/buildslave/jenkins/workspace/as-lldb-cmake/llvm-project/lldb/include/lldb/Target/Target.h:1035:18: warning: parameter 'merged' not found in the function declaration [-Wdocumentation]
Serge Pavlov [Fri, 14 Jul 2023 15:10:53 +0000 (22:10 +0700)]
[X86][FPEnv] Lowering of {get,set,reset}_fpenv
The change implements lowering of `get_fpenv`, `set_fpenv` and
`reset_fpenv`.
Differential Revision: https://reviews.llvm.org/D81833
Serge Pavlov [Fri, 12 May 2023 11:12:14 +0000 (18:12 +0700)]
Precommit tests on lowering *_fpenv on X86
Matthias Springer [Fri, 14 Jul 2023 13:47:06 +0000 (15:47 +0200)]
[mlir][bufferization] Add `buffer_loop_hoisting` transform op
This op hoists buffer allocation from loops.
Differential Revision: https://reviews.llvm.org/D155289
Ilya Leoshkevich [Fri, 14 Jul 2023 15:04:45 +0000 (17:04 +0200)]
[SystemZ] Use named MI sub-operands
Prepare for removing the MemOpsEmitted workaround for symbolic
displacements by letting TableGen know about the offsets of the
displacement sub-operands within the instruction.
There are alternative ways to do this that were tried and rejected:
- Creating encoders and decoders for each possible displacement offset.
This is too repetitive.
- Use VarLenCodeEmitter [1]. The resulting diff is quite large.
Instead, use the named sub-operand support introduced by commit
a538d1f13a13 ("[TableGen][CodeEmitterGen] Allow local names for
sub-operands in a operand list.").
Describe instruction encodings in terms of sub-operands instead of
operands (e.g. B, D, L vs BDL) - this also better matches the pictures
from the Principles of Operation. Decompose operands into sub-operands
using the new (bdaddr12only $B1, $D1):$BD1 syntax. Replace the
encoders and the decoders of the operands with these of the
sub-operands.
Since DecodeADDR64BitRegisterClass() is now used for bases and indices,
change it to return NoRegister when decoding 0. This also changes the
disassembly of some instructions, e.g., br %r0 becomes br 0. Since this
better captures the instruction semantics, namely, that the value of
%r0 is not used, keep this change and update the tests.
[1] https://m680x0.github.io/blog/2022/02/varlen-encoder.html
Reviewed By: uweigand
Differential Revision: https://reviews.llvm.org/D155194
Shubham Sandeep Rastogi [Fri, 14 Jul 2023 15:03:54 +0000 (11:03 -0400)]
Revert "[lldb][LocateModuleCallback] Call locate module callback"
This reverts commit
7f1028e9df52b4e7246f189a24684b1ca8c9bfbe.
This is because test failures
lldb-unit.Target/_/TargetTests/LocateModuleCallbackTest.GetOrCreateModuleWithCachedModule
lldb-unit.Target/_/TargetTests/LocateModuleCallbackTest.GetOrCreateModuleWithCachedModuleAndBreakpadSymbol
Shubham Sandeep Rastogi [Fri, 14 Jul 2023 15:03:02 +0000 (11:03 -0400)]
Revert "[lldb][LocateModuleCallback] Fix LocateModuleCallbackTest"
This reverts commit
fb087c17c82309404fe0ebf3505c186642a719f7.
This is because of test failures:
lldb-unit.Target/_/TargetTests/LocateModuleCallbackTest.GetOrCreateModuleWithCachedModule
lldb-unit.Target/_/TargetTests/LocateModuleCallbackTest.GetOrCreateModuleWithCachedModuleAndBreakpadSymbol
Nicolas Vasilache [Fri, 14 Jul 2023 14:56:50 +0000 (16:56 +0200)]
[mlir] Add an IntNEQValue predicate
Differential Revision: https://reviews.llvm.org/D155298
Nicolas Vasilache [Fri, 14 Jul 2023 14:35:06 +0000 (16:35 +0200)]
[mlir] NFC - Basic improvements to IndexingUtils (product and sum)
Nikita Popov [Thu, 13 Jul 2023 15:25:18 +0000 (17:25 +0200)]
[InstSimplify] Make simplifyWithOpReplaced() recursive (PR63104)
Support replacement of operands not only in the immediate
instruction, but also instructions it uses.
To the most part, this extension is straightforward, but there are
two bits worth highlighting:
First, we can now no longer assume that if the Op is a vector, the
instruction also returns a vector. If Op is a vector and the
instruction returns a scalar, we should consider it as a cross-lane
operation.
Second, for the x ^ x special case, we can no longer assume that
the operand is RepOp, as we might have a replacement higher up the
instruction chain.
There is one optimization regression, but it is in a fuzzer-generated
test case.
Fixes https://github.com/llvm/llvm-project/issues/63104.
Nicolas Vasilache [Fri, 14 Jul 2023 14:31:00 +0000 (16:31 +0200)]
Revert "[mlir][memref] NFC - Move utility function declaration from IR/MemRef.h to Utils/MemRefUtils.h"
This reverts commit
8b161e977298ea8207ae4bdcee8483ce47601f31.
This creates cyclic dependencies that cannot be easily untangled for now.
Jay Foad [Fri, 14 Jul 2023 14:20:22 +0000 (15:20 +0100)]
[InstCombine] Regenerate AMDGPU test checks
Nikita Popov [Fri, 14 Jul 2023 14:27:09 +0000 (16:27 +0200)]
[InstSimplify] Revert unintentional change
This change was made as part of
91b84811ab11ea169cb8ac3d6ccf8a4b8740ec98,
which was only supposed to add tests.
Alexey Bataev [Fri, 14 Jul 2023 13:01:04 +0000 (06:01 -0700)]
[SLP]Relax assertion to check if the input scalars were extended to
match the size of base node (PR63668).
Need to adjust the check for assert and take into account case where the
original scalars are reused and were extended to match the vector factor
of the reused SLP node.
Nikita Popov [Fri, 14 Jul 2023 14:14:50 +0000 (16:14 +0200)]
[InstSimplify] Allow gep inbounds x, 0 -> x in non-refining op replacement
After the semantics change from https://reviews.llvm.org/D154051,
gep inbounds x, 0 can no longer produce poison. As such, we can
also perform this fold during non-refining operand replacement
and avoid unnecessary drops of the inbounds flag.
The online alive2 version has not been update to the new
semantics yet, but we can use the following proof locally:
define ptr @src(ptr %base, i64 %offset) {
%cmp = icmp eq i64 %offset, 0
%gep = getelementptr inbounds i8, ptr %base, i64 %offset
%sel = select i1 %cmp, ptr %base, ptr %gep
ret ptr %sel
}
define ptr @tgt(ptr %base, i64 %offset) {
%gep = getelementptr inbounds i8, ptr %base, i64 %offset
ret ptr %gep
}
Nikita Popov [Fri, 14 Jul 2023 14:04:36 +0000 (16:04 +0200)]
[InstSimplify] Add tests for recursive simplify with op replaced (NFC)
Alexey Bataev [Fri, 14 Jul 2023 14:03:26 +0000 (07:03 -0700)]
Revert "[SLP]Relax assertion to check if the input scalars were extended to"
This reverts commit
6fdfc81287ecdc2a7f409d08538ec6ce2bd698da to fix the
check in the assert )need to use end, nod begin function).
Takuya Shimizu [Fri, 14 Jul 2023 13:59:41 +0000 (22:59 +0900)]
[clang][Diagnostics] Fix distant source ranges in bad-conversion notes
Now that clang supports printing of multiple lines of code snippet in diagnostics, source ranges in diagnostics that are located in different lines from the diagnosed source location get to be printed if the gap happened to be less than the maximum number of lines clang is allowed to print in.
Many of the bad-conversion notes in overload resolution failures have their source location in the function declaration and source range in the argument of function call. This can cause an unnecessarily many lines of snippet printing.
This patch fixes it by changing the source range from function callsite to the problematic parameter in function declaration.
e.g.
```
void func(int aa, int bb);
void test() { func(1, "two"); }
```
BEFORE this patch:
```
source:4:15: error: no matching function for call to 'func'
4 | void test() { func(1, "two"); }
| ^~~~
source:1:6: note: candidate function not viable: no known conversion from 'const char[4]' to 'int' for 2nd argument
1 | void func(int aa, int bb);
| ^
2 |
3 |
4 | void test() { func(1, "two"); }
| ~~~~~
1 error generated.
```
AFTER this patch:
```
source:4:15: error: no matching function for call to 'func'
4 | void test() { func(1, "two"); }
| ^~~~
source:1:6: note: candidate function not viable: no known conversion from 'const char[4]' to 'int' for 2nd argument
1 | void func(int aa, int bb);
| ^ ~~~~~~
```
Reviewed By: cjdb
Differential Revision: https://reviews.llvm.org/D153359
Benjamin Kramer [Fri, 14 Jul 2023 13:44:39 +0000 (15:44 +0200)]
Hide some implementation details so they can't cause ODR conflicts. NFC.
Alexey Bataev [Fri, 14 Jul 2023 13:01:04 +0000 (06:01 -0700)]
[SLP]Relax assertion to check if the input scalars were extended to
match the size of base node (PR63668).
Need to adjust the check for assert and take into account case where the
original scalars are reused and were extended to match the vector factor
of the reused SLP node.
Matthias Springer [Fri, 14 Jul 2023 13:40:53 +0000 (15:40 +0200)]
[mlir][vector][NFC] Minor VectorTransferOpInterface cleanup
* Rename functions with underscore to camel case.
* Return C++ bools of "in_bounds" values instead of an `ArrayAttr`.
Differential Revision: https://reviews.llvm.org/D155277
Matthias Springer [Fri, 14 Jul 2023 13:34:21 +0000 (15:34 +0200)]
[mlir][vector] Simplify ExtractSliceOp/TransferWriteOp swapping pattern
No need to compute the `in_bounds` attribute. The folder will infer it.
Differential Revision: https://reviews.llvm.org/D155172
Alexandros Lamprineas [Thu, 13 Jul 2023 10:54:49 +0000 (11:54 +0100)]
[FuncSpec][NFC] Sink cast into function.
Before looking up a value in the map of known constants we attempt
to dynamically cast it. The code looks cleaner if we move the cast
inside findConstantFor(), where the look up happens.
Differential Revision: https://reviews.llvm.org/D155177
Markus Böck [Fri, 14 Jul 2023 11:27:29 +0000 (13:27 +0200)]
[mlir][LLVM] Convert access group metadata to using attributes instead of ops
Using MLIR attributes instead of metadata has many advantages:
* No indirection: Attributes can simply refer to each other seemlessly without having to use the indirection of `SymbolRefAttr`. This also gives us correctness by construction in a lot of places as well
* Multithreading safe: The Attribute infrastructure gives us thread-safety for free. Creating operations and inserting them into a block is not thread-safe. This is a major use case for e.g. the inliner in MLIR which runs in parallel
* Easier to create: There is no need for a builder or a metadata region
This patch therefore does exactly that. It leverages the new distinct attributes to create distinct access groups in a deterministic and threadsafe manner.
Differential Revision: https://reviews.llvm.org/D155285
Nikita Popov [Fri, 14 Jul 2023 12:41:33 +0000 (14:41 +0200)]
[InstCombine] Fold add of zext and sext of i1
(zext a) + (sext a) is 0 if a is a bool.
The regression is in a fuzzer-generated test.
Proof: https://alive2.llvm.org/ce/z/KotnN6
Nikita Popov [Fri, 14 Jul 2023 12:46:50 +0000 (14:46 +0200)]
[InstCombine] Add test for add of zext and sext (NFC)
Viktoriia Bakalova [Thu, 13 Jul 2023 16:26:36 +0000 (16:26 +0000)]
[clangd] Fix the range for include reference to itself.
Differential Revision: https://reviews.llvm.org/D155215
Tobias Hieta [Fri, 14 Jul 2023 07:46:54 +0000 (09:46 +0200)]
[LLD][COFF] Add LLVM toolchain library paths by default.
We want lld-link to automatically find compiler-rt's and
libc++ when it's in the same directory as the rest of the
toolchain. This is because on Windows linking isn't done
via the clang driver - but instead invoked directly.
This prepends: <llvm>/lib <llvm>/lib/clang/XX/lib and
<llvm>/lib/clang/XX/lib/windows automatically to the library
search paths.
Related to #63827
Differential Revision: https://reviews.llvm.org/D151188
Nikita Popov [Fri, 14 Jul 2023 10:20:04 +0000 (12:20 +0200)]
[InstCombine] Fold cttz of lowest set bit
cttz(-a & a) is the same as cttz(a). -a & a is an idiom to extract
the lowest set bit, which naturally does not affect the number of
trailing zeroes.
Proof: https://alive2.llvm.org/ce/z/Yp26x7
Nikita Popov [Fri, 14 Jul 2023 10:13:48 +0000 (12:13 +0200)]
[InstCombine] Add tests for cttz of lowest set bit (NFC)
Alex Bradbury [Fri, 14 Jul 2023 12:28:58 +0000 (13:28 +0100)]
[RISCV][test] Add RV32I and RV64I RUN lines to condops.ll test
Some of these test cases will be changed by upcoming combines, even in
the non-zicond case.
Matthias Springer [Fri, 14 Jul 2023 09:58:08 +0000 (11:58 +0200)]
[mlir][linalg] BufferizeToAllocationOp: Add option to specify custom alloc op
Supported ops are "memref.alloc" and "memref.alloca".
Differential Revision: https://reviews.llvm.org/D155282
Matthias Springer [Fri, 14 Jul 2023 09:57:54 +0000 (11:57 +0200)]
[mlir][bufferization] OneShotBufferizeOp: Add options to use linalg.copy
This new option allows users to specify a custom memcpy op.
Differential Revision: https://reviews.llvm.org/D155280
Jay Foad [Fri, 16 Jun 2023 16:09:49 +0000 (17:09 +0100)]
[EarlyCSE] Do not CSE convergent calls with memory effects
D149348 did this for readnone calls, which are handled by SimpleValue.
This patch does the same for all other CSEable calls, which are handled
by CallValue.
Differential Revision: https://reviews.llvm.org/D153151
Jay Foad [Fri, 16 Jun 2023 16:08:40 +0000 (17:08 +0100)]
[EarlyCSE] Precommit test for D153151
Differential Revision: https://reviews.llvm.org/D155210
Alex Bradbury [Fri, 14 Jul 2023 10:29:01 +0000 (11:29 +0100)]
[RISCV] Introduce RISCVISD::CZERO_{EQZ,NEZ} nodes produce them when zicond is present in lowerSELECT
This patch is a step towards altering how we handle the emission of
condops. Marking ISD::SELECT as legal is a major change in the codegen
path, and gives few options for maintaining the old codegen path when
it is believed to be better (e.g. a better branchless sequence is
possible using non-zicond instructions, or the branch-based sequence is
preferable).
This removes the existing SelectionDAG patterns and moves the logic into
lowerSELECT. Along some small codegen changes you'll note a few minor
regressions in the generated code quality - this are due to the fact
that by lowering the SELECT node early we miss out on combines that
would kick in later when setcc condcodes that aren't natively supported
have been expanded (thus exposing opportunities for optimisation by
performing logical negation and swapping truev/falsev). I've opted to
split out work that addresses these into follow-on patches (especially
as zicond is still 'experimental').
matchSetCC is a straight-forward translation from the version in
RISCVISelDAGToDAG. Ideally, in the future it can be converted to a
helper shared between both files.
Differential Revision: https://reviews.llvm.org/D155083
Tobias Hieta [Fri, 14 Jul 2023 07:40:35 +0000 (09:40 +0200)]
[lld][COFF] Find libraries with relative paths.
This patch is spun out of https://reviews.llvm.org/D151188
and makes it possible for lld-link to find libraries with
relative paths. This will be used later to implement the
changes to autolinking runtimes explained in #63827
Differential Revision: https://reviews.llvm.org/D155268
Nikita Popov [Fri, 14 Jul 2023 09:59:22 +0000 (11:59 +0200)]
[InstCombine] Handle const select arm in foldSelectCtlzToCttz()
The select arm that takes the ctlz result can also instead be a
constant with the bit width (as this is what the ctlz evaluates to
for a==0).
This avoids a regression when strengthening the
simplifyWithOpReplaced() fold.
Proof: https://alive2.llvm.org/ce/z/DMRL5A
Nikita Popov [Fri, 14 Jul 2023 09:47:45 +0000 (11:47 +0200)]
[InstCombine] Add test for ctlz->cttz fold with constant in select (NFC)
Nikita Popov [Fri, 14 Jul 2023 08:51:59 +0000 (10:51 +0200)]
[llvm] Remove uses of getNonOpaquePointerElementType() (NFC)
Simon Pilgrim [Fri, 14 Jul 2023 09:34:58 +0000 (10:34 +0100)]
[X86] Fold PACKSS(NOT(X),NOT(Y)) -> NOT(PACKSS(X,Y))
Nikita Popov [Fri, 14 Jul 2023 09:31:09 +0000 (11:31 +0200)]
[HexagonVectorCombine] Remove use of getNonOpaquePointerElementType() (NFC)
David Green [Fri, 14 Jul 2023 09:25:12 +0000 (10:25 +0100)]
[AArch64] Handle 64bit vector s/umull from extracts
This is similar to D153632, but for mul nodes instead of add/sub. They get
recognised in LowerMUL in order to detect the mul(ext, ext), in a way that will
work for i64 nodes as well as i16/i32. This extends it to look for
mul(subvector_extract(ext(x), 0), subvector_extract(ext(y), 0)), generating a
subvector_extract(mull(x,y)) if it matches.
Differential Revision: https://reviews.llvm.org/D154063
Nicolas Vasilache [Fri, 14 Jul 2023 09:22:45 +0000 (11:22 +0200)]
[mlir][memref] NFC - Move utility function declaration from IR/MemRef.h to Utils/MemRefUtils.h
Nicolas Vasilache [Fri, 14 Jul 2023 09:20:00 +0000 (11:20 +0200)]
Revert "[RandomIRBuilder] Remove use of getNonOpaquePointerElementType() (NFC)"
This reverts commit
afdb83b19c674dd2a622697863a201cd44e2458a.
This was landed with a bad description.
Kiran Chandramohan [Fri, 14 Jul 2023 09:05:03 +0000 (09:05 +0000)]
[Flang][OpenMP] Use typed assignment in Atomic Write lowering
Use typed assignment in Atomic Write lowering to better handle
type conversions of allowed types.
Note: We should make similar changes for other constructs in
later patches.
Reviewed By: NimishMishra
Differential Revision: https://reviews.llvm.org/D154163
Markus Böck [Wed, 12 Jul 2023 13:13:18 +0000 (15:13 +0200)]
[mlir][LLVM] Convert alias metadata to using attributes instead of ops
Using MLIR attributes instead of metadata has many advantages:
* No indirection: Attributes can simply refer to each other seemlessly without having to use the indirection of `SymbolRefAttr`. This also gives us correctness by construction in a lot of places as well
* Multithreading save: The Attribute infrastructure gives us thread-safety for free. Creating operations and inserting them into a block is not thread-safe. This is a major use case for e.g. the inliner in MLIR which runs in parallel
* Easier to create: There is no need for a builder or a metadata region
This patch therefore does exactly that. It leverages the new distinct attributes to create distinct alias domains and scopes in a deterministic and threadsafe manner.
Differential Revision: https://reviews.llvm.org/D155159
Nikita Popov [Fri, 14 Jul 2023 08:54:38 +0000 (10:54 +0200)]
[RandomIRBuilder] Remove use of getNonOpaquePointerElementType() (NFC)
Nikita Popov [Fri, 14 Jul 2023 08:54:38 +0000 (10:54 +0200)]
[RandomIRBuilder] Remove use of getNonOpaquePointerElementType() (NFC)
Nikita Popov [Fri, 14 Jul 2023 08:41:34 +0000 (10:41 +0200)]
[LLParser] Remove checks related to typed pointers (NFC)
Nikita Popov [Fri, 14 Jul 2023 08:37:48 +0000 (10:37 +0200)]
[Verifier] Remove typed pointer verification (NFC)
Nikita Popov [Fri, 14 Jul 2023 08:32:43 +0000 (10:32 +0200)]
[llvm] Remove uses of hasSameElemenTypeAs() (NFC)
Always returns true with opaque pointers.
Nikita Popov [Fri, 14 Jul 2023 07:44:31 +0000 (09:44 +0200)]
[llvm][clang] Remove uses of isOpaquePointerTy() (NFC)
This now always returns true (for pointer types).
Jim Lin [Fri, 14 Jul 2023 06:47:58 +0000 (14:47 +0800)]
[RISCV] Fix required features checking with empty string
In our downstream, we define some intrinsics that don't require any
extra extension enabled. Such as
TARGET_BUILTIN(__builtin_riscv_xxx, "LiLi", "nc", "")
But `split` function's `KeepEmpty` argument is True. Got the error message
error: builtin requires at least one of the following extensions support to be enabled : ''
when we use our customized intrinsic.
Reviewed By: craig.topper, wangpc
Differential Revision: https://reviews.llvm.org/D154596
Haojian Wu [Fri, 14 Jul 2023 07:59:54 +0000 (09:59 +0200)]
[include-cleaner] Bail out in the standalone tool for invalid ignore-headers
flag
Matthias Springer [Fri, 14 Jul 2023 07:49:20 +0000 (09:49 +0200)]
[mlir][vector] VectorToSCF: Omit redundant out-of-bounds check
There was a bug in `TransferWriteNonPermutationLowering`, a pattern that extends the permutation map of a TransferWriteOp with leading transfer dimensions of size ones. These newly added transfer dimensions are always in-bounds, because the starting point of any dimension is in-bounds. VectorToSCF inserts out-of-bounds checks based on the "in_bounds" attribute and dims that are marked as out-of-bounds but that are actually always in-bounds lead to unnecessary "scf.if" ops.
Differential Revision: https://reviews.llvm.org/D155196
Yeting Kuo [Fri, 7 Jul 2023 05:47:48 +0000 (13:47 +0800)]
[RISCV] Narrow types of index operand matched pattern (shl (zext), C).
(shl (zext to iXLenVec), C) is a possible pattern in auto-vectorized code for
indexed loads/stores. But extending to iXLen might be too aggressive, RVV
indexed load/store instructions zero extend their indexed operand to XLEN.
The patch tries to narrow the type of the zero extension. It's benefit to
decrease register pressure.
Reviewed By: craig.topper
Differential Revision: https://reviews.llvm.org/D154687
XinWang10 [Mon, 10 Jul 2023 03:21:02 +0000 (23:21 -0400)]
[X86]Recommit D154193 - Remove TEST in AND32ri+TEST16rr in peephole-opt
Previously we remove a pattern like:
%reg = and32ri %in_reg, 5
... // EFLAGS not changed.
%src_reg = subreg_to_reg 0, %reg, %subreg.sub_index
test64rr %src_reg, %src_reg, implicit-def $eflags
We can remove test64rr since it has same functionality as and subreg_to_reg avoid the opt in previous code, so we handle this case specially.
And this case is also can be opted for the same reason, like:
%reg = and32ri %in_reg, 5
... // EFLAGS not changed.
%src_reg = copy %reg.sub_16bit:gr32
test16rr %src_reg, %src_reg, implicit-def $eflags
The COPY from gr32 to gr16 prevent the opt in previous code too, just handle it specially as what we did for test64rr.
Reviewed By: skan
Differential Revision: https://reviews.llvm.org/D154193
Nikita Popov [Fri, 14 Jul 2023 07:34:46 +0000 (09:34 +0200)]
[llvm] Remove calls to supportsTypedPointers() (NFC)
Always returns false now.
Nikita Popov [Fri, 14 Jul 2023 07:31:55 +0000 (09:31 +0200)]
[llvm] Remove calls to setOpaquePointers() (NFC)
True is the default (and only possible) value.
Nikita Popov [Thu, 13 Jul 2023 09:26:42 +0000 (11:26 +0200)]
[IR] Remove LLVMPointerToElt and LLVMAnyPointerToElt intrinsic types (NFC)
With opaque pointers, LLVMPointerToElt can be replaced by llvm_ptr_ty
and LLVMAnyPointerToElt by llvm_anyptr_ty.
This still leaves LLVMVectorOfAnyPointersToElt, where we can't just
replace with an existing IIT descriptor.
Differential Revision: https://reviews.llvm.org/D155167
Haojian Wu [Fri, 14 Jul 2023 07:08:53 +0000 (09:08 +0200)]
[clangd] Fix an assertion failure in NamedDecl::getName during the prepareRename
getName method required to be called on a simple-identifier NamedDecl,
otherwise it will trigger an assertion.
Reviewed By: kadircet
Differential Revision: https://reviews.llvm.org/D153617
Nikita Popov [Fri, 14 Jul 2023 07:15:11 +0000 (09:15 +0200)]
[MLIR] Remove explicit -opaque-pointers flag from test (NFC)
Nikita Popov [Wed, 12 Jul 2023 12:43:16 +0000 (14:43 +0200)]
[IR] Remove -opaque-pointers option
The test migration to opaque pointers has finished, so we can finally
drop typed pointer support from LLVM \o/
This removes the ability to disable typed pointers, as well as the
-opaque-pointers option, but otherwise doesn't yet touch any API
surface. I'll leave deprecation/removal of compatibility APIs to
future changes.
This also drops a few tests: These are either testing errors that
only occur with typed pointers, or type linking behavior that, to
the best of my knowledge, only applies to typed pointers.
Note that this will break some tests in the experimental SPIRV
backend, because the maintainers have failed to update their tests
in a reasonable time-frame, despite multiple warnings. In accordance
with our experimental target policy, this is not a blocking concern.
This issue is tracked at https://github.com/llvm/llvm-project/issues/60133.
Differential Revision: https://reviews.llvm.org/D155079
pvanhout [Thu, 13 Jul 2023 11:49:43 +0000 (13:49 +0200)]
[AMDGPU] Relax restrictions on unbreakable PHI users in BreakLargePHis
The previous heuristic rejected a PHI if one of its user was an unbreakable PHI, no matter what the other users were.
This worked well in most cases, but there's one case in rocRAND where
it doesn't work. In that case, a PHI node has 2 PHI users where one is
breakable but not the other. When that PHI node isn't broken performance falls by 35%.
Relaxing the restriction to "require that half of the PHI node users are breakable" fixes the issue, and seems like a sensible change.
Solves SWDEV-409648, SWDEV-398393
Reviewed By: #amdgpu, arsenm
Differential Revision: https://reviews.llvm.org/D155184
Martin Storsjö [Thu, 13 Jul 2023 10:52:06 +0000 (13:52 +0300)]
[libcxx] [test] Skip timezone formatting tests on Windows
While these tests do pass in the CI environment, they fail elsewhere.
On GitHub Action runners, they produce '+0000' instead of '-0000' for
the UTC offset, and on local machines, it outputs the UTC offset of
the local timezone.
Differential Revision: https://reviews.llvm.org/D155182
Piotr Fusik [Mon, 10 Jul 2023 18:09:14 +0000 (20:09 +0200)]
[libc++] Implement istringstream members of P0408R7 (Efficient Access to basic_stringbuf's Buffer)
Reviewed By: #libc, Mordante
Differential Revision: https://reviews.llvm.org/D154454
Markus Böck [Thu, 13 Jul 2023 08:39:08 +0000 (10:39 +0200)]
[mlir] Improve syntax of `distinct[n]<unit>`
In cases where memory is of less of a concern (e.g. small attributes where all instances have to be distinct by definition), using `DistinctAttr` with a unit attribute is a useful and conscious way of generating deterministic unique IDs.
The syntax as is however, makes them less useful to use, as it 1) always prints `<unit>` at the back and 2) always aliases them leading to not very useful `#distinct = distinct[n]<unit>` lines in the printer output.
This patch fixes that by special casing `UnitAttr` to simply elide the `unit` attribute in the back and not printing it as alias in that case.
Differential Revision: https://reviews.llvm.org/D155162
Hideto Ueno [Fri, 14 Jul 2023 04:14:48 +0000 (21:14 -0700)]
[mlir] Don't emit forward declaration for user defined storage classes
Currently DefGen::emitDecl always emits forward declarations of storage classes even for user define ones, which makes it difficult to use template class directly in ODS. This patch changes `DefGen` not to emit forward decl when `genStorageClass` is false.
Original discussion: https://discourse.llvm.org/t/use-template-classes-as-user-defined-storage-classes/72015
Reviewed By: mehdi_amini, rriddle
Differential Revision: https://reviews.llvm.org/D155225
Richard Smith [Fri, 14 Jul 2023 02:46:15 +0000 (19:46 -0700)]
Fix comparison of constrained deduced return types in explicit
instantiations.
Fixes #62272.
Sterling Augustine [Fri, 14 Jul 2023 02:22:45 +0000 (19:22 -0700)]
Remove unnecessary std::moves [NFC]
These trigger the following error:
error: moving a temporary object prevents copy elision [-Werror,-Wpessimizing-move]
Weining Lu [Fri, 14 Jul 2023 01:23:53 +0000 (09:23 +0800)]
[XRay] Add initial support for loongarch64
Only support patching FunctionEntry/FunctionExit/FunctionTailExit for now.
Reviewed By: MaskRay, xen0n
Co-Authored-By: zhanglimin <zhanglimin@loongson.cn>
Differential Revision: https://reviews.llvm.org/D140727
Aart Bik [Fri, 14 Jul 2023 00:05:01 +0000 (17:05 -0700)]
[mlir][sparse][gpu] remove zero init memset
avoids quite a big memory fill for each setup
Reviewed By: K-Wu
Differential Revision: https://reviews.llvm.org/D155251
Sergei Barannikov [Fri, 30 Jun 2023 10:51:11 +0000 (13:51 +0300)]
[MC/AsmLexer] Add '?' (Question) token
'?' is a valid token in our downstream target. There seem to be no way
to do target-specific lexing, so just add make AsmParser recognize it.
Reviewed By: MaskRay
Differential Revision: https://reviews.llvm.org/D154202
Sean Fertile [Thu, 13 Jul 2023 19:12:15 +0000 (15:12 -0400)]
[XCOFF][AIX] Peephole optimization for toc-data.
Followup to D101178 - peephole optimization that converts a
load address instruction and a consuming load/store into just the
load/store when its safe to do so.
eg: converts the 2 instruction code sequence
la 4, i[TD](2)
stw 3, 0(4)
to
stw 3, i[TD](2)
Differential Revision: https://reviews.llvm.org/D101470
Noah Goldstein [Fri, 14 Jul 2023 00:13:51 +0000 (19:13 -0500)]
[InstCombine] Transform `icmp eq/ne ({su}div exact X,Y),C` -> `icmp eq/ne X, Y*C`
We can do this if `Y*C` doesn't overflow. This is trivial if `C` is
0/1. Otherwise we actually generate a `mul` instruction iff the `div`
has one use.
Alive2 Links:
udiv: https://alive2.llvm.org/ce/z/GWPW67
sdiv: https://alive2.llvm.org/ce/z/bUoX9h
Reviewed By: nikic
Differential Revision: https://reviews.llvm.org/D150091
Noah Goldstein [Sun, 7 May 2023 21:44:15 +0000 (16:44 -0500)]
[InstCombine] Add tests for `icmp eq/ne ({su}div exact X, Y), C`; NFC
Differential Revision: https://reviews.llvm.org/D150090
Jon Roelofs [Fri, 14 Jul 2023 00:11:08 +0000 (17:11 -0700)]
[DebugInfo] Add missing dependency on intrinsics_gen
boxu.zhang [Wed, 12 Jul 2023 17:44:45 +0000 (10:44 -0700)]
[clang] Support '-fgpu-default-stream=per-thread' for NVIDIA CUDA
I'm using clang to compile CUDA code. And just found that clang doesn't support the per-thread stream option for NV CUDA. I don't know if there is another solution.
Reviewed By: tra
Differential Revision: https://reviews.llvm.org/D154822