- Aug 03, 2021
-
-
Cullen Rhodes authored
-
Jay Foad authored
These instructions have an implicit use of vcc which counts towards the constant bus limit. Pre gfx10 this means that the explicit operands cannot be sgprs. Use the custom inserter hook to call legalizeOperands to enforce that restriction. Fixes https://bugs.llvm.org/show_bug.cgi?id=51217 Differential Revision: https://reviews.llvm.org/D106868
-
Martin Storsjö authored
Don't just check for the existence of one, but check which one was specified last, if any. This fixes https://llvm.org/PR51296. Differential Revision: https://reviews.llvm.org/D107261
-
Martin Storsjö authored
This does the same fix as D107237 but for a couple more options, converting all remaining cases of such options to accept both forms, for consistency. This fixes building e.g. openldap, which uses --image-base=<value>. Differential Revision: https://reviews.llvm.org/D107253
-
Florian Mayer authored
Reviewed By: hctim Differential Revision: https://reviews.llvm.org/D107270
-
Paulo Matos authored
Add new pass LowerRefTypesIntPtrConv to generate debugtrap instruction for an inttoptr and ptrtoint of a reference type instead of erroring, since calling these instructions on non-integral pointers has been since allowed (see ac81cb7e). Differential Revision: https://reviews.llvm.org/D107102
-
Vitaly Buka authored
-
Kim-Anh Tran authored
-
Uday Bondhugula authored
Silence clang-tidy warning in AffineOps.cpp due to the inability to see through the typeswitch. NFC. Differential Revision: https://reviews.llvm.org/D106125
-
Chirag Khandelwal authored
In OMP 5.0 specification clause-list with * task_reduction * allocate were allowed on taskgroup construct. Fix XFAIL - omp-taskloop01.f90. Reviewed By: kiranchandramohan Differential Revision: https://reviews.llvm.org/D93373
-
jacquesguan authored
[RISCV] Teach VSETVLI insertion to merge the unused VSETVLI with the one need to be insert after it. If a vsetvli instruction is not compatible with the next vector instruction, and there is no other things that may update or use VL/VTYPE, we could merge it with the next vsetvli instruction that should be insert for the vector instruction. This commit only merge VTYPE with the former vsetvli instruction which has the same VL. Reviewed By: craig.topper Differential Revision: https://reviews.llvm.org/D106857
-
jacquesguan authored
Reviewed By: craig.topper Differential Revision: https://reviews.llvm.org/D106865
-
luxufan authored
-
luxufan authored
In RISCV's relocations, some relocations are comprised of two relocation types. For example, R_RISCV_PCREL_HI20 and R_RISCV_PCREL_LO12_I compose a PC relative relocation. In general the compiler will set a label in the position of R_RISCV_PCREL_HI20. So, to test the R_RISCV_PCREL_LO12_I relocation, we need decode instruction at position of the label points to R_RISCV_PCREL_HI20 plus 4 (the size of a riscv non-compress instruction). Reviewed By: lhames Differential Revision: https://reviews.llvm.org/D105528
-
Matthias Springer authored
There are cases in which it is not desirable to fully compose the bound map with the operands when adding lower/upper bounds to a `FlatAffineConstraints`. E.g., this is the case when bounds should be expressed in terms of the operands only (and not the operands' dependencies). This also makes `addLowerOrUpperBound` useable together with operands that are defined through semi-affine expressions. Differential Revision: https://reviews.llvm.org/D107221
-
Matthias Springer authored
Bounds such as `dim_{pos} <= c_1 * dim_x + ...` where `x == pos` are invalid. `addLowerOrUpperBound` previously added an incorrect inequality to the set. Such cases are now explicitly rejected. Differential Revision: https://reviews.llvm.org/D107220 -
Matthias Springer authored
Add ForLoopBoundSpecialization pass, which specializes scf.for loops into a "main loop" where `step` divides the iteration space evenly and into an scf.if that handles the last iteration. This transformation is useful for vectorization and loop tiling. E.g., when vectorizing loads/stores, programs will spend most of their time in the main loop, in which only unmasked loads/stores are used. Only the in the last iteration (scf.if), slower masked loads/stores are used. Subsequent commits will apply this transformation in the SparseDialect and in Linalg's loop tiling. Differential Revision: https://reviews.llvm.org/D105804
-
wlei authored
In order to support different types of perf scripts, this change tried to refactor `PerfReader` by adding the base class `PerfReaderBase` and current HybridPerfReader is derived from it for CS profile generation. Common functions like, passMM2PEvents, extract_lbrs, extract_callstack, etc. can be reused. Next step is to add LBR only reader(for non-CS profile) and aggregated perf scripts reader(do a pre-aggregation of scripts). Reviewed By: hoy, wenlei Differential Revision: https://reviews.llvm.org/D107014
-
Vitaly Buka authored
-
Shimin Cui authored
This is to fix the assert @bjope reported due to the code change of https://reviews.llvm.org/D106589. The test case from @bjope is also included. Reviewed By: efriedma Differential Revision: https://reviews.llvm.org/D107302
-
Eli Friedman authored
This adds handling for two cases: 1. A scalable vector where the element type is promoted. 2. A scalable vector where the element count is odd (or more generally, not divisble by the element count of the part type). (Some element types still don't work; for example, <vscale x 2 x i128>, or <vscale x 2 x fp128>.) Differential Revision: https://reviews.llvm.org/D105591
-
modimo authored
The declaration for the global new function in C++ is generated in the compiler front-end. When examining exception propagation, we found that this is the largest root throw site propagator requiring unwind code to be generated for callers up the stack. Allowing this to be handled immediately with termination stops upward propagation and leads to significantly less landing pads generated. This in turns leads to a performance and .text size win. With `-fnew-infallible` this annotates the declaration with `throw()` and `__attribute__((returns_nonnull))`. `throw()` allows the compiler to assume exceptions do not propagate out of new and eliminate it as a root throw site. Note that the definition of global new is user-replaceable so users should ensure that the one used follows these semantics. Measuring internally, we're seeing at 0.5% CPU win in one of our large internal FB workload. Measuring on clang self-build (cd0a1226) we get: thinlto/ "dwarfehprepare.NumCleanupLandingPadsRemaining": 153494, "dwarfehprepare.NumNoUnwind": 26309, thinlto_newinfallible/ "dwarfehprepare.NumCleanupLandingPadsRemaining": 143660, "dwarfehprepare.NumNoUnwind": 28744, a 1-143660/153494 = 6.4% reduction in landing pads and a 28744/26309 = 9.3% increase in the number of nounwind functions. Testing: ninja check-all new test case to make sure these attributes are added correctly to global new. Reviewed By: urnathan Differential Revision: https://reviews.llvm.org/D105225
-
Vedant Kumar authored
... and rename it to 'warnIfNonZero' to better-reflect what it actually does. The goal is to minimize the amount of logic that's conditionally compiled under '#if __APPLE__'.
-
Aart Bik authored
There was a slightly mismatch between the double COO and actual numerical type in the final sparse tensor storage (due to external formats always using double). This minor revision removes that inconsistency by using a properly typed COO and casting during the "add" method instead. This also prepares alternative ways of initializing the COO object. Reviewed By: gussmith23 Differential Revision: https://reviews.llvm.org/D107310
-
Mitch Phillips authored
Add more checks, info on -fno-sanitize=..., and reference to 5/2021 UBSan Oracle blog. Authored By: DianeMeirowitz Reviewed By: hctim Differential Revision: https://reviews.llvm.org/D106908
-
Roman Lebedev authored
[BasicTTIImpl][LoopUnroll] getUnrollingPreferences(): emit ORE remark when advising against unrolling due to a call in a loop I'm not sure this is the best way to approach this, but the situation is rather not very detectable unless we explicitly call it out when refusing to advise to unroll. Reviewed By: efriedma Differential Revision: https://reviews.llvm.org/D107271
-
Roman Lebedev authored
[InstCombine] `vector_reduce_{or,and}(?ext(<n x i1>))` --> `?ext(vector_reduce_{or,and}(<n x i1>))` (PR51259) This allows the expansion logic to actually trigger if the argument was extended from i1 element type, like the rest of the reductions expect. Alive2 agrees: https://alive2.llvm.org/ce/z/wcfews (or zext) https://alive2.llvm.org/ce/z/FCXNFx (or sext) https://alive2.llvm.org/ce/z/f26zUY (and zext) https://alive2.llvm.org/ce/z/jprViN (and sext) -
Roman Lebedev authored
-
Roman Lebedev authored
-
Jessica Paquette authored
When a value is expected to be extended, we should emit an extended load rather than a normal G_LOAD. Add checklines to arm64-abi.ll which show that we now emit the correct loads. For ease of comparison: https://godbolt.org/z/8WvY6EfdE Differential Revision: https://reviews.llvm.org/D107313
-
Roman Lebedev authored
[InstCombine] `vector_reduce_smax(?ext(<n x i1>))` --> `?ext(vector_reduce_{and,or}(<n x i1>))` (PR51259) Alive2 agrees: https://alive2.llvm.org/ce/z/3oqir9 (self) https://alive2.llvm.org/ce/z/6cuI5m (zext) https://alive2.llvm.org/ce/z/4FL8rD (sext) We already handle `vector_reduce_and(<n x i1>)`, so let's just combine into the already-handled pattern and let the existing fold do the rest. -
Roman Lebedev authored
-
Roman Lebedev authored
[InstCombine] `vector_reduce_smin(?ext(<n x i1>))` --> `?ext(vector_reduce_{or,and}(<n x i1>))` (PR51259) Alive2 agrees: https://alive2.llvm.org/ce/z/noXtZ8 (self) https://alive2.llvm.org/ce/z/JNrN6C (zext) https://alive2.llvm.org/ce/z/58snuN (sext) We already handle `vector_reduce_and(<n x i1>)`, so let's just combine into the already-handled pattern and let the existing fold do the rest. -
Roman Lebedev authored
-
Vitaly Buka authored
Depends on D107207. Differential Revision: https://reviews.llvm.org/D107209
-
Vitaly Buka authored
Syscall return number of initialized events which needs to be used for unposoning. Differential Revision: https://reviews.llvm.org/D107207
-
Nikita Popov authored
This reverts commit 76940577. This causes Transforms/LoopUnroll/ARM/multi-blocks.ll to fail.
-
Chang-Sun Lin, Jr authored
ValueTracking should allow for value ranges that may satisfy llvm.assume, instead of restricting the ranges only to values that will always satisfy the condition. Differential Revision: https://reviews.llvm.org/D107298
-
Eli Friedman authored
-
Roman Lebedev authored
Alive2 agrees: https://alive2.llvm.org/ce/z/NbBaeT (self) https://alive2.llvm.org/ce/z/iEaig4 (zext) https://alive2.llvm.org/ce/z/meGb3y (sext) We already handle `vector_reduce_and(<n x i1>)`, so let's just combine into the already-handled pattern and let the existing fold do the rest.
-