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
-
-
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
-
Zi Xuan Wu authored
In FPUv3, there is fsel.32/64 instruction to select float/double type data. In FPUv2, split block and use branch and move instruction to select float/double type data.
-
Senran Zhang authored
Reviewed By: #libc_abi, aaron.ballman, urnathan Differential Revision: https://reviews.llvm.org/D122530
-
Stella Laurenzo authored
Differential Revision: https://reviews.llvm.org/D123354
-
Kito Cheng authored
-
LLVM GN Syncbot authored
-
Ye Luo authored
As described in 5.1 spec 2.21.7.2 Pointer Initialization for Device Data Environments Reviewed By: RaviNarayanaswamy Differential Revision: https://reviews.llvm.org/D123093
-
Kito Cheng authored
We found LLVM generate wrong stack offset for RVV object when stack having variable argument, that cause by we didn't count vaarg part during calculate RVV stack objects. Also update the stack layout diagram for including vaarg in the diagram. Stack layout ref: https://github.com/gcc-mirror/gcc/blob/master/gcc/config/riscv/riscv.cc#L3941 Reviewed By: rogfer01 Differential Revision: https://reviews.llvm.org/D123180
-
Kito Cheng authored
Reviewed By: rogfer01, frasercrmck Differential Revision: https://reviews.llvm.org/D123179
-
Kito Cheng authored
RISCVMachineFunctionInfo has some fields like VarArgsFrameIndex and VarArgsSaveSize are calculated at ISel lowering stage, those info are not contained in MIR files, that cause test cases rely on those field can't not reproduce correctly by MIR dump files. This patch adding the MIR read/write for those fields. Reviewed By: frasercrmck Differential Revision: https://reviews.llvm.org/D123178
-
Chuanqi Xu authored
This eliminates an unused-variable warning
-
Evgeniy Brevnov authored
Currently, the utility supports lowering of non atomic memory transfer routines only. This patch adds support for atomic version of memcopy. This may be useful for targets not supporting atomic memcopy. Reviewed By: arsenm Differential Revision: https://reviews.llvm.org/D118443
-
jacquesguan authored
This revision adds float unary, ternary and float/integer reduction intrinsic ops. Differential Revision: https://reviews.llvm.org/D123189
-
Austin Kerbow authored
Similar to the problem in 0bb25b46, bitcasts that are inserted must dominate all uses. When rewriting "values" with "new values" that have the updated address space, we may replace the "new value" with a bitcast if one of the original users is an addresspace cast. This bitcast must be inserted before ALL users, not only before the addresspace cast. Reviewed By: arsenm Differential Revision: https://reviews.llvm.org/D122964
-
jacquesguan authored
Reviewed By: frasercrmck Differential Revision: https://reviews.llvm.org/D123292
-
Chenbing Zheng authored
By adding a parameter to function FoldOpIntoSelect, we can fold more Ops to Select. For this example, we tend to fold the division instruction, so we no longer care whether SelectInst is one use. This patch slove TODO left in InstCombine/div.ll. Reviewed By: RKSimon Differential Revision: https://reviews.llvm.org/D122967
-
Jeremy Furtek authored
This diff contains: - Parameterization of bit enum attributes in OpBase.td by bit width (e.g. 32 and 64). Previously, all enums were 32-bits. This brings enum functionality in line with other integer attributes, and allows for bit enums greater than 32 bits. - SPIRV and Vector dialects were updated to use bit enum attributes with an explicit bit width Reviewed By: mehdi_amini Differential Revision: https://reviews.llvm.org/D123095
-
Stella Laurenzo authored
Differential Revision: https://reviews.llvm.org/D123351
-
Lang Hames authored
Removes a bogus dyn_cast_or_null that was breaking cast-expression handling when parsing llvm.global_ctors. The intent of this code was to identify Functions nested within cast expressions, but the offending dyn_cast_or_null was actually blocking that: Since a function is not a cast expression, we would set FuncC to null and break the loop without finding the Function. The cast was not necessary either: Functions are already Constants, and we didn't need to do anything ConstantExpr-specific with FuncC, so we could just drop the cast. Thanks to Jonas Hahnfeld for tracking this down. http://llvm.org/PR54797
-
David Blaikie authored
Since the NTTP may need to be cast to the type when rebuilding the name, check that the type can be rebuilt when determining whether a template name can be simplified.
-
Kevin Athey authored
Reviewed By: eugenis Differential Revision: https://reviews.llvm.org/D122851
-
Walter Erquinigo authored
Some parts of the code have to distinguish between live and postmortem threads to figure out how to get some data, e.g. thread trace buffers. This makes the code less generic and more error prone. An example of that is that we have two different decoders: LiveThreadDecoder and PostMortemThreadDecoder. They exist because getting the trace bufer is different for each case. The problem doesn't stop there. Soon we'll have even more kinds of data, like the context switch trace, whose fetching will be different for live and post- mortem processes. As a way to fix this, I'm creating a common API for accessing thread data, which is able to figure out how to handle the postmortem and live cases on behalf of the caller. As a result of that, I was able to eliminate the two decoders and unify them into a simpler one. Not only that, our TraceSave functionality only worked for live threads, but now it can also work for postmortem processes, which might be useful now, but it might in the future. This common API is OnThreadBinaryDataRead. More information in the inline documentation. Differential Revision: https://reviews.llvm.org/D123281
-
Walter Erquinigo authored
As we soon will need to decode multiple raw traces for the same thread, having a class that encapsulates the decoding of a single raw trace is a stepping stone that will make the coming features easier to implement. So, I'm creating a LibiptDecoder class with that purpose. I refactored the code and it's now much more readable. Besides that, more comments were added. With this new structure, it's also easier to implement unit tests. Differential Revision: https://reviews.llvm.org/D123106
-
Arthur Eubanks authored
-
Jorge Gorbe Moya authored
Using a portable format specifier avoids a "format specifies type 'unsigned long long' but the argument has type 'uint64_t' (aka 'unsigned long') [-Werror,-Wformat]" error depending on the exact definition of `uint64_t`.
-
Zequan Wu authored
This fixes the issue when the current line offset is actually for next range. Maintain a current code range with current line offset and cache next file/line offset. Update file/line offset after finishing current range. Differential Revision: https://reviews.llvm.org/D123151
-
Jez Ng authored
This diff is motivated by my work to add proper DWARF unwind support. As detailed in PR50956 functions that need DWARF unwind need to have compact unwind entries synthesized for them. These CU entries encode an offset within `__eh_frame` that points to the corresponding DWARF FDE. In order to encode this offset during `UnwindInfoSectionImpl::finalize()`, we need to first assign values to `InputSection::outSecOff` for each `__eh_frame` subsection. But `__eh_frame` is ordered after `__unwind_info` (according to ld64 at least), which puts us in a bit of a bind: `outSecOff` gets assigned during finalization, but `__eh_frame` is being finalized after `__unwind_info`. But it occurred to me that there's no real need for most ConcatOutputSections to be finalized sequentially. It's only necessary for text-containing ConcatOutputSections that may contain branch relocs which may need thunks. ConcatOutputSections containing other types of data can be finalized in any order. This diff moves the finalization logic for non-text sections into a separate `finalizeContents()` method. This method is called before section address assignment & unwind info finalization takes place. In theory we could call these `finalizeContents()` methods in parallel, but in practice it seems to be faster to do it all on the main thread. Reviewed By: #lld-macho, oontvoo Differential Revision: https://reviews.llvm.org/D123279
-
Stanislav Mekhanoshin authored
It was only handled for FLAT initially because we did not have unaligned DS instructions lowering. Now it is implemented but the bug is not handled. Differential Revision: https://reviews.llvm.org/D123338
-