Kazu Hirata [Wed, 15 Feb 2023 04:44:15 +0000 (20:44 -0800)]
[mlir] Use std::optional instead of llvm::Optional (NFC)
This is part of an effort to migrate from llvm::Optional to
std::optional:
https://discourse.llvm.org/t/deprecating-llvm-optional-x-hasvalue-getvalue-getvalueor/63716
Kazu Hirata [Wed, 15 Feb 2023 04:33:36 +0000 (20:33 -0800)]
[mlir] Use std::optional instead of llvm::Optional (NFC)
This is part of an effort to migrate from llvm::Optional to
std::optional:
https://discourse.llvm.org/t/deprecating-llvm-optional-x-hasvalue-getvalue-getvalueor/63716
Kazu Hirata [Wed, 15 Feb 2023 04:27:41 +0000 (20:27 -0800)]
[llvm] Use std::optional instead of llvm::Optional (NFC)
This is part of an effort to migrate from llvm::Optional to
std::optional:
https://discourse.llvm.org/t/deprecating-llvm-optional-x-hasvalue-getvalue-getvalueor/63716
Jie Fu [Wed, 15 Feb 2023 03:56:40 +0000 (11:56 +0800)]
[mlir] Fix -Wsign-compare in SparseTensorRewriting.cpp and Sparsification.cpp (NFC)
/home/jiefu/llvm-project/mlir/lib/Dialect/SparseTensor/Transforms/Sparsification.cpp:279:33: error: comparison of integers of different signs: 'int64_t' (aka 'long') and 'const mlir::sparse_tensor::Level' (aka 'const unsigned long') [-Werror,-Wsign-compare]
assert(env.op().getRank(&t) == lvlRank);
~~~~~~~~~~~~~~~~~~~~ ^ ~~~~~~~
/usr/include/assert.h:93:27: note: expanded from macro 'assert'
(static_cast <bool> (expr) \
^~~~
1 error generated.
/home/jiefu/llvm-project/mlir/lib/Dialect/SparseTensor/Transforms/SparseTensorRewriting.cpp:788:29: error: comparison of integers of different signs: 'int64_t' (aka 'long') and 'const mlir::sparse_tensor::Dimension' (aka 'const unsigned long') [-Werror,-Wsign-compare]
assert(srcRTT.getRank() == dimRank);
~~~~~~~~~~~~~~~~ ^ ~~~~~~~
/usr/include/assert.h:93:27: note: expanded from macro 'assert'
(static_cast <bool> (expr) \
^~~~
/home/jiefu/llvm-project/mlir/lib/Dialect/SparseTensor/Transforms/SparseTensorRewriting.cpp:810:31: error: comparison of integers of different signs: 'int64_t' (aka 'long') and 'const mlir::sparse_tensor::Dimension' (aka 'const unsigned long') [-Werror,-Wsign-compare]
assert(srcRTT.getRank() == dimRank);
~~~~~~~~~~~~~~~~ ^ ~~~~~~~
/usr/include/assert.h:93:27: note: expanded from macro 'assert'
(static_cast <bool> (expr) \
^~~~
2 errors generated.
LLVM GN Syncbot [Wed, 15 Feb 2023 03:51:14 +0000 (03:51 +0000)]
[gn build] Port
f1c4241fb6e5
Piyou Chen [Wed, 15 Feb 2023 03:42:26 +0000 (19:42 -0800)]
[RISCV] Add new pass to transform undef to pseudo for vector values.
RISC-V vector instruction has register overlapping constraint for certain
instructions, and will cause illegal instruction trap if violated, we use
early clobber to model this constraint, but it can't prevent register allocator
allocated same or overlapped if the input register is undef value, so convert
IMPLICIT_DEF to temporary pseudo could prevent that happen, it's not best way
to resolve this. Ideally we should model the constraint right, but before we
model the constraint right, it's the approach to prevent that happen.
See also: https://github.com/llvm/llvm-project/issues/50157
Reviewed By: craig.topper
Differential Revision: https://reviews.llvm.org/D129735
Piyou Chen [Wed, 15 Feb 2023 03:29:59 +0000 (19:29 -0800)]
[RISCV] precommit test for D129735
Reviewed By: kito-cheng
Differential Revision: https://reviews.llvm.org/D137763
Chuanqi Xu [Wed, 15 Feb 2023 03:29:29 +0000 (11:29 +0800)]
[NFC] Refactor ModuleDeclStateTest to make it not dependent on Frontend
Required in https://reviews.llvm.org/D137526. And it is indeed odd that
LexTest depends on ClangFrontend.
Lang Hames [Wed, 15 Feb 2023 03:13:41 +0000 (19:13 -0800)]
[ORC] Add ELFNixPlatform::Create overload -- Pass ORC runtime as def generator.
The existing Create method took a path to the ORC runtime and created a
StaticLibraryDefinitionGenerator for it. The new overload takes a
std::unique_ptr<DefinitionGenerator> directly instead. This provides more
flexibility when constructing MachOPlatforms. E.g. The runtime archive can be
embedded in a special section in the ORC controller executable or library,
rather than being on-disk.
This is the ELFNixPlatform equivalent of the MachOPlatform change in
be2fc577c38.
wren romano [Wed, 15 Feb 2023 02:20:45 +0000 (18:20 -0800)]
[mlir][sparse] Factoring out SparseTensorType class
This change adds a new `SparseTensorType` class for making the "dim" vs "lvl" distinction more overt, and for abstracting over the differences between sparse-tensors and dense-tensors. In addition, this change also adds new type aliases `Dimension`, `Level`, and `FieldIndex` to make code more self-documenting.
Although the diff is very large, the majority of the changes are mechanical in nature (e.g., changing types to use the new aliases, updating variable names to match, etc). Along the way I also made many variables `const` when they could be; the majority of which required only adding the keyword. A few places had conditional definitions of these variables, requiring actual code changes; however, that was only done when the overall change was extremely local and easy to extract. All these changes are included in the current patch only because it would be too onerous to split them off into a separate patch.
Reviewed By: aartbik
Differential Revision: https://reviews.llvm.org/D143800
Chuanqi Xu [Wed, 15 Feb 2023 02:59:07 +0000 (10:59 +0800)]
[C++20] [Modules] [ClangScanDeps] Ensure that we can mix the use of and clang modules
Add a test to ensure that the clang-scan-deps won't crash due to the
unexpected use of clang modules.
Owen Pan [Wed, 15 Feb 2023 02:54:36 +0000 (18:54 -0800)]
[clang-format][NFC] Reformat clang/tools/clang-format/fuzzer/
Peiming Liu [Wed, 15 Feb 2023 02:18:54 +0000 (02:18 +0000)]
[mlir][sparse] fix a bug in UnpackOp converter.
UnpackOp Converter used to create reallocOp unconditionally, but it might cause issue when the requested memory size is smaller than the actually storage.
Reviewed By: aartbik
Differential Revision: https://reviews.llvm.org/D144065
chenglin.bi [Wed, 15 Feb 2023 02:33:54 +0000 (10:33 +0800)]
[InstCombine] fold icmp of the sum of ext bool based on limited range
For the pattern `(zext i1 X) + (sext i1 Y)`, the constant range is [-1, 1].
We can simplify the pattern by logical operations. Like:
```
(zext i1 X) + (sext i1 Y) == -1 --> ~X & Y
(zext i1 X) + (sext i1 Y) == 0 --> ~(X ^ Y)
(zext i1 X) + (sext i1 Y) == 1 --> X & ~Y
```
And other predicates can the combination of these results:
```
(zext i1 X) + (sext i1 Y)) != -1 --> X | ~Y
(zext i1 X) + (sext i1 Y)) s> -1 --> X | ~Y
(zext i1 X) + (sext i1 Y)) u< -1 --> X | ~Y
(zext i1 X) + (sext i1 Y)) s> 0 --> X & ~Y
(zext i1 X) + (sext i1 Y)) s< 0 --> ~X & Y
(zext i1 X) + (sext i1 Y)) != 1 --> ~X | Y
(zext i1 X) + (sext i1 Y)) s< 1 --> ~X | Y
(zext i1 X) + (sext i1 Y)) u> 1 --> ~X & Y
```
All alive proofs:
https://alive2.llvm.org/ce/z/KmgDpF
https://alive2.llvm.org/ce/z/fLwWa9
https://alive2.llvm.org/ce/z/ZKQn2P
Fix: https://github.com/llvm/llvm-project/issues/59666
Reviewed By: spatel
Differential Revision: https://reviews.llvm.org/D143373
Liren Peng [Wed, 15 Feb 2023 02:18:41 +0000 (02:18 +0000)]
[SeparateConstOffsetFromGEP] Fix: `b - a` matched `a - b` during reuniteExts
During the SeparateConstOffsetFromGEP pass, a - b and b - a will be
considered equivalent in some instances.
An example- the IR contains:
BB1:
%add = add %a, 511
br label %BB2
BB2:
%sub2 = sub %b, %a
br label %BB3
BB3:
%sub1 = sub %add, %b
%gep = getelementptr float, ptr %p, %sub1
Step 1 in the SeparateConstOffsetFromGEP pass, after split constant index:
BB1:
%add = add %a, 511
br label %BB2
BB2:
%sub2 = sub %b, %a
br label %BB3
BB3:
%sub.t = sub %a, %b
%gep.base = getelementptr float, ptr %p, %sub.t
%gep = getelementptr float, ptr %gep.base, 511
Step 2, after reuniteExts:
BB1:
br label %BB2
BB2:
%sub2 = sub %b, %a
br label %BB3
BB3:
%gep.base = getelementptr float, ptr %p, %sub2
%gep = getelementptr float, ptr %gep.base, 511
Obviously, reuniteExts treated a - b and b - a as equivalent.
This patch fixes that.
Reviewed By: nikic, spatel
Differential Revision: https://reviews.llvm.org/D143542
chenglin.bi [Wed, 15 Feb 2023 02:31:27 +0000 (10:31 +0800)]
[Instcombine] Precommit tests for icmp range; NFC
Liren Peng [Wed, 15 Feb 2023 01:22:31 +0000 (01:22 +0000)]
[NFC][SeparateConstOffsetFromGEP] Added flag `lower-gep`
We need such a flag to check whether the transformation is correct if
LowerGEP was enabled.
Reviewed By: nikic, arsenm, spatel
Differential Revision: https://reviews.llvm.org/D143980
Fangrui Song [Wed, 15 Feb 2023 01:42:48 +0000 (17:42 -0800)]
eopXD [Thu, 9 Feb 2023 18:14:59 +0000 (10:14 -0800)]
[Clang][RISCV] Guard vector int64, float32, float64 with semantic analysis
Depends on D143657
Reviewed By: craig.topper
Differential Revision: https://reviews.llvm.org/D143665
Jie Fu [Wed, 15 Feb 2023 01:31:16 +0000 (09:31 +0800)]
[mlir] Fix two build warnings in VectorToGPU (NFC)
In file included from /data/llvm-project/mlir/lib/Conversion/VectorToGPU/VectorToGPU.cpp:13:
/data/llvm-project/mlir/include/mlir/Conversion/VectorToGPU/VectorToGPU.h:15:1: error: class 'LogicalResult' was previously declared as a struct; this is valid, but may result in linker errors under the Microsoft C++ ABI [-Werror,-Wmismatched-tags]
class LogicalResult;
^
/data/llvm-project/mlir/include/mlir/Support/LogicalResult.h:26:22: note: previous use is here
struct [[nodiscard]] LogicalResult {
^
/data/llvm-project/mlir/include/mlir/Conversion/VectorToGPU/VectorToGPU.h:15:1: note: did you mean struct here?
class LogicalResult;
^~~~~
struct
/data/llvm-project/mlir/lib/Conversion/VectorToGPU/VectorToGPU.cpp:724:5: error: ignoring return value of function declared with 'nodiscard' attribute [-Werror,-Wunused-result]
rewriter.notifyMatchFailure(
^~~~~~~~~~~~~~~~~~~~~~~~~~~
2 errors generated.
Arthur Eubanks [Wed, 15 Feb 2023 01:33:15 +0000 (17:33 -0800)]
[gn build] Add missing count dependency for check-asan
Chia-hung Duan [Wed, 15 Feb 2023 01:23:13 +0000 (01:23 +0000)]
[scudo] Update ring buffer test to make it accept zero size
allocation ring buffer is allowed to be zero. Update the logic in the
test so that on the platform that disables it won't fail this case.
Reviewed By: fmayer
Differential Revision: https://reviews.llvm.org/D144055
Fangrui Song [Wed, 15 Feb 2023 01:23:15 +0000 (17:23 -0800)]
[LoopUnrollAndJam] Remove legacy pass
Following recent changes to remove non-core features of the legacy PM/optimization pipeline.
Chia-hung Duan [Fri, 10 Feb 2023 21:54:03 +0000 (21:54 +0000)]
[scudo] Add the thread-safety annotations
This CL adds the proper thread-safety annotations for most of the
functions and variables. However, given the restriction of the current
architecture, in some cases, we may not be able to use the annotations
easily. The followings are two exceptions,
1. enable()/disable(): Many structures in scudo are enabled/disabled by
acquiring the lock in each instance. This makes those structure act
like a `lock`. We can't mark those functions with ACQUIRE()/RELEASE()
because that makes the entire allocator become another `lock`. In the
end, that implies we need to *acquire* the `allocator` before each
malloc et al. request. Therefore, adding a variable to tell the
status of those structures may be a better way to cooperate with
thread-safety annotation.
2. TSD/TSD shared/TSD exclusive: These three have simiar restrictions as
mentioned above. In addition, they don't always need to be released
if it's a thread local instance. However, thread-safety analysis
doesn't support conditional branch. Which means we can't mark the
proper annotations around the uses of TSDs. We may consider to make
it consistent and which makes the code structure simpler.
This CL is supposed to introduce the annotations with the least code
refactoring. So only trivial thread safety issues will be addressed
here. For example, lacking of acquiring certain lock before accessing
certain variables will have the ScopedLock inserted. Other than that,
they are supposed to be done in the later changes.
Reviewed By: cferris
Differential Revision: https://reviews.llvm.org/D140706
WANG Xuerui [Tue, 14 Feb 2023 00:39:19 +0000 (08:39 +0800)]
[LoongArch] Make use of addu16i.d for adds with suitable immediates
Ideally `addu16i.d` could be paired with `{ld,st}ptr` for faster memory
accesses with 32-bit-aligned offsets (it was designed for this purpose),
but it would require more work and the original use case (GP-relative
accesses) does not exist any more with the current LoongArch psABI.
It could still be used for accelerating additions of certain constants
though, which is what this patch intends to do.
Reviewed By: SixWeining, gonglingqin
Differential Revision: https://reviews.llvm.org/D143710
WANG Xuerui [Tue, 14 Feb 2023 00:39:12 +0000 (08:39 +0800)]
[LoongArch] Add baseline tests for `addu16i.d` codegen. NFC
Reviewed By: gonglingqin
Differential Revision: https://reviews.llvm.org/D143846
Weining Lu [Tue, 14 Feb 2023 00:36:43 +0000 (08:36 +0800)]
[Clang][Test] Add llvm-lto, llvm-lto2 and llvm-profdata to the tool substitutions list
Similar to issue fixed in D107155, some lit tests invoke `llvm-lto`,
`llvm-lto2` and `llvm-profdata` without going through the substitution
system. While the test runner correctly picks up these binaries from
the build directory, it doesn't print its absolute path. When copying
the invocations when reproducing test failures, this can result in
`command not found: llvm-lto` or other errors (caused by using wrong
version of the tool).
This patch adds these tools to the `tools` variable in
`clang/test/lit.cfg.py` which will then call add_tool_substitutions.
Reviewed By: dblaikie
Differential Revision: https://reviews.llvm.org/D143806
Noah Goldstein [Wed, 15 Feb 2023 01:12:54 +0000 (19:12 -0600)]
Remove trailing whitespace in `X86InstrAVX512.td`; NFC
Summary:
Reviewers:
Subscribers:
Noah Goldstein [Wed, 15 Feb 2023 01:12:27 +0000 (19:12 -0600)]
Remove incorrect comment around `truncateAVX512SetCCNoBWI`; NFC
Differential Revision: https://reviews.llvm.org/D144060
Noah Goldstein [Tue, 14 Feb 2023 01:39:42 +0000 (19:39 -0600)]
Add transform (and/or (icmp eq/ne (A, C)), (icmp eq/ne (A, -C))) -> (icmp eq/ne (ABS A), ABS(C))
This can be beneficial if there is a fast `ABS` (For example with X86
`vpabs`) or if there is a dominating ABS(A) in the `DAG`.
Note `C` is constant so `ABS(C)` is just a constant.
Alive2 Links:
EQ: https://alive2.llvm.org/ce/z/829F-c
NE: https://alive2.llvm.org/ce/z/tsS8bU
Reviewed By: pengfei
Differential Revision: https://reviews.llvm.org/D142601
Noah Goldstein [Tue, 14 Feb 2023 01:40:02 +0000 (19:40 -0600)]
Tests for (and/or (icmp eq/ne A, C), (icmp eq/ne A, -C)) <--> (icmp eq/ne (ABS A), ABS(C)); NFC
Reviewed By: pengfei
Differential Revision: https://reviews.llvm.org/D142600
Noah Goldstein [Tue, 14 Feb 2023 01:40:18 +0000 (19:40 -0600)]
Transform `(icmp eq/ne Abs(A), Pow2)` -> `(and/or (icmp eq/ne A,Pow2), (icmp eq/ne A,-Pow2))`
Only if Abs(A) has one use, in which case the `(and/or (icmp eq/ne
A,Pow2), (icmp eq/ne A,-Pow2))` can be optimized in
`DAGCombiner::foldAndOrOfSETCC`.
Alive Links:
EQ: https://alive2.llvm.org/ce/z/gTxSgV
NE: https://alive2.llvm.org/ce/z/MUf57Y
Reviewed By: RKSimon
Differential Revision: https://reviews.llvm.org/D142345
Noah Goldstein [Tue, 14 Feb 2023 01:40:35 +0000 (19:40 -0600)]
Add Transform for `(and/or (eq/ne A,Pow2),(eq/ne A,-Pow2))`->`(eq/ne (and (and A,Pow2),~(Pow2*2)), 0)`
In many instances this can be preferable if the `icmp` -> `i1` cannot be
done in one instruction (such as X86 for scalars).
At the moment guarded behind `TLI.isDesirableToCombineLogicOpOfSETCC`.
alive2 links:
https://alive2.llvm.org/ce/z/nLm5sN
https://alive2.llvm.org/ce/z/moEcyE
Reviewed By: RKSimon
Differential Revision: https://reviews.llvm.org/D142344
Noah Goldstein [Tue, 14 Feb 2023 01:40:50 +0000 (19:40 -0600)]
Add tests for folding `(and/or (icmp eq/ne A, Pow2), (icmp eq/ne A, -Pow2))`; NFC
Differential Revision: https://reviews.llvm.org/D142343
Noah Goldstein [Tue, 14 Feb 2023 01:39:05 +0000 (19:39 -0600)]
Transform vector SET{LE/ULT/ULE} -> SETLT and SET{GE/UGT/UGE} -> SETGT if possible
SETLT and SETGT can use `{v}pcmpgt` directly whereas the other SETCC
variants require some other instructions as well. On AVX512, which has
vector comparisons for all SETCC variants, this can still be
preferable if the destination is a vector. And if the destination is a
mask, its the same performance.
The transform for unsigned SETCC takes place if we know from
`KnownBits` that LHS/RHS have the same sign.
The transform for LE/GE -> LT/GT takes place if LHS/RHS is constant
and we can inc/dec all elements in the operand without overflowing
(both signed and unsigned).
Alive2 Links (on i8 so they don't timeout):
sge_s: https://alive2.llvm.org/ce/z/rMPt9_
sge_s_2: https://alive2.llvm.org/ce/z/G74Mhs
sge_u: https://alive2.llvm.org/ce/z/PTWARM
sge_u_2: https://alive2.llvm.org/ce/z/L9dsNn
sgt_s: https://alive2.llvm.org/ce/z/q2CHEK
sgt_u: https://alive2.llvm.org/ce/z/YPLnZ8
sle_s: https://alive2.llvm.org/ce/z/HyYhQ_
sle_s_2: https://alive2.llvm.org/ce/z/ck6NkT
sle_u: https://alive2.llvm.org/ce/z/tyF_wN
sle_u_2: https://alive2.llvm.org/ce/z/et8t98
slt_s: https://alive2.llvm.org/ce/z/oCP43b
slt_u: https://alive2.llvm.org/ce/z/EpLLPx
uge_s: https://alive2.llvm.org/ce/z/rqSDwi
uge_s_2: https://alive2.llvm.org/ce/z/67UTXu
uge_u: https://alive2.llvm.org/ce/z/yBNG9C
uge_u_2: https://alive2.llvm.org/ce/z/UhHYc_
ugt_s: https://alive2.llvm.org/ce/z/tY9va4
ugt_u: https://alive2.llvm.org/ce/z/F9zeAT
ule_s: https://alive2.llvm.org/ce/z/1MNgka
ule_s_2: https://alive2.llvm.org/ce/z/oiS7Ls
ule_u: https://alive2.llvm.org/ce/z/8DveC3
ule_u_2: https://alive2.llvm.org/ce/z/jGp2M7
ult_s: https://alive2.llvm.org/ce/z/chzfwP
ult_u: https://alive2.llvm.org/ce/z/Jj_JYu
Reviewed By: RKSimon
Differential Revision: https://reviews.llvm.org/D142254
Nicolas Vasilache [Wed, 15 Feb 2023 00:04:05 +0000 (16:04 -0800)]
[mlir][Vector] NFC - Fail gracefully on size mismatch instead of assert
Nicolas Vasilache [Fri, 10 Feb 2023 15:22:30 +0000 (07:22 -0800)]
[mlir][Vector] Significantly improve VectorToGPU.cpp
This revision performs a bunch of cleanups and tracks free-flowing IR mutations.
APIs are systematized around RewriterBase and relevant debug messages are added.
Deliberate use of OpBuilder::InsertionGuard is added where needed.
Differential Revision: https://reviews.llvm.org/D143738
Jeremy Maitin-Shepard [Wed, 15 Feb 2023 00:21:42 +0000 (16:21 -0800)]
[Support/BLAKE3] Rename blake3_* -> llvm_blake3_* to avoid symbol collisions
While some blake3 symbols are already prefixed, a number of symbols with hidden visibility have been left without an `llvm_` prefix. This results in symbol collisions when statically linking llvm into a binary that also uses the external blake3 library.
Reviewed By: akyrtzi, MaskRay
Differential Revision: https://reviews.llvm.org/D143981
Fangrui Song [Wed, 15 Feb 2023 00:12:00 +0000 (16:12 -0800)]
[LoopVersioning] Remove legacy pass
Following recent changes to remove non-core features of the legacy PM/optimization pipeline.
Sanjay Patel [Wed, 15 Feb 2023 00:09:51 +0000 (19:09 -0500)]
[InstSimplify] fix/improve folding with an SNaN vector element operand
Follow-up to the equivalent change for scalars:
D143505 /
83ba349ae0a8
Sanjay Patel [Tue, 14 Feb 2023 23:07:34 +0000 (18:07 -0500)]
[InstSimplify] add tests for vectors with SNaN constants; NFC
Coverage for extension of functionality from D143505.
Fangrui Song [Wed, 15 Feb 2023 00:00:49 +0000 (16:00 -0800)]
[LoopLoadElimination] Remove legacy pass
Following recent changes to remove non-core features of the legacy PM/optimization pipeline.
Alex Brachet [Tue, 14 Feb 2023 23:54:25 +0000 (23:54 +0000)]
[Driver] Allow test to use lld-link.exe not just lld-link
Fangrui Song [Tue, 14 Feb 2023 23:51:09 +0000 (15:51 -0800)]
[LoopDistribute] Remove legacy pass
Following recent changes to remove non-core features of the legacy PM/optimization pipeline.
Vasileios Porpodas [Tue, 14 Feb 2023 22:33:20 +0000 (14:33 -0800)]
Recommit: [NFC][IR] Make Module::getGlobalList() private
This reverts commit
cb5f239363a3c94db5425c105fcd45e77d2a16a9.
Igor Zhukov [Tue, 14 Feb 2023 23:00:43 +0000 (06:00 +0700)]
[libc++] `<algorithm>`: `ranges::minmax` should dereference iterators only once
Reviewed By: philnik, #libc
Differential Revision: https://reviews.llvm.org/D142864
Sanjay Patel [Tue, 14 Feb 2023 22:49:40 +0000 (17:49 -0500)]
[InstSimplify] fix/improve folding with an SNaN operand
There are 2 issues here:
1. In the default LLVM FP environment (regular FP math instructions),
SNaN is some flavor of "don't care" which we will nail down in
D143074, so this is just a quality-of-implementation improvement
for default FP.
2. In the constrained FP environment (constrained intrinsics), SNaN
must not propagate through a math operation; it has to be quieted
according to IEEE-754 spec. That is independent of exception
handling mode, so the current behavior is a miscompile.
Differential Revision: https://reviews.llvm.org/D143505
Sanjay Patel [Tue, 14 Feb 2023 19:15:15 +0000 (14:15 -0500)]
[InstCombine] add test for loop-invariant fdiv; NFC
Adding baseline test based on D87479, so we know
current state and limitations of a potential fix.
Jakub Kuderski [Tue, 14 Feb 2023 22:48:43 +0000 (17:48 -0500)]
[mlir][spirv] Validate float type bitwidths
Not all float types are supported in SPIR-V.
Fixes: https://github.com/llvm/llvm-project/issues/60199
Reviewed By: antiagainst
Differential Revision: https://reviews.llvm.org/D144043
Martin Storsjö [Tue, 14 Feb 2023 09:37:10 +0000 (11:37 +0200)]
[openmp] Fix building for mingw targets after import library changes
06d9bf5e64d472db5485815d9c3f70631064bb25 (https://reviews.llvm.org/D143431)
did a large restructuring of how the import library is created;
previously, a second step to tweak the import library was only
done for MSVC style targets, but after this commit, that logic
was applied for mingw targets too.
Since LIBOMP_GENERATED_IMP_LIB_FILENAME and LIBOMP_IMP_LIB_FILE
are equal on mingw targets (both are "libomp.dll.a", while they
are "libomp.dll.lib" and "libomp.lib" for MSVC targets), this caused
a conflict, with errors like this:
ninja: error: build.ninja:875: multiple rules generate runtime/src/libomp.dll.a [-w dupbuild=err]
Skip the logic with a second step to recreate the import library
for mingw targets. The MSVC specific logic for this relies on
running the static archiver with CMAKE_LINK_DEF_FILE_FLAG, which
with MS lib.exe (and llvm-lib) ignore the input object files and
just generates an import library - but mingw style tools don't
support this mode of operation. (By attemptinig the same, mingw tools
would generate a static library with the def file as one member.)
With mingw tools, the same can be achieved by invoking the dlltool
executable instead.
Instead of adding alternative logic for invoking dlltool, just skip
the second import library step, since neither GNU nor LLVM mingw
tools actually generate import libraries that link by ordinal - so
there's no need for a second import library.
Differential Revision: https://reviews.llvm.org/D143992
Vasileios Porpodas [Tue, 14 Feb 2023 22:28:02 +0000 (14:28 -0800)]
Revert "[NFC][IR] Make Module::getGlobalList() private"
This reverts commit
ed3e3ee9e30dfbffd2170a770a49b36a7f444916.
Louis Dionne [Tue, 14 Feb 2023 22:27:56 +0000 (17:27 -0500)]
[runtimes] Remove duplicate imports of libcxx.test.config
Owen Pan [Sat, 11 Feb 2023 23:20:38 +0000 (15:20 -0800)]
[clang-format] Don't rewrite the input file if already formatted
If IntegerLiteralSeparator is set but the integer literals are
already formatted, don't rewrite the input file.
Fixes #60651.
Differential Revision: https://reviews.llvm.org/D143831
Vasileios Porpodas [Wed, 8 Feb 2023 18:13:01 +0000 (10:13 -0800)]
[NFC][IR] Make Module::getGlobalList() private
This patch adds several missing GlobalList modifier functions, like
removeGlobalVariable(), eraseGlobalVariable() and insertGlobalVariable().
There is no longer need to access the list directly so it also makes
getGlobalList() private.
Differential Revision: https://reviews.llvm.org/D144027
Louis Dionne [Tue, 14 Feb 2023 18:01:18 +0000 (13:01 -0500)]
[runtimes] Rename newconfig.py to config.py -- it's not new anymore
Differential Revision: https://reviews.llvm.org/D144031
Raphael Isemann [Tue, 14 Feb 2023 21:55:46 +0000 (22:55 +0100)]
[lldb] Disable macro redefinition warnings in expression wrapper
GCC emits macro definitions into debug info when compiling with `-g3`. LLDB is
translating this information into `#define` directives which are injected into
the source code of user expressions. While this mechanism itself works fine,
it can lead to spurious "... macro redefined" warnings when the defined macro
is also a builtin Clang macro:
```
warning: <lldb wrapper prefix>:46:9: '__VERSION__' macro redefined
^
<built-in>:19:9: previous definition is here
[repeated about a 100 more times for every builtin macro]
```
This patch just disables the diagnostic when parsing LLDB's generated list of
macros definitions.
Reviewed By: Michael137
Differential Revision: https://reviews.llvm.org/D139740
Brendon Cahoon [Tue, 14 Feb 2023 18:04:43 +0000 (12:04 -0600)]
[InstCombine] Increase limit for max copied from constant fold
Increasing the limits fixes several performance regressions.
Differential revision: https://reviews.llvm.org/D144032
Ye Luo [Tue, 14 Feb 2023 19:38:24 +0000 (13:38 -0600)]
[OpenMP] Recover non-blocking target nowait disabled by D141232
Reviewed By: jdoerfert
Differential Revision: https://reviews.llvm.org/D143871
Jim Ingham [Tue, 14 Feb 2023 21:09:16 +0000 (13:09 -0800)]
Report a useful error when someone passes an incorrect python class name.
Florian Mayer [Tue, 14 Feb 2023 21:45:39 +0000 (13:45 -0800)]
Revert "llvm-reduce: Run instruction reduction last"
This reverts commit
463ab1e07a0a15a9aa129639048e29e0f8ec4dc8.
Nick Desaulniers [Tue, 14 Feb 2023 21:31:11 +0000 (13:31 -0800)]
[llvm][test] convert one test to use opaque ptrs (NFC)
Reviewed By: nikic
Differential Revision: https://reviews.llvm.org/D143682
Haowei Wu [Mon, 13 Feb 2023 23:35:02 +0000 (15:35 -0800)]
[Fuchsia] Set /winsysroot in Windows runtimes linker flags
This patch sets '/winsysroot' flag when building Windows runtimes so we
don't have to explicitly set Windows library search paths.
Differential Revision: https://reviews.llvm.org/D143960
Nick Desaulniers [Tue, 14 Feb 2023 21:27:24 +0000 (13:27 -0800)]
[llvm][test] restrict 2 GVN tests to just test GVN (NFC)
Reviewed By: nikic
Differential Revision: https://reviews.llvm.org/D143681
Hui [Tue, 24 Jan 2023 19:06:07 +0000 (19:06 +0000)]
[libc++][NFC] update Range Status for the completion of C++20 ranges
Differential Revision: https://reviews.llvm.org/D142494
Arthur Eubanks [Tue, 14 Feb 2023 21:20:37 +0000 (13:20 -0800)]
[IPSCCP] Remove legacy pass
This is part of the optimization pipeline, of which the legacy pass manager version is deprecated.
Pavel Kopyl [Fri, 10 Feb 2023 22:36:24 +0000 (23:36 +0100)]
[NFC] Replace -1U{LL} expressions with appropriate *_MAX macros in Support library.
This makes a code a bit more clear and also gets rid of C4146 warning
on MSVC compiler:
'unary minus operator applied to unsigned type, result still unsigned'.
In case uint64_t variable is initialized or compared against -1U expression,
which corresponds to 32-bit constant, UINT_MAX macro is used to preserve
NFC semantics; -1ULL is replaced with UINT64_MAX.
Reviewed By: dblaikie, craig.topper
Differential Revision: https://reviews.llvm.org/D143942
Jakub Kuderski [Tue, 14 Feb 2023 21:11:34 +0000 (16:11 -0500)]
[mlir][spirv] Fix crash when decorating physical storage buffer pointers
Add a comment explaining `PhysicalStorageBufferAddresses` are not
supported yet.
Fixes: https://github.com/llvm/llvm-project/issues/60196
Reviewed By: antiagainst
Differential Revision: https://reviews.llvm.org/D144039
Leonard Chan [Tue, 14 Feb 2023 19:59:15 +0000 (19:59 +0000)]
Reland "[compiler-rt][hwasan] Add unused attribute to GetRegisters"
This was reverted bc of breakage on Fuchsia, but we landed a local fix
for this.
Alex Bradbury [Tue, 14 Feb 2023 21:03:50 +0000 (21:03 +0000)]
[clang][test][RISCV] Introduce separate RUN lines for __risv_i test in riscv-target-features.c
Craig Topper pointed out in post-commit review of
d05e1e99b1d that the
series of CHECK-NOT lines followed by CHECK would not work as intended
if __riscv_i came first in the input and was followed by the disallowed
lines.
The simplest solution is to just introduced separate RUN lines for the
__riscv_i check.
Arthur Eubanks [Tue, 14 Feb 2023 20:51:15 +0000 (12:51 -0800)]
[GlobalOpt] Remove legacy pass
This is part of the optimization pipeline, of which the legacy pass manager version is deprecated.
Nico Weber [Tue, 14 Feb 2023 20:42:31 +0000 (15:42 -0500)]
ibricchi [Tue, 14 Feb 2023 20:32:26 +0000 (15:32 -0500)]
[InlineAdvisor] Restructure advisor plugin unittest cmake
Move the plugin used in the unittest to test Inline Advisor Plugins
into a separate folder to clean up the cmake file for the analysis
tests.
Reviewed By: mtrofin, thakis
Differential Revision: https://reviews.llvm.org/D140559
Jake Egan [Tue, 14 Feb 2023 20:13:28 +0000 (15:13 -0500)]
Revert "[CGP] Add generic TargetLowering::shouldAlignPointerArgs() implementation"
These commits are causing a test-suite build failure on AIX. Revert for now for time to investigate.
https://lab.llvm.org/buildbot/#/builders/214/builds/5779/steps/9/logs/stdio
This reverts commit
bd87a2449da0c82e63cebdf9c131c54a5472e3a7 and
4c72266830ffa332ebb7cf1d3bbd6c56d001fa0f.
Stanislav Mekhanoshin [Mon, 13 Feb 2023 19:36:12 +0000 (11:36 -0800)]
[AMDGPU] Do not apply schedule metric for regions with spilling
D139710 has added a metric to increase schedule's ILP while
staying within the same occupancy. Do not bother to apply this
metric to a region which is known to have spilling, it may result
in spilling to reappear after the previous stage and will do no
good if we already spilling anyway. It may also reduce compile
time a bit for such regions.
Fixes: SWDEV-377300
Differential Revision: https://reviews.llvm.org/D143934
Mark de Wever [Tue, 14 Feb 2023 20:03:34 +0000 (21:03 +0100)]
[libc++][doc] Sets the proper plenary date.
Mircea Trofin [Mon, 13 Feb 2023 21:39:21 +0000 (13:39 -0800)]
[loop unroll] Fix `branch-weights` for unrolled loop.
The branch weights of the unrolled loop need to be reduced by the
unroll factor.
Differential Revision: https://reviews.llvm.org/D143948
Vasileios Porpodas [Tue, 7 Feb 2023 17:47:03 +0000 (09:47 -0800)]
[NFC][IR] Make Module::getNamedMDList() private
This patch adds several missing NamedMDList modifier functions, like
removeNamedMDNode(), eraseNamedMDNode() and insertNamedMDNode().
There is no longer need to access the list directly so it also makes
getNamedMDList() private.
Differential Revision: https://reviews.llvm.org/D143969
Jason Molenda [Tue, 14 Feb 2023 19:29:19 +0000 (11:29 -0800)]
[LLDB] add arch-specific watchpoint behavior defaults to lldb
lldb was originally designed to get the watchpoint exception behavior
from the gdb remote serial protocol stub -- exceptions are either
received before the instruction executes, or after the instruction
has executed. This behavior was reported via two lldb extensions
to gdb RSP, so generic remote stubs like gdbserver or a JTAG stub,
would not tell lldb which behavior was correct, and it would default
to "exceptions are received after the instruction has executed".
Two architectures hard coded their correct "exceptions before
instruction" behavior, to work around this issue.
Most architectures have a fixed behavior of watchpoint exceptions,
and we can center that information in lldb. We can allow a remote
stub to override the default behavior via our packet extensions
if it's needed on a specific target.
This patch also separates the fetching of the number of watchpoints
from whether exceptions are before/after the insn. Currently if
lldb couldn't fetch the number of watchpoints (not really needed), it
also wouldn't get when exceptions are received, and watchpoint
handling would fail. lldb doesn't actually use the number of
watchpoints for anything beyond printing it to the user.
Differential Revision: https://reviews.llvm.org/D143215
rdar://
101426626
Jez Ng [Tue, 14 Feb 2023 19:34:19 +0000 (14:34 -0500)]
[lld-macho] Account for alignment in thunk insertion algorithm
We previously neglected this, leading us to underestimate the maximum
possible branch address offset.
Fixing this should allow us to reduce `slop` to more reasonable
levels. I've lowered it to 256 for now, though I suspect we could go
lower.
Fixes https://github.com/llvm/llvm-project/issues/59259.
Reviewed By: serge-sans-paille
Differential Revision: https://reviews.llvm.org/D144029
Philipp Tomsich [Tue, 14 Feb 2023 19:28:48 +0000 (20:28 +0100)]
[RISCV] Untabify THMulAccumulate_rr. NFC.
Manolis Tsamis [Tue, 14 Feb 2023 18:43:00 +0000 (19:43 +0100)]
[RISCV] Add vendor-defined XTheadMAC (multiply-accumulate) extension
The vendor-defined XTHeadMAC (no comparable standard extension exists
at the time of writing) extension adds multiply accumulate instructions.
It is supported by the C9xx cores (e.g., found in the wild in the
Allwinner D1) by Alibaba T-Head.
The current (as of this commit) public documentation for this
extension is available at:
https://github.com/T-head-Semi/thead-extension-spec/releases/download/2.2.2/xthead-2023-01-30-2.2.2.pdf
Support for these instructions has already landed in GNU Binutils:
https://sourceware.org/git/?p=binutils-gdb.git;a=commit;h=
4041e11db3ec3611921d10150572a92689aa3154
Co-authored-by: Philipp Tomsich <philipp.tomsich@vrull.eu>
Reviewed By: craig.topper
Differential Revision: https://reviews.llvm.org/D143847
Prabhdeep Singh Soni [Fri, 27 Jan 2023 14:53:02 +0000 (09:53 -0500)]
[MLIR][OpenMP] Add support for depend clause
This patch adds support for the OpenMP 4.0 depend clause (in, out,
inout) of the task construct to the definition of the OpenMP MLIR
dialect and translation from MLIR to LLVM IR using OMPIRBuilder.
Reviewed By: kiranchandramohan
Differential Revision: https://reviews.llvm.org/D142730
Nico Weber [Tue, 14 Feb 2023 19:13:56 +0000 (14:13 -0500)]
[gn] port
4e3dac6f0a4c (ScudoHooksUnitTest)
Andrzej Warzynski [Mon, 6 Feb 2023 18:53:00 +0000 (18:53 +0000)]
[mlir][linalg] Make Linalg vectorizer lower affine.apply
As discussed in [1], it is possible that the input to the Linalg
vectorizer contains `affine.apply` ops. Such operations are not
vectarizable at the moment, but this can be fixed by simply converting
them to arithmetic operations. This is basically what this patch
introduces.
The IR change enabled in this patch could be part of a larger set of
"linalgOp pre-processing" transformations that happens right before
vectorization starts but after we know we can vectorize the op. I am
leaving this as a TODO.
[1] https://github.com/iree-org/iree/issues/10876
Differential Revision: https://reviews.llvm.org/D143429
Co-authored-by: Thomas Raoux <thomasraoux@google.com>
Guillaume Chelfi [Tue, 14 Feb 2023 18:44:37 +0000 (18:44 +0000)]
[scudo] Call __scudo_deallocate_hook on reallocations.
Scudo is expected to call __scudo_allocate_hook on allocations, and
__scudo_deallocate_hook on deallocations, but it's behavior is not
clear on reallocations. Currently, non-trivial reallocations call
__scudo_allocate_hook but never __scudo_deallocate_hook. We should
prefer either calling both, none, or a dedicated
hook (__scudo_reallocate_hook, for instance).
This patch implements the former, and adds a unit test to enforce
those expectations.
Reviewed By: Chia-hungDuan
Differential Revision: https://reviews.llvm.org/D141407
Tue Ly [Tue, 14 Feb 2023 17:36:07 +0000 (12:36 -0500)]
[libc][doc] Move docs/math.rst to docs/math/index.rst
Move docs/math.rst to docs/math/index.rst
Reviewed By: michaelrj
Differential Revision: https://reviews.llvm.org/D144028
Alexey Bataev [Tue, 14 Feb 2023 15:19:45 +0000 (07:19 -0800)]
[OpenMP]Fix PR55970: Miscompile of collapse(3) with non-rectangular loop nest.
Need to assign the calculated lower bound back to temp variable,
otherwise incorrect value (upper bound instead of lower bound) might be
used.
Differential Revision: https://reviews.llvm.org/D144015
LLVM GN Syncbot [Tue, 14 Feb 2023 18:25:58 +0000 (18:25 +0000)]
[gn build] Port
7f5d130a428f
Kévin Petit [Tue, 14 Feb 2023 18:26:42 +0000 (18:26 +0000)]
libclc: add clspv to targets exempt from alwaysinline
https://reviews.llvm.org/D132362
Patch by: Aaron Greig <aaron.greig@codeplay.com>
Kévin Petit [Tue, 14 Feb 2023 18:23:35 +0000 (18:23 +0000)]
libclc: add generated convert.cl to clspv/clspv64 targets
https://reviews.llvm.org/D136772
Patch by: Aaron Greig <aaron.greig@codeplay.com>
Mark de Wever [Thu, 2 Feb 2023 18:41:01 +0000 (19:41 +0100)]
[libc++][format] Fixes test failures.
Using some builds the modular build fails due to missing exports
and includes. This fixes the build.
Reviewed By: #libc, ldionne
Differential Revision: https://reviews.llvm.org/D143203
Mark de Wever [Sun, 20 Mar 2022 12:40:02 +0000 (13:40 +0100)]
[libc++][chrono] Add hh_mm_ss formatter.
Partially implements:
- P1361 Integration of chrono with text formatting
- P2372 Fixing locale handling in chrono formatters
- P1466 Miscellaneous minor fixes for chrono
Depends on D137022
Reviewed By: ldionne, #libc
Differential Revision: https://reviews.llvm.org/D139771
Quinn Dawkins [Mon, 13 Feb 2023 01:33:10 +0000 (20:33 -0500)]
[mlir][gpu] Add support for unsigned integer extend in vector to gpu.subgroup_mma lowering
Unsigned integer types are supported in subgroup mma ops by matching
against arith.extui ops. This allows for subgroup_mma_compute ops with
mixed signedness which requires later conversions to handle this. SPIR-V
cooperative matrix ops support this while the lowering to WMMA does not.
Differential Revision: https://reviews.llvm.org/D143922
Kévin Petit [Tue, 14 Feb 2023 18:10:44 +0000 (18:10 +0000)]
libclc: add more generic implementations to clspv SOURCES
https://reviews.llvm.org/D134887
Patch by: Aaron Greig <aaron.greig@codeplay.com>
Mark de Wever [Sun, 12 Feb 2023 12:07:49 +0000 (13:07 +0100)]
[libc++][doc] Adds Issaquah papers and issues.
Reviewed By: ldionne, #libc
Differential Revision: https://reviews.llvm.org/D143845
David Green [Tue, 14 Feb 2023 17:58:28 +0000 (17:58 +0000)]
[AArch64] Remove dead isReflexive methods. NFC
These were added in
71f0ec242f348e7d2298 but never used.
Arthur O'Dwyer [Thu, 9 Feb 2023 18:06:52 +0000 (13:06 -0500)]
[libc++] Counter<T>'s assignment operator shouldn't ++gConstructed
This has been here since
d5f461ca03e30, but assigning into an existing
Counter object definitely doesn't create a new object. This causes the
count to "leak" higher and higher, inside algorithms based on swapping.
Peter Klausler [Wed, 1 Feb 2023 23:25:54 +0000 (15:25 -0800)]
[flang][runtime] Handle aliasing in Assign()
Detect and handle LHS/RHS aliasing when effecting intrinsic
assignments via the Assign() runtime function.
Also: don't apply special handling for allocatable LHS when calling
a user-defined type-bound ASSIGNMENT(=) generic procedure for a
polymorphic type, and refactor some code into utility functions to
make Assign() more comprehensible.
Differential Revision: https://reviews.llvm.org/D144026
Kazu Hirata [Tue, 14 Feb 2023 17:52:36 +0000 (09:52 -0800)]
[llvm] Deprecate {Bits,Float,Double}To{Bits,Float,Double} (NFC)
Differential Revision: https://reviews.llvm.org/D143990
Vasileios Porpodas [Tue, 7 Feb 2023 03:43:13 +0000 (19:43 -0800)]
[NFC][IR] Make Module::getIFuncList() private.
This patch adds several missing IFuncList modifier functions, like
removeIFunc(), eraseIFunc() and insertIFunc().
There is no longer need to access the list directly so it also makes
getIFuncList() private.
Differential Revision: https://reviews.llvm.org/D143968