- May 11, 2021
-
-
Florian Hahn authored
If the simplified VPValue is a recipe, we need to register it for Instr, in case it needs to be recorded. The way this is handled in general may change soon, following some post-commit comments. This fixes PR50298.
-
Roman Lebedev authored
Now that getMemoryOpCost() correctly handles all the vector variants, we should no longer hand-roll our own version of it, but use it directly. The AVX512 variant probably needs a similar change, but there it is less obvious.
-
Paul C. Anagnostopoulos authored
Differential Revision: https://reviews.llvm.org/D101923
-
Simon Pilgrim authored
Noticed while looking at D101944
-
Simon Pilgrim authored
[X86][SSE] Replace foldShuffleOfHorizOp with generalized version in canonicalizeShuffleMaskWithHorizOp foldShuffleOfHorizOp only handled basic shufps(hop(x,y),hop(z,w)) folds - by moving this to canonicalizeShuffleMaskWithHorizOp we can work with more general/combined v4x32 shuffles masks, float/integer domains and support shuffle-of-packs as well. The next step will be to support 256/512-bit vector cases.
-
Matt Arsenault authored
-
Roman Lebedev authored
Instead of handling power-of-two sized vector chunks, try handling the large vector in a stream mode, decreasing the operational vector size once it no longer works for the elements left to process. Notably, this improves costs for overaligned loads - loading padding is fine. This more directly tracks when we need to insert/extract the YMM/XMM subvector, some costs fluctuate because of that. Reviewed By: RKSimon, ABataev Differential Revision: https://reviews.llvm.org/D100684
-
Sanjay Patel authored
The test example from https://llvm.org/PR50256 (and reduced here) shows that we can match a load combine candidate even when there are no "or" instructions. We can avoid that by confirming that we do see an "or". This doesn't apply when matching an or-reduction because that match begins from the operands of the reduction. Differential Revision: https://reviews.llvm.org/D102074
-
Piotr Sobczak authored
Moving code sinking pass before structurizer creates more sinking opportunities. The extra flow edges introduced by the structurizer can have adverse effects on sinking, because the sinking pass prefers moving instructions to blocks with unique predecessors and the structurizer destroys that property in some cases. A notable example is moving high-latency image instructions across kills. Reviewed By: arsenm Differential Revision: https://reviews.llvm.org/D101115
-
Anastasia Stulova authored
Simply use of extensions by allowing the use of supported double types without the pragma. Since earlier standards instructed that the pragma is used explicitly a new warning is introduced in pedantic mode to indicate that use of type without extension pragma enable can be non-portable. This patch does not break backward compatibility since the extension pragma is still supported and it makes the behavior of the compiler less strict by accepting code without extra pragma statements. Differential Revision: https://reviews.llvm.org/D100980
-
Jon Chesterfield authored
[libomptarget][nfc] Drop stringify in macro A step towards deleting the macros entirely. Differential Revision: https://reviews.llvm.org/D102228
-
Martin Storsjö authored
[LLDB] Don't use the local python to set a default for LLDB_PYTHON_RELATIVE_PATH when cross compiling. Differential Revision: https://reviews.llvm.org/D101903
-
Stefan Pintilie authored
The stack frame update code does not take into consideration spilling to registers for callee saved registers. The option -ppc-enable-pe-vector-spills turns on spilling to registers for callee saved registers and may expose a bug in the code that moves a stack frame pointer update instruction. Reviewed By: nemanjai, #powerpc Differential Revision: https://reviews.llvm.org/D101366
-
Denis Antrushin authored
STATEPOINT is a fancy and complex pseudo instruction which has both tied defs and regmask operand. Basic FastRA algorithm is as follows: 1. Mark registers used by defs as free 2. If instruction has regmask operand displace clobbered registers according to regmask. 3. Assign registers for use operands. In case of tied defs step 1 is replaced with allocation of registers for them. But regmask is still processed, which may displace already allocated registers. As a result, tied use and def will get assigned to different registers. This patch makes FastRA to process instruction's RegMask (if any) when checking for physical registers interference. That way tied operands won't get registers clobbered by regmask. Reviewed By: arsenm, skatkov Differential Revision: https://reviews.llvm.org/D99284
-
Jay Foad authored
-
Uday Bondhugula authored
Switch llvm.noalias attribute from a boolean attribute to a unit attribute. Differential Revision: https://reviews.llvm.org/D102225
-
Martin Storsjö authored
As this isn't handled as a regular relocation, the normal handling of maybeReportRelocationToDiscarded in Chunks.cpp doesn't apply here. This would have caught the issue fixed by 82de4e07. Differential Revision: https://reviews.llvm.org/D102115
-
Andy Wingo authored
As we have been missing support for WebAssembly globals on the IR level, the lowering of WASM_SYMBOL_TYPE_GLOBAL to IR was incomplete. This commit fleshes out the lowering support, lowering references to and definitions of addrspace(1) values to correctly typed WASM_SYMBOL_TYPE_GLOBAL symbols. Depends on D101608. Differential Revision: https://reviews.llvm.org/D101913
-
Simon Moll authored
Test that all VP intrinsics are tested. Test intrinsic id -> opcode -> intrinsic id round tripping. Test property scopes in the include/llvm/IR/VPIntrinsics.def file. Reviewed By: frasercrmck Differential Revision: https://reviews.llvm.org/D93534
-
Paulo Matos authored
This patch adds support for WebAssembly globals in LLVM IR, representing them as pointers to global values, in a non-default, non-integral address space. Instruction selection legalizes loads and stores to these pointers to new WebAssemblyISD nodes GLOBAL_GET and GLOBAL_SET. Once the lowering creates the new nodes, tablegen pattern matches those and converts them to Wasm global.get/set of the appropriate type. Based on work by Paulo Matos in https://reviews.llvm.org/D95425. Reviewed By: pmatos Differential Revision: https://reviews.llvm.org/D101608
-
Andrzej Warzynski authored
With this patch, `FLANG_BUILD_NEW_DRIVER` is set to `On` by default (i.e. the new driver is enabled). Note that the new driver depends on Clang and hence with this change you will need to add `clang` to `LLVM_ENABLE_PROJECTS`. If you don't want to build the new driver, set `FLANG_BUILD_NEW_DRIVER` to `Off`. This way you won't be required to include `clang` in `LLVM_ENABLE_PROJECTS`. Differential Revision: https://reviews.llvm.org/D101842
-
Alex Orlov authored
This patch adds JSON output style to llvm-symbolizer to better support CLI automation by providing a machine readable output. Reviewed By: jhenderson Differential Revision: https://reviews.llvm.org/D96883
-
Simon Pilgrim authored
-
Ole Strohm authored
-
Tres Popp authored
VectorTransfer split previously only split read xfer ops. This adds the same logic to write ops. The resulting code involves 2 conditionals for write ops while read ops only needed 1, but the created ops are built upon the same patterns, so pattern matching/expectations are all consistent other than in regards to the if/else ops. Differential Revision: https://reviews.llvm.org/D102157
-
Kristina Bessonova authored
Turn this test into a normal mode as it contains well-formed code and checks for defined behavior. It still can be run in debug mode as of D100866. Differential Revision: https://reviews.llvm.org/D102192
-
Djordje Todorovic authored
There are cases where a concrete DIE with DW_TAG_subprogram can have abstract_origin attribute, so we handle that situation as well. Differential Revision: https://reviews.llvm.org/D101025
-
Tobias Gysi authored
after introducing the IndexedGenericOp to GenericOp canonicalization (https://reviews.llvm.org/D101612). Differential Revision: https://reviews.llvm.org/D102187
-
Tobias Gysi authored
after introducing the IndexedGenericOp to GenericOp canonicalization (https://reviews.llvm.org/D101612). Differential Revision: https://reviews.llvm.org/D102174
-
Christopher Di Bella authored
C++17 deprecates `std::raw_storage_iterator` and C++20 removes it. Implements part of: * P0174R2 'Deprecating Vestigial Library Parts in C++17' * P0619R4 'Reviewing Deprecated Facilities of C++17 for C++20' Differential Revision: https://reviews.llvm.org/D101730
-
Christopher Di Bella authored
The standard leaves it up to the implementation to decide whether or not these operators are hidden friends. There are several (well-documented) reasons to prefer hidden friends, as well as an argument for improved readability. Depends on D100342. Differential Revision: https://reviews.llvm.org/D101707
-
Christopher Di Bella authored
* `operator!=` isn't in the spec * `<compare>` is designed to work with `operator<=>` so it doesn't really make sense to have `operator<=>`-less friendly sections. Depends on D100283. Differential Revision: https://reviews.llvm.org/D100342
-
Kadir Cetinkaya authored
Currently client was setting the HasMore to true iff stream said so. Hence if we had a broken stream for whatever reason (e.g. hitting deadline for a huge response), HasMore would be false, which is semantically incorrect (e.g. will throw rename off). Differential Revision: https://reviews.llvm.org/D101915
-
Kadir Cetinkaya authored
This is to prevent server from being DOS'd by possible malicious parties issuing requests that can yield huge responses. One possible drawback is on rename workflow. As it really requests all occurences, but it has an internal limit on 50 files currently. We are putting the limit on 10000 elements per response So for rename to regress one should have 10k refs to a symbol in less than 50 files. This seems unlikely and we fix it if there are complaints by giving up on the response based on the number of files covered instead. Differential Revision: https://reviews.llvm.org/D101914
-
Tobias Gysi authored
after introducing the IndexedGenericOp to GenericOp canonicalization (https://reviews.llvm.org/D101612). Differential Revision: https://reviews.llvm.org/D102176
-
Igor Kudrin authored
Currently, when reporting unresolved symbols in shared libraries, if an undefined symbol is firstly seen in a regular object file that shadows the reference for the same symbol in a shared object. As a result, the error for the unresolved symbol in the shared library is not reported. If referencing sections in regular object files are discarded because of '--gc-sections', no reports about such symbols are generated, and the linker finishes successfully, generating an output image that fails on the run. The patch fixes the issue by keeping symbols, which should be checked, for each shared library separately. Differential Revision: https://reviews.llvm.org/D101996
-
Chris Lattner authored
OpAsmParser (and DialectAsmParser) supports a pair of parseInteger/parseOptionalInteger methods, which allow parsing a bare integer into a C type of your choice (e.g. int8_t) using templates. It was implemented in terms of a virtual method call that is hard coded to int64_t because "that should be big enough". Change the virtual method hook to return an APInt instead. This allows asmparsers for custom ops to parse large integers if they want to, without changing any of the clients of the fixed size C API. Differential Revision: https://reviews.llvm.org/D102120
-
Carl Ritson authored
-
Hsiangkai Wang authored
For Zvlsseg spilling, we need to convert the pseudo instructions into multiple vector load/store instructions with appropriate offsets. For example, for PseudoVSPILL3_M2, we need to convert it to VS2R %v2, %base ADDI %base, %base, (vlenb x 2) VS2R %v4, %base ADDI %base, %base, (vlenb x 2) VS2R %v6, %base We need to keep the size of the offset in the pseudo spilling instructions. In this case, it is (vlenb x 2). In the original implementation, we use the size of frame objects divide the number of vectors in zvlsseg types. The size of frame objects is not necessary exactly the same as the spilling data. It may be larger than it. So, we change it to (VLENB x LMUL) in this patch. The calculation is more direct and easy to understand. Differential Revision: https://reviews.llvm.org/D101869
-
Renaud-K authored
https://reviews.llvm.org/D102040
-