wren romano [Fri, 7 Jul 2023 19:46:32 +0000 (12:46 -0700)]
[llvm] Allow SMLoc to be used in constexpr context
Since `StringRef::empty` can be used in constexpr context, it seems reasonable that `SMLoc::isValid` should be too. The default-ctor and `operator==` are made constexpr for consistency.
In particular, the `constexpr` keyword is needed for silencing warnings on Windows (whereas Linux allows constexpr usage without the keyword).
Reviewed By: jpienaar
Differential Revision: https://reviews.llvm.org/D154741
Peter Klausler [Wed, 5 Jul 2023 18:19:47 +0000 (11:19 -0700)]
[flang] Catch impure specifics called in DO CONCURRENT
Rework the code used to check for calls to impure procedures in DO CONCURRENT
constructs. The current code wasn't checking the representation of the
procedure references in the strongly typed expressions, so it was missing
calls to impure subprograms made via generic interfaces. While here,
improve error messages, and fix some minor issues exposed by testing the
improved checks.
Differential Revision: https://reviews.llvm.org/D155489
Alexey Bataev [Mon, 17 Jul 2023 16:47:01 +0000 (09:47 -0700)]
[SLP][NFC]Improve compile-time by using map {TreeEntry *, Instruction *}
in getLastInstructionInBundle(), NFC.
Instead of building EntryToLastInstruction before the vectorization,
build it automatically during the calls to getLastInstructionInBundle()
function.
Peter Klausler [Mon, 3 Jul 2023 21:33:12 +0000 (14:33 -0700)]
[flang] Disallow noninteroperable dummy procedures from interoperable procedures
A BIND(C) interoperable procedure must have only interoperable dummy procedures.
Differential Revision: https://reviews.llvm.org/D155488
Peter Klausler [Mon, 17 Jul 2023 18:30:30 +0000 (11:30 -0700)]
[flang][unittests] Silence compiler warning
At least one compiler more recent that the one that I test with emits
a warning (valid but benign) for some code in a unit test that I
modified a few minutes ago. Adding some curly braces to placate the
compiler.
Jim Ingham [Mon, 17 Jul 2023 17:50:17 +0000 (10:50 -0700)]
Fix the root directory completion test.
It was implicitly assumning that "/" would have no files in it, only
directories. That's not true, for instance on macOS if you've navigated
to the root directory in the Finder...
Since we're assuming everything we check against is a directory, then we
need to filter the completion for that coming in.
Johannes Doerfert [Tue, 20 Jun 2023 23:43:24 +0000 (16:43 -0700)]
[Attributor] Replace AAReturnedValues with AAPotentialValuesReturned
The very first AA, at least the first one in order, is not necessary
anymore. `AAReturnedValues` was from a different time; one might say, a
simpler time.
It was rewriten once to use `Attribute::getAssumedSimplifiedValues`,
which is what the replacement, `AAPotentialValuesReturned`, does too.
To match the old behavior we needed to avoid the helper
`AAReturnedFromReturnedValues` and iterate the return instructions
explicitly, however, it is still less complexity than it was before.
`AAReturnedFromReturnedValues` and `getAssumedSimplifiedValues` now
allow users to stop at PHI and select nodes or to ignore those and look
through. `AANoFPClass` will stop at select and phi nodes to read the
fast math flags.
Fixes: https://github.com/llvm/llvm-project/issues/63404
Differential Revision: https://reviews.llvm.org/D154917
Johannes Doerfert [Tue, 11 Jul 2023 04:03:06 +0000 (21:03 -0700)]
[Attributor][NFC] Improve debug message
Paul Robinson [Mon, 17 Jul 2023 17:30:44 +0000 (10:30 -0700)]
Revert "[PS4/PS5] Tidy up driver warnings finding the SDK"
This reverts commit
ba9a7f73a12e75b005bfec359ddc37999b1d38c0.
Bot failures due to enabling the warning by default.
e.g. https://lab.llvm.org/buildbot/#/builders/139/builds/45263
Andrzej Warzynski [Sat, 15 Jul 2023 16:21:34 +0000 (16:21 +0000)]
[mlir][linalg] Fix vectorisation of tensor.extract with dynamic shapes
The Linalg vectoriser incorrectly recognises the following
`tensor.extract` as contiguous:
```
func.func @example(%in: tensor<123x321xf32>, %arg1: tensor<1x?x8xf32>) -> tensor<1x?x8xf32> {
%c0 = arith.constant 1 : index
%2 = linalg.generic {
indexing_maps = [#map1],
iterator_types = ["parallel", "parallel", "parallel"]
} outs(%arg1 : tensor<1x?x8xf32>)
{
^bb0(%arg3: f32):
%idx_0 = linalg.index 0 : index
%idx_1 = linalg.index 1 : index
%idx = arith.addi %idx_0, %idx_1 : index
%7 = tensor.extract %in[%c0, %idx] : tensor<123x321xf32>
linalg.yield %7 : f32
} -> tensor<1x?x8xf32>
return %2 : tensor<1x?x8xf32>
}
```
However, the following index Op corresponds to the dynamic dimension
in the iteration space:
```
%idx_1 = linalg.index 1 : index
```
The vectoriser should assume that:
* this index Op _is not_ loop invariant,
* the resulting memory access is a gather load
This is what this patch fixes.
Differential Revision: https://reviews.llvm.org/D155373
Paul Kirth [Mon, 17 Jul 2023 17:09:47 +0000 (17:09 +0000)]
[clang][docs] Fix tag target name in link
The `see patch` tag conflicted w/ one later in the document. Changing
the text should fix the documentation build error.
Differential Revision: https://reviews.llvm.org/D155490
Amy Kwan [Mon, 17 Jul 2023 14:57:34 +0000 (09:57 -0500)]
[AIX][TLS] Account for local-exec accesses in XCOFFObjectWriter
This is a follow up to D149722 and aims to address https://github.com/llvm/llvm-project/issues/63885.
Local-exec accesses were not previously accounted for in XCOFFObjectWriter.
Specifically, the R_TLS_LE relocation was not previously handled, which lead to
the incorrect value being written for the relocation target.
Within this patch, the value being written is set to the symbol's virtual
address and extra relocation tests are added.
Differential Revision: https://reviews.llvm.org/D155415
Amir Ayupov [Mon, 17 Jul 2023 16:50:17 +0000 (09:50 -0700)]
[BOLT][Utils] Add dot2html module entry point
Peter Klausler [Tue, 11 Jul 2023 18:06:21 +0000 (11:06 -0700)]
[flang][runtime] Don't do partial data transfer on short character read with ADVANCE='NO', PAD='NO'
When a non-advancing formatted READ can't completely fill a CHARACTER
input item with data, and PAD='NO', don't modify the variable at all.
This matters when the error is recoverable.
Fixes https://github.com/llvm/llvm-project/issues/63772
Differential Revision: https://reviews.llvm.org/D155000
Simon Pilgrim [Mon, 17 Jul 2023 16:58:25 +0000 (17:58 +0100)]
[X86] Regenerate tail-call-casts.ll test coverage
Nicolas Vasilache [Mon, 17 Jul 2023 16:08:00 +0000 (18:08 +0200)]
[mlir][test] Fix linking error post test-lower-to-nvvm
This fixes builds for
7e78ecfe10ea9071234de8d385b87d338d280266 (both cmake and bazel) as well as trim unnecessary dependencies.
This is achieved by moving the functionality to test/lib/GPU which is a more natural landing pad.
Nicolas Vasilache [Mon, 17 Jul 2023 16:08:00 +0000 (18:08 +0200)]
[mlir][test] Fix linking error post test-lower-to-nvvm
Hongtao Yu [Fri, 14 Jul 2023 00:22:57 +0000 (17:22 -0700)]
[PseudoProbe] Remove unnecessary asserts about non-zero discriminator.
Despite previous efforts in fixing accidentally setting deduplication factor and avoiding enforcing a callsite debug loc for pseudo probes, I'm still seeing an IR probe having a non-zero discriminator. This time it is due to the merge of two probes with irreconsilable debug locations and the merged probe ends up getting the original callsite locs. Therefore I'm removing the assert about IR probe should always have a zero discriminator. This safe since
- Probe discriminators are only emitted in FS-AFDO mode; and
- The first FS discriminator assigning pass always clears non-discriminators left over from IR passes.
Reviewed By: wenlei
Differential Revision: https://reviews.llvm.org/D155252
Mark de Wever [Sun, 9 Jul 2023 15:54:11 +0000 (17:54 +0200)]
[libc++][doc] Updates the release notes.
This is a preparation for the upcoming LLVM 17 release.
Reviewed By: ldionne, jloser, H-G-Hristov, #libc
Differential Revision: https://reviews.llvm.org/D154874
Paul Robinson [Thu, 13 Jul 2023 17:42:41 +0000 (10:42 -0700)]
[PS4/PS5] Tidy up driver warnings finding the SDK
Instead of warning possibly up to 3 times about the same problem,
warn only about the actual missing directories.
Paul Kirth [Fri, 24 Mar 2023 00:09:29 +0000 (00:09 +0000)]
[clang] Preliminary fat-lto-object support
Fat LTO objects contain both LTO compatible IR, as well as generated
object code. This allows users to defer the choice of whether to use LTO
or not to link-time. This is a feature available in GCC for some time,
and makes the existing -ffat-lto-objects flag functional in the same
way as GCC's.
This patch adds support for that flag in the driver, as well as setting the
necessary codegen options for the backend. Largely, this means we select
the newly added pass pipeline for generating fat objects.
Users are expected to pass -ffat-lto-objects to clang in addition to one
of the -flto variants. Without the -flto flag, -ffat-lto-objects has no
effect.
// Compile and link. Use the object code from the fat object w/o LTO.
clang -fno-lto -ffat-lto-objects -fuse-ld=lld foo.c
// Compile and link. Select full LTO at link time.
clang -flto -ffat-lto-objects -fuse-ld=lld foo.c
// Compile and link. Select ThinLTO at link time.
clang -flto=thin -ffat-lto-objects -fuse-ld=lld foo.c
// Compile and link. Use ThinLTO with the UnifiedLTO pipeline.
clang -flto=thin -ffat-lto-objects -funified-lto -fuse-ld=lld foo.c
// Compile and link. Use full LTO with the UnifiedLTO pipeline.
clang -flto -ffat-lto-objects -funified-lto -fuse-ld=lld foo.c
// Link separately, using ThinLTO.
clang -c -flto=thin -ffat-lto-objects foo.c
clang -flto=thin -fuse-ld=lld foo.o -ffat-lto-objects # pass --lto=thin --fat-lto-objects to ld.lld
// Link separately, using full LTO.
clang -c -flto -ffat-lto-objects foo.c
clang -flto -fuse-ld=lld foo.o # pass --lto=full --fat-lto-objects to ld.lld
Original RFC: https://discourse.llvm.org/t/rfc-ffat-lto-objects-support/63977
Depends on D146776
Reviewed By: tejohnson, MaskRay
Differential Revision: https://reviews.llvm.org/D146777
Simon Pilgrim [Mon, 17 Jul 2023 16:16:47 +0000 (17:16 +0100)]
[DAG] SelectionDAG::getNode() - consistently use N1 for first operand. NFCI.
This has been annoying me for years - rename Operand to N1 so it matches all the other getNode() calls, and simplifies my debug watch windows!
Matthias Springer [Mon, 17 Jul 2023 16:05:44 +0000 (18:05 +0200)]
[mlir][vector][NFC] Drop `get...AttrStrName` helper functions
These functions are not needed. They are auto-generated from the `.td` files.
Differential Revision: https://reviews.llvm.org/D155483
Leonard Grey [Mon, 17 Jul 2023 16:05:18 +0000 (12:05 -0400)]
[gn] Port
8ac71b026ee6 (no more _LIBCPP_HAS_THREAD_LIBRARY_EXTERNAL)
Craig Topper [Mon, 17 Jul 2023 16:12:14 +0000 (09:12 -0700)]
[RISCV] Remove 'not FeatureStdExtC' from Zcmp predicate.
C is only incompatible if D is also enabled. This already checked
in RISCVISAInfo.cpp.
Mark de Wever [Fri, 7 Jul 2023 16:32:20 +0000 (18:32 +0200)]
[libc++][format] Fixes an off by one error.
The post-condition on the functions is that the buffer is not full.
This post-conditon is used as pre-condition of the push_back function.
When a copy, fill, of transform function exactly fit in the buffer this
post-condition was validated.
Reviewed By: #libc, ldionne
Differential Revision: https://reviews.llvm.org/D155397
Piotr Zegar [Mon, 17 Jul 2023 15:01:38 +0000 (15:01 +0000)]
[clang-tidy] Model noexcept more properly in bugprone-exception-escape
During call stack analysis skip called noexcept functions
as they wont throw exceptions, they will crash.
Check will emit warnings for those functions separately.
Fixes: #43667, #49151, #51596, #54668, #54956
Reviewed By: carlosgalvezp
Differential Revision: https://reviews.llvm.org/D153458
Craig Topper [Mon, 17 Jul 2023 15:58:29 +0000 (08:58 -0700)]
[RISCV] Re-define sha256, Zksed, and Zksh intrinsics to use i32 types.
Previously we returned i32 on RV32 and i64 on RV64. The instructions
only consume 32 bits and only produce 32 bits. For RV64, the result
is sign extended to 64 bits like *W instructions.
This patch removes this detail from the interface to improve
portability and consistency. This matches the proposal for scalar
intrinsics here https://github.com/riscv-non-isa/riscv-c-api-doc/pull/44
I've included IR autoupgrade support as well.
I'll be doing this for other builtins/intrinsics that currently use
'long' in other patches.
Reviewed By: VincentWu
Differential Revision: https://reviews.llvm.org/D154647
Guray Ozen [Mon, 17 Jul 2023 15:38:03 +0000 (17:38 +0200)]
[mlir][nvvm] Delete backslash
Delete the backslash. It was there to compile tablegen file. It looks like space also works fine.
Reviewed By: springerm
Differential Revision: https://reviews.llvm.org/D155474
Marco Elver [Mon, 17 Jul 2023 14:58:23 +0000 (16:58 +0200)]
[ThreadSanitizer] Add fallback DebugLocation for memintrinsic calls
When building with debug info enabled, some load/store instructions do
not have a DebugLocation attached. When using the default IRBuilder, it
attempts to copy the DebugLocation from the insertion-point instruction.
When there's no DebugLocation, no attempt is made to add one.
Add a fallback DebugLocation with the help of InstrumentationIRBuilder for
memintrinsics. In particular, the compiler may optimize load/store without
debug info into memintrinsics, which then are missing debug info as well.
Jakob Koschel [Mon, 17 Jul 2023 10:41:16 +0000 (12:41 +0200)]
[SanitizerCoverage] Add fallback DebugLocation for instrumented calls
When building the kernel with LTO, KCOV & debug information enabled,
multiple inlinable SanitizerCoverage functions require debug information
present.
In such cases we repurpose the InstrumentationIRBuilder that ensures
the necessary debug information is added if necessary.
This has been done analogous to the work for the ThreadSanitizer
in D124937.
Bug: https://github.com/ClangBuiltLinux/linux/issues/1721
Reviewed By: melver
Differential Revision: https://reviews.llvm.org/D155377
Jakob Koschel [Mon, 17 Jul 2023 10:40:48 +0000 (12:40 +0200)]
[AddressSanitizer] Add fallback DebugLocation for instrumented calls
When building the kernel with LTO, KASAN & debug information enabled,
multiple inlinable AddressSanitizer functions require debug information
present.
In such cases we repurpose the InstrumentationIRBuilder that ensures
the necessary debug information is added if necessary.
This has been done analogous to the work for the ThreadSanitizer
in D124937.
Bug: https://github.com/ClangBuiltLinux/linux/issues/1721
Reviewed By: melver
Differential Revision: https://reviews.llvm.org/D155376
Craig Topper [Mon, 17 Jul 2023 15:47:42 +0000 (08:47 -0700)]
[RISCV] Add FP compare test to condops.ll to show a missed opportunity to remove an xori. NFC
This is a case that D155288 won't get.
Reviewed By: asb
Differential Revision: https://reviews.llvm.org/D155327
Craig Topper [Mon, 17 Jul 2023 15:43:43 +0000 (08:43 -0700)]
[IRGen] Remove 'Sve' from the name of some IR names that are shared with RISC-V now.
Reviewed By: c-rhodes
Differential Revision: https://reviews.llvm.org/D155220
Matthias Springer [Mon, 17 Jul 2023 15:10:33 +0000 (17:10 +0200)]
[mlir][Interfaces] Fix DestinationStyleOpInterface for vector ops
This revision fixes `hasTensorSemantics` and `hasBufferSemantics` for vector transfer ops, which may have a vector operand. `VectorType` implements `ShapedType` and such operands do not affect whether an op has tensor or buffer semantics. Also implement `DestinationStyleOpInterface` on `TransferReadOp` so that `hasTensorSemantics`/`hasBufferSemantics` can be called. (The op has no inits, but this makes it symmetric to `TransferWriteOp`.)
Differential Revision: https://reviews.llvm.org/D155469
Craig Topper [Mon, 17 Jul 2023 15:30:40 +0000 (08:30 -0700)]
[RISCV] Add bf16 as a valid type for the FPR16 register class.
This makes it possible for D153234 to use the FPR16 register class
for bf16 instructions.
Differential Revision: https://reviews.llvm.org/D155418
Nicolas Vasilache [Sun, 16 Jul 2023 11:13:07 +0000 (13:13 +0200)]
[mlir][cuda] Add a test-lower-to-nvvm catchall passpipeline.
This mirrors the test-lower-to-llvm pass pipeline that provides some sanity when running e2e examples.
One peculiarity of the GPU pipeline is that we want to allow 32b indexing in kernels.
This is currently not straightforward as there are dependencies between passes.
This new test pass orders passes in a way that connects end-to-end.
Differential Revision: https://reviews.llvm.org/D155463
Guray Ozen [Mon, 17 Jul 2023 12:42:30 +0000 (14:42 +0200)]
[mlir][nvvm] Add `cp.async.bulk.tensor.shared.cluster.global`
This work introduce `cp.async.bulk.tensor.shared.cluster.global` in NVVM dialect that executes load using TMA.
Depends on D155056
Reviewed By: nicolasvasilache
Differential Revision: https://reviews.llvm.org/D155060
Guray Ozen [Mon, 17 Jul 2023 12:27:32 +0000 (14:27 +0200)]
[mlir][nvgpu] Verify invalid copy size (nfc)
This work improves verifier for invalid cases. It is NFC.
Reviewed By: nicolasvasilache, springerm
Differential Revision: https://reviews.llvm.org/D155448
Simon Pilgrim [Mon, 17 Jul 2023 14:34:52 +0000 (15:34 +0100)]
[DAG] Move lshr narrowing from visitANDLike to SimplifyDemandedBits
Inspired by some of the cases from D145468
Let SimplifyDemandedBits handle the narrowing of lshr to half-width if we don't require the upper bits, the narrowed shift is profitable and the zext/trunc are free.
A future patch will propose the equivalent shl narrowing combine.
Differential Revision: https://reviews.llvm.org/D146121
Adam Paszke [Mon, 17 Jul 2023 14:32:31 +0000 (14:32 +0000)]
[MLIR][CAPI] Add C API dialect registration methods for Arith, Math, MemRef and Vector dialects
Reviewed By: ftynse
Differential Revision: https://reviews.llvm.org/D155450
Matthias Springer [Mon, 17 Jul 2023 14:08:08 +0000 (16:08 +0200)]
[mlir][IR] Remove duplicate `isLastMemrefDimUnitStride` functions
This function is duplicated in various dialects.
Differential Revision: https://reviews.llvm.org/D155462
Alex Zinenko [Thu, 13 Jul 2023 17:55:36 +0000 (17:55 +0000)]
[mlir][nvgpu] add simple pipelining for shared memory copies
Add a simple transform operation to the NVGPU extension that performs
software pipelining of copies to shared memory. The functionality is
extremely minimalistic in this version and only supports copies from
global to shared memory inside an `scf.for` loop with either
`vector.transfer` or `nvgpu.device_async_copy` operations when
pipelining preconditions are already satisfied in the IR. This is the
minimally useful version that uses the more general loop pipeliner in an
NVGPU-specific way. Further extensions and orthogonalizations will be
necessary.
This required a change to the loop pipeliner itself to properly
propagate errors should the predicate generator fail.
This is loosely inspired from the vesion in IREE, but has less unsafe
assumptions and more principled way of communicating decisions.
Reviewed By: nicolasvasilache
Differential Revision: https://reviews.llvm.org/D155223
Amaury Séchet [Mon, 17 Jul 2023 14:03:54 +0000 (14:03 +0000)]
[NFC] Add test case for D154533.
Aleksandr Popov [Sun, 16 Jul 2023 23:00:21 +0000 (01:00 +0200)]
[IRCE] Add NSW flag to main loop's indvar base
We have guarantees that induction variable will not overflow in the main
loop after the loop constrained. Therefore we can add no wrap flags on
its base in order not to miss info that loop is countable.
Add NSW flag now, since adding NUW flag requires a bit more complicated
analysis.
Reviewed By: skatkov
Differential Revision: https://reviews.llvm.org/D154954
Leandro Lupori [Tue, 11 Jul 2023 20:08:13 +0000 (20:08 +0000)]
[compiler-rt][xray] Fix alignment of XRayFileHeader
XRayFileHeader storage was obtained from std::aligned_storage
using its default alignment and not the struct's alignment
requirement. This was causing a bus error on AArch32, on armv8
machines, where vld1.64/vst1.64 instructions with 128-bit
alignment requirement were being used to copy XRayFileHeader.
There is still another issue with fdr-single-thread.cpp test on
armv7. Now it runs until completion and produces a valid log file,
but for some reason the function name appears as _end in it,
instead of the expected mangled fn name.
Reviewed By: MaskRay
Differential Revision: https://reviews.llvm.org/D155013
Jared Grubb [Fri, 14 Jul 2023 17:26:09 +0000 (10:26 -0700)]
[clang-format] Fix support for ObjC blocks with pointer return types
The ObjC-block detection code only supports a single token as the return type. Add support to detect pointers, too (ObjC has lots of object-pointers).
For example, using `BasedOnStyle: WebKit`, the following is stable output:
```
int* p = ^int*(void)
{ //
return nullptr;
}
();
```
After the patch, this is stable:
```
int* p = ^int*(void) { //
return nullptr;
}();
```
Differential Review: https://reviews.llvm.org/D146434
Louis Dionne [Tue, 4 Jul 2023 21:45:24 +0000 (17:45 -0400)]
[libc++][NFC] Remove unnecessary declarations in __thread/id.h
Louis Dionne [Tue, 4 Jul 2023 21:42:31 +0000 (17:42 -0400)]
[libc++][NFC] clang-format __thread/id.h since it just got moved
Louis Dionne [Tue, 4 Jul 2023 22:44:00 +0000 (18:44 -0400)]
[libc++] Remove internal "build-with-external-thread-library" configuration
Our threading support layer is currently a huge mess. There are too many
configurations with too many confusing names, and none of them are tested
in the usual CI. Here's a list of names related to these configurations:
LIBCXX_BUILD_EXTERNAL_THREAD_LIBRARY
_LIBCPP_BUILDING_THREAD_LIBRARY_EXTERNAL
LIBCXXABI_BUILD_EXTERNAL_THREAD_LIBRARY
_LIBCPP_HAS_THREAD_LIBRARY_EXTERNAL
LIBCXX_HAS_EXTERNAL_THREAD_API
_LIBCPP_HAS_THREAD_API_EXTERNAL
This patch cleans this up by removing the ability to build libc++ with
an "external" threading library for testing purposes, removing 4 out of
6 "names" above. That setting was meant to be used by libc++ developers,
but we don't use it in-tree and it's not part of our CI.
I know the ability to use an external threading API is used by some folks
out-of-tree, and this patch doesn't change that. This only changes the
way they will have to test their external threading support. After this
patch, the intent would be for them to set `-DLIBCXX_HAS_EXTERNAL_THREAD_API=ON`
when building the library, and to provide their usual `<__external_threading>`
header when they are testing the library. This can be done easily now
that we support custom lit configuration files in test suites.
The motivation for this patch is that our threading support layer is
basically unmaintainable -- anything beyond adding a new "backend" in
the slot designed for it requires incredible attention. The complexity
added by this setting just doesn't pull its weigh considering the
available alternatives.
Concretely, this will also allow future patches to clean up
`<__threading_support>` significantly.
Differential Revision: https://reviews.llvm.org/D154466
Andrew Gozillon [Mon, 17 Jul 2023 13:20:13 +0000 (08:20 -0500)]
[Flang][OpenMP][MLIR] An mlir transformation pass for marking FuncOp's implicitly called from TargetOp's and declare target marked FuncOp's as implicitly declare target
This pass will mark functions called from TargetOp's
and declare target functions as implicitly declare
target by adding the MLIR declare target attribute
directly to the function.
This pass executes after the initial lowering of Fortran's PFT
to MLIR (FIR/OMP+Arith etc.) and is one of a series of passes
that aim to clean up the MLIR for offloading (seperate passes
in different patches, one for early outlining, another for declare
target function filtering).
Reviewers: jsjodin, skatrak, kiaranchandramohan
Differential Revision: https://reviews.llvm.org/D154247
Nimish Mishra [Mon, 17 Jul 2023 12:57:47 +0000 (18:27 +0530)]
[mlir][OpenMP] Fixed internal compiler error with atomic update operation verification
Fixes https://github.com/llvm/llvm-project/issues/61089 by updating the
verification followed like translation from OpenMP+LLVM MLIR
dialect to LLVM IR.
Reviewed By: kiranchandramohan
Differential Revision: https://reviews.llvm.org/D153217
Aaron Ballman [Mon, 17 Jul 2023 13:01:51 +0000 (09:01 -0400)]
Fix Clang Sphinx build
This addresses the issues accidentally introduced in
b0697a1cb0b539c773548f62402816e2d9b6f107
Timm Bäder [Sat, 15 Jul 2023 13:11:27 +0000 (15:11 +0200)]
[clang][Interp][NFC] Fix a doc comment and a typo
Weining Lu [Mon, 17 Jul 2023 12:34:32 +0000 (20:34 +0800)]
[Triple] Add llvm::Triple::isLoongArch{32,64}
Reviewed By: MaskRay
Differential Revision: https://reviews.llvm.org/D155163
Matthias Springer [Mon, 17 Jul 2023 08:30:06 +0000 (10:30 +0200)]
[mlir][NVGPU][NFC] Clean up code structure
* Move passes to `Transforms` directory.
* Add `Utils.h` (will be utilized in a subsequent change).
Differential Revision: https://reviews.llvm.org/D155427
Jay Foad [Mon, 17 Jul 2023 08:34:45 +0000 (09:34 +0100)]
[AMDGPU] Add targets gfx1150 and gfx1151
This is the target definition only. Currently they are treated the same
as GFX 11.0.x.
Differential Revision: https://reviews.llvm.org/D155429
Timm Bäder [Sat, 8 Jul 2023 08:44:43 +0000 (10:44 +0200)]
[clang][Interp] Diagnose callsite for implicit functions
We don't have any code to point at here, so the diagnostics would just
point to the record declaration. Make them point to the call site
intead.
Differential Revision: https://reviews.llvm.org/D154761
Jay Foad [Mon, 17 Jul 2023 11:55:27 +0000 (12:55 +0100)]
[AMDGPU] Add test case for zext of f16 to i32
Preserve the test case from this abandoned review:
D51925 [AMDGPU] Fix issue for zext of f16 to i32
Guillaume Chatelet [Thu, 13 Jul 2023 11:38:21 +0000 (11:38 +0000)]
[libc][NFC] Split memcmp implementations per platform
This is a follow up on D154800 and D154770 to make the code structure more principled and avoid too many nested #ifdef/#endif.
Reviewed By: courbet
Differential Revision: https://reviews.llvm.org/D155181
Simi Pallipurath [Thu, 13 Jul 2023 13:32:05 +0000 (14:32 +0100)]
[compiler-rt] [Arm] Make the tests for the runtime functions __aeabi_c{d,f} work on Big-Endian.
We are trying to build the compiler-rt as big-endian. And found that the tests compiler-rt/test/builtins/Unit/arm/aeabi_cdcmpeq_test.c and compiler-rt/test/builtins/Unit/arm/aeabi_cfcmpeq_test.c do not work on big endian at the moment. This patch makes these tests work on big endian as well.
Reviewed By: peter.smith, simon_tatham
Differential Revision: https://reviews.llvm.org/D155208
Guillaume Chatelet [Thu, 13 Jul 2023 10:58:41 +0000 (10:58 +0000)]
[libc][NFC] Split memset implementations per platform
This is a follow up on D154800 and D154770 to make the code structure more principled and avoid too many nested #ifdef/#endif.
Reviewed By: courbet
Differential Revision: https://reviews.llvm.org/D155174
Jakub Chlanda [Mon, 17 Jul 2023 09:34:54 +0000 (11:34 +0200)]
[NFC][AMDGPU] Default initialize the Subtarget
This is to address a static analizer warning:
The pointer field will point to an arbitrary memory location, any
attempt to write may cause corruption. In <unnamed>
R600DAGToDAGISel.:R600DAGToDAGISel (llvm::TargetMachine &,
livm::CodeGenOpt::Level): A pointer field is not initialized in the
constructor (CWE-457)
Differential Revision: https://reviews.llvm.org/D154414
David Green [Mon, 17 Jul 2023 09:23:27 +0000 (10:23 +0100)]
[AArch64] Regenerate CostModel tests with update_analyze_test_checks. NFC
Simon Pilgrim [Fri, 14 Jul 2023 13:37:58 +0000 (14:37 +0100)]
[X86] Canonicalize vXi64 SIGN_EXTEND_INREG vXi1 to use v2Xi32 splatted shifts instead
If somehow a vXi64 bool sign_extend_inreg pattern has been lowered to vector shifts (without PSRAQ support), then try to canonicalize to vXi32 shifts to improve likelihood of value tracking being able to fold them away.
Using a PSLLQ and bitcasted PSRAD node make it very difficult for later fold to recover from this.
Nuno Lopes [Mon, 17 Jul 2023 09:11:14 +0000 (10:11 +0100)]
[ScalarizeMaskedMemIntrin] Use poison instead of undef as placeholder [NFC]
This is used for masked out lanes, that are replaced with the passthrough value
Oleg Shyshkov [Mon, 17 Jul 2023 08:47:51 +0000 (10:47 +0200)]
[mlir][bazel] Fix build.
David Spickett [Tue, 13 Jun 2023 14:11:44 +0000 (15:11 +0100)]
[lldb][AArch64] Add test predicate for systems with SME enabled
"sme" is just one of many cpuinfo features for SME but it's the
only one we need for testing.
The rest are related to the use of certain instructions and
don't change the register state available.
Reviewed By: omjavaid
Differential Revision: https://reviews.llvm.org/D154823
Sander de Smalen [Mon, 10 Jul 2023 10:58:52 +0000 (11:58 +0100)]
[AArch64] NFC: Replace 'forceStreamingCompatibleSVE' with 'isNeonAvailable'.
The AArch64Subtarget interface 'isNeonAvailable' is more appropriate going
forward, as we may also want to generate 'streaming SVE' code (not just
'streaming-compatible SVE' code), but here we must still make sure not to
use NEON instructions which are invalid in streaming SVE mode.
David Sherwood [Thu, 13 Jul 2023 15:21:31 +0000 (15:21 +0000)]
[SVE][CodeGen] Improve codegen for some zero-extends of masked loads
When doing a masked load of an illegal unpacked type and then
zero-extending to some illegal wider types we sometimes end up
with pointless 'and' instructions that are trying to zero bits
that we already know are zero. This patch fixes that by adding
more cases to performSVEAndCombine.
Differential Revision: https://reviews.llvm.org/D155281
Luke Lau [Thu, 13 Jul 2023 18:55:08 +0000 (19:55 +0100)]
[RISCV] Add VL nodes and VP patterns for unary zvbb instructions
This follows the pattern of lowering VP nodes to equivalent
RISCVISD::*_VL nodes. The nodes are modelled after the VP ISD nodes rather
than the actual zvbb instructions, and I've included a merge operand to be
consistent with the underlying pseudos that were recently refactored.
I've defined the nodes in RISCVInstrInfoVVLpatterns.td as the nodes aren't Zvk
specific, but the patterns are in RISCVInstrInfoZvk.td.
Reviewed By: craig.topper
Differential Revision: https://reviews.llvm.org/D155229
Luke Lau [Fri, 14 Jul 2023 16:58:15 +0000 (17:58 +0100)]
[RISCV] Fix predicates on zvbb patterns
The zvbb extension predicate was getting overwritten by the vtype predicates.
There's no change in the tests though because the ISD nodes were getting
expanded before instruction selection.
Reviewed By: craig.topper
Differential Revision: https://reviews.llvm.org/D155313
Matthias Gehre [Thu, 13 Jul 2023 06:53:47 +0000 (08:53 +0200)]
[MLIR] [TOSA]: Move reshape(reshape(x)) -> reshape(x) from canonicalization to fold
reshape(reshape(x)) -> reshape(x) can be directly written as a fold instead of a canonicalization,
to help other passes cleanup while they work.
This initially broke ReshapeConverterExpand/Collapse, which relies on creating foldable reshapes and a carefully crafted
benefit priority of patterns.
I turned this into a single pattern on reshapes, which does expand and/or collapse as needed in one go.
Differential Revision: https://reviews.llvm.org/D155266
David Spickett [Fri, 7 Jul 2023 11:46:56 +0000 (11:46 +0000)]
[lldb][AArch64] Fix flakiness in TestSVEThreadedDynamic
This test runs to a breakpoint on thread 0. Thread 0 then starts
thread 2 and 3, which both have breakpoints in them.
In https://lab.llvm.org/buildbot/#/builders/96/builds/41674
I think that we managed to do the first check on thread 2 before
thread 3 had started. Therefore "thread continue 3" failed.
So wait for all three to startup before we check their status.
I considered putting a timeout on the while like the wait_for... methods,
but the test itself already has a global timeout. Plus, I'd rather
not be tuning a timeout per piece of hardware this runs on.
99% of the time we will already have 3 threads when the check is done.
Reviewed By: omjavaid
Differential Revision: https://reviews.llvm.org/D154705
Sergio Afonso [Thu, 29 Jun 2023 11:20:25 +0000 (12:20 +0100)]
[Flang][OpenMP][MLIR] Filter emitted code depending on declare target and device
This patch adds support for selecting which functions are lowered to LLVM IR
from MLIR depending on declare target information and whether host or device
code is being generated.
The approach proposed by this patch is to perform the filtering in two stages:
- An MLIR transformation pass, which is added to the Flang translation flow
after the `OMPEarlyOutliningPass`. The functions that are kept are those
that match the OpenMP processor (host or device) the compiler invocation
is targeting, according to the presence of the `-fopenmp-is-target-device`
compiler option and declare target information. All functions contaning an
`omp.target` are also kept, regardless of the declare target information of
the function, due to the need for keeping target regions visible for both
host and device compilation.
- A filtering step during translation to LLVM IR, which is peformed for those
functions that were kept because of the presence of a target region inside.
If the targeted OpenMP processor does not match the declare target
information of the function, then it is removed from the LLVM IR after its
contents have been processed and translated. Since they should only contain
an omp.target operation which, in turn, should have been outlined into
another LLVM IR function, the wrapper can be deleted at that point.
Depends on D150328 and D150329.
Differential Revision: https://reviews.llvm.org/D147641
David Sherwood [Fri, 14 Jul 2023 08:39:13 +0000 (08:39 +0000)]
[SVE][CodeGen] Add more test cases for zero-extends of masked loads
This patch adds test cases for extending masked loads of illegal
unpacked types into illegal wider types.
Pre-commits tests for D155281
Sylvestre Ledru [Sun, 16 Jul 2023 21:06:01 +0000 (23:06 +0200)]
cmake: set _LARGEFILE_SOURCE=1 to fix a cmake error
```
-- Performing additional configure checks with target flags: -mips32r2;-mabi=32;-D_LARGEFILE_SOURCE;-D_FILE_OFFSET_BITS=64
-- Performing Test COMPILER_RT_HAS_mips_FLOAT16
CMake Error: Parse error in command line argument: _LARGEFILE_SOURCE
Should be: VAR:type=value
```
See: https://buildd.debian.org/status/fetch.php?pkg=llvm-toolchain-16&arch=mips64el&ver=1%3A16.0.6-4&stamp=
1689111818&raw=0
Differential Revision: https://reviews.llvm.org/D155409
Serge Pavlov [Mon, 17 Jul 2023 07:51:34 +0000 (14:51 +0700)]
[clang] Fix delayed template parsing
Commit
98390ccb80569e8fbb20e6c996b4b8cff87fbec6 fixed late template
instantiation by clearing FP pragma stack before instantiation. This
solution was based on the assumptions:
- FP pragma stack is not used anymore and it is safe to clear it,
- Default FP options are determined by command line options.
Both the assumptions are wrong. When compilation produces precompiled
header file, state of the stack is serialized and then restored when the
precompiled header is used. Delayed template parsing occurs at the end
of translation unit but before serialization, so clearing FP pragma
stack effects serialized representation. When the precompiled file is
loaded, some conditions can be broken and clang crashed, it was
described in https://github.com/llvm/llvm-project/issues/63704. The
crash was observed only in few cases, on most buildbots it was absent.
The violation of expected conditions was caused by violation of the
second assumption. FPEvalMethod can be modified by target, so it is not
possible to deduce it from LangOptions only. So default FP state read
from precompiled header was different from the state in the initialized
Sema, and this was the crash reason.
Only two targets do such modification of default FP options, these are
i386 and AIX. so the problem was hard to reproduce.
Delayed template parsing should occur with empty pragma stack, so it
must be cleared before the instantiation, but the stack now is saved
and restored after the instantiation is done.
This change should fix https://github.com/llvm/llvm-project/issues/63704.
Differential Revision: https://reviews.llvm.org/D155380
MarcoFalke [Thu, 13 Jul 2023 14:27:38 +0000 (16:27 +0200)]
[compiler-rt][NFC] Avoid implicit-integer-sign-change in FuzzedDataProvider::ConsumeIntegralInRange
This makes the implicit conversion that is happening explicit.
Otherwise, each user is forced to suppress this
implicit-integer-sign-change runtime error in their their UBSAN
suppressions file.
For example, the runtime error might look like:
runtime error: implicit conversion from type 'long' of value -
9223372036854775808 (64-bit, signed) to type 'uint64_t' (aka 'unsigned long') changed the value to
9223372036854775808 (64-bit, unsigned)
#0 0x55fe29dea91d in long FuzzedDataProvider::ConsumeIntegralInRange<long>(long, long) src/./test/fuzz/FuzzedDataProvider.h:233:25
[...]
SUMMARY: UndefinedBehaviorSanitizer: implicit-integer-sign-change test/fuzz/FuzzedDataProvider.h:233:25 in
Differential Revision: https://reviews.llvm.org/D155206
Martin Braenne [Mon, 17 Jul 2023 06:31:36 +0000 (06:31 +0000)]
[clang][dataflow] Add `refreshStructValue()`.
Besides being a useful abstraction, this function will help insulate existing clients of the framework from upcoming changes to the API of `StructValue` and `AggregateStorageLocation`.
Depends On D155202
Reviewed By: ymandel, xazax.hun
Differential Revision: https://reviews.llvm.org/D155204
Martin Braenne [Mon, 17 Jul 2023 06:31:03 +0000 (06:31 +0000)]
[clang][dataflow] Simplify implementation of `transferStdForwardCall()` in optional check.
The argument and return value of `std::forward` is always a reference, so we can simply forward the storage location.
Depends On D155075
Reviewed By: ymandel, gribozavr2, xazax.hun
Differential Revision: https://reviews.llvm.org/D155202
Martin Braenne [Mon, 17 Jul 2023 06:27:59 +0000 (06:27 +0000)]
[clang][dataflow] Add `DataflowEnvironment::createObject()`.
This consolidates the code used in various places to initialize objects (usually for variables) into one central location.
It will also help reduce the number of changes needed when we make the upcoming API changes to `AggregateStorageLocation` and `StructValue`.
Depends On D155074
Reviewed By: ymandel, xazax.hun
Differential Revision: https://reviews.llvm.org/D155075
Martin Braenne [Mon, 17 Jul 2023 06:27:42 +0000 (06:27 +0000)]
[clang][dataflow] Add a test for not explicitly initialized fields in aggregate initialization.
Reviewed By: ymandel
Differential Revision: https://reviews.llvm.org/D155074
Martin Storsjö [Wed, 12 Jul 2023 12:40:37 +0000 (12:40 +0000)]
[CMake] Switch the CMP0091 policy (MSVC_RUNTIME_LIBRARY) to the new behaviour
With the new behaviour, the /MD or similar options aren't added to
e.g. CMAKE_CXX_FLAGS_RELEASE, but are added separately by CMake.
They can be changed by the cmake variable
CMAKE_MSVC_RUNTIME_LIBRARY or with the target property
MSVC_RUNTIME_LIBRARY.
LLVM has had its own custom CMake flags, e.g. LLVM_USE_CRT_RELEASE,
which affects which CRT is used for release mode builds. Deprecate
these and direct users to use CMAKE_MSVC_RUNTIME_LIBRARY directly
instead (and do a best effort attempt at setting CMAKE_MSVC_RUNTIME_LIBRARY
based on the existing LLVM_USE_CRT_ flags). This only handles the
simple cases, it doesn't handle multi-config generators with
different LLVM_USE_CRT_* variables for different configs though,
but that's probably fine - we should move over to the new upstream
CMake mechanism anyway, and push users towards that.
Change code in compiler-rt, that previously tried to override the
CRT choice to /MT, to set CMAKE_MSVC_RUNTIME_LIBRARY instead of
meddling in the old variables.
This resolves the policy issue in
https://github.com/llvm/llvm-project/issues/63286, and should
handle the issues that were observed originally when the
minimum CMake version was bumped, in
https://github.com/llvm/llvm-project/issues/62719 and
https://github.com/llvm/llvm-project/issues/62739.
Differential Revision: https://reviews.llvm.org/D155233
Markus Böck [Fri, 14 Jul 2023 14:49:09 +0000 (16:49 +0200)]
[mlir][ODS] Add support for passing properties to `ref` in `custom`
This is essentially a follow up to https://reviews.llvm.org/D155072
This adds support for also passing properties as `ref` parameter to `custom`. This requires the property to have been bound previously and will error otherwise. This makes it possible for an implementation of `custom` to take previously parsed data into account, creating nice context-dependent grammars :-)
Differential Revision: https://reviews.llvm.org/D155297
Piotr Zegar [Mon, 17 Jul 2023 06:20:17 +0000 (06:20 +0000)]
[clang-tidy][NFC] Fix syntax in release notes
Add missing : character to links in release notes
so they could shown properly.
Evan Wilde [Mon, 17 Jul 2023 05:43:47 +0000 (22:43 -0700)]
[NFC][clang] Fix format in UnsafeBufferUsage.cpp
There were two whitespaces on an otherwise empty that were causing the
bots to fail due to formatting issues. Deleting extra whitespace now.
LLVM GN Syncbot [Mon, 17 Jul 2023 05:11:41 +0000 (05:11 +0000)]
[gn build] Port
42179bbf6bcc
Shivam Gupta [Sun, 16 Jul 2023 16:43:55 +0000 (22:13 +0530)]
[clang-tidy] Add check for possibly incomplete switch statements
While clang warns about a possibly incomplete switch statement when switching over an enum variable and failing to cover all enum values (either explicitly or with a default case), no such warning is emitted if a plain integer variable is used as switch variable.
Add a clang-tidy check to diagnose these scenarios.
No fixit hint is provided since there are multiple possible solutions.
Differential Revision: https://reviews.llvm.org/D4784
Piyou Chen [Mon, 17 Jul 2023 02:23:19 +0000 (19:23 -0700)]
[RISCV] Implement prefetch locality by NTLH
We add the MemOperand then backend will generate NTLH automatically.
```
__builtin_prefetch(ptr, 0 /* rw==read */, 0 /* locality */); => ntl.all + prefetch.r (ptr)
__builtin_prefetch(ptr, 0 /* rw==read */, 1 /* locality */); => ntl.pall + prefetch.r (ptr)
__builtin_prefetch(ptr, 0 /* rw==read */, 2 /* locality */); => ntl.p1 + prefetch.r (ptr)
__builtin_prefetch(ptr, 0 /* rw==read */, 3 /* locality */); => prefetch.r (ptr)
```
Reviewed By: craig.topper
Differential Revision: https://reviews.llvm.org/D154691
Craig Topper [Mon, 17 Jul 2023 03:15:52 +0000 (20:15 -0700)]
[RISCV] Adjust the Zfhmin handling in RISCVInstrInfo::copyPhysReg.
Instead of checking '!Zfh && Zhfmin' first, handle Zfh. Then assert
that the other case is F+Zfhmin. The F+Zfhmin check will need to be
relaxed for bfloat16 support. As it was written before there would
be now error to catch that. Instead it would just silently create
fsgnj.h instructions.
Lang Hames [Mon, 17 Jul 2023 00:33:02 +0000 (17:33 -0700)]
[ORC] In defineMaterializing, error out early if tracker is defunct.
An in-flight materialization may try to claim responsibility for new symbols
(via MaterializationResponsibility::defineMaterializing) after the tracker that
is associated with the materialization is removed, leaving the tracker defunct.
Failure to error out early here could leave the JITDylib in an invalid state,
with defineMaterializing associating new symbols with the already-defunct
tracker. Erroring out early prevents this.
Cassie Jones [Sun, 16 Jul 2023 23:45:30 +0000 (16:45 -0700)]
[Driver] Warn about all instances -mios-version-min not just the last
Follow-up to D155123, uniformly handle cases where there are duplicate
-mios-verion-min arguments.
Reviewed By: MaskRay
Differential Revision: https://reviews.llvm.org/D155407
Lang Hames [Sun, 16 Jul 2023 23:37:09 +0000 (16:37 -0700)]
[ORC] Assert that ExecutionSession is still open when JITDylibs are created.
Nuno Lopes [Sun, 16 Jul 2023 21:33:00 +0000 (22:33 +0100)]
[InferAddressSpaces] Use poison instead of undef as placeholder [NFC]
This placeholder is only used during the execution of the algorithm, and it's patched with a
concrete value at the end
Nuno Lopes [Sun, 16 Jul 2023 21:31:17 +0000 (22:31 +0100)]
[LoopIdiomRecognize] Use poison instead of undef as placeholder [NFC]
It was using undef as placeholder for getting the TTI cost for cttz
While at it, update the comments about cttz's last argument (is_zero_poison)
Craig Topper [Sun, 16 Jul 2023 19:56:41 +0000 (12:56 -0700)]
[RISCV] Move comments before 'if' instead of after. NFC
This allows us to remove some curly braces around the if body.
The code wasn't consistent about it anyway. Comments before is
used in other places in this file already.
Reviewed By: wangpc, MaskRay
Differential Revision: https://reviews.llvm.org/D155390
Craig Topper [Sun, 16 Jul 2023 19:56:03 +0000 (12:56 -0700)]
[RISCV] Make selectSETCC return SDValue instead of bool. NFC
We can use a null SDValue for the 'false' case. This avoids the
need for an output parameter. This is consistent with other
SelectionDAG code.
Reviewed By: wangpc
Differential Revision: https://reviews.llvm.org/D155388
Piotr Zegar [Sun, 16 Jul 2023 18:28:39 +0000 (18:28 +0000)]
[clang-tidy] Improve build-in type handling in bugprone-swapped-arguments
Improved detection of argument swaps involving integral and floating-point
types by enhancing handling of implicit conversions. Now implicit casts
from float to double are also considered, same for integers.
Improved documentation.
Fixes: #62926
Reviewed By: carlosgalvezp
Differential Revision: https://reviews.llvm.org/D151495
Lang Hames [Sun, 16 Jul 2023 17:03:38 +0000 (10:03 -0700)]
[JITLink] Replace isInRangeForImm* functions with isInt / isUInt equivalents.
Avoids some code duplication.