- Aug 23, 2021
-
-
Matthias Springer authored
Do not apply loop peeling to loops that are contained in the partial iteration of an already peeled loop. This is to avoid code explosion when dealing with large loop nests. Can be controlled with a new pass option `skip-partial`. Differential Revision: https://reviews.llvm.org/D108542
-
Chuanqi Xu authored
It would waste time to specialize a function which would inline finally. This patch did two things: - Don't specialize functions which are always-inline. - Don't spescialize functions whose lines of code are less than threshold (100 by default). For spec2017int, this patch could reduce the number of specialized functions by 33%. Then the compile time didn't increase for every benchmark. Reviewed By: SjoerdMeijer, xbolva00, snehasish Differential Revision: https://reviews.llvm.org/D107897
-
Alexander Potapenko authored
Unlike __attribute__((no_sanitize("thread"))), this one will cause TSan to skip the entire function during instrumentation. Depends on https://reviews.llvm.org/D108029 Differential Revision: https://reviews.llvm.org/D108202 -
Simon Pilgrim authored
Show failure to fold scaled-index into gather/scatter scale operands
-
Florian Hahn authored
This reverts the revert ab9296f1. The issue causing the revert should be fixed in 9baed023.
-
Jay Foad authored
Apparently GCC 11 was warning: AMDGPURegisterBankInfo.cpp:2543:33: warning: enumerated and non-enumerated type in conditional expression [-Wextra]
-
Cullen Rhodes authored
The following scalar FP instructions are legal in streaming mode: 0101 1110 xx1x xxxx 11x1 11xx xxxx xxxx # FMULX/FRECPS/FRSQRTS (scalar) 0101 1110 x10x xxxx 00x1 11xx xxxx xxxx # FMULX/FRECPS/FRSQRTS (scalar, FP16) 01x1 1110 1x10 0001 11x1 10xx xxxx xxxx # FRECPE/FRSQRTE/FRECPX (scalar) 01x1 1110 1111 1001 11x1 10xx xxxx xxxx # FRECPE/FRSQRTE/FRECPX (scalar, FP16) Predicate them on `HasNEONorStreamingSVE`. Full list of affected instructions: FMULX16, FMULX32, FMULX64, FRECPS16, FRECPS32, FRECPS64, FRSQRTS16, FRSQRTS32, FRSQRTS64, FRECPEv1f16, FRECPEv1i32, FRECPEv1i64, FRECPXv1f16, FRECPXv1i32, FRECPXv1i64, FRSQRTEv1f16, FRSQRTEv1i32, FRSQRTEv1i64 Depends on D107902. The reference can be found here: https://developer.arm.com/documentation/ddi0602/2021-06/SIMD-FP-Instructions Execution of NEON instructions that are illegal in streaming mode will cause a trap or exception. Using FMULX [1] as an example, this check is at the top of the pseudocode: if elements == 1 then CheckFPEnabled64(); else CheckFPAdvSIMDEnabled64(); For the legal scalar variants it calls `CheckFPEnabled64`, whereas for the illegal vector variants it calls `CheckFPAdvSIMDEnabled64` which traps. This is useful for observing which instructions are/aren't legal in streaming mode. [1] https://developer.arm.com/documentation/ddi0602/2021-06/SIMD-FP-Instructions/FMULX--Floating-point-Multiply-extended- Reviewed By: david-arm Differential Revision: https://reviews.llvm.org/D108039
-
Cullen Rhodes authored
Split out from D107903 to remove dependency for D108039 and D108279. Reviewed By: paulwalker-arm Differential Revision: https://reviews.llvm.org/D108293
-
Michael Kruse authored
Code outside the SCoP will be executed recardless of the code versioning runtime check introduced by CodeGeneration. Assumption made based on that these are never executed in Polly-optimized code does not hold. This fixes the miscompilation of MultiSource/Applications/lambda-0.1.3
-
Siva Chandra Reddy authored
A corresponding adjustment to mtx_lock has also been made.
-
Min-Yih Hsu authored
Cleanup the formats of the MC tests that were just migrated. NFC
-
Min-Yih Hsu authored
Migrate some MOVE instruction MC tests from test/CodeGen/M68k. Unfortunately the tests touched in this commit were failed due to lacking of the `abs.W` operand, which forces any memory address parsed from assembly being represented in 32-bits. We're temporarily allowing these unwanted widening in the tests until the support for `abs.W` is there.
-
Siva Chandra Reddy authored
These functions will be used in a future patch to implement trigonometric functions. Unit tests have been added but to the libc-long-running-tests suite. The unit tests long running because we compare against MPFR computations performed at 1280 bits of precision. Some cleanups or elimination of repeated patterns can be done as follow up changes. Differential Revision: https://reviews.llvm.org/D104817
-
Shilei Tian authored
-
Kai Luo authored
This is the first step to enable PPC64 support huge frame size(>2G). Also fix an assertion error for frame size, i.e.,`int x; !isInt<32>(x);` should be always evaluated false, so the guard code for frame size is impossible to hit. Reviewed By: jsji Differential Revision: https://reviews.llvm.org/D107435
-
Michael Kruse authored
The new pass manager does not allow adding module passes at the -polly-position=before-vectorizer extension point. Introduce a DumpFunctionPass that dumps only current function. In contrast to the legacy pass manager's -polly-dump-before, each function will be dumped into its own file. -polly-dump-before-file is still not supported. The DumpFunctionPass uses llvm::CloneModule to copy the current function into a new module and then write it into a file.
-
Stella Laurenzo authored
* This is the native data layout for PyTorch and npcomp was using the prior version before cleanup. Differential Revision: https://reviews.llvm.org/D108527
-
Stella Laurenzo authored
Also adds banners to the files with update instructions. Differential Revision: https://reviews.llvm.org/D108529
-
Stella Laurenzo authored
* Resolves a TODO by making this configurable by downstreams. * This seems to be the last thing allowing full use of the Python bindings as a library within another project (i.e. be embedding them). Differential Revision: https://reviews.llvm.org/D108523
-
Nikita Popov authored
This test was not modifying the pointer in the loop, so the loads just ended up as undef, without relation to loop load PRE. Pass the alloca to the called function, so the memory is potentially modified.
-
Nikita Popov authored
4ad41902 changed this code to propagate Changed if scalar GEP PRE is performed. However, as implemented this would skip the load PRE entirely if GEP indices were PREd. Make sure load PRE runs even if Changed is already true. This likely has no functional effect as load PRE would then occur on a later GVN iteration.
-
Amy Kwan authored
It is possible that libatomic does not exist on some systems. This patch updates the scudo standalone tests to link against libatomic if the library exists. This is an update to the original patch: https://reviews.llvm.org/D64134 and aims to resolve https://bugs.llvm.org/show_bug.cgi?id=51431. Differential Revision: https://reviews.llvm.org/D108503
-
Philip Reames authored
-
Philip Reames authored
This special cases an unconditional latch and a conditional branch latch exit to improve codegen and test readability. I am hoping to reuse this function in the runtime unroll code, but without this change, the test diffs are far too complex to assess.
-
Simon Pilgrim authored
combineMul is now used for other things as well as the mul-with-constant expansion - move the comment to where its actually relevant.
-
Alexey Lapshin authored
verifyDieRanges function checks for the intersected address ranges. It adds child DieRangeInfo into parent DieRangeInfo to check whether children have overlapping address ranges. It is safe to not add DieRangeInfo with empty address range into parent's children list. This decreases the number of children which should be navigated and as a result decreases execution time(parents having a lot of children with empty ranges spend much time navigating them). For this command: "llvm-dwarfdump --verify clang-repl" execution time decreased from 220 sec till 75 sec. Differential Revision: https://reviews.llvm.org/D107554
-
Kazu Hirata authored
The corresponding definition has been missing for at least 5 years.
-
- Aug 22, 2021
-
-
Arthur O'Dwyer authored
When `_Compare` is a function parameter already (so it's not `void` and it's not an abominable function type), `add_lvalue_reference_t<_Compare>` is simply a synonym for `_Compare&`. We don't need to pull in `<type_traits>` and instantiate a template trait to figure that out. Differential Revision: https://reviews.llvm.org/D108400
-
Nikita Popov authored
The pattern matched here is too complex for the general logical and/or to bitwise and/or conversion to trigger. However, the fold is poison-safe, so match it with a select root as well: https://alive2.llvm.org/ce/z/vNzzSg https://alive2.llvm.org/ce/z/Beyumt
-
Nikita Popov authored
We currently only handle this with a bitwise and/or instruction, but not a logical.
-
Simon Pilgrim authored
Extend matchShuffleAsBlend to not only match against known in-place elements for BLEND shuffles, but use isElementEquivalent to determine if the shuffle mask's referenced element is the same as the in-place element. This allows us to replace a number of insertps instructions with more general blendps instructions (better opportunities for commutation, concatenation etc.).
-
Simon Pilgrim authored
-
Simon Pilgrim authored
Also replace X32 with X86 check prefixes for i686 tests (we tend to try to use X32 for gnux32 targets)
-
Simon Pilgrim authored
Before lowering shuffles, see if we can merge horizontal ops or canonicalize the shuffle mask to point to the same LHS/RHS of the HOps when an HOp's args are repeated.
-
Sanjay Patel authored
This is part of solving more general rotate patterns seen in bugs related to: https://llvm.org/PR51575 https://alive2.llvm.org/ce/z/GpkFCt
-
Sanjay Patel authored
This is part of solving more general rotate patterns seen in bugs related to: https://llvm.org/PR51575 https://alive2.llvm.org/ce/z/fjKwqv
-
Sanjay Patel authored
-
Simon Pilgrim authored
Broadwell is mainly a die shrink of Haswell, but the model had many of the scheduling classes in different orders, making side-by-side comparisons very difficult. The InstRW overrides are still quite different, but at least that part of the side-by-side diff is now in the same position. This was noticed while I was trying to investigate diffs between llvm-mca and other perf analyzers in https://uica.uops.info/ - we used to be able to do diffs between most of the models very easily, but we seem to have lost that simplicity as classes have been altered, models have been refined and other models have rotted.
-
Sanjay Patel authored
The motivation was to get min/max intrinsics to parity with cmp+select idioms, but this unlocks a few more folds because isFreeToInvert recognizes add/sub with constants too. In the min/max example, we have too many extra uses for smaller folds to improve things, but this fold is able to eliminate uses even though we can't reduce the number of instructions.
-
Simon Pilgrim authored
Don't pass the struct by value.
-