- Oct 21, 2020
-
-
Paul C. Anagnostopoulos authored
Differential Revision: https://reviews.llvm.org/D89822
-
Jan Kratochvil authored
Differential Revision: https://reviews.llvm.org/D89875
-
Jeremy Morse authored
As mentioned post-commit in D85749, the 'substituteDebugValuesForInst' method added in c521e44d would be better off with a limit on the number of operands to substitute. This handles the common case of "substitute the first operand between these two differing instructions", or possibly up to N first operands.
-
Michael Liao authored
-
Louis Dionne authored
This temporarily reverts commit 1e46d1aa until I find a solution to fix the libc++abi and libunwind test suites with that change.
-
Sanjay Patel authored
The default implementation base returns TCC_Expensive (currently set to '4'), so that explains the test diff. This probably does not make sense for most callers, but at least now the costs will be consistently wrong instead of mysteriously wrong. The ARM target has an override that tries to model codegen expansion, and that should likely be adapted for general usage. This probably does not affect anything because the vectorizers are the primary users of the throughput cost, but memcpy is not listed as a trivially vectorizable intrinsic.
-
Louis Dionne authored
Prior to this patch, we would generate a fancy <__config> header by concatenating <__config_site> and <__config>. This complexifies the build system and also increases the difference between what's tested and what's actually installed. This patch removes that complexity and instead simply installs <__config_site> alongside the libc++ headers. <__config_site> is then included by <__config>, which is much simpler. Doing this also opens the door to having different <__config_site> headers depending on the target, which was impossible before. It does change the workflow for testing header-only changes to libc++. Previously, we would run `lit` against the headers in libcxx/include. After this patch, we run it against a fake installation root of the headers (containing a proper <__config_site> header). This makes use closer to testing what we actually install, which is good, however it does mean that we have to update that root before testing header changes. Thus, we now need to run `ninja check-cxx-deps` before running `lit` by hand. Differential Revision: https://reviews.llvm.org/D89041
-
Jonas Paulsson authored
For historical reasons, the R6 register is a callee-saved argument register. This means that if it is used to pass an argument to a function that does not clobber it, it is live throughout the function. This patch makes sure that in this special case any kill flags of it are removed. Review: Ulrich Weigand, Eli Friedman Differential Revision: https://reviews.llvm.org/D89451
-
Ben Dunbobbin authored
-
Ben Dunbobbin authored
Currently, a LIT test named directly (on the command line) will be run even if the name of the test file does not meet the rules to be considered a test in the LIT test configuration files for its test suite. For example, if the test does not have a recognised file extension. This makes it relatively easy to write a LIT test that won't actually be run. I did in: https://reviews.llvm.org/D82567 This patch adds an error to avoid users doing that. There is a small performance overhead for this check. A command line option has been added so that users can opt into the old behaviour. Differential Revision: https://reviews.llvm.org/D83069
-
Kirill Bobyrev authored
https://llvm.org/docs/CodingStandards.html#use-early-exits-and-continue-to-simplify-code Reviewed By: kadircet Differential Revision: https://reviews.llvm.org/D89857
-
Evgeny Leviant authored
-
David Zarzycki authored
-
Florian Hahn authored
This fixes a test failure because a LLVM pipeline test file in clang/ did not get updated in 88241ffb.
-
Simon Pilgrim authored
-
Simon Pilgrim authored
[DAG] getNode(ISD::EXTRACT_SUBVECTOR) Drop unnecessary N2C null check - we assert that this isn't null and have already used the pointer. NFCI. Fixes cppcheck + null dereference warning.
-
Nicholas Guy authored
Some instructions may be removable through processes such as IfConversion, however DefinesPredicate can not be made aware of when this should be considered. This parameter allows DefinesPredicate to distinguish these removable instructions on a per-call basis, allowing for more fine-grained control from processes like ifConversion. Renames DefinesPredicate to ClobbersPredicate, to better reflect it's purpose Differential Revision: https://reviews.llvm.org/D88494
-
Sven van Haastregt authored
Updates an optimization that relies on boolean contents being either 0 or 1 to properly check for this before triggering. The following: (X & 8) != 0 --> (X & 8) >> 3 Produces unexpected results when a boolean 'true' value is represented by negative one. Patch by Erik Hogeman. Differential Revision: https://reviews.llvm.org/D89390
-
Sven van Haastregt authored
This adds a test covering an issue in bit comparison folding. The issue will be addressed in the subsequent commit. Patch by Erik Hogeman. Differential Revision: https://reviews.llvm.org/D89390
-
Sebastian Neubauer authored
D89217 did not subtract one when accessing SubRegFromChannelTable in one place. Differential Revision: https://reviews.llvm.org/D89804
-
John Brawn authored
LLVM assumes that when it creates a call to a C library function it can use the C calling convention. On ARM the effective calling convention is determined from the target triple, however using -mfloat-abi=hard on ARM means that calls to (and definitions of) C library functions use the arm_aapcs_vfpcc calling convention which can result in a mismatch. Fix this by incorporating -mfloat-abi into the target triple, similar to how -mbig-endian and -march/-mcpu are. This only works for EABI targets and not Android or iOS, but there the float abi is fixed so instead give an error. Fixes PR45524 Differential Revision: https://reviews.llvm.org/D89573
-
Adam Balogh authored
The `Root` member of `ImmutableMapRef` was changed recently from a plain pointer to `IntrusiveRefCntPtr`. However, the `Profile` member function was not adjusted. This results in comilation error whenever the `Profile` method is used on an `ImmutableMapRef`. This patch fixes this issue and also adds unit tests for `ImmutableMapRef`. Differential Revision: https://reviews.llvm.org/D89486
-
Sjoerd Meijer authored
-
Alex Zinenko authored
Historically, custom builder specification in OpBuilder has been accepting the formal parameter list for the builder method as a raw string containing C++. While this worked well to connect the signature and the body, this became problematic when ODS needs to manipulate the parameter list, e.g. to inject OpBuilder or to trim default values when generating the definition. This has also become inconsistent with other method declarations, in particular in interface definitions. Introduce the possibility to define OpBuilder formal parameters using a TableGen dag similarly to other methods. Additionally, introduce a mechanism to declare parameters with default values using an additional class. This mechanism can be reused in other methods. The string-based builder signature declaration is deprecated and will be removed after a transition period. Reviewed By: jpienaar Differential Revision: https://reviews.llvm.org/D89470
-
Florian Hahn authored
The adjustment seems to have very little impact on optimizations. The only binary change with -O3 MultiSource/SPEC2000/SPEC2006 on X86 is in consumer-typeset and the size there actually decreases by -0.1%, with not significant changes in the stats. On its own, it is mildly positive in terms of compile-time, most likely due to LICM & DSE having to process slightly less instructions. It should also be unlikely that DSE/LICM make much new code dead. http://llvm-compile-time-tracker.com/compare.php?from=df63eedef64d715ce1f31843f7de9c11fe1e597f&to=e3bdfcf94a9eeae6e006d010464f0c1b3550577d&stat=instructions With DSE & MemorySSA, it gives some nice compile-time improvements, due to the fact that DSE can re-use the PDT from ADCE, if it does not make any changes: http://llvm-compile-time-tracker.com/compare.php?from=15fdd6cd7c24c745df1bb419e72ff66fd138aa7e&to=481f494515fc89cb7caea8d862e40f2c910dc994&stat=instructions Reviewed By: xbolva00 Differential Revision: https://reviews.llvm.org/D87322
-
Sjoerd Meijer authored
-
Jay Foad authored
-
Jonas Paulsson authored
assembly operands." Earlyclobbers are now excepted from this change (original commit: c78da037). Review: Ulrich Weigand, Nick Desaulniers Differential Revision: https://reviews.llvm.org/D87279
-
Luís Marques authored
The RISC-V implementations of the `__mulsi3`, `__muldi3` builtins were conditionally compiling the actual function definitions depending on whether the M extension was present or not. This caused Compiler-RT testing failures for RISC-V targets with the M extension, as when these sources were included the `librt_has_mul*i3` features were still being defined. These `librt_has_*` definitions are used to conditionally run the respective tests. Since the actual functions were not being compiled-in, the generic test for `__muldi3` would fail. This patch makes these implementations follow the normal Compiler-RT convention of always including the definition, and conditionally running the respective tests by using the lit conditional `REQUIRES: librt_has_*`. Since the `mulsi3_test.c` wasn't actually RISC-V-specific, this patch also moves it out of the `riscv` directory. It now only depends on `librt_has_mulsi3` to run. Differential Revision: https://reviews.llvm.org/D86457
-
Vitaly Buka authored
-
Wang, Pengfei authored
-
Alex Zinenko authored
Docstrings for `__str__` method in many classes was recycling the constant string defined for `Type`, without being types themselves. Use proper docstrings instead. Since they are succint, use string literals instead of top-level constants to avoid further mistakes. Differential Revision: https://reviews.llvm.org/D89780
-
Alex Zinenko authored
The pybind class typedef for concrete attribute classes was erroneously deriving all of them from PyAttribute instead of the provided base class. This has not been triggering any error because only one level of the hierarchy is currently exposed. Differential Revision: https://reviews.llvm.org/D89779
-
Alex Zinenko authored
Values are ubiquitous in the IR, in particular block argument and operation results are Values. Define Python classes for BlockArgument, OpResult and their common ancestor Value. Define pseudo-container classes for lists of block arguments and operation results, and use these containers to access the corresponding values in blocks and operations. Differential Revision: https://reviews.llvm.org/D89778
-
Craig Topper authored
Addresses post-commit feedback from D89837.
-
David Sherwood authored
We were previously relying upon the TypeSize comparison operators to obtain the maximum size of two types, however use of such operators is being deprecated in favour of making the caller aware that it could be dealing with scalable vector types. I have changed the code to assert that the two types have the same scalable property and thus we can simply take the maximum of the known minimum sizes instead. Differential Revision: https://reviews.llvm.org/D88563
-
David Sherwood authored
The EXPECT_XY comparison functions all rely upon using the existing TypeSize comparison operators, which we are deprecating in favour of isKnownXY. I've changed all such cases to compare either the known minimum size or the fixed size. Differential Revision: https://reviews.llvm.org/D89531
-
Martin Storsjö authored
Split the resolution check to a separate test, which is marked as unsupported on windows. On windows (both with MS STL and libstdc++), the file time has 100 ns resolution; the standard doesn't mandate a specific resolution. Differential Revision: https://reviews.llvm.org/D89535
-
Martin Storsjö authored
Revert "[InstCombine] Add or((icmp ult/ule (A + C1), C3), (icmp ult/ule (A + C2), C3)) uniform vector support" Also revert "[InstCombine] foldOrOfICmps - use m_Specific instead of explicit comparisons. NFCI." to make the primarily intended revert work. This reverts commits ce135497 and e372a5f8. This commit caused failed asserts e.g. like this: $ cat repro.cpp bool a(char b) { return b >= '0' && b <= '9' || (b | 32) >= 'a' && (b | 32) <= 'z'; $ clang++ -target x86_64-linux-gnu -c -O2 repro.cpp clang++: ../include/llvm/ADT/APInt.h:1151: bool llvm::APInt::operator==(const llvm::APInt&) const: Assertion `BitWidth == RHS.BitWidth && "Comparison requires equal bit widths"' failed.
-
Esme-Yi authored
-