- Feb 17, 2024
-
-
Xing Xue authored
[OpenMP][AIX] Set worker stack size to 2 x KMP_DEFAULT_STKSIZE if system stack size is too big (#81996) This patch sets the stack size of worker threads to `2 x KMP_DEFAULT_STKSIZE` (2 x 4MB) for AIX if the system stack size is too big. Also defines maximum stack size for 32-bit AIX.
-
Aaron Ballman authored
Our usual pattern when issuing an extension warning is to also issue a default-off diagnostic about the keywords not being compatible with standards before a certain point. This adds those diagnostics for C11 keywords.
-
Vlad Serebrennikov authored
This patch attempts to fix lookup in class template specialization. The first fixed problem is that during type lookup `DeclContextGetName` have been dropping template arguments. So when such a name was compared against a name in `DW_AT_name`, which contains template arguments, false mismatches have been occurring. The second fixed problem is that LLDB's printing policy hasn't been matching Clang's printing policy when it comes to integral non-type template arguments. This again caused some false mismatches during type lookup, because Clang puts e.g. `3U` in debug info for class specializations, but LLDB has been expecting just `3`. This patch brings printing policy in line with what Clang does.
-
Arthur Eubanks authored
optnone requires noinline, which is incompatible with alwaysinline.
-
Alexander Yermolovich authored
According to DWARF spec zero entires indicate end of arange. Changed so that BOLT does not emit zero low_pc arange.
-
Florian Hahn authored
Motivation for this and follow-on patches is to improve codegen for libc++, where using memcpy limits optimizations, like vectorization for code iteration over std::vector<std::complex<float>>: https://godbolt.org/z/f3vqYos3c Depends on https://github.com/llvm/llvm-project/pull/81289. PR: https://github.com/llvm/llvm-project/pull/81313
-
Shubham Sandeep Rastogi authored
This reverts commit 7b7d411d.
-
Philip Reames authored
-
Fabio D'Urso authored
Fix for performance regression introduced by #80061 that slowed down Fuchsia's MallocFree microbenchmark by 3.5 - 8%
-
Corbin Robeck authored
Follow on to #81525 in the series of consolidating bits in TSFlags. Merge SGPRSpill and VGPRSpill into single Spill bit Modify isSGPRSpill and isVGPRSpill helper functions to differentiate VGPR and SGPR spills: Spill+SALU=SGPR Spill Spill+VALU=VGPR Spill The only exception here is SGPR spills to VGPRs which require an explicit instruction check.
-
Timm Bäder authored
Looks like I lost this last time.
-
Arthur Eubanks authored
NFCish since previously we'd return false for all presplit coroutines anyway. This clarifies things a bit.
-
Timm Bäder authored
Enough so we can enable SemaCXX/builtin-overflow.cpp.
-
Timm Bäder authored
-
Wael Yehia authored
to satisfy the __start___llvm_orderfile reference when linking with -bexpfull and -fprofile-generate on AIX.
-
lntue authored
-
Guillaume Chatelet authored
This is a fix forward for the Fuchsia build bot https://lab.llvm.org/buildbot/#/builders/98/builds/33515
-
Nick Desaulniers authored
I've been diffing the c17 vs c23 latest publicly available drafts and think I have most of the library related differences. I haven't yet annotated what we actually support or not. Link: https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2310.pdf (C17) Link: https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3096.pdf (C23)
-
Erich Keane authored
This patch Implements AST node creation and appertainment enforcement for 'parallel', as well as changes the 'not implemented' messages to be more specific. It does not deal with clauses/clause legality, nor a few of the other rules from the standard, but this gets us most of the way for a framework for future construct implementation.
-
Jonas Devlieghere authored
We have a handful of tests that build a driver which links against LLDB. When running those binaries, we overwrite the dynamic loader library path to point to the build directory's libs dir, presumably to make sure we load LLDB from there. This above becomes an issue when you have libc++ enabled and the driver is linked against the system's libc++, but the dynamic loader flag forces it to pick up libc++ from the libs dir. We could try to make the logic for building the driver smarter and have it pick up the just-built libc++ like we do for our test binaries, but I don't think we need to overwrite the library path in the first place. The build logic to build these drivers already takes care to set the correct RPATH in the linker. This patch removes the logic and simplifies the tests.
-
Michael Liao authored
-
Vlad Serebrennikov authored
This patch attempts to fix lookup in class template specialization. The first fixed problem is that during type lookup `DeclContextGetName` have been dropping template arguments. So when such a name was compared against a name in `DW_AT_name`, which contains template arguments, false mismatches have been occurring. The second fixed problem is that LLDB's printing policy hasn't been matching Clang's printing policy when it comes to integral non-type template arguments. This again caused some false mismatches during type lookup, because Clang puts e.g. `3U` in debug info for class specializations, but LLDB has been expecting just `3`. This patch brings printing policy in line with what Clang does.
-
Philip Reames authored
This only address the tmp name collision. We still get warnings due to conflicting ASM. This is due to the different target attributes on the function.
-
Shilei Tian authored
-
Florian Hahn authored
On some uArchs, `STP [s|d], [s|d]` first combines the 2 input registers in a single register using a vector execution unit. IIUC AArch64StorePairSuppress tries to prevent forming STPs in case the critical resource are the vector units, in order to prevent adding more pressure on those units. The implementation however simply computes the new critical resource length by adding resource for another STP. If load/store units are the critical resource, this means we increase that length by one, and incorrectly prevent forming the STP. This patch adjusts the resource computation by also removing 2 STRs, as introducing a STP will remove 2 single stores. This should more accurately reflect the resource usage after introducing an STP, and does not prevent forming STPs if load/store units are the critical resources; in those cases, STP can actually help to reduce resource usage. PR: https://github.com/llvm/llvm-project/pull/81749
-
Stanislav Mekhanoshin authored
For some reason only IntClamp was added to the Ins64, but not FPClamp. As is this is NFC, but fails to produce proper dag downstream.
-
Stanislav Mekhanoshin authored
-
- Feb 16, 2024
-
-
Jonas Devlieghere authored
Fix and rename the broken and confusingly named decorator skipIfHostIncompatibleWithRemote. The decorator is meant to skip test which uses the inferior test build system (i.e. to build test inferiors) to build host binaries (e.g. lldb drivers). The decorator was broken on macOS, where the host and target platform report macosx, but the decorator overwrote it with Darwin, resulting in tests incorrectly being skipped. The decorator was also missing on a handful of tests that use the buildDriver helper, which this commit fixes as well.
-
Eikansh Gupta authored
fshl/fshr having first two arguments as same gets lowered to target specific rotate. But based on the uses, one of the arguments can get simplified resulting in different arguments performing equivalent operation. This patch prevents the simplification of the arguments of lshr/shl if they are part of fshl pattern. Closes https://github.com/llvm/llvm-project/pull/73441.
-
Eikansh Gupta authored
-
Eikansh Gupta authored
The matchFunnelShift function was doing pattern matching and creating the fshl/fshr instruction if needed. Moved the pattern matching code to function convertOrOfShiftsToFunnelShift. It can be reused for other optimizations.
-
Guillaume Chatelet authored
- #81835 - Fix for platforms where uint64_t is not available
-
Anton Lydike authored
This patch introduces the new MPI dialect into MLIR. The Message Passing Interface (MPI) is a widely-used standard for distributed programs to exchange data. This PR goes together with a talk later at today's LLVM Dev Meeting. This is just a first, small patch to get going and add the necessary base files, so that we can add more operations in further patches. Here's the documentation as generated by `ninja mlir-doc`: # 'mpi' Dialect This dialect models the Message Passing Interface (MPI), version 4.0. It is meant to serve as an interfacing dialect that is targeted by higher-level dialects. The MPI dialect itself can be lowered to multiple MPI implementations and hide differences in ABI. The dialect models the functions of the MPI specification as close to 1:1 as possible while preserving SSA value semantics where it makes sense, and uses `memref` types instead of bare pointers. This dialect is under active development, and while stability is an eventual goal, it is not guaranteed at this juncture. Given the early state, it is recommended to inquire further prior to using this dialect. For an in-depth documentation of the MPI library interface, please refer to official documentation such as the [OpenMPI online documentation](https://www.open-mpi.org/doc/current/). [TOC] ## Operation definition ### `mpi.comm_rank` (mpi::CommRankOp) _Get the current rank, equivalent to `MPI_Comm_rank(MPI_COMM_WORLD, &rank)`_ Syntax: ``` operation ::= `mpi.comm_rank` attr-dict `:` type(results) ``` Communicators other than `MPI_COMM_WORLD` are not supported for now. This operation can optionally return an `!mpi.retval` value that can be used to check for errors. #### Results: | Result | Description | | :----: | ----------- | | `retval` | MPI function call return value | `rank` | 32-bit signless integer ### `mpi.error_class` (mpi::ErrorClassOp) _Get the error class from an error code, equivalent to the `MPI_Error_class` function_ Syntax: ``` operation ::= `mpi.error_class` $val attr-dict `:` type($val) ``` `MPI_Error_class` maps return values from MPI calls to a set of well-known MPI error classes. #### Operands: | Operand | Description | | :-----: | ----------- | | `val` | MPI function call return value #### Results: | Result | Description | | :----: | ----------- | | `errclass` | MPI function call return value ### `mpi.finalize` (mpi::FinalizeOp) _Finalize the MPI library, equivalent to `MPI_Finalize()`_ Syntax: ``` operation ::= `mpi.finalize` attr-dict (`:` type($retval)^)? ``` This function cleans up the MPI state. Afterwards, no MPI methods may be invoked (excpet for MPI_Get_version, MPI_Initialized, and MPI_Finalized). Notably, MPI_Init cannot be called again in the same program. This operation can optionally return an `!mpi.retval` value that can be used to check for errors. #### Results: | Result | Description | | :----: | ----------- | | `retval` | MPI function call return value ### `mpi.init` (mpi::InitOp) _Initialize the MPI library, equivalent to `MPI_Init(NULL, NULL)`_ Syntax: ``` operation ::= `mpi.init` attr-dict (`:` type($retval)^)? ``` This operation must preceed most MPI calls (except for very few exceptions, please consult with the MPI specification on these). Passing &argc, &argv is not supported currently. This operation can optionally return an `!mpi.retval` value that can be used to check for errors. #### Results: | Result | Description | | :----: | ----------- | | `retval` | MPI function call return value ### `mpi.recv` (mpi::RecvOp) _Equivalent to `MPI_Recv(ptr, size, dtype, dest, tag, MPI_COMM_WORLD, MPI_STATUS_IGNORE)`_ Syntax: ``` operation ::= `mpi.recv` `(` $ref `,` $tag `,` $rank `)` attr-dict `:` type($ref) `,` type($tag) `,` type($rank)(`->` type($retval)^)? ``` MPI_Recv performs a blocking receive of `size` elements of type `dtype` from rank `dest`. The `tag` value and communicator enables the library to determine the matching of multiple sends and receives between the same ranks. Communicators other than `MPI_COMM_WORLD` are not supprted for now. The MPI_Status is set to `MPI_STATUS_IGNORE`, as the status object is not yet ported to MLIR. This operation can optionally return an `!mpi.retval` value that can be used to check for errors. #### Operands: | Operand | Description | | :-----: | ----------- | | `ref` | memref of any type values | `tag` | 32-bit signless integer | `rank` | 32-bit signless integer #### Results: | Result | Description | | :----: | ----------- | | `retval` | MPI function call return value ### `mpi.retval_check` (mpi::RetvalCheckOp) _Check an MPI return value against an error class_ Syntax: ``` operation ::= `mpi.retval_check` $val `=` $errclass attr-dict `:` type($res) ``` This operation compares MPI status codes to known error class constants such as `MPI_SUCCESS`, or `MPI_ERR_COMM`. #### Attributes: <table> <tr><th>Attribute</th><th>MLIR Type</th><th>Description</th></tr> <tr><td><code>errclass</code></td><td>::mlir::mpi::MPI_ErrorClassEnumAttr</td><td><details><summary>MPI error class name</summary>{{% markdown %}}Enum cases: * MPI_SUCCESS (`MPI_SUCCESS`) * MPI_ERR_ACCESS (`MPI_ERR_ACCESS`) * MPI_ERR_AMODE (`MPI_ERR_AMODE`) * MPI_ERR_ARG (`MPI_ERR_ARG`) * MPI_ERR_ASSERT (`MPI_ERR_ASSERT`) * MPI_ERR_BAD_FILE (`MPI_ERR_BAD_FILE`) * MPI_ERR_BASE (`MPI_ERR_BASE`) * MPI_ERR_BUFFER (`MPI_ERR_BUFFER`) * MPI_ERR_COMM (`MPI_ERR_COMM`) * MPI_ERR_CONVERSION (`MPI_ERR_CONVERSION`) * MPI_ERR_COUNT (`MPI_ERR_COUNT`) * MPI_ERR_DIMS (`MPI_ERR_DIMS`) * MPI_ERR_DISP (`MPI_ERR_DISP`) * MPI_ERR_DUP_DATAREP (`MPI_ERR_DUP_DATAREP`) * MPI_ERR_ERRHANDLER (`MPI_ERR_ERRHANDLER`) * MPI_ERR_FILE (`MPI_ERR_FILE`) * MPI_ERR_FILE_EXISTS (`MPI_ERR_FILE_EXISTS`) * MPI_ERR_FILE_IN_USE (`MPI_ERR_FILE_IN_USE`) * MPI_ERR_GROUP (`MPI_ERR_GROUP`) * MPI_ERR_INFO (`MPI_ERR_INFO`) * MPI_ERR_INFO_KEY (`MPI_ERR_INFO_KEY`) * MPI_ERR_INFO_NOKEY (`MPI_ERR_INFO_NOKEY`) * MPI_ERR_INFO_VALUE (`MPI_ERR_INFO_VALUE`) * MPI_ERR_IN_STATUS (`MPI_ERR_IN_STATUS`) * MPI_ERR_INTERN (`MPI_ERR_INTERN`) * MPI_ERR_IO (`MPI_ERR_IO`) * MPI_ERR_KEYVAL (`MPI_ERR_KEYVAL`) * MPI_ERR_LOCKTYPE (`MPI_ERR_LOCKTYPE`) * MPI_ERR_NAME (`MPI_ERR_NAME`) * MPI_ERR_NO_MEM (`MPI_ERR_NO_MEM`) * MPI_ERR_NO_SPACE (`MPI_ERR_NO_SPACE`) * MPI_ERR_NO_SUCH_FILE (`MPI_ERR_NO_SUCH_FILE`) * MPI_ERR_NOT_SAME (`MPI_ERR_NOT_SAME`) * MPI_ERR_OP (`MPI_ERR_OP`) * MPI_ERR_OTHER (`MPI_ERR_OTHER`) * MPI_ERR_PENDING (`MPI_ERR_PENDING`) * MPI_ERR_PORT (`MPI_ERR_PORT`) * MPI_ERR_PROC_ABORTED (`MPI_ERR_PROC_ABORTED`) * MPI_ERR_QUOTA (`MPI_ERR_QUOTA`) * MPI_ERR_RANK (`MPI_ERR_RANK`) * MPI_ERR_READ_ONLY (`MPI_ERR_READ_ONLY`) * MPI_ERR_REQUEST (`MPI_ERR_REQUEST`) * MPI_ERR_RMA_ATTACH (`MPI_ERR_RMA_ATTACH`) * MPI_ERR_RMA_CONFLICT (`MPI_ERR_RMA_CONFLICT`) * MPI_ERR_RMA_FLAVOR (`MPI_ERR_RMA_FLAVOR`) * MPI_ERR_RMA_RANGE (`MPI_ERR_RMA_RANGE`) * MPI_ERR_RMA_SHARED (`MPI_ERR_RMA_SHARED`) * MPI_ERR_RMA_SYNC (`MPI_ERR_RMA_SYNC`) * MPI_ERR_ROOT (`MPI_ERR_ROOT`) * MPI_ERR_SERVICE (`MPI_ERR_SERVICE`) * MPI_ERR_SESSION (`MPI_ERR_SESSION`) * MPI_ERR_SIZE (`MPI_ERR_SIZE`) * MPI_ERR_SPAWN (`MPI_ERR_SPAWN`) * MPI_ERR_TAG (`MPI_ERR_TAG`) * MPI_ERR_TOPOLOGY (`MPI_ERR_TOPOLOGY`) * MPI_ERR_TRUNCATE (`MPI_ERR_TRUNCATE`) * MPI_ERR_TYPE (`MPI_ERR_TYPE`) * MPI_ERR_UNKNOWN (`MPI_ERR_UNKNOWN`) * MPI_ERR_UNSUPPORTED_DATAREP (`MPI_ERR_UNSUPPORTED_DATAREP`) * MPI_ERR_UNSUPPORTED_OPERATION (`MPI_ERR_UNSUPPORTED_OPERATION`) * MPI_ERR_VALUE_TOO_LARGE (`MPI_ERR_VALUE_TOO_LARGE`) * MPI_ERR_WIN (`MPI_ERR_WIN`) * MPI_ERR_LASTCODE (`MPI_ERR_LASTCODE`){{% /markdown %}}</details></td></tr> </table> #### Operands: | Operand | Description | | :-----: | ----------- | | `val` | MPI function call return value #### Results: | Result | Description | | :----: | ----------- | | `res` | 1-bit signless integer ### `mpi.send` (mpi::SendOp) _Equivalent to `MPI_Send(ptr, size, dtype, dest, tag, MPI_COMM_WORLD)`_ Syntax: ``` operation ::= `mpi.send` `(` $ref `,` $tag `,` $rank `)` attr-dict `:` type($ref) `,` type($tag) `,` type($rank)(`->` type($retval)^)? ``` MPI_Send performs a blocking send of `size` elements of type `dtype` to rank `dest`. The `tag` value and communicator enables the library to determine the matching of multiple sends and receives between the same ranks. Communicators other than `MPI_COMM_WORLD` are not supprted for now. This operation can optionally return an `!mpi.retval` value that can be used to check for errors. #### Operands: | Operand | Description | | :-----: | ----------- | | `ref` | memref of any type values | `tag` | 32-bit signless integer | `rank` | 32-bit signless integer #### Results: | Result | Description | | :----: | ----------- | | `retval` | MPI function call return value ## Attribute definition ### MPI_ErrorClassEnumAttr MPI error class name Syntax: ``` #mpi.errclass< ::mlir::mpi::MPI_ErrorClassEnum # value > ``` Enum cases: * MPI_SUCCESS (`MPI_SUCCESS`) * MPI_ERR_ACCESS (`MPI_ERR_ACCESS`) * MPI_ERR_AMODE (`MPI_ERR_AMODE`) * ... *all other MPI error codes* #### Parameters: | Parameter | C++ type | Description | | :-------: | :-------: | ----------- | | value | `::mlir::mpi::MPI_ErrorClassEnum` | an enum of type MPI_ErrorClassEnum | ## Type definition ### RetvalType MPI function call return value Syntax: `!mpi.retval` This type represents a return value from an MPI function vall. This value can be MPI_SUCCESS, MPI_ERR_IN_STATUS, or any error code. This return value can be compared agains the known MPI error classes represented by `#mpi.errclass` using the `mpi.retval_check` operation.
-
lntue authored
#80757 has been merged.
-
Boian Petkantchin authored
The two types duplicated mostly the same values. Here they are decomposed to carry orthogonal and complimentary information. Use `utils::IteratorType` instead of `mesh::IteratorType`. It now has only parallel and reduction values. Rename `Partial` to `ReductionKind`. Add `getReductionLoopIteratorKinds` method to `ShardingInterface`.
-
Timm Bäder authored
-
Florian Hahn authored
Add test case for store suppression that still trigger after https://github.com/llvm/llvm-project/pull/81749
-
Guillaume Chatelet authored
- Add a single `cmp` function to derive all comparison operators - Use the `friend` version of the member functions for symmetry - Add a `is_neg` function to factor sign extraction - Implement binary op through macro expansion
-
Hans Wennborg authored
This caused links to fail with: lld/MachO/Symbols.cpp:97: virtual uint64_t lld::macho::Defined::getVA() const: Assertion `target->usesThunks()' failed. or crash when asserts are disabled. See comment on https://github.com/llvm/llvm-project/pull/79894 > Enable chained fixups in lld when all platform and version criteria are > met. This is an attempt at simplifying the logic used in ld 907: > > https://github.com/apple-oss-distributions/ld64/blob/93d74eafc37c0558b4ffb88a8bc15c17bed44a20/src/ld/Options.cpp#L5458-L5549 > > Some changes were made to simplify the logic: > - only enable chained fixups for macOS from 13.0 to avoid the arch check > - only enable chained fixups for iphonesimulator from 16.0 to avoid the > arch check > - don't enable chained fixups for not specifically listed platforms > - don't enable chained fixups for arm64_32 This reverts commit 775c2856.
-
Florian Hahn authored
If a split memory access introduced by SROA accesses precisely a single field of the original operation's !tbaa.struct, use the !tbaa tag for the accessed field directly instead of the full !tbaa.struct. InstCombine already had a similar logic. Motivation for this and follow-on patches is to improve codegen for libc++, where using memcpy limits optimizations, like vectorization for code iteration over std::vector<std::complex<float>>: https://godbolt.org/z/f3vqYos3c Depends on https://github.com/llvm/llvm-project/pull/81285.
-