This project is mirrored from https://github.com/llvm/llvm-project.git.
Pull mirroring failed .
Repository mirroring has been paused due to too many failed attempts. It can be resumed by a project maintainer or owner.
Last successful update .
Repository mirroring has been paused due to too many failed attempts. It can be resumed by a project maintainer or owner.
Last successful update .
- Apr 08, 2022
-
-
David Green authored
Perfect shuffle costs are always encoded less than 4, and shouldn't really have a cost more than 3, so it makes no sense to check it when generating shuffles. The perfect shuffle is likely always better than a tbl too (although that may depend on whether it is in a loop).
-
Aaron Ballman authored
-
Sven van Haastregt authored
Align guards of these builtins with opencl-c.h.
-
Nico Weber authored
-
Abinav Puthan Purayil authored
-
Benjamin Kramer authored
GCC 9 has problems with this. mlir/include/mlir/IR/OperationSupport.h: In member function ‘mlir::Value mlir::MutableOperandRange::operator[](unsigned int) const’: mlir/include/mlir/IR/OperationSupport.h:912:43: error: call of overloaded ‘OperandRange(const mlir::MutableOperandRange&)’ is ambiguous 912 | return static_cast<OperandRange>(*this)[index]; | mlir/include/mlir/IR/OperationSupport.h:789:21: note: candidate: mlir::OperandRange::OperandRange(const llvm::iterator_range<llvm::detail::indexed_accessor_ range_base<mlir::OperandRange, mlir::OpOperand*, mlir::Value, mlir::Value, mlir::Value>::iterator>&) using RangeBaseT::RangeBaseT; ^~~~~~~~~~ mlir/include/mlir/IR/OperationSupport.h:786:7: note: candidate: constexpr mlir::OperandRange::OperandRange(const mlir::OperandRange&) class OperandRange final : public llvm::detail::indexed_accessor_range_base< ^~~~~~~~~~~~ mlir/include/mlir/IR/OperationSupport.h:786:7: note: candidate: constexpr mlir::OperandRange::OperandRange(mlir::OperandRange&&)
-
Thomas Symalla authored
We found that it might be beneficial to have the SIOptimizeExecMasking pass detect more cases where v_cmp, s_and_saveexec patterns can be transformed to s_mov, v_cmpx patterns. Currently, the search range for finding a fitting v_cmp instruction is 5, however, this is doubled to 10 here. Reviewed By: foad Differential Revision: https://reviews.llvm.org/D123367
-
Nikolas Klauser authored
`__is_callable` is required to ensure that the classic algorithms are only called with functions or functors. I also begin to granularize `<type_traits>`. Reviewed By: ldionne, #libc Spies: libcxx-commits, mgorny Differential Revision: https://reviews.llvm.org/D123114
-
Nikolas Klauser authored
Reviewed By: ldionne, var-const, #libc, nilayvaish Spies: nilayvaish, libcxx-commits Differential Revision: https://reviews.llvm.org/D123129
-
Matthias Gehre authored
-
Simon Pilgrim authored
-
Matthias Springer authored
Insert a buffer copy unless the dims are guaranteed to be collapsible. In the verifier, accept collapses unless they are guaranteed to be non-collapsible. Differential Revision: https://reviews.llvm.org/D123316
-
Matthias Springer authored
Differential Revision: https://reviews.llvm.org/D123369
-
Matthias Springer authored
Insert a cast if the two tensors with identical layout (that are passed to `arith.select`) have different layout maps after bufferization. Differential Revision: https://reviews.llvm.org/D123321
-
Simon Pilgrim authored
Adjust the PMULLD entry to match the Intel AoM numbers - PMULLD is a uop nightmare on SLM and we should model it as such. We had reports of internal regressions the last time this was attempted (rG13a0f83a05ff), but no public repros, and tests I did last year when I had access to a SLM box failed to see anything. My hunch is that the more aggressive PMULLD -> PMADDWD folds we now perform might have helped. We can revisit this again if we ever receive an actual repro. Fixes #36407
-
Benjamin Kramer authored
-
Nikita Popov authored
From this comment: https://reviews.llvm.org/D123014#3436522
-
Nikita Popov authored
This removes support for performing LTO using the legacy pass manager in LLVMgold.so. Explicitly enabling the new pass manager is retained as a no-op. Differential Revision: https://reviews.llvm.org/D123294
-
Kito Cheng authored
This reverts commit fc2d8326.
-
Kristóf Umann authored
I recently evaluated ~150 of bug reports on open source projects relating to my GSoC'19 project, which was about tracking control dependencies that were relevant to a bug report. Here is what I found: when the condition is a function call, the extra notes were almost always unimportant, and often times intrusive: void f(int *x) { x = nullptr; if (alwaysTrue()) // We don't need a whole lot of explanation // here, the function name is good enough. *x = 5; } It almost always boiled down to a few "Returning null pointer, which participates in a condition later", or similar notes. I struggled to find a single case where the notes revealed anything interesting or some previously hidden correlation, which is kind of the point of condition tracking. This patch checks whether the condition is a function call, and if so, bails out. The argument against the patch is the popular feedback we hear from some of our users, namely that they can never have too much information. I was specifically fishing for examples that display best that my contribution did more good than harm, so admittedly I set the bar high, and one can argue that there can be non-trivial trickery inside functions, and function names may not be that descriptive. My argument for the patch is all those reports that got longer without any notable improvement in the report intelligibility. I think the few exceptional cases where this patch would remove notable information are an acceptable sacrifice in favor of more reports being leaner. Differential Revision: https://reviews.llvm.org/D116597
-
Nikita Popov authored
-
Nikita Popov authored
This test requires the X86 target to be available.
-
Nikita Popov authored
Make it clearer that this is a required dependency.
-
Iain Sandoe authored
This adjusts the handling for: export module M; export namespace {}; export namespace N {}; export using namespace N; In the first case, we were allowing empty anonymous namespaces as part of an extension allowing empty top-level entities, but that seems inappropriate in this case, since the linkage would be internal for the anonymous namespace. We now report an error for this. The second case was producing a warning diagnostic that this was accepted as an extension - however the C++20 standard does allow this as well-formed. In the third case we keep the current practice that this is accepted with a warning (as an extension). The C++20 standard says it's an error. We also ensure that using decls are only applied to items with external linkage. This adjusts error messages for exports involving redeclarations in modules to be more specific about the reason that the decl has been rejected. Differential Revision: https://reviews.llvm.org/D122119
-
jacquesguan authored
This revision supports to fold vector.extractelement (splat X) -> X. Reviewed By: ftynse Differential Revision: https://reviews.llvm.org/D122960
-
Nikita Popov authored
This makes MemorySSA in LoopSink required, and removes the AST-based implementation, as well as the related support code in LICM. Differential Revision: https://reviews.llvm.org/D123288
-
Nikita Popov authored
Rather than rewriting the alloca pointer to zero, use removePointerBase() to drop the base pointer. This will simply bail if the base pointer is not the alloca. We could try doing something more fancy here (like dropping the sources not based on the alloca on the premise that they aren't SafeStack-relevant), but I don't think that's worthwhile. Fixes https://github.com/llvm/llvm-project/issues/54784. Differential Revision: https://reviews.llvm.org/D123309
-
jacquesguan authored
Reviewed By: ftynse Differential Revision: https://reviews.llvm.org/D123293
-
serge-sans-paille authored
When an inline builtin declaration is shadowed by an actual declaration, we must reference the actual declaration, even if it's not the last, following GCC behavior. This fixes #54715 Differential Revision: https://reviews.llvm.org/D123308
-
serge-sans-paille authored
It actually implements support for seeing through loads, using alias analysis to refine the result. This is rather limited, but I didn't want to rely on more than available analysis at that point (to be gentle with compilation time), and it does seem to catch common scenario, as showcased by the included tests. Differential Revision: https://reviews.llvm.org/D122431
-
Jan Svoboda authored
The dependency scanner can reuse single FileManager instance across multiple translation units. This may lead to non-deterministic output depending on which TU gets processed first. One of the problems is that Clang uses DirectoryEntry::getName in the header search algorithm. This function returns the path that was first used to construct the (shared) entry in FileManager. Using DirectoryEntryRef::getName instead preserves the case as it was spelled out for the current "get directory entry" request. rdar://90647508 Reviewed By: dexonsmith Differential Revision: https://reviews.llvm.org/D123229
-
Kito Cheng authored
Reland Note: We've resolve the circular dependency issue on llvm/lib/Support and llvm/TableGen. Differential Revision: https://reviews.llvm.org/D121984
-
Tobias Hieta authored
RFC: https://discourse.llvm.org/t/rfc-increasing-the-gcc-and-clang-requirements-to-support-c-17-in-llvm Following the policy here: https://llvm.org/docs/DeveloperPolicy.html#toolchain This forum post here will be updated with the timeline and status: https://discourse.llvm.org/t/important-new-toolchain-requirements-to-build-llvm-will-most-likely-be-landing-within-a-week-prepare-your-buildbots/61447 Reviewed By: mehdi_amini, jyknight, jhenderson, cor3ntin, MaskRay Differential Revision: https://reviews.llvm.org/D122976
-
Marco Gelmi authored
We are introducing branchless variants for sort3, sort4 and sort5. These sorting functions have been generated using Reinforcement Learning and aim to replace __sort3, __sort4 and __sort5 variants for integral types. The libc++ benchmarks were run on isolated machines for Skylake, ARM and AMD architectures and achieve statistically significant improvement in sorting random integers on test cases from sort1 to sort262144 for uint32 and uint64. A full performance overview for Intel Skylake, AMD and Arm can be found here: https://bit.ly/3AtesYf Reviewed By: ldionne, #libc, philnik Spies: daniel.mankowitz, mgrang, Quuxplusone, andreamichi, philnik, libcxx-commits, nilayvaish, kristof.beyls Differential Revision: https://reviews.llvm.org/D118029
-
Matthias Gehre authored
According to the RFC [0], this review contains the compiler-rt parts of large integer divison for _BitInt. It adds the functions ``` /// Computes the unsigned division of a / b for two large integers /// composed of n significant words. /// Writes the quotient to quo and the remainder to rem. /// /// \param quo The quotient represented by n words. Must be non-null. /// \param rem The remainder represented by n words. Must be non-null. /// \param a The dividend represented by n + 1 words. Must be non-null. /// \param b The divisor represented by n words. Must be non-null. /// \note The word order is in host endianness. /// \note Might modify a and b. /// \note The storage of 'a' needs to hold n + 1 elements because some /// implementations need extra scratch space in the most significant word. /// The value of that word is ignored. COMPILER_RT_ABI void __udivmodei5(su_int *quo, su_int *rem, su_int *a, su_int *b, unsigned int n); /// Computes the signed division of a / b. /// See __udivmodei5 for details. COMPILER_RT_ABI void __divmodei5(su_int *quo, su_int *rem, su_int *a, su_int *b, unsigned int words); ``` into builtins. In addition it introduces a new "bitint" library containing only those new functions, which is meant as a way to provide those when using libgcc as runtime. [0] https://discourse.llvm.org/t/rfc-add-support-for-division-of-large-bitint-builtins-selectiondag-globalisel-clang/60329 Differential Revision: https://reviews.llvm.org/D120327
-
River Riddle authored
-
Zi Xuan Wu authored
The alignment of FPR64 and sFPR64 declared in RegisterClass should be 32 bit.
-
Markus Böck authored
This patch revamps the BranchOpInterface a bit and allows a proper implementation of what was previously `getMutableSuccessorOperands` for operations, which internally produce arguments to some of the block arguments. A motivating example for this would be an invoke op with a error handling path: ``` invoke %function(%0) label ^success ^error(%1 : i32) ^error(%e: !error, %arg0 : i32): ... ``` The advantages of this are that any users of `BranchOpInterface` can still argue over remaining block argument operands (such as `%1` in the example above), as well as make use of the modifying capabilities to add more operands, erase an operand etc. The way this patch implements that functionality is via a new class called `SuccessorOperands`, which is now returned by `getSuccessorOperands`. It basically contains an `unsigned` denoting how many operator produced operands exist, as well as a `MutableOperandRange`, which are the usual forwarded operands we are used to. The produced operands are assumed to the first few block arguments, followed by the forwarded operands afterwards. The role of `SuccessorOperands` is to provide various utility functions to modify and query the successor arguments from a `BranchOpInterface`. Differential Revision: https://reviews.llvm.org/D123062
-
Michael Forney authored
All platforms return the main executable as the first dl_phdr_info. FreeBSD, NetBSD, Solaris, and Linux-musl place the executable name in the dlpi_name field of this entry. It appears that only Linux-glibc uses the empty string. To make this work generically on all platforms, unconditionally skip the first object (like is currently done for FreeBSD and NetBSD). This fixes first DSO detection on Linux-musl. It also would likely fix detection on Solaris/Illumos if it were to gain PIE support (since dlpi_addr would not be NULL). Additionally, only skip the Linux VDSO on linux. Finally, use the empty string as the "seen first dl_phdr_info" marker rather than (char *)-1. If there was no other object, we would try to dereference it for a string comparison. Reviewed By: MaskRay, vitalybuka Differential Revision: https://reviews.llvm.org/D119515
-
Hongtao Yu authored
The profiler can sometimes give us a LBR trace that implicates bogus code ranges. For example, 0xc5acb56/0xc66c6c0 0xc628195/0xf31fbb0 0xc611261/0xc628130 0xc5c1a21/0xc6111c0 0x1f7edfd3/0xc5c3a50 0xc5c154f/0x1f7edec0 0xe8eed07/0xc5c11e0 , note that the first two pairs are supposed to form a linear execution range, in this case, it is [0xf31fbb0, 0xc5acb56] , which doesn't make sense. Such bogus ranges should be ruled out to avoid generating a bad profile. I'm fixing this for both CS and non-CS cases. Reviewed By: wenlei Differential Revision: https://reviews.llvm.org/D123271
-