Matt Arsenault [Mon, 12 Dec 2022 03:08:28 +0000 (22:08 -0500)]
InstCombine: Fold and (fcmp), (is.fpclass) into is.fpclass
Fold class test performed by an fcmp into another class. For now this
avoids introducing new class calls then there isn't one that already
exists.
Ziqing Luo [Thu, 9 Feb 2023 01:35:07 +0000 (17:35 -0800)]
[-Wunsafe-buffer-usage] To disable a test on Windows systems.
One of the tests in the commit
'
bdf4f2bea50e87f5b9273e3bbc9a7753bca3a6bb' sometimes fails on one of
the buildbots runing on a Windows machine. For example,
"https://lab.llvm.org/buildbot/#/builders/60/builds/10615" is a failed
build.
Now we disable it until we figure out why this could happen.
Nico Weber [Thu, 9 Feb 2023 01:21:34 +0000 (20:21 -0500)]
[gn] port
79971d0d771a27 (LLVMProfdataTests)
Jan Svoboda [Thu, 9 Feb 2023 00:20:49 +0000 (16:20 -0800)]
[clang][deps] NFC: Refactor inferred modules test
This patch squashes two tests with identical inputs into a single test, and adopts the `split-file` utility. This allows us to remove `sed` invocation with multiple commands, where "s|-E|-x objective-c -E|g" could've caused issues if previous replacements injected path containing "-E".
Reviewed By: benlangmuir
Differential Revision: https://reviews.llvm.org/D143615
TatWai Chong [Thu, 9 Feb 2023 00:37:15 +0000 (16:37 -0800)]
[mlir][tosa] make Select operator broadcastable in the pass
Making Select broadcastable can let this op easier to use.
Change-Id: I4a4bec4f7cbe532e954a5b4fe53136676ab4300c
Reviewed By: rsuderman
Differential Revision: https://reviews.llvm.org/D139156
Davide Bertola [Thu, 9 Feb 2023 00:28:34 +0000 (16:28 -0800)]
add LLVMGetDINodeTag to C bindings
Differential Revision: https://reviews.llvm.org/D138415
Fangrui Song [Thu, 9 Feb 2023 00:16:13 +0000 (16:16 -0800)]
[docs] Update "production quality" targets for lld/ELF
Add RISC-V and update Arm from (>= v6) to (>= v4).
Reviewed By: pirama
Differential Revision: https://reviews.llvm.org/D143543
Fangrui Song [Wed, 8 Feb 2023 23:52:07 +0000 (15:52 -0800)]
[CMake] Fix -DBUILD_SHARED_LIBS=on builds after D141446
Marco Elver [Wed, 8 Feb 2023 23:46:15 +0000 (00:46 +0100)]
[SanitizerBinaryMetadata] Make constructors/destructors hidden
By switching them to external with default visibility, DSOs may not call
their own constructor/destructor. This is incorrect, because they pass
different parameters.
Fix it by marking the ctors/dtors as external linkage but with hidden
visibility.
Reviewed By: MaskRay
Differential Revision: https://reviews.llvm.org/D143611
Terry Wilmarth [Fri, 20 Jan 2023 20:10:04 +0000 (14:10 -0600)]
Fix initialization of th_task_state on each thread on expanding hot teams.
The th_task_state was initialized from the master thread's value, or
from its memo stack, but this causes problems because neither of those
may have the right value at the right time. However, other threads in
the team are guaranteed to have the right values, so we change the
initialize the new threads' th_task_state from the th_task_state of
the last of the older threads in the hot team.
Differential Revision: https://reviews.llvm.org/D142247
Fix #56307.
Aiden Grossman [Wed, 8 Feb 2023 23:15:48 +0000 (23:15 +0000)]
Remove core file that shouldn't have been committed
Aiden Grossman [Wed, 18 Jan 2023 09:26:42 +0000 (09:26 +0000)]
[MLGO] Add BB Profile Dump in AsmPrinter
This patch adds a basic block profile dump option within the AsmPrinter
and dumps basic block profile information so that cost models can use
the data for downstream analysis.
Differential Revision: https://reviews.llvm.org/D143311
Fangrui Song [Wed, 8 Feb 2023 23:08:10 +0000 (15:08 -0800)]
[Lex] Fix -Wunused-variable for LLVM_ENABLE_ASSERTIONS=off builds after D140179
Alexandre Ganea [Wed, 8 Feb 2023 23:01:25 +0000 (18:01 -0500)]
[Support] Clarify CrashRecoveryContext exception codes on Windows. NFC
Differential revision: https://reviews.llvm.org/D143609
Kirill Stoimenov [Wed, 8 Feb 2023 22:52:28 +0000 (22:52 +0000)]
[LSAN] Fix pthread_create interceptor to ignore leaks in real pthread_create.
Reviewed By: vitalybuka
Differential Revision: https://reviews.llvm.org/D143209
Jan Svoboda [Wed, 8 Feb 2023 22:52:53 +0000 (14:52 -0800)]
[clang][cli] Simplify repetitive macro invocations
Since we now only support Visual Studio 2019 16.7 and newer, we're able to use the `/Zc:preprocessor` flag that turns on the standards-conforming preprocessor. It (among other things) correctly expands `__VA_ARGS__` (see https://learn.microsoft.com/en-us/cpp/preprocessor/preprocessor-experimental-overview?view=msvc-170#macro-arguments-are-unpacked). This enables us to get rid of some repetitive boilerplate in Clang's command-line parser/generator.
Reviewed By: Bigcheese
Differential Revision: https://reviews.llvm.org/D135128
Sanjay Patel [Wed, 8 Feb 2023 21:47:55 +0000 (16:47 -0500)]
[InstCombine] canonicalize cmp+select as umin/umax
(V == 0) ? 1 : V --> umax(V, 1)
(V == UMAX) ? UMAX-1 : V --> umin(V, UMAX-1)
https://alive2.llvm.org/ce/z/pfDBAf
This is one pair of the variants discussed in issue #60374.
Enhancements for the other end of the constant range and
signed variants are potential follow-ups, but that may
require more work because we canonicalize at least one
min/max like that to icmp+zext.
Sanjay Patel [Wed, 8 Feb 2023 21:13:05 +0000 (16:13 -0500)]
[InstCombine] add tests for cmp+select; NFC
Ramon de C Valle [Wed, 8 Feb 2023 19:19:13 +0000 (19:19 +0000)]
Add CFI integer types normalization
This commit adds a new option (i.e.,
`-fsanitize-cfi-icall-normalize-integers`) for normalizing integer types
as vendor extended types for cross-language LLVM CFI/KCFI support with
other languages that can't represent and encode C/C++ integer types.
Specifically, integer types are encoded as their defined representations
(e.g., 8-bit signed integer, 16-bit signed integer, 32-bit signed
integer, ...) for compatibility with languages that define
explicitly-sized integer types (e.g., i8, i16, i32, ..., in Rust).
``-fsanitize-cfi-icall-normalize-integers`` is compatible with
``-fsanitize-cfi-icall-generalize-pointers``.
This helps with providing cross-language CFI support with the Rust
compiler and is an alternative solution for the issue described and
alternatives proposed in the RFC
https://github.com/rust-lang/rfcs/pull/3296.
For more information about LLVM CFI/KCFI and cross-language LLVM
CFI/KCFI support for the Rust compiler, see the design document in the
tracking issue https://github.com/rust-lang/rust/issues/89653.
Relands
b1e9ab7438a098a18fecda88fc87ef4ccadfcf1e with fixes.
Reviewed By: pcc, samitolvanen
Differential Revision: https://reviews.llvm.org/D139395
Ben Langmuir [Wed, 8 Feb 2023 21:24:07 +0000 (13:24 -0800)]
[clang][deps] Ensure module invocation can be serialized
When reseting modular options, propagate the values from certain options
that have ImpliedBy relations instead of setting to the default. Also,
verify in clang-scan-deps that the command line produced round trips
exactly.
Ideally we would automatically derive the set of options that need this
kind of propagation, but for now there aren't very many impacted.
rdar://
105148590
Differential Revision: https://reviews.llvm.org/D143446
William Huang [Wed, 8 Feb 2023 02:59:12 +0000 (02:59 +0000)]
[llvm-profdata] Add option to cap profile output size
D139603 (add option to llvm-profdata to reduce output profile size) contains test cases that are not cross-platform. Moving those tests to unit test and making sure the feature is callable from llvm library
Reviewed By: snehasish
Differential Revision: https://reviews.llvm.org/D141446
Ziqing Luo [Wed, 8 Feb 2023 22:06:37 +0000 (14:06 -0800)]
[-Wunsafe-buffer-usage] Add unsafe buffer checking opt-out pragmas
Add a pair of clang pragmas:
- `#pragma clang unsafe_buffer_usage begin` and
- `#pragma clang unsafe_buffer_usage end`,
which specify the start and end of an (unsafe buffer checking) opt-out
region, respectively.
Behaviors of opt-out regions conform to the following rules:
- No nested nor overlapped opt-out regions are allowed. One cannot
start an opt-out region with `... unsafe_buffer_usage begin` but never
close it with `... unsafe_buffer_usage end`. Mis-use of the pragmas
will be warned.
- Warnings raised from unsafe buffer operations inside such an opt-out
region will always be suppressed. This behavior CANNOT be changed by
`clang diagnostic` pragmas or command-line flags.
- Warnings raised from unsafe operations outside of such opt-out
regions may be reported on declarations inside opt-out
regions. These warnings are NOT suppressed.
- An un-suppressed unsafe operation warning may be attached with
notes. These notes are NOT suppressed as well regardless of whether
they are in opt-out regions.
The implementation maintains a separate sequence of location pairs
representing opt-out regions in `Preprocessor`. The `UnsafeBufferUsage`
analyzer reads the region sequence to check if an unsafe operation is
in an opt-out region. If it is, discard the warning raised from the
operation immediately.
This is a re-land after I reverting it at
9aa00c8a306561c4e3ddb09058e66bae322a0769.
The compilation error should be resolved.
Reviewed by: NoQ
Differential revision: https://reviews.llvm.org/D140179
bixia1 [Wed, 8 Feb 2023 17:02:13 +0000 (09:02 -0800)]
[mlir][sparse] Implement hybrid quick sort for sparse_tensor.sort.
Reviewed By: aartbik
Differential Revision: https://reviews.llvm.org/D143227
Kirill Stoimenov [Wed, 8 Feb 2023 21:54:40 +0000 (21:54 +0000)]
Revert "[LSAN] Fix pthread_create interceptor to ignore leaks in real pthread_create."
This reverts commit
a7db3cb257ff6396481f44427bccd0ca5abf4d63.
Jan Svoboda [Wed, 8 Feb 2023 21:46:37 +0000 (13:46 -0800)]
Reapply "[cmake][msvc] Enable standards-conforming preprocessor"
This reverts commit
16e1a49441c51817697138437d8db2c15bc19cb4, essentially reapplying
12d8e7c6ade55bba241259312e3e4bdcf6aeab81. The build bot where this caused issues is supposed to be updated now: https://reviews.llvm.org/D135128#4108588
Stanislav Mekhanoshin [Wed, 8 Feb 2023 20:46:57 +0000 (12:46 -0800)]
[AMDGPU] Do not exapnd fp atomics on gfx940
FP atomics are safe on gfx940. This fixes regression after D131560.
Fixes: SWDEV-380468
Differential Revision: https://reviews.llvm.org/D143603
Simon Pilgrim [Wed, 8 Feb 2023 21:09:41 +0000 (21:09 +0000)]
[X86] midpoint-int-vec - cleanup common check prefixes
Stanislav Mekhanoshin [Wed, 8 Feb 2023 20:53:14 +0000 (12:53 -0800)]
[AMDGPU] Update atomic tests. NFC.
This is to precommit tests before future patch.
Kirill Stoimenov [Wed, 8 Feb 2023 19:36:43 +0000 (19:36 +0000)]
[LSAN] Fix pthread_create interceptor to ignore leaks in real pthread_create.
Reviewed By: vitalybuka
Differential Revision: https://reviews.llvm.org/D143209
Simon Pilgrim [Wed, 8 Feb 2023 19:55:04 +0000 (19:55 +0000)]
[DAG] Fold freeze(concat_vectors(x,y,...)) -> concat_vectors(freeze(x),freeze(y),...)
Another of the cleanups necessary for D136529
Markus Böck [Wed, 8 Feb 2023 15:09:04 +0000 (16:09 +0100)]
[mlir][cf] Add support for opaque pointers to ControlFlowToLLVM lowering
Part of https://discourse.llvm.org/t/rfc-switching-the-llvm-dialect-and-dialect-lowerings-to-opaque-pointers/68179
This is a very simple patch since there is only one use of pointers types in `cf.assert` that has to be changed. Pointer types are conditionally created with element types and the GEP had to be adjusted to use the array type as base type.
Differential Revision: https://reviews.llvm.org/D143583
Dave Lee [Wed, 8 Feb 2023 19:29:13 +0000 (11:29 -0800)]
[lldb][test] Fix function references to function calls (NFC)
Philip Reames [Wed, 8 Feb 2023 19:35:06 +0000 (11:35 -0800)]
[RISCV] Fix miscompile in SExtWRemoval due to early return ignoring other sources
This code is walking back through a worklist of sources. All of the sources need to be sign extending for the result to be true. We had a case which returned rather than continued, which causes a miscompile when another source was not sign extended. The flawed logic was introduced in Dec 22, by change
844430bcc377.
This was recently exposed in a stage2 build of llvm-tablegen when we switched from using llvm::Optional to std::optional. The stars aligned in just the wrong way, and we started actively miscompiling idiomatic optional usage. std::optional<uint32_t> appears to use the top 32 bits of the word on RV64 for its tag.
Differential Revision: https://reviews.llvm.org/D143594
Haojian Wu [Wed, 8 Feb 2023 11:12:15 +0000 (12:12 +0100)]
[Tooling/Inclusion] Add more multi-header symbols to StdSpecialSymbolMap.inc
Differential Revision: https://reviews.llvm.org/D143569
Peiming Liu [Wed, 28 Dec 2022 01:42:53 +0000 (01:42 +0000)]
[mlir][sparse] make foreach operation support sparse tensor slices.
Reviewed By: aartbik
Differential Revision: https://reviews.llvm.org/D140713
Fangrui Song [Wed, 8 Feb 2023 18:50:44 +0000 (10:50 -0800)]
[ELF] Reword symMap/symVector comment. NFC
Having symVector makes iteration efficient and is actually more
efficient than using llvm::DenseMap<llvm::CachedHashStringRef, Symbol
*>, so the FIXME comment can be removed. Using an alternative
implementation ankerl/unordered_dense.h decreases link time for chromium
by 0.x% but I am unsure it justifies the extra header file.
Dave Lee [Fri, 3 Feb 2023 16:45:44 +0000 (08:45 -0800)]
[lldb] Accept negative indexes in __getitem__
To the Python bindings, add support for Python-like negative indexes.
While was using `script`, I tried to access a thread's bottom frame with
`thread.frame[-1]`, but that failed. This change updates the `__getitem__`
implementations to support negative indexes as one would expect in Python.
Differential Revision: https://reviews.llvm.org/D143282
Wolfgang Pieb [Mon, 6 Feb 2023 21:50:37 +0000 (13:50 -0800)]
[TLS]: Clamp the alignment of TLS global variables if required by the target
Adding a module flag 'MaxTLSAlign' describing the maximum alignment a global TLS
variable can have. Optimizers are prevented from increasing the alignment of such
variables beyond this threshold.
Reviewed By: probinson
Differential Revision: https://reviews.llvm.org/D140123
Han Zhu [Wed, 8 Feb 2023 18:11:19 +0000 (10:11 -0800)]
[SROA] Pre-commit vector-promotion.ll tests for D143225
Adrian Vogelsgesang [Thu, 2 Feb 2023 01:39:27 +0000 (17:39 -0800)]
[LLDB] Fix assertion failure by removing `CopyType` in `std::coroutine_handle` pretty printer
The pretty printer for `std::coroutine_handle` was running into
> Assertion failed: (target_ctx != source_ctx && "Can't import into itself")
from ClangASTImporter.h, line 270.
This commit fixes the issue by removing the `CopyType` call from the
pretty printer. While this call was necessary in the past, it seems to
be no longer required, at least all test cases are still passing. Maybe
something changed in the meantime around the handling of `TypesystemClang`
instances. I don't quite understand why `CopyType` was necessary earlier.
I am not sure how to add a regression test for this, though. It seems
the issue is already triggered by the exising `TestCoroutineHandle.py`,
but API tests seem to ignore all violations of `lldbassert` and still
report the test as "passed", even if assertions were triggered
Differential Revision: https://reviews.llvm.org/D143127
Philip Reames [Wed, 8 Feb 2023 18:01:46 +0000 (10:01 -0800)]
[RISCV] Precommit a test for upcoming miscompile bugfix
Simon Pilgrim [Wed, 8 Feb 2023 17:53:59 +0000 (17:53 +0000)]
[DAG] Fold freeze(build_pair(x,y)) -> build_pair(freeze(x),freeze(y))
One of the cleanups necessary for D136529 - another being how we're going to handle moving freeze through multiple result nodes (like uaddo and subcarry)
Valentin Clement [Wed, 8 Feb 2023 16:55:38 +0000 (17:55 +0100)]
[flang] Fix rank and byte stride in pointer remapping
In some remapping case the rank of the pointer is different
from the target one.
```
program remap
type :: p
integer :: a
end type t
type(p), target :: ta(10) = [ (t(i),i=1,10) ]
class(t), pointer :: p(:,:)
p(1:2,1:5) => ta
end
```
This patch updates the rank and the byte stride to fix such case.
Reviewed By: klausler
Differential Revision: https://reviews.llvm.org/D143566
Moritz Sichert [Wed, 8 Feb 2023 10:47:32 +0000 (11:47 +0100)]
[RuntimeDyld][ELF] Fixed relocations referencing undefined TLS symbols
The classification of TLS symbols in ELF was changed from ST_Data to
ST_Other in the following commit:
018a484cd26d72fb4c9e7fd75e5f5bc7838dfc73
RuntimeDyldELF::processRelocationRef() needs to be updated to also
handle ST_Other symbols so that it handles TLS relocations correctly.
The current tests did not fail because we have a shortcut for global
symbols that are already defined.
Differential Revision: https://reviews.llvm.org/D143568
Simon Pilgrim [Wed, 8 Feb 2023 16:12:01 +0000 (16:12 +0000)]
[X86] Merge DQ/BW AVX512 ISD::ABDS/ABDU setOperationAction calls. NFCI.
All set to Custom - there's no need to have them in separate loops
Valentin Clement [Wed, 8 Feb 2023 15:54:00 +0000 (16:54 +0100)]
[flang] Fix optional assertion in PFTBuilder
D142279 enabled assertion in libstdc++ and one was triggered
in the PFTBuilder because an optional was access even if it was
null.
This patch fix this issue and add a regression test.
Reviewed By: jeanPerier
Differential Revision: https://reviews.llvm.org/D143589
Florian Hahn [Wed, 8 Feb 2023 15:49:29 +0000 (15:49 +0000)]
[LV] Perform recurrence sinking directly on VPlan.
This patch updates LV to sink recipes directly using the VPlan use
chains. The initial patch only moves sinking to be purely VPlan-based.
Follow-up patches will move legality checks to VPlan as well.
At the moment, there's a single test failure remaining.
Reviewed By: Ayal
Differential Revision: https://reviews.llvm.org/D142589
Sander de Smalen [Wed, 8 Feb 2023 15:46:24 +0000 (15:46 +0000)]
Revert "[LoopVectorize] Use DataLayout::getIndexType instead of i32 for non-constant GEP indices."
This patch causes a regression, so reverting it while I investigate the issue.
This reverts commit
e6eb84a191ca2a1afd5789c5bb398da68bb6065e.
Erik Desjardins [Wed, 8 Feb 2023 15:41:51 +0000 (10:41 -0500)]
Revert "[Support] change StringMap hash function from djbHash to xxHash"
This reverts commit
d768b97424f9e1a0aae45440a18b99f21c4027ce.
Causes sanitizer failure: https://lab.llvm.org/buildbot/#/builders/238/builds/1114
```
/b/sanitizer-aarch64-linux-bootstrap-ubsan/build/llvm-project/llvm/lib/Support/xxhash.cpp:107:12: runtime error: applying non-zero offset 8 to null pointer
#0 0xaaaab28ec6c8 in llvm::xxHash64(llvm::StringRef) /b/sanitizer-aarch64-linux-bootstrap-ubsan/build/llvm-project/llvm/lib/Support/xxhash.cpp:107:12
#1 0xaaaab28cbd38 in llvm::StringMapImpl::LookupBucketFor(llvm::StringRef) /b/sanitizer-aarch64-linux-bootstrap-ubsan/build/llvm-project/llvm/lib/Support/StringMap.cpp:87:28
```
Probably causes test failure in `warn-unsafe-buffer-usage-fixits-local-var-span.cpp`: https://lab.llvm.org/buildbot/#/builders/60/builds/10619
Probably causes reverse-iteration test failure in `test-output-format.ll`: https://lab.llvm.org/buildbot/#/builders/54/builds/3545
Valentin Clement [Wed, 8 Feb 2023 15:31:26 +0000 (16:31 +0100)]
[flang] Unlimited polymoprhic allocated as character
Allocation of unlimited polymorphic allocatable with
character intrinsic type is now done through
`PointerNullifyCharacter` or `AllocatableInitCharacter` so the length
is correctly set.
Reviewed By: jeanPerier
Differential Revision: https://reviews.llvm.org/D143580
Vladislav Dzhidzhoev [Mon, 1 Aug 2022 14:02:25 +0000 (17:02 +0300)]
[AArch64][GlobalISel] Lower formal arguments of AAPCS & ms_abi variadic functions.
Reimplemented SelectionDAG code for GlobalISel.
Fixes https://github.com/llvm/llvm-project/issues/54079
Differential Revision: https://reviews.llvm.org/D130903
Simon Pilgrim [Wed, 8 Feb 2023 15:27:00 +0000 (15:27 +0000)]
[ARM] Fix MSVC "result of 32-bit shift implicitly converted to 64 bits" warning. NFC.
Use APInt::setBit() method instead of OR'ing individual bits.
Brian Cain [Tue, 7 Feb 2023 23:40:17 +0000 (15:40 -0800)]
[hexagon] Turning off sign mismatch warning by default.
Patch-by: Colin Lemahieu <colinl@codeaurora.org>
Differential Revision: https://reviews.llvm.org/D143531
Valentin Clement [Wed, 8 Feb 2023 14:50:16 +0000 (15:50 +0100)]
[flang] Support polymorphic inputs for UNPACK intrinsic
Result must carry the polymorphic type information
from the vector.
Reviewed By: jeanPerier
Differential Revision: https://reviews.llvm.org/D143575
Zain Jaffal [Wed, 8 Feb 2023 11:31:42 +0000 (11:31 +0000)]
Recommit "[ConstraintElimination] Move Value2Index map to ConstraintSystem (NFC)"
This reverts commit
665ee0cd57f92a112cf8e929d00768e282fb205a.
Fix comments and formatting style.
Joseph Huber [Wed, 8 Feb 2023 14:51:03 +0000 (08:51 -0600)]
[libc] Don't try to use MPFR with the GPU build for now
Summary:
We don't have the infastructure to support MPFR on the GPU. We should
disable this categorically on GPU builds for now.
Guillaume Chatelet [Wed, 8 Feb 2023 14:24:15 +0000 (14:24 +0000)]
[libc][bazel] Add missing libc_root dep
Sanjay Patel [Tue, 7 Feb 2023 15:56:05 +0000 (10:56 -0500)]
[InstSimplify] add tests for strict fadd with SNaN operand; NFC
Florian Hahn [Wed, 8 Feb 2023 13:20:20 +0000 (13:20 +0000)]
[DSE] Add test with llvm.memcpy & memcpy_chk.
This adds test coverage to avoid crashes with further changes.
David Green [Wed, 8 Feb 2023 13:17:10 +0000 (13:17 +0000)]
[AArch64] Fix creation of invalid instructions with XZR register
A combination of GlobalISel and MachineCombiner can end up creating
`SUB xrz, (MOVI -2105098)` instructions which have not been constant
folded. The AArch64MIPeepholeOpt pass will then attempt to create
`ADD xzr, 513, lsl 12`, which is not a valid instruction. This adds
a bail out of the transform if the register is xzr/wzr.
Fixes #60528
Differential Revision: https://reviews.llvm.org/D143475
JackAKirk [Fri, 20 Jan 2023 16:51:11 +0000 (16:51 +0000)]
[NVPTX] Increase inline threshold multiplier to 11 in nvptx backend.
I used https://github.com/zjin-lcf/HeCBench (with nvcc usage swapped to
clang++), which is an adaptation of the classic Rodinia benchmarks aimed
at CUDA and SYCL programming models, to compare different values of the
multiplier using both clang++ cuda and clang++ sycl nvptx backends. I
find that the value is currently too low for both cases. Qualitatively
(and in most cases there is very a close quantitative agreement across
both cases) the change in code execution time for a range of values from
5 to 1000 matches in both variations (CUDA clang++ vs SYCL (with cuda
backend) using the intel/llvm clang++ compiler) of the HeCbench samples.
This value of 11 is optimal for clang++ cuda for all cases I've
investigated. I have not found a single case where performance is
deprecated by this change of the value from 5 to 11. For one sample the
sycl cuda backend preferred a higher value. However we are happy to
prioritize clang++ cuda, and we find that this value is close to ideal
for both cases anyway. It would be good to do some further investigation
using clang++ openmp cuda offload. However since I do not know of an
appropriate set of benchmarks for this case, and the fact that we are
now getting complaints about register spills related to insufficient
inlining on a weekly basis, we have decided to propose this change and
potentially seek some more input from someone who may have more
expertise in the openmp case. Incidentally this value coincides with the
value used for the amd-gcn backend. We have also been able to use the
amd backend of the intel/llvm "dpc++" compiler to compare the inlining
behaviour of an identical code when targetting amd (compared to nvptx).
Unsurprisingly the amd backend with a multiplier value of 11 was
performing better (with regard to inlining) than the nvptx case when the
value of 5 was used. When the two backends use the same multiplier value
the inlining behaviors appear to align closely.
This also considerably improves the performance of at least one of the
most popular HPC applications: NWCHEMX.
Signed-off-by: JackAKirk <jack.kirk@codeplay.com>
Reviewed by: tra
Differential Revision: https://reviews.llvm.org/D142232
Marco Elver [Wed, 8 Feb 2023 11:25:01 +0000 (12:25 +0100)]
[SanitizerBinaryMetadata] Emit constants as ULEB128
Emit all constant integers produced by SanitizerBinaryMetadata as
ULEB128 to further reduce binary space used. Increasing the version is
not necessary given this change depends on (and will land) along with
the bump to v2.
To support this, the !pcsections metadata format is extended to allow
for per-section options, encoded in the first MD operator which must
always be a string and contain the section: "<section>!<options>".
Reviewed By: dvyukov
Differential Revision: https://reviews.llvm.org/D143484
Marco Elver [Wed, 8 Feb 2023 11:24:51 +0000 (12:24 +0100)]
[SanitizerBinaryMetadata] Optimize used space for features and UAR stack args
Optimize the encoding of "covered" metadata by:
1. Reducing feature mask from 4 bytes to 1 byte (needs increase once we
reach more than 8 features).
2. Only emitting UAR stack args size if it is non-zero, saving 4 bytes
in the common case.
One caveat is that the emitted metadata for function PC (offset), size,
and UAR size (if enabled) are no longer aligned to 4 bytes.
SanitizerBinaryMetadata version base is increased to 2, since the change
is backwards incompatible.
Reviewed By: dvyukov
Differential Revision: https://reviews.llvm.org/D143482
Benjamin Kramer [Wed, 8 Feb 2023 12:08:26 +0000 (13:08 +0100)]
[bazel] Actually put Importer in the right library
Fixes
a81136c332
Benjamin Kramer [Wed, 8 Feb 2023 12:05:19 +0000 (13:05 +0100)]
Benjamin Kramer [Wed, 8 Feb 2023 11:53:54 +0000 (12:53 +0100)]
[xxHash] Don't trigger UB on empty StringRef
This is quite silly, but casting to uintptr_t seems like the easiest
option to quiet ubsan.
llvm/lib/Support/xxhash.cpp:107:12: runtime error: applying non-zero offset 8 to null pointer
#0 0x7fe3660404c0 in llvm::xxHash64(llvm::StringRef) llvm/lib/Support/xxhash.cpp:107:12
Jean Perier [Wed, 8 Feb 2023 11:46:52 +0000 (12:46 +0100)]
[flang][NFC] Move Procedure designator lowering in its own file
Code move without any change, the goal is to re-use this piece of
code for procedure designator lowering in HLFIR since there is no
significant changes in the way procedure designators will be
lowered.
Differential Revision: https://reviews.llvm.org/D143563
David Green [Wed, 8 Feb 2023 11:43:36 +0000 (11:43 +0000)]
[DAG] Fold Op(vecreduce(a), vecreduce(b)) into vecreduce(Op(a,b))
So long as the operation is reassociative, we can reassociate the double
vecreduce from for example fadd(vecreduce(a), vecreduce(b)) to
vecreduce(fadd(a,b)). This will in general save a few instructions, but some
architectures (MVE) require the opposite fold, so a shouldExpandReduction is
added to account for it. Only targets that use shouldExpandReduction will be
affected.
Differential Revision: https://reviews.llvm.org/D141870
Zain Jaffal [Wed, 8 Feb 2023 11:25:22 +0000 (11:25 +0000)]
Revert "[ConstraintElimination] Move Value2Index map to ConstraintSystem (NFC)"
This reverts commit
40ffe9c167395256b43846733ab69eec17eead78.
Reverted because some comments where missed in the review https://reviews.llvm.org/D142647
Christian Ulmann [Wed, 8 Feb 2023 10:48:15 +0000 (11:48 +0100)]
[mlir][llvm] Add MD_prof import error handling
This commit adds additional checks and warning messages to the MD_prof
import. As LLVM does not verify most metadata, the import has the be
resilient towards ill-formatted inputs.
Reviewed By: gysit
Differential Revision: https://reviews.llvm.org/D143492
Zain Jaffal [Tue, 7 Feb 2023 13:58:18 +0000 (13:58 +0000)]
[ConstraintElimination] Move Value2Index map to ConstraintSystem (NFC)
Differential Revision: https://reviews.llvm.org/D142647
Christian Ulmann [Wed, 8 Feb 2023 10:05:14 +0000 (11:05 +0100)]
[mlir][llvm] Add support for loop metadata import
This commit introduces functionality to import loop metadata. Loop
metadata nodes are transformed into LoopAnnotationAttrs and attached to
the corresponding branch operations.
Reviewed By: gysit
Differential Revision: https://reviews.llvm.org/D143376
Tom Eccles [Sat, 28 Jan 2023 13:45:44 +0000 (13:45 +0000)]
[flang] Use clang sysroot image to test fastmath linking
This test has been very unreliable across different machines. Update it
to use clang's sysroot image so that the fastmath object file name is
stable across different distributions and distro types.
Based on clang/test/Driver/linux-ld.c
Thanks to mnadeem for pointing this out at https://reviews.llvm.org/D138675
Differential Revision: https://reviews.llvm.org/D142807
Tom Eccles [Tue, 7 Feb 2023 14:06:05 +0000 (14:06 +0000)]
[flang][NFC] add convertToX functions to HLFIRTools
These will be useful for sharing code with intrinsic argument processing
when lowering hlfir transformational intrinsic operations to FIR in
the BufferizeHLFIR pass.
Differential Revision: https://reviews.llvm.org/D143503
wangpc [Wed, 8 Feb 2023 09:46:02 +0000 (17:46 +0800)]
[clang][AIX] Remove test for the default OpenMP runtime
The default OpenMP runtime may not be libomp since it can be changed
by specified `CLANG_DEFAULT_OPENMP_RUNTIME`. This test will fail if
we change the default OpenMP runtime.
This patch removes test for the default OpenMP runtime and moves the
CHECKs downward.
Reviewed By: jdoerfert
Differential Revision: https://reviews.llvm.org/D143549
Simon Pilgrim [Wed, 8 Feb 2023 09:47:13 +0000 (09:47 +0000)]
[X86] Add ISD::ABDS/ABDU vXi64 support on SSE41+ targets
If IMINMAX ops aren't legal, we can lower to the select(icmp(x,y),sub(x,y),sub(y,x)) pattern
Valentin Clement [Wed, 8 Feb 2023 09:29:41 +0000 (10:29 +0100)]
[flang] Add a proper TODO for polymorphic array lowering with vector subscript
Creation of polymorphic array temporary cannot be done inlined.
Add a TODO so the current code exit in a clean way when lowering
reach it. A solution involving the runtime will be put in place.
Depends on D143490
Reviewed By: jeanPerier
Differential Revision: https://reviews.llvm.org/D143491
Valentin Clement [Wed, 8 Feb 2023 09:28:31 +0000 (10:28 +0100)]
[flang][NFC] Centralize fir.class addition in ConvertType
fir.class type is always needed for polymorphic and unlimited
polymorphic entities. Wrapping the element type with a fir.class
type was done in ConvertType for some case and else where in the
code for other. Centralize this in ConvertType when converting
from expr or symbol.
Reviewed By: jeanPerier
Differential Revision: https://reviews.llvm.org/D143490
Markus Böck [Mon, 6 Feb 2023 10:56:15 +0000 (11:56 +0100)]
[mlir][MemRef] Add option to `-finalize-memref-to-llvm` to emit opaque pointers
This is the first patch in a series of patches part of this RFC: https://discourse.llvm.org/t/rfc-switching-the-llvm-dialect-and-dialect-lowerings-to-opaque-pointers/68179
This patch adds the ability to lower the memref dialect to the LLVM Dialect with the use of opaque pointers instead of typed pointers. The latter are being phased out of LLVM and this patch is part of an effort to phase them out of MLIR as well. To do this, we'll need to support both typed and opaque pointers in lowering passes, to allow downstream projects to change without breakage.
The gist of changes required to change a conversion pass are:
* Change any `LLVM::LLVMPointerType::get` calls to NOT use an element type if opaque pointers are to be used.
* Use the `build` method of `llvm.load` with the explicit result type. Since the pointer does not have an element type anymore it has to be specified explicitly.
* Use the `build` method of `llvm.getelementptr` with the explicit `basePtrType`. Ditto to above, we have to now specify what the element type is so that GEP can do its indexing calculations
* Use the `build` method of `llvm.alloca` with the explicit `elementType`. Ditto to the above, alloca needs to know how many bytes to allocate through the element type.
* Get rid of any `llvm.bitcast`s
* Adapt the tests to the above. Note that `llvm.store` changes syntax as well when using opaque pointers
I'd like to note that the 3 `build` method changes work for both opaque and typed pointers, so unconditionally using the explicit element type form is always correct.
For the testsuite a practical approach suggested by @ftynse was taken: I created a separate test file for testing the typed pointer lowering of Ops. This mostly comes down to checking that bitcasts have been created at the appropiate places, since these are required for typed pointer support.
Differential Revision: https://reviews.llvm.org/D143268
Tobias Hieta [Wed, 8 Feb 2023 08:20:47 +0000 (09:20 +0100)]
[lit] Pass LLVM_PROFILE_FILE environment
When building a PGO version of LLVM you might want to customize
the output profile file when building tests. For this to work
we need to pass LLVM_PROFILE_FILE enviroment.
Reviewed By: abrachet
Differential Revision: https://reviews.llvm.org/D143556
Fangrui Song [Wed, 8 Feb 2023 08:58:39 +0000 (00:58 -0800)]
[SanitizerBinaryMetadata] Make module_[cd]tor external
If a COMDAT key has a local linkage, it behaves as `comdat nodeduplicate` and
llvm/lib/Linker/LinkModules.cpp does not deduplicate its members.
This is not intended. Switch to an external linkage to allow deduplication.
See also https://maskray.me/blog/2021-07-25-comdat-and-section-group#grp_comdat
Reviewed By: melver
Differential Revision: https://reviews.llvm.org/D143530
gonglingqin [Wed, 8 Feb 2023 08:08:08 +0000 (16:08 +0800)]
[LoongArch] Merge the 12bit constant address into the offset field of the instruction
There are 12bit offset fields in the ld.[b/h/w/d] and st.[b/h/w/d].
When the constant address is less than 12 bits, the address
calculation is incorporated into the offset field of the instruction.
Differential Revision: https://reviews.llvm.org/D143470
Chuanqi Xu [Wed, 8 Feb 2023 08:24:39 +0000 (16:24 +0800)]
[C++20] [Modules] Allow -fmodule-file=<module-name>=<BMI-Path> for implementation unit and document the behavior
Close https://github.com/llvm/llvm-project/issues/57293.
Previsouly we can't use `-fmodule-file=<module-name>=<BMI-Path>` for
implementation units, it is a bug. Also the behavior of the above option
is not tested nor documented for C++20 Modules. This patch addresses the
2 problems.
Matthias Springer [Wed, 8 Feb 2023 08:22:48 +0000 (09:22 +0100)]
[mlir][bufferize][NFC] OneShotAnalysis: Expose analysis hooks from AnalysisState
This is in preparation of reusing the same AnalysisState for tensor.empty elimination and One-Shot Bufferize (to address performance bottlenecks).
Differential Revision: https://reviews.llvm.org/D143379
Valentin Clement [Wed, 8 Feb 2023 08:26:12 +0000 (09:26 +0100)]
[flang] Carry over the derived type from MOLD
Derived type from the MOLD was not carried over
to the newly allocated pointer or allocatable.
This may lead to wrong dynamic type when the pointer or allocatable
is polymorphic as shown in the example below:
```
type :: p1
integer :: a
end type
type, extends(p1) :: p2
integer :: b
end type
class(p1), pointer :: p(:)
allocate(p(5), MOLD=p2(1,2))
```
Reviewed By: klausler
Differential Revision: https://reviews.llvm.org/D143525
Matthias Springer [Wed, 8 Feb 2023 07:59:15 +0000 (08:59 +0100)]
[mlir][bufferize][NFC] Merge AnalysisState and BufferizationAliasInfo
There is no longer a need to keep the two separate. This is in preparation of reusing the same AnalysisState for tensor.empty elimination and One-Shot Bufferize (to address performance bottlenecks).
Differential Revision: https://reviews.llvm.org/D143313
Tobias Hieta [Wed, 8 Feb 2023 07:11:34 +0000 (08:11 +0100)]
[compiler-rt][macOS]: Disable iOS support if iOS SDK is not found
If you are missing the iOS SDK on your macOS (for example you don't have
full Xcode but just CommandLineTools) then CMake currently errors
out without a helpful message. This patch disables iOS support in
compiler-rt if the iOS SDK is not found. This can be overriden by
passing -DCOMPILER_RT_ENABLE_IOS=ON.
Reviewed By: delcypher, thetruestblue
Differential Revision: https://reviews.llvm.org/D133273
Philipp Tomsich [Wed, 8 Feb 2023 07:00:57 +0000 (08:00 +0100)]
Revert "[RISCV] Add performMULcombine to perform strength-reduction"
This reverts commit
3304d51b676ea511feca28089cb60eba3873132e.
Philipp Tomsich [Wed, 8 Feb 2023 07:00:45 +0000 (08:00 +0100)]
Revert "[RISCV] Add vendor-defined XTHeadBs (single-bit) extension"
This reverts commit
656188ddc4075eb50260607b3497589873f373d2.
Philipp Tomsich [Wed, 8 Feb 2023 07:00:34 +0000 (08:00 +0100)]
Revert "[RISCV] Add vendor-defined XTheadBb (basic bit-manipulation) extension"
This reverts commit
19a59099095b3cbc9846e5330de26fca0a44ccbe.
Philipp Tomsich [Wed, 8 Feb 2023 06:57:07 +0000 (07:57 +0100)]
[RISCV] Fix comment for Zba tests. NFC.
The comments in the Zba tests were referring to the "bitmanip base"
extension (i.e., the Zbb). Fix it.
Reviewed By: craig.topper
Differential Revision: https://reviews.llvm.org/D143534
Philipp Tomsich [Tue, 31 Jan 2023 19:12:45 +0000 (20:12 +0100)]
[RISCV] Add vendor-defined XTheadBb (basic bit-manipulation) extension
The vendor-defined XTHeadBb (predating the standard Zbb extension)
extension adds some bit-manipulation extensions with somewhat similar
semantics as some of the Zbb 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 XTHeadBb is
available from:
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=
8254c3d2c94ae5458095ea6c25446ba89134b9da
Depends on D143036
Differential Revision: https://reviews.llvm.org/D143439
Philipp Tomsich [Mon, 30 Jan 2023 02:23:17 +0000 (03:23 +0100)]
[RISCV] Add vendor-defined XTHeadBs (single-bit) extension
The vendor-defined XTHeadBs (predating the standard Zbs extension)
extension adds a bit-test instruction (th.tst) with similar semantics
as bexti from Zbs. 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 XTHeadBs is
available from:
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=
8254c3d2c94ae5458095ea6c25446ba89134b9da
Depends on D143394
Differential Revision: https://reviews.llvm.org/D143036
Philipp Tomsich [Fri, 3 Feb 2023 21:03:07 +0000 (22:03 +0100)]
[RISCV] Add performMULcombine to perform strength-reduction
The RISC-V backend thus far does not provide strength-reduction, which
causes a long (but not complete) list of 3-instruction patterns listed
to utilize the shift-and-add instruction from Zba and XTHeadBa in
strength-reduction.
This adds the logic to perform strength-reduction through the DAG
combine for ISD::MUL. Initially, we wire this up for XTheadBa only,
until this has had some time to settle and get real-world test
exposure.
The following strength-reductions strategies are currently supported:
- XTheadBa
- C = (n + 1) // th.addsl
- C = (n + 1)k // th.addsl, slli
- C = (n + 1)(m + 1) // th.addsl, th.addsl
- C = (n + 1)(m + 1)k // th.addsl, th.addsl, slli
- C = ((n + 1)m + 1) // th.addsl, th.addsl
- C = ((n + 1)m + 1)k // th.addslm th.addsl, slli
- base ISA
- C being 2 set-bits // slli, slli, add
(possibly slli, th.addsl)
Even though the slli+slli+add sequence would we supported without
XTheadBa, this currently is gated to avoid having to update a large
number of test cases (i.e., anything that has a multiplication with a
constant where only 2 bits are set) in this commit.
With the strength reduction now being performed in performMUL combine,
we drop the (now redundant) patterns from RISCVInstrInfoXTHead.td.
Depends on D143029
Differential Revision: https://reviews.llvm.org/D143394
Philipp Tomsich [Wed, 8 Feb 2023 00:08:11 +0000 (01:08 +0100)]
[RISCV] Add vendor-defined XTHeadBa (address-generation) extension
The vendor-defined XTHeadBa (predating the standard Zba extension)
extension adds an address-generation instruction (th.addsl) with
similar semantics as sh[123]add from Zba. 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 XTHeadBa is
available from:
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=
8254c3d2c94ae5458095ea6c25446ba89134b9da
Reviewed By: craig.topper
Differential Revision: https://reviews.llvm.org/D143029
Fangrui Song [Wed, 8 Feb 2023 06:33:56 +0000 (22:33 -0800)]
DAGCombiner: fix -Wunused-private-field. NFC
Yashwant Singh [Wed, 8 Feb 2023 06:11:51 +0000 (11:41 +0530)]
[AMDGPU] Introduce never uniform bit field in tablegen
IsNeverUniform can be set to 1 to mark instructions which are
inherently never-uniform/divergent. Enabling this bit in
Writelane instruction for now. To be extended to all required
instructions.
Reviewed By: arsenm, sameerds, #amdgpu
Differential Revision: https://reviews.llvm.org/D143154
Louis Dionne [Tue, 7 Feb 2023 01:35:42 +0000 (17:35 -0800)]
[libc++] Implement LWG3657 std::hash<filesystem::path>
This is implemented as a DR on top of C++17.
Differential Revision: https://reviews.llvm.org/D143452
Yeting Kuo [Tue, 17 Jan 2023 05:30:24 +0000 (13:30 +0800)]
[VP][DAGCombiner] Introduce generalized pattern match for vp sdnodes.
The patch tries to solve duplicated combine work for vp sdnodes. The idea is to
introduce MatchConext that verifies specific patterns and generate specific node
infromation. There is two MatchConext in DAGCombiner. EmptyMatcher is for
normal nodes and VPMatcher is for vp nodes.
The idea of this patch is come form Simon Moll's proposal [0]. I only fixed some
minor issues and added few new features in this patch.
[0]: https://github.com/sx-aurora-dev/llvm-project/commit/
c38a14484aa2945f3b05369560b65916dd832f76
Reviewed By: craig.topper
Differential Revision: https://reviews.llvm.org/D141891
Erik Desjardins [Sun, 29 Jan 2023 21:31:00 +0000 (16:31 -0500)]
[Support] change StringMap hash function from djbHash to xxHash
Depends on https://reviews.llvm.org/D142861.
Alternative to https://reviews.llvm.org/D137601.
xxHash is much faster than djbHash. This makes a simple Rust test case with a large constant string 10% faster to compile.
Previous attempts at changing this hash function (e.g. https://reviews.llvm.org/D97396) had to be reverted due to breaking tests that depended on iteration order.
No additional tests fail with this patch compared to `main` when running `check-all` with `-DLLVM_ENABLE_PROJECTS="all"` (on a Linux host), so I hope I found everything that needs to be changed.
Differential Revision: https://reviews.llvm.org/D142862