- Jun 13, 2024
-
-
Matt Arsenault authored
Mostly fixes handling of bfloat vectors, but also some missing i16 cases.
-
Simon Pilgrim authored
-
Simon Pilgrim authored
-
Simon Pilgrim authored
dyn_cast is allowed to return NULL - use cast<> to assert that the cast type is valid Fixes static analysis warning.
-
Congcong Cai authored
-
LLVM GN Syncbot authored
-
aengelke authored
Due to alignment, the first two fields of MCEncodedFragment are currently at bytes 40 and 41, so 1 byte over the 8 byte boundary, causing 7 bytes padding to be inserted for the following pointer. Fold two bools of MCFragment into bitfields to reduce move the two fields of MCEncodedFragment one byte earlier to remove the padding bytes. This works, as in the Itanium ABI, there is no padding after base classes. This gives a space reduction of MCDataFragment from 224 to 216 bytes.
-
Matt Arsenault authored
-
Hua Tian authored
This commit implements the Window Scheduler as described in the RFC: https://discourse.llvm.org/t/rfc-window-scheduling-algorithm-for-machinepipeliner-in-llvm/74718 This Window Scheduler implements the window algorithm designed by Steven Muchnick in the book "Advanced Compiler Design And Implementation", with some improvements: 1. Copy 3 times of the loop kernel and construct the corresponding DAG to identify dependencies between MIs; 2. Use heuristic algorithm to obtain a set of window offsets. The window algorithm is equivalent to modulo scheduling algorithm with a stage of 2. It is mainly applied in targets where hardware resource conflicts are severe, and the SMS algorithm often fails in such cases. On our own DSA, this window algorithm typically can achieve a performance improvement of over 10%. Co-authored-by:
Kai Yan <aklkaiyan@tencent.com> Co-authored-by:
Ran Xiao <lennyxiao@tencent.com> --------- Co-authored-by:
Kai Yan <aklkaiyan@tencent.com> Co-authored-by:
Ran Xiao <lennyxiao@tencent.com>
-
Younan Zhang authored
Fixes two issues in two ways: 1) The `braced-init-list` consisted of `initializer-list` and `designated-initializer-list`, and thus the designated initializer is subject to [over.match.class.deduct]p1.8, which means the brace elision is also applicable on it for CTAD deduction guides. 2) When forming a deduction guide where the brace elision is applicable, we should also consider the presence of braces within the initializer. For example, given template <class T, class U> struct X { T t[2]; U u[3]; }; X x = {{1, 2}, 3, 4, 5}; we should establish such deduction guide AFAIU: `X(T (&&)[2], U, U, U) -> X<T, U>`. Fixes https://github.com/llvm/llvm-project/issues/64625 Fixes https://github.com/llvm/llvm-project/issues/83368 -
Younan Zhang authored
I believe it has been implemented since D139837 "Implements CTAD for aggregates P1816R0 and P2082R1", so this just claims we have already supported it. Plus an update on the dr status page.
-
Nikita Popov authored
DWOName is still used afterwards. The only reason this works out right now is that SmallString does not actually have a constructor that can take advantage of the move.
-
Simon Pilgrim authored
Use the internal computeForAddCarry directly since we know the exact values of the carry bit.
-
Matt Arsenault authored
An 8 x i16 raw load was incorrectly using a 64-bit memory type, which would assert in the MachineMemOperand constructor. This is preparation for a cleanup which will make the buffer intrinsics work for all legal types.
-
Björn Pettersson authored
DAGTypeLegalizer::SplitVecRes_INSERT_VECTOR_ELT and DAGTypeLegalizer::SplitVecRes_EXTRACT_VECTOR_ELT did not handle non byte-sized elements properly. In fact, it only dealt with elements smaller than 8 bits (as well as byte-sized elements). This patch generalizes the support for non byte-sized element by always widening the the vector elements to next "round integer type" (a power of 2 bit size). This should make sure that we can access a single element via a simple byte-addressed scalar load/store. Also removing a suspicious CustomLowerNode call from SplitVecRes_INSERT_VECTOR_ELT. Considering that it did not reset the Lo/Hi out arguments before the return I think that DAGTypeLegalizer::SplitVectorResult could be fooled into registering the input vector as being the result. This should however not have caused any problems since DAGTypeLegalizer::SplitVectorResult is doing the same CustomLowerNode call, making the code removed by this patch redundant.
-
Tom Eccles authored
Fixes #92440 I had to delete part of reduction09.f90 because I don't think that should have ever worked.
-
Jay Foad authored
-
Tai Ly authored
In order to fold, we need to create DenseElementsAttr, which does not support quantized element types. This patch adds tests for folding quntized element types and disable tosa folders where appropriate. refactored canonicalize.mlir test to use --split-input-file also fixed verifier for trait MulOperandsAndResultElementType for quantized element types Signed-off-by:Tai Ly <tai.ly@arm.com>
-
Matt Arsenault authored
Re-use already queried call arguments and matched APFloat, instead of re-matching the original argument.
-
jeanPerier authored
Deal with the cases where lower bounds, or attribute, or dynamic type must be updated when passing an assumed-rank actual argument to an assumed-rank dummy argument. copy-in/copy-out and passing target assumed-rank to intent(in) pointers will be handled in separate patch.
-
Pavel Labath authored
…ARFDIE This puts them closer to the other two functions doing something very similar. I've tried to stick to the original logic of the functions as much as possible, though I did apply some easy simplifications. The changes in DWARFDeclContext.h are there to make the unit tests produce more useful error messages.
-
jeanPerier authored
LBOUND and SHAPE runtime were added with an API that avoids making a dynamic allocation for the small result storage. Update the UBOUND API that was already there and used in lowering outside of the assumed-rank case. Add tests for the assumed-rank case.
-
jeanPerier authored
Dynamic type and element size of the descriptor dummy must match the dummy static type when the dummy is not polymorphic, otherwise IS_CONTIGUOUS, C_SIZEOF.... won't work properly inside the callee. When the actual argument is polymorphic the descriptor of the actual may have a different dynamic type/element size. Hence, the dummy argument cannot simply take or copy the descriptor of the actual argument.
-
NAKAMURA Takumi authored
-
Mitch Phillips authored
When running some tests with --gtest_repeat=100 --gtest_shuffle, I encountered some problems because the allocator wasn't torn down completely, and the singleton pointer ended up pointing to a use-after-scope'd object. This patch has a couple of fixes and niceties: 1. Removing the once-init stuff from tests, now that it's implicitly done in GuardedPoolAllocator::installAtFork() anyway. 2. Calling uninitTestOnly() in the late_init test. 3. Resetting the HasReportedBadPoolAccess when the signal handlers are installed (allowing for --gtest_repeat w/ recoverable mode). 4. Adding a check and resetting the singleton pointer in uninitTestOnly(). -
Matt Arsenault authored
Do not require a libm ldexp libcall to emit the ldexp intrinsic when transforming pow(2, x) -> ldexp(1, x) This enables the half intrinsic case to fold.
-
Martin Storsjö authored
The same has been done in a couple other existing tests, that also are skipped on Windows (e.g. ld-path.c). Some tests that really do want to test setting the path on Windows does it differently, see e.g. ps4-ps5-linker-win.c. Since a65771fc, the spirv-toolchain.cl test does one test where PATH is set. Setting PATH does work in some build configurations - however, if built with e.g. llvm-mingw, the built Clang executable depends on libc++.dll (and libunwind.dll) which are found in PATH. If the PATH is overridden, the newly built Clang executable no longer can run.
-
Vyacheslav Levytskyy authored
This PR fixes a problem in logics of cleaning unused constants, ensuring that cleaning of temporary constants doesn't purge tracked constants. On a rare occasion when this happens SPIR-V Backend emits a code that refers to a non-existent register, earlier related with a constant. Attached to the PR test case is a minimal reproducer where names of variables and instructions lead to such a rare coincidence.
-
Vyacheslav Levytskyy authored
This PR adds builtin functions to insert instructions from 'Group and Subgroup' section of the SPIR-V Specification. Corresponding tests are updated, `spirv-val` run is added where it was missed.
-
Ivan Kosarev authored
Some tools generate such instructions with the FORMAT field set to 0, which corresponds to buf_fmt_invalid, but that should not prevent them from being recognised on decoding.
-
Kristof Beyls authored
I'm not aware of any other documentation changes that are needed to complete the migration from chromium to github to report security issues. The top-level security.md file refers to https://llvm.org/docs/Security.html#how-to-report-a-security-issue for documentation on reporting a security issue, which is being updated as part of this PR.
-
Rajveer Singh Bharadwaj authored
This adds a fix-it hint in situations where a modifiable lvalue is expected, but a prvalue or non-modifiable lvalue of pointer type was found, so long as dereferencing the pointer would result in a modifiable lvalue. Resolves #93066
-
Johannes Doerfert authored
We already used a flat array of kernel launch parameters for the AMD GPU launch but now we also use this scheme for the NVIDIA GPU launch. The only remaining/required use of the indirection is the host plugin (due ot ffi). This allows to us simplify the use for non-OpenMP kernel launch.
-
Pierre van Houtryve authored
It's very expensive and doesn't achieve anything. I one test I did, it saves almost 10s on a 2m23s build, bringing it down to 2m15s using a downstream branch.
-
pvanhout authored
-
Haojian Wu authored
-
Nikita Popov authored
I believe we should return after the SDR for the error case, instead of invoking it a second time with Error::success().
-
Zain Jaffal authored
I am using `isKnownInversion` in the following pr https://github.com/llvm/llvm-project/pull/94915 it is useful to have the method in a shared class so I can reuse it. I am not sure if `ValueTracking` is the correct place but it looks like most of the methods with the pattern `isKnownX` belong there.
-
PiJoules authored
This is the actual freelist allocator which utilizes the generic FreeList and the Block classes. We will eventually wrap the malloc interface around this. This is a part of #94270 to land in smaller patches.
-
Johannes Doerfert authored
We cannot use assumed dead information for nonnull IR-implied deduction as we will never go back and re-check. This was reported in https://github.com/llvm/llvm-project/pull/85810
-