- Feb 24, 2021
-
-
Simon Pilgrim authored
Pulled out from D90479 - this recognises invalid nsw shl patterns with signbit changes that result in poison. Differential Revision: https://reviews.llvm.org/D97305
-
Stanislav Mekhanoshin authored
This is to limit compile time. I did experiments with some inputs and found that compile time keeps reasonable for this pass if we have less than 100000 virtual registers and then starts to explode somewhere between 100000 and 150000. Differential Revision: https://reviews.llvm.org/D97218
-
Andrzej Warzynski authored
Originally, when we added the new driver, we created dedicated test directories for `flang-new`. This way we separated the tests for the `throwaway` and the new driver. As we are increasing test coverage and starting to share tests between the two drivers, it makes sense to share all directories and instead rely on: ``` ! REQUIRES: new-flang-driver ``` to mark tests as exclusively for the new driver. Differential Revision: https://reviews.llvm.org/D97207
-
Shilei Tian authored
[OpenMP][NVPTX] Fixed a compilation error in deviceRTLs caused by unsupported feature in release verion of LLVM `ptx71` is not supported in release version of LLVM yet. As a result, the support of CUDA 11.2 and CUDA 11.1 caused a compilation error as mentioned in D97004. Since the support in D97004 is just a WA for releease, and we'll not use it in the near future, using `ptx70` for CUDA 11 is feasible. Reviewed By: jdoerfert Differential Revision: https://reviews.llvm.org/D97195
-
Adam Straw authored
Affine parallel ops may contain and yield results from MemRefsNormalizable ops in the loop body. Thus, both affine.parallel and affine.yield should have the MemRefsNormalizable trait. Reviewed By: bondhugula Differential Revision: https://reviews.llvm.org/D96821
-
Simon Pilgrim authored
As suggested on D97305.
-
Duncan P. N. Exon Smith authored
This (mostly) reverts 32c501dd. Hit a case where this causes a behaviour change, perhaps the same root cause that triggered the revert of a40db550 in 7799ef71. (The API changes in DirectoryEntry.h have NOT been reverted as a number of subsequent commits depend on those.) https://reviews.llvm.org/D90497#2582166
-
Craig Topper authored
This code creates 3 setccs that need to be expanded. It was creating a sign bit test as setge X, 0 which is non-canonical. Canonical would be setgt X, -1. This misses the special case in IntegerExpandSetCCOperands for sign bit tests that assumes canonical form. If we don't hit this special case we end up with a multipart setcc instead of just checking the sign of the high part. To fix this I've reversed the polarity of all of the setccs to setlt X, 0 which is canonical. The rest of the logic should still work. This seems to produce better code on RISCV which lacks a setgt instruction. This probably still isn't the best code sequence we could use here. Reviewed By: RKSimon Differential Revision: https://reviews.llvm.org/D97181
-
Nick Desaulniers authored
The Linux kernel when built with CONFIG_THUMB2_KERNEL makes use of these instructions with immediate operands and wide encodings. These are the T4 variants of the follow sections from the Arm ARM. F5.1.72 LDR (immediate) F5.1.229 STR (immediate) I wasn't able to represent these simple aliases using t2InstAlias due to the Constraints on the non-suffixed existing instructions, which results in some manual parsing logic needing to be added. F1.2 Standard assembler syntax fields describes the use of the .w (wide) vs .n (narrow) encoding suffix. Link: https://bugs.llvm.org/show_bug.cgi?id=49118 Link: https://github.com/ClangBuiltLinux/linux/issues/1296 Reported-by:
Stefan Agner <stefan@agner.ch> Reported-by:
Arnd Bergmann <arnd@kernel.org> Signed-off-by:
Nick Desaulniers <ndesaulniers@google.com> Reviewed By: DavidSpickett Differential Revision: https://reviews.llvm.org/D96632
-
Emily Shi authored
Add support for the new crash reporter api if the headers are available. Falls back to the old API if they are not available. This change was based on [[ https://github.com/llvm/llvm-project/blob/0164d546d2691c439fc06c8fff126224276c2d02/llvm/lib/Support/PrettyStackTrace.cpp#L111 | /llvm/lib/Support/PrettyStackTrace.cpp ]] There is a lit for this behavior here: https://reviews.llvm.org/D96737 but is not included in this diff because it is potentially flaky. rdar://69767688 Reviewed By: delcypher, yln Commited by Dan Liew on behalf of Emily Shi. Differential Revision: https://reviews.llvm.org/D96830
-
Emily Shi authored
Added a lit test that finds its corresponding crash log and checks to make sure it has asn output under `Application Specific Information`. This required adding two python commands: - `get_pid_from_output`: takes the output from the asan instrumentation and parses out the process ID - `print_crashreport_for_pid`: takes in the pid of the process and the file name of the binary that was run and prints the contents of the corresponding crash log. This test was added in preparation for changing the integration with crash reporter from the old api to the new api, which is implemented in a subsequent commit. rdar://69767688 Reviewed By: delcypher Commited by Dan Liew on behalf of Emily Shi. Differential Revision: https://reviews.llvm.org/D96737
-
Jay Foad authored
-
Dave Lee authored
Add `frame variable` dereference suppport to libc++ `std::shared_ptr`. This change allows for commands like `v *thing_sp` and `v thing_sp->m_id`. These commands now work the same way they do with raw pointers. This is done by adding an unaccounted for child member named `$$dereference$$`. Also, add API tests for `std::shared_ptr`, previously there were none. Differential Revision: https://reviews.llvm.org/D97165
-
Florian Hahn authored
This reverts commit 4efa097e, because some the compilers used for some bots do not support automatic conversions to PointerUnion.
-
Florian Hahn authored
Generalize the return value of tryToCreateWidenRecipe to return either a newly create recipe or an existing VPValue. Use this to avoid creating unnecessary VPBlendRecipes. Fixes PR44800.
-
- Feb 23, 2021
-
-
Nicolai Hähnle authored
Prefer to keep uniform (non-divergent) multiplies on the scalar ALU when possible. This significantly improves some game cases by eliminating v_readfirstlane instructions when the result feeds into a scalar operation, like the address calculation for a scalar load or store. Since isDivergent is only an approximation of whether a value is in SGPRs, it can potentially regress some situations where a uniform value ends up in a VGPR. These should be rare in real code, although the test changes do contain a number of examples. Most of the test changes are just using s_mul instead of v_mul/mad which is generally better for both register pressure and latency (at least on GFX10 where sgpr pressure doesn't affect occupancy and vector ALU instructions have significantly longer latency than scalar ALU). Some R600 tests now use MULLO_INT instead of MUL_UINT24. GlobalISel appears to handle more scenarios in the desirable way, although it can also be thrown off and fails to select the 24-bit multiplies in some cases. Alternative solution considered and rejected was to allow selecting MUL_[UI]24 to S_MUL_I32. I've rejected this because the definition of those SD operations works is don't-care on the most significant 8 bits, and this fact is used in some combines via SimplifyDemandedBits. Based on a patch by Nicolai Hähnle. Differential Revision: https://reviews.llvm.org/D97063
-
Juneyoung Lee authored
This allows JumpThreading's computeValueKnownInPredecessors to recognize select form of and/or patterns as well.
-
Jay Foad authored
-
Nate Chandler authored
The new intrinsic replaces the size in one specified AsyncFunctionPointer with the size in another. This ability is necessary for functions which merely forward to async functions such as those defined for partial applications. Reviewed By: aschwaighofer Differential Revision: https://reviews.llvm.org/D97229
-
Jessica Clarke authored
-
Martin Storsjö authored
This matches how libc++ itself is built. This avoids errors due to mismatch if linking libc++ statically. Differential Revision: https://reviews.llvm.org/D97169
-
Nathan James authored
This check registers an IncludeInserter, however the check itself doesn't actually emit any fixes or includes, so the inserter is redundant. From what I can tell the fixes were removed in D26453(rL290051) but the inserter was left in, probably an oversight. Reviewed By: aaron.ballman Differential Revision: https://reviews.llvm.org/D97243
-
Joe Ellis authored
This commit prevents warnings from -Wconversion when a clang vector type is implicitly converted to a sizeless builtin type -- for example, when implicitly converting a fixed-predicate to a scalable predicate. The code below: 1 #include <arm_sve.h> 2 3 #define N __ARM_FEATURE_SVE_BITS 4 #define FIXED_ATTR __attribute__((arm_sve_vector_bits (N))) 5 typedef svbool_t fixed_svbool_t FIXED_ATTR; 6 7 inline fixed_svbool_t foo(fixed_svbool_t p) { 8 return svnot_z(svptrue_b64(), p); 9 } would previously raise this warning: warning: implicit conversion turns vector to scalar: \ 'fixed_svbool_t' (vector of 8 'unsigned char' values) to 'svbool_t' \ (aka '__SVBool_t') [-Wconversion] Note that many cases of these implicit conversions were already permitted because many functions inside arm_sve.h are spawned via preprocessor macros, and the call to isInSystemMacro would cover us in this case. This commit fixes the remaining cases. Differential Revision: https://reviews.llvm.org/D97053 -
Balázs Kéri authored
An option is added to the check to select wich set of functions is defined as asynchronous-safe functions. Reviewed By: aaron.ballman Differential Revision: https://reviews.llvm.org/D90851
-
Michał Górny authored
-
Michał Górny authored
-
Simon Pilgrim authored
Tidy up the check prefixes to improve reuse.
-
Jay Foad authored
Change some test cases to use divergent addresses for vector loads, which should be the common case in real world code. Using uniform addresses causes poor instruction selection for the surrounding code which has to be fixed up post-register-allocation, and this causes a lot of testsuite churn for a forthcoming patch to stop selecting 24-bit vector multiply instructions for uniform multiplies. This shows up some problems in the idot tests where we fail to select v_dot instructions because the patterns only match MUL_[UI]24 ISD nodes, but the DAG contains i16 mul nodes instead. Differential Revision: https://reviews.llvm.org/D97062
-
Sjoerd Meijer authored
Early versions of the ARMv7 reference manuals considered the sp register as a deprecated register for ldm/stm familiy of instructions. However, later versions such as ARM DDI 0406C.d added a note to the Appendix: D9.3 Use of the SP as a general-purpose register Most ARM instructions, unlike Thumb instructions, provide exactly the same access to the SP as to R0-R12. This means that it is possible to use the SP as a general-purpose register. Earlier issues of this manual deprecated the use of SP in an ARM instruction, in any way that is deprecated, not permitted, or not possible in the corresponding Thumb instruction. However, user feedback indicates a number of cases where these instructions are useful. Therefore, ARM no longer deprecates these instruction uses. Also Armv8 manuals no longer consider SP as deprecated register for ldm/ stm A32 instructions. Furthermore, GNU as also does not print a deprecated warning when using SP with those instructions. Drop deprecation warning for pop/ldm/push/stm instructions. Patch by: Stefan Agner. Differential Revision: https://reviews.llvm.org/D82692
-
David Green authored
As a followup to D95291, getOperandsScalarizationOverhead was still using a VF as a vector factor if the arguments were scalar, and would assert on certain matrix intrinsics with differently sized vector arguments. This patch removes the VF arg, instead passing the Types through directly. This should allow it to more accurately compute the cost without having to guess at which operands will be vectorized, something difficult with more complex intrinsics. This adjusts one SVE test as it is now calling the wrong intrinsic vs veccall. Without invalid InstructCosts the cost of the scalarized intrinsic is too low. This should get fixed when the cost of scalarization is accounted for with scalable types. Differential Revision: https://reviews.llvm.org/D96287
-
David Green authored
getIntrinsicInstrCost takes a IntrinsicCostAttributes holding various parameters of the intrinsic being costed. It can either be called with a scalar intrinsic (RetTy==Scalar, VF==1), with a vector instruction (RetTy==Vector, VF==1) or from the vectorizer with a scalar type and vector width (RetTy==Scalar, VF>1). A RetTy==Vector, VF>1 is considered an error. Both of the vector modes are expected to be treated the same, but because this is confusing many backends end up getting it wrong. Instead of trying work with those two values separately this removes the VF parameter, widening the RetTy/ArgTys by VF used called from the vectorizer. This keeps things simpler, but does require some other modifications to keep things consistent. Most backends look like this will be an improvement (or were not using getIntrinsicInstrCost). AMDGPU needed the most changes to keep the code from c230965c working. ARM removed the fix in dfac521d, webassembly happens to get a fixup for an SLP cost issue and both X86 and AArch64 seem to now be using better costs from the vectorizer. Differential Revision: https://reviews.llvm.org/D95291
-
Nathan James authored
-
Timm Bäder authored
GNU-style attribute in enum bodies are allowed (and used by several tests), and this call to ProhibitAttributes() was dead code. Differential Revision: https://reviews.llvm.org/D97271
-
Florian Schmaus authored
The run-clang-tidy.py helper script is supposed to be used by the user, hence it should be placed in the user's PATH. Some distributions, like Gentoo [1], won't have it in PATH unless it is installed in bin/. Furthermore, installed scripts in PATH usually do not carry a filename extension, since there is no need to know that this is a Python script. For example Debian and Ubuntu already install this script as 'run-clang-tidy' [2] and hence build systems like Meson also look for this name first [3]. Hence we install run-clang-tidy.py as run-clang-tidy, as suggested by Sylvestre Ledru [4]. 1: https://bugs.gentoo.org/753380 2: https://salsa.debian.org/pkg-llvm-team/llvm-toolchain/-/blob/60aefb14171ab5c3867a0081844b507fc9f6e015/debian/clang-tidy-X.Y.links.in#L2 3: https://github.com/mesonbuild/meson/blob/b6dc4d5e5c6e838de0b52e62d982ba2547eb366d/mesonbuild/scripts/clangtidy.py#L44 4: https://reviews.llvm.org/D90972#2380640 Reviewed By: sylvestre.ledru, JonasToth Differential Revision: https://reviews.llvm.org/D90972
-
Matteo Favaro authored
The **IsGuaranteedLoopInvariant** function is making sure to check if the incoming pointer is guaranteed to be loop invariant, therefore I think the case where the pointer is defined in the entry block of a function automatically guarantees the pointer to be loop invariant, as the entry block of a function cannot have predecessors or be part of a loop. I implemented this small patch and tested it using **ninja check-llvm-unit** and **ninja check-llvm**. I added a contained test file that shows the problem and used **opt -O3 -debug** on it to make sure the case is not currently handled (in fact the debug log is showing that the DSE pass is bailing out when testing if the killer store is able to clobber the dead store). Reviewed By: fhahn Differential Revision: https://reviews.llvm.org/D96979
-
Hsiangkai Wang authored
vle1.v/vse1.v should be unmasked instructions. The vm encoding is 1 for unmasked instructions. Differential Revision: https://reviews.llvm.org/D97237
-
Anastasia Stulova authored
After updating the user interface in D96515, update the docs reflecting the new approach. Tags: #clang Differential Revision: https://reviews.llvm.org/D96616
-
Nicolas Vasilache authored
This transformation was only used for quick experimentation and is not general enough. Retire it. Differential Revision: https://reviews.llvm.org/D97266
-
Simon Pilgrim authored
-
Nicolas Vasilache authored
-