- Aug 03, 2021
-
-
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.
-
Roman Lebedev authored
-
Roman Lebedev authored
[InstCombine] `vector_reduce_umin(?ext(<n x i1>))` --> `?ext(vector_reduce_and(<n x i1>))` (PR51259) Alive2 agrees: https://alive2.llvm.org/ce/z/XxUScW (self) https://alive2.llvm.org/ce/z/3usTF- (zext) https://alive2.llvm.org/ce/z/GVxwQz (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
-
Simon Pilgrim authored
-
Philip Reames authored
This aligns the multiple exit costing with all the other cost decisions. Note that UnrollAndJam, which is the only other caller of the original home of this code, unconditionally bails out of multiple exit loops.
-
Alex Lorenz authored
The new -mtargetos= option is a replacement for the existing, OS-specific options like -miphoneos-version-min=. This allows us to introduce support for new darwin OSes easier as they won't require the use of a new option. The older options will be deprecated and the use of the new option will be encouraged instead. Differential Revision: https://reviews.llvm.org/D106316
-
Eric Leese authored
Split from D100299. Reviewed By: jankratochvil Differential Revision: https://reviews.llvm.org/D107165
-
Nikita Popov authored
This set is only used for contains checks, so there is no need to use std::set.
-
Hedin Garca authored
Comparing the runtime of the sqrt functions from LLVM libc with the system libc: |function |perf - LLVM libc |perf - MSVCRT |sqrtf - Windows|44.05 sec (44051715500 ns)| 417.84 sec (417843359900 ns) = 6.96 mins |function |perf - LLVM libc |perf - glibc |sqrtf - Linux |30.48 sec (30479458632 ns)|43.72 sec (43716901527 ns) By running the differential test: |function |diff |sqrtf - Windows|0 differing results |sqrtf - Linux |0 differing results Reviewed By: sivachandra Differential Revision: https://reviews.llvm.org/D107229
-