- Jul 14, 2023
-
-
Nikita Popov authored
-
Simon Pilgrim authored
-
Nikita Popov authored
-
David Green authored
This is similar to D153632, but for mul nodes instead of add/sub. They get recognised in LowerMUL in order to detect the mul(ext, ext), in a way that will work for i64 nodes as well as i16/i32. This extends it to look for mul(subvector_extract(ext(x), 0), subvector_extract(ext(y), 0)), generating a subvector_extract(mull(x,y)) if it matches. Differential Revision: https://reviews.llvm.org/D154063
-
Nicolas Vasilache authored
-
Nicolas Vasilache authored
This reverts commit afdb83b1. This was landed with a bad description.
-
Kiran Chandramohan authored
Use typed assignment in Atomic Write lowering to better handle type conversions of allowed types. Note: We should make similar changes for other constructs in later patches. Reviewed By: NimishMishra Differential Revision: https://reviews.llvm.org/D154163
-
Markus Böck authored
Using MLIR attributes instead of metadata has many advantages: * No indirection: Attributes can simply refer to each other seemlessly without having to use the indirection of `SymbolRefAttr`. This also gives us correctness by construction in a lot of places as well * Multithreading save: The Attribute infrastructure gives us thread-safety for free. Creating operations and inserting them into a block is not thread-safe. This is a major use case for e.g. the inliner in MLIR which runs in parallel * Easier to create: There is no need for a builder or a metadata region This patch therefore does exactly that. It leverages the new distinct attributes to create distinct alias domains and scopes in a deterministic and threadsafe manner. Differential Revision: https://reviews.llvm.org/D155159
-
Nikita Popov authored
-
Nikita Popov authored
-
Nikita Popov authored
-
Nikita Popov authored
-
Nikita Popov authored
Always returns true with opaque pointers.
-
Nikita Popov authored
This now always returns true (for pointer types).
-
Jim Lin authored
In our downstream, we define some intrinsics that don't require any extra extension enabled. Such as TARGET_BUILTIN(__builtin_riscv_xxx, "LiLi", "nc", "") But `split` function's `KeepEmpty` argument is True. Got the error message error: builtin requires at least one of the following extensions support to be enabled : '' when we use our customized intrinsic. Reviewed By: craig.topper, wangpc Differential Revision: https://reviews.llvm.org/D154596
-
Haojian Wu authored
flag
-
Matthias Springer authored
There was a bug in `TransferWriteNonPermutationLowering`, a pattern that extends the permutation map of a TransferWriteOp with leading transfer dimensions of size ones. These newly added transfer dimensions are always in-bounds, because the starting point of any dimension is in-bounds. VectorToSCF inserts out-of-bounds checks based on the "in_bounds" attribute and dims that are marked as out-of-bounds but that are actually always in-bounds lead to unnecessary "scf.if" ops. Differential Revision: https://reviews.llvm.org/D155196
-
Yeting Kuo authored
(shl (zext to iXLenVec), C) is a possible pattern in auto-vectorized code for indexed loads/stores. But extending to iXLen might be too aggressive, RVV indexed load/store instructions zero extend their indexed operand to XLEN. The patch tries to narrow the type of the zero extension. It's benefit to decrease register pressure. Reviewed By: craig.topper Differential Revision: https://reviews.llvm.org/D154687
-
XinWang10 authored
Previously we remove a pattern like: %reg = and32ri %in_reg, 5 ... // EFLAGS not changed. %src_reg = subreg_to_reg 0, %reg, %subreg.sub_index test64rr %src_reg, %src_reg, implicit-def $eflags We can remove test64rr since it has same functionality as and subreg_to_reg avoid the opt in previous code, so we handle this case specially. And this case is also can be opted for the same reason, like: %reg = and32ri %in_reg, 5 ... // EFLAGS not changed. %src_reg = copy %reg.sub_16bit:gr32 test16rr %src_reg, %src_reg, implicit-def $eflags The COPY from gr32 to gr16 prevent the opt in previous code too, just handle it specially as what we did for test64rr. Reviewed By: skan Differential Revision: https://reviews.llvm.org/D154193
-
Nikita Popov authored
Always returns false now.
-
Nikita Popov authored
True is the default (and only possible) value.
-
Nikita Popov authored
With opaque pointers, LLVMPointerToElt can be replaced by llvm_ptr_ty and LLVMAnyPointerToElt by llvm_anyptr_ty. This still leaves LLVMVectorOfAnyPointersToElt, where we can't just replace with an existing IIT descriptor. Differential Revision: https://reviews.llvm.org/D155167
-
Haojian Wu authored
getName method required to be called on a simple-identifier NamedDecl, otherwise it will trigger an assertion. Reviewed By: kadircet Differential Revision: https://reviews.llvm.org/D153617
-
Nikita Popov authored
-
Nikita Popov authored
The test migration to opaque pointers has finished, so we can finally drop typed pointer support from LLVM \o/ This removes the ability to disable typed pointers, as well as the -opaque-pointers option, but otherwise doesn't yet touch any API surface. I'll leave deprecation/removal of compatibility APIs to future changes. This also drops a few tests: These are either testing errors that only occur with typed pointers, or type linking behavior that, to the best of my knowledge, only applies to typed pointers. Note that this will break some tests in the experimental SPIRV backend, because the maintainers have failed to update their tests in a reasonable time-frame, despite multiple warnings. In accordance with our experimental target policy, this is not a blocking concern. This issue is tracked at https://github.com/llvm/llvm-project/issues/60133. Differential Revision: https://reviews.llvm.org/D155079
-
pvanhout authored
The previous heuristic rejected a PHI if one of its user was an unbreakable PHI, no matter what the other users were. This worked well in most cases, but there's one case in rocRAND where it doesn't work. In that case, a PHI node has 2 PHI users where one is breakable but not the other. When that PHI node isn't broken performance falls by 35%. Relaxing the restriction to "require that half of the PHI node users are breakable" fixes the issue, and seems like a sensible change. Solves SWDEV-409648, SWDEV-398393 Reviewed By: #amdgpu, arsenm Differential Revision: https://reviews.llvm.org/D155184
-
Martin Storsjö authored
While these tests do pass in the CI environment, they fail elsewhere. On GitHub Action runners, they produce '+0000' instead of '-0000' for the UTC offset, and on local machines, it outputs the UTC offset of the local timezone. Differential Revision: https://reviews.llvm.org/D155182
-
Piotr Fusik authored
Reviewed By: #libc, Mordante Differential Revision: https://reviews.llvm.org/D154454
-
Markus Böck authored
In cases where memory is of less of a concern (e.g. small attributes where all instances have to be distinct by definition), using `DistinctAttr` with a unit attribute is a useful and conscious way of generating deterministic unique IDs. The syntax as is however, makes them less useful to use, as it 1) always prints `<unit>` at the back and 2) always aliases them leading to not very useful `#distinct = distinct[n]<unit>` lines in the printer output. This patch fixes that by special casing `UnitAttr` to simply elide the `unit` attribute in the back and not printing it as alias in that case. Differential Revision: https://reviews.llvm.org/D155162
-
Hideto Ueno authored
Currently DefGen::emitDecl always emits forward declarations of storage classes even for user define ones, which makes it difficult to use template class directly in ODS. This patch changes `DefGen` not to emit forward decl when `genStorageClass` is false. Original discussion: https://discourse.llvm.org/t/use-template-classes-as-user-defined-storage-classes/72015 Reviewed By: mehdi_amini, rriddle Differential Revision: https://reviews.llvm.org/D155225
-
Richard Smith authored
instantiations. Fixes #62272.
-
Sterling Augustine authored
These trigger the following error: error: moving a temporary object prevents copy elision [-Werror,-Wpessimizing-move]
-
Weining Lu authored
Only support patching FunctionEntry/FunctionExit/FunctionTailExit for now. Reviewed By: MaskRay, xen0n Co-Authored-By:
zhanglimin <zhanglimin@loongson.cn> Differential Revision: https://reviews.llvm.org/D140727
-
Aart Bik authored
avoids quite a big memory fill for each setup Reviewed By: K-Wu Differential Revision: https://reviews.llvm.org/D155251
-
Sergei Barannikov authored
'?' is a valid token in our downstream target. There seem to be no way to do target-specific lexing, so just add make AsmParser recognize it. Reviewed By: MaskRay Differential Revision: https://reviews.llvm.org/D154202
-
Sean Fertile authored
Followup to D101178 - peephole optimization that converts a load address instruction and a consuming load/store into just the load/store when its safe to do so. eg: converts the 2 instruction code sequence la 4, i[TD](2) stw 3, 0(4) to stw 3, i[TD](2) Differential Revision: https://reviews.llvm.org/D101470
-
Noah Goldstein authored
We can do this if `Y*C` doesn't overflow. This is trivial if `C` is 0/1. Otherwise we actually generate a `mul` instruction iff the `div` has one use. Alive2 Links: udiv: https://alive2.llvm.org/ce/z/GWPW67 sdiv: https://alive2.llvm.org/ce/z/bUoX9h Reviewed By: nikic Differential Revision: https://reviews.llvm.org/D150091 -
Noah Goldstein authored
Differential Revision: https://reviews.llvm.org/D150090
-
Jon Roelofs authored
-
boxu.zhang authored
I'm using clang to compile CUDA code. And just found that clang doesn't support the per-thread stream option for NV CUDA. I don't know if there is another solution. Reviewed By: tra Differential Revision: https://reviews.llvm.org/D154822
-