- May 26, 2021
-
-
Stephen Tozer authored
Following the addition of salvaging dbg.values using DIArgLists to reference multiple values, a case has been found where excessively large DIArgLists are produced as a result of this salvaging, resulting in large enough performance costs to effectively freeze the compiler. This patch introduces an upper bound of 16 to the number of values that may be salvaged into a dbg.value, to limit the impact of these extreme cases to performance. Differential Revision: https://reviews.llvm.org/D103162
-
Richard Howell authored
Add an option to skip generating a dSYM when installing the LLDB framework on Darwin. Reviewed By: smeenai Differential Revision: https://reviews.llvm.org/D103124
-
Shoaib Meenai authored
If you're building libunwind instrumented with ASan, `_Unwind_RaiseException` will poison the stack and then transfer control in a manner which isn't understood by ASan, so the stack will remain poisoned. This can cause false positives, e.g. if you call an uninstrumented function (so it doesn't re-poison the stack) after catching an exception. Add a call to `__asan_handle_no_return` inside `__unw_resume` to get ASan to unpoison the stack and avoid this. `__unw_resume` seems like the appropriate place to make this call, since it's used for resumption by all unwind implementations except SJLJ. SJLJ uses `__builtin_longjmp` to handle resumption, which is already recognized as noreturn (and therefore ASan adds the `__asan_handle_no_return` call itself), so it doesn't need any special handling. PR32434 is somewhat similar (in particular needing a component built without ASan to trigger the bug), and rG781ef03e1012, the fix for that bug, adds an interceptor for `_Unwind_RaiseException`. This interceptor won't always be triggered though, e.g. if you statically link the unwinder into libc++abi in a way that prevents interposing the unwinder functions (e.g. marking the symbols as hidden, using `--exclude-libs`, or using `-Bsymbolic`). rG53335d6d86d5 makes `__cxa_throw` call `__asan_handle_no_return` explicitly, to similarly avoid relying on interception. Reviewed By: #libunwind, compnerd Differential Revision: https://reviews.llvm.org/D103002
-
Raphael Isemann authored
This function has a single-value caching based on function local static variables. This causes two problems: * There is no synchronization, so this function randomly returns the demangled name of other functions that are demangled at the same time. * The 1-element cache is not very effective (the cache rate is around 0% when running the LLDB test suite that calls this function around 30k times). I would propose just removing it. To prevent anyone else the git archeology: the static result variables were originally added as this returned a ConstString reference, but that has since been changed so that this returns by value. Reviewed By: #lldb, JDevlieghere, shafik Differential Revision: https://reviews.llvm.org/D103107
-
Craig Topper authored
This patch extends D102737 to allow VL/VTYPE changes to be taken into account before adding an explicit vsetvli. We do this by using a data flow analysis to propagate VL/VTYPE information from predecessors until we've determined a value for every value in the function. We use this information to determine if a vsetvli needs to be inserted before the first vector instruction the block. Differential Revision: https://reviews.llvm.org/D102739
-
Sebastian Neubauer authored
-
Jon Chesterfield authored
ATMI_STATUS_UNKNOWN was unused, deleted references to it. Replaced ATMI_STATUS_{SUCCESS,ERROR} with HSA_STATUS_{SUCCESS,ERROR} Replaced atmi_status_t with hsa_status_t Otherwise no change. In particular, conversions between atmi_status_t and hsa_status_t will now be conversions between hsa_status_t and itself. Reviewed By: pdhaliwal Differential Revision: https://reviews.llvm.org/D103115
-
LLVM GN Syncbot authored
-
Mark de Wever authored
This prevents std::format to be available until there's an ABI stable version. (This only impacts the Apple platform.) Depends on D102703 Reviewed By: ldionne, #libc Differential Revision: https://reviews.llvm.org/D102705
-
Alexander Belyaev authored
Differential Revision: https://reviews.llvm.org/D103161
-
Mark de Wever authored
This is a preparation to split the format header in smaller parts for the upcoming patches. Depends on D101723 Reviewed By: #libc, ldionne Differential Revision: https://reviews.llvm.org/D102703
-
LLVM GN Syncbot authored
-
Mark de Wever authored
Reviewed By: #libc, ldionne Differential Revision: https://reviews.llvm.org/D101723
-
Valentin Clement authored
Add translation to LLVM IR for the UpdateOp with host and device operands. Translation is done with call using the runtime. This is done in a similar way as D101504 and D102381. Reviewed By: ftynse Differential Revision: https://reviews.llvm.org/D102382
-
Philip Reames authored
The current full unroll cost model does a symbolic evaluation of the loop up to a fixed limit. That symbolic evaluation currently simplifies to constants, but we can generalize to arbitrary Values using the InstructionSimplify infrastructure at very low cost. By itself, this enables some simplifications, but it's mainly useful when combined with the branch simplification over in D102928. Differential Revision: https://reviews.llvm.org/D102934
-
Louis Dionne authored
-
Jonas Paulsson authored
Support virtual, physical and tied i128 register operands in inline assembly. i128 is on SystemZ not really supported and is not a legal type and generally such a value will be split into two i64 parts. There are however some instructions that require a pair of two GPR64 registers contained in the GR128 bit reg class, which is untyped. For inline assmebly operands, it proved to be very cumbersome to first follow the general behavior of splitting an i128 operand into two parts and then later rebuild the INLINEASM MI to have one GR128 register. Instead, some minor common code changes were made to SelectionDAGBUilder to only create one GR128 register part to begin with. In particular: - getNumRegisters() now has an optional parameter "RegisterVT" which is passed by AddInlineAsmOperands() and GetRegistersForValue(). - The bitcasting in GetRegistersForValue is not performed if RegVT is Untyped. - The RC for a tied use in AddInlineAsmOperands() is now computed either from the tied def (virtual register), or by getMinimalPhysRegClass() (physical register). - InstrEmitter.cpp:EmitCopyFromReg() has been fixed so that the register class (DstRC) can also be computed for an illegal type. In the SystemZ backend getNumRegisters(), splitValueIntoRegisterParts() and joinRegisterPartsIntoValue() have been implemented to handle i128 operands. Differential Revision: https://reviews.llvm.org/D100788 Review: Ulrich Weigand
-
Kadir Cetinkaya authored
Previously notification of the Server about semantic happened strictly before notification of the AST thread. Hence a racy Server could make a request (like semantic tokens) after the notification, with the assumption that it'll be served fresh content. But it wasn't true if AST thread wasn't notified about the change yet. This change reverses the order of those notifications to prevent racy interactions. Differential Revision: https://reviews.llvm.org/D102761
-
Andrea Di Biagio authored
-
Anirudh Prasad authored
- Currently, LLVM supports symbols of the name "token1@token2". - "token2" is used to identify whether an appropriate symbol reference can be used for the symbol. - Now, if the symbol reference couldn't be found, the AsmParser usually emits an error, unless the backend is configured to accept the "@" in a symbol name - Thus, this patch aims to do that. It sets the `AllowAtInName` attribute in the SystemZ backend for the HLASM dialect. - Setting this attribute ensures that, if a particular symbol reference is found, it uses that. If it doesn't, and there exists an "@" in the symbol name, it will use that instead of explicitly erroring out. Reviewed By: uweigand Differential Revision: https://reviews.llvm.org/D103111
-
jweightma authored
This patch fixes a bug in the AMDGPU Propagate Attributes pass where a call instruction with a function pointer argument is identified as a user of the passed function, and illegally replaces the called function of the instruction with the function argument. For example, given functions f and g with appropriate types, the following illegal transformation could occur without this fix: call void @f(void ()* @g) --> call void @g(void ()* @g.1) The solution introduced in this patch is to prevent the cloning and substitution if the instruction's called function and the function which might be cloned do not match. Reviewed By: arsenm, madhur13490 Differential Revision: https://reviews.llvm.org/D101847
-
Anirudh Prasad authored
- Currently, before printing a label in MCSymbol.cpp (MCSymbol::print), the current code "validates" the label that is to be printed. - If it fails the validation step, then it prints the label within double quotes. - However, the validation is provided as a virtual function in MCAsmInfo.h (i.e. isAcceptableChar() function). So we can override this for the AD_HLASM dialect in SystemZMCAsmInfo.cpp. Reviewed By: uweigand Differential Revision: https://reviews.llvm.org/D103091
-
Hans Wennborg authored
VS 2019 16.11 (just released in Preview) is adding support for the /std:c++20 option and bumping /std:c++latest to "post-c++20". This updates clang-cl to match. Differential revision: https://reviews.llvm.org/D103155
-
Luo, Yuanke authored
The previous code detect if a MBB is bottom block to determine if it is a backedge of a loop. We should check latch block instead of bottom block and we should check the header and the bottom block are in the same loop. Differential Revision: https://reviews.llvm.org/D103145
-
Sjoerd Meijer authored
-
David Green authored
-
Simon Pilgrim authored
-
Andrea Di Biagio authored
Conservatively use the instruction latency to compute the last write-back cycle. Before this patch, the last write cycle computation was incorrect for store instructions that didn't declare any register writes.
-
Alexey Bataev authored
NFC.
-
Kerry McLaughlin authored
When loop hints are passed via metadata, the allowReordering function in LoopVectorizationLegality will allow the order of floating point operations to be changed: bool allowReordering() const { // When enabling loop hints are provided we allow the vectorizer to change // the order of operations that is given by the scalar loop. This is not // enabled by default because can be unsafe or inefficient. The -enable-strict-reductions flag introduced in D98435 will currently only vectorize reductions in-loop if hints are used, since canVectorizeFPMath() will return false if reordering is not allowed. This patch changes canVectorizeFPMath() to query whether it is safe to vectorize the loop with ordered reductions if no hints are used. For testing purposes, an additional flag (-hints-allow-reordering) has been added to disable the reordering behaviour described above. Reviewed By: sdesmalen Differential Revision: https://reviews.llvm.org/D101836
-
Max Kazantsev authored
Return "[LoopDeletion] Break backedge if we can prove that the loop is exited on 1st iteration" (try 2) The patch was reverted due to compile time impact of contextual SCEV queries. It also appeared that it introduced a miscompile on irreducible CFG. Changes made: 1. isKnownPredicateAt is replaced with more lightweight isKnownPredicate; 2. Irreducible CFG in live code is now detected and excluded from processing. Differential Revision: https://reviews.llvm.org/D102615
-
Sanjay Patel authored
Baseline tests for: D102698
-
Sanjay Patel authored
The update script ( utils/update_test_checks.py ) warns against this.
-
Sanjay Patel authored
The update script ( utils/update_test_checks.py ) warns against this.
-
Max Kazantsev authored
Revert "Return "[LoopDeletion] Break backedge if we can prove that the loop is exited on 1st iteration"" This reverts commit 43d2e51c. Commited wrong version.
-
Max Kazantsev authored
The patch was reverted due to compile time impact of contextual SCEV queries. It also appeared that it introduced a miscompile on irreducible CFG. Changes made: 1. isKnownPredicateAt is replaced with more lightweight isKnownPredicate; 2. Irreducible CFG in live code is now detected and excluded from processing. Differential Revision: https://reviews.llvm.org/D102615
-
Adrian Kuegel authored
Differential Revision: https://reviews.llvm.org/D103148
-
Andrew Savonichev authored
The existing LD1 patterns do not cover cases where result type does not match the memory type. This happens when illegal vector types are extended and scalarized, for example: load <2 x i16>* %v2i16 is lowered into: // first element (v4i32 (insert_subvector (v2i32 (scalar_to_vector (load anyext from i16))))) // other elements (v4i32 (insert_vector_elt (i32 (load anyext from i16)) idx)) Before this patch these patterns were compiled into LDR + INS. Now they are compiled into LD1. The problem was reported in PR24820: LLVM Generates abysmal code in simple situation. Differential Revision: https://reviews.llvm.org/D102938
-
Max Kazantsev authored
Authored by Mikael Holmén. It demonstrated miscompile on irreducible CFG with patch "[LoopDeletion] Break backedge if we can prove that the loop is exited on 1st iteration". The patch is reverted. Checking in the test to make sure this bug does not return.
-
Sven van Haastregt authored
Avoid duplicating the memory_order and memory_scope enum definitions.
-