- Dec 29, 2020
-
-
Fangrui Song authored
glibc/sysdeps/powerpc/powerpc64 has .machine {altivec,power4,power5,power6,power7,power8} (.machine power9 is planned in sysdeps/powerpc/powerpc64/power9/strcmp.S). The diagnostic is not useful anyway so just delete it. -
Dmitry Preobrazhensky authored
Restored tests from 7898803c
-
Akira Hatanaka authored
function when the receiver is nil Callee-destroyed arguments to a method have to be destroyed in the caller function when the receiver is nil as the method doesn't get executed. This fixes PR48207. rdar://71808391 Differential Revision: https://reviews.llvm.org/D93273
-
Fraser Cormack authored
-
Pavel Labath authored
Merge llgs and debugserver flavours
-
Arthur O'Dwyer authored
"LLVM Buildbot on libcxx-libcxxabi-x86_64-linux-debian" is not happy with default-initializing the `double` member of `A` in a constexpr function. At least I'm pretty sure that's what it's complaining about.
-
Arthur Eubanks authored
And add them to the pipeline via AMDGPUTargetMachine::registerPassBuilderCallbacks(), which mirrors AMDGPUTargetMachine::adjustPassManager(). These passes can't be unconditionally added to PassRegistry.def since they are only present when the AMDGPU backend is enabled. And there are no target-specific headers in llvm/include, so parsing these pass names must occur somewhere in the AMDGPU directory. I decided the best place was inside the TargetMachine, since the PassBuilder invokes TargetMachine::registerPassBuilderCallbacks() anyway. If we come up with a cleaner solution for target-specific passes in the future that's fine, but there aren't too many target-specific IR passes living in target-specific directories so it shouldn't be too bad to change in the future. Reviewed By: ychen, arsenm Differential Revision: https://reviews.llvm.org/D93863
-
Arthur O'Dwyer authored
This completes the implementation of P1065 "constexpr INVOKE": http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1065r2.html This doesn't yet complete the implementation of P1032 "Misc constexpr bits," http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p1032r1.html but it does complete all of the <functional> bits, which means that we can now set `__cpp_lib_constexpr_functional` for C++20. This could use more constexpr tests for `std::reference_wrapper<T>`, but the existing tests are extremely non-constexpr-friendly and so I don't want to get into that rabbit-hole today. Differential Revision: https://reviews.llvm.org/D93815
-
Arthur O'Dwyer authored
We don't need to use global variables here; we can store the "State" of this machinery on the stack, so that it's constexpr-friendly.
-
Philip Reames authored
This reverts commit 4ffcd4fe thus restoring e4df6a40. The only change from the original patch is to add "llvm::" before the call to empty(iterator_range). This is a speculative fix for the ambiguity reported on some builders.
-
Arthur Eubanks authored
This reverts commit e4df6a40. Breaks Windows bots, e.g. http://45.33.8.238/win/30472/step_4.txt and http://lab.llvm.org:8011/#/builders/83/builds/2078/steps/5/logs/stdio
-
Philip Reames authored
This patch is a major step towards supporting multiple exit loops in the vectorizer. This patch on it's own extends the loop forms allowed in two ways: single exit loops which are not bottom tested multiple exit loops w/ a single exit block reached from all exits and no phis in the exit block (because of LCSSA this implies no values defined in the loop used later) The restrictions on multiple exit loop structures will be removed in follow up patches; disallowing cases for now makes the code changes smaller and more obvious. As before, we can only handle loops with entirely analyzable exits. Removing that restriction is much harder, and is not part of currently planned efforts. The basic idea here is that we can force the last iteration to run in the scalar epilogue loop (if we have one). From the definition of SCEV's backedge taken count, we know that no earlier iteration can exit the vector body. As such, we can leave the decision on which exit to be taken to the scalar code and generate a bottom tested vector loop which runs all but the last iteration. The existing code already had the notion of requiring one iteration in the scalar epilogue, this patch is mainly about generalizing that support slightly, making sure we don't try to use this mechanism when tail folding, and updating the code to reflect the difference between a single exit block and a unique exit block (very mechanical). Differential Revision: https://reviews.llvm.org/D93317 -
Nikita Popov authored
Confusingly, BinaryOperator is not an Operator, OverflowingBinaryOperator is... We were implicitly assuming that the multiply is an Instruction here. This fixes the assertion failure reported in https://reviews.llvm.org/D92726#2472827.
-
Dmitry Preobrazhensky authored
The following large tests have been split into smaller parts by instruction formats: gfx7_asm_all.s gfx8_asm_all.s gfx9_asm_all.s gfx10_asm_all.s This change results in noticeable lit testing speedup. For example, on a debug Windows build, split asm tests are run 3.5 times faster. -
Roman Lebedev authored
Temporairly revert until a consensus on post-commit comments is achieved. This reverts commit a485a59d.
-
Paul C. Anagnostopoulos authored
I forgot to account for unresolved elements of the list. Differential Revision: https://reviews.llvm.org/D93814
-
Roman Lebedev authored
As it is being reported (in post-commit review) in https://reviews.llvm.org/D93857 this fold (as i expected, but failed to come up with test coverage despite trying) has issues with constant expressions. Since we only care about true constants, which constantexprs are not, don't perform such hoisting for constant expressions.
-
Gabriel Hjort Åkerlund authored
The MIRParser expects unnamed stack entries to have empty names (''). In case of unnamed alloca instructions, the MIRPrinter would output '<unnamed alloca>', which caused the MIRParser to reject the generated code. Reviewed By: arsenm Differential Revision: https://reviews.llvm.org/D93685 -
Tim Keith authored
When an abstract interface is defined, add the ABSTRACT attribute to subprogram symbols that define the interface body. Make use of that when writing .mod files to include "abstract" on the interface statement. Also, fix a problem with the order of symbols in a .mod file. Sometimes a name is mentioned before the "real" declaration, e.g. in an access statement. We want the order to be based on the real definitions. In these cases we replace the symbol name with an identical name with a different source location. Then by sorting based on the source location we get symbols in the right order. Differential Revision: https://reviews.llvm.org/D93572
-
Gabriel Hjort Åkerlund authored
Change-Id: Ie637dc7761144e5552b05a9c286f1e736579823d Reviewed By: arsenm Differential Revision: https://reviews.llvm.org/D91520
-
- Dec 28, 2020
-
-
Nemanja Ivanovic authored
-
Nathan James authored
-
Adam Czachorowski authored
Differential Revision: https://reviews.llvm.org/D93220
-
alex-t authored
Basic block containing "if" not necessarily dominates block that is the "false" target for the if. That "false" target block may have another predecessor besides the "if" block. IR value corresponding to the Exec mask is generated by the si_if intrinsic and then used by the end_cf intrinsic. In this case IR verifier complains that 'Def does not dominate all uses'. This change split the edge between the "if" block and "false" target block to make it dominated by the "if" block. Reviewed By: arsenm Differential Revision: https://reviews.llvm.org/D91435
-
Zakk Chen authored
Define those intrinsics and lower to V instructions. Use update_llc_test_checks.py for viota.m tests to check earlyclobber is applied correctly. mask viota.m tests uses the same argument as input and mask for avoid dependency of D93364. We work with @rogfer01 from BSC to come out this patch. Reviewed By: HsiangKai Differential Revision: https://reviews.llvm.org/D93823
-
Dmitry Preobrazhensky authored
See bug 48596 (https://bugs.llvm.org/show_bug.cgi?id=48596) Reviewers: rampitec Differential Revision: https://reviews.llvm.org/D93757
-
Dmitry Preobrazhensky authored
See bug 48515 (https://bugs.llvm.org/show_bug.cgi?id=48515) Reviewers: rampitec Differential Revision: https://reviews.llvm.org/D93756
-
AnZhong Huang authored
std::decay_t used by llvm/utils/benchmark/include/benchmark/benchmark.h is a c++14 feature, but the CMakelist uses c++11, it's the root-cause of build error. There are two options to fix the error. 1) change the CMakelist to support c++14. 2) change std::decay_t to std::decay, it's what the patch done. This bug can only be reproduced by CMake 3.15, we didn't observer the bug with CMake 3.16. But based on the code's logic, it's an obvious bug of LLVM. The upstream code is fine, the problem was introduced by rG1bd6123b. Reviewed By: lebedev.ri Differential Revision: https://reviews.llvm.org/D93794
-
Fraser Cormack authored
This patch extends the pattern-matching capability of vector-splatted constants. When illegally-typed constants are legalized they are canonically sign-extended to XLenVT. This preserves the sign and allows us to match simm5. If they were zero-extended for whatever reason we'd lose that ability: e.g. `(i8 -1) -> (XLenVT 255)` would not be matched under the current logic. To address this we first manually sign-extend the splatted constant from the vector element type to int64_t. This preserves the semantics while removing any implicitly-truncated bits. The corresponding logic for uimm5 was not updated, the rationale being that neither sign- nor zero-extending a legal uimm5 immediate should change that (unless we expect actual "garbage" upper bits). Reviewed By: craig.topper Differential Revision: https://reviews.llvm.org/D93837
-
Fangrui Song authored
The file does not call backtrace/backtrace_symbols.
-
Fangrui Song authored
... where `ldd --version` has empty stdout and non-empty stderr.
-
Fangrui Song authored
This simplifies the condition and makes it work on musl.
-
Fangrui Song authored
Declare `extern ElfW(Dyn) _DYNAMIC[];` so that it will trivially work on musl.
-
Chen Zheng authored
-
Yevgeny Rouban authored
The function FoldSingleEntryPHINodes() is changed to return if it has changed IR or not. This return value is used by RS4GC to set the MadeChange flag respectively. Reviewed By: reames Differential Revision: https://reviews.llvm.org/D93810
-
Juneyoung Lee authored
Currently undef is used as a don’t-care vector when constructing a vector using a series of insertelement. However, this is problematic because undef isn’t undefined enough. Especially, a sequence of insertelement can be optimized to shufflevector, but using undef as its placeholder makes shufflevector a poison-blocking instruction because undef cannot be optimized to poison. This makes a few straightforward optimizations incorrect, such as: ``` ; https://bugs.llvm.org/show_bug.cgi?id=44185 define <4 x float> @insert_not_undef_shuffle_translate_commute(float %x, <4 x float> %y, <4 x float> %q) { %xv = insertelement <4 x float> %q, float %x, i32 2 %r = shufflevector <4 x float> %y, <4 x float> %xv, <4 x i32> { 0, 6, 2, undef } ret <4 x float> %r ; %r[3] is undef } => define <4 x float> @insert_not_undef_shuffle_translate_commute(float %x, <4 x float> %y, <4 x float> %q) { %r = insertelement <4 x float> %y, float %x, i32 1 ret <4 x float> %r ; %r[3] = %y[3], incorrect if %y[3] = poison } Transformation doesn't verify! ERROR: Target is more poisonous than source ``` I’d like to suggest 1. Using poison as insertelement’s placeholder value (IRBuilder::CreateVectorSplat should be patched too) 2. Updating shufflevector’s semantics to return poison element if mask is undef Note that poison is currently lowered into UNDEF in SelDag, so codegen part is okay. m_Undef() matches PoisonValue as well, so existing optimizations will still fire. The only concern is hidden miscompilations that will go incorrect when poison constant is given. A conservative way is copying all tests having `insertelement undef` & replacing it with `insertelement poison` & run Alive2 on it, but it will create many tests and people won’t like it. :( Instead, I’ll simply locally maintain the tests and run Alive2. If there is any bug found, I’ll report it. Relevant links: https://bugs.llvm.org/show_bug.cgi?id=43958 , http://lists.llvm.org/pipermail/llvm-dev/2019-November/137242.html Reviewed By: nikic Differential Revision: https://reviews.llvm.org/D93586
-
Juneyoung Lee authored
This patch updates isImpliedCondition/isKnownNonZero to look into select form of and/or as well. See llvm.org/pr48353 and D93065 for more context Reviewed By: nikic Differential Revision: https://reviews.llvm.org/D93845
-
Florian Hahn authored
This patch updates GVN to correctly return the modified status, if PRE is performed on indices. It fixes a crash when building the test-suite with EXPENSIVE_CHECKS and LTO.
-
Juneyoung Lee authored
-
Juneyoung Lee authored
EarlyCSE's handleBranchCondition says: ``` // If the condition is AND operation, we can propagate its operands into the // true branch. If it is OR operation, we can propagate them into the false // branch. ``` This holds for the corresponding select patterns as well. This is a part of an ongoing work for disabling buggy select->and/or transformations. See llvm.org/pr48353 and D93065 for more context Proof: and: https://alive2.llvm.org/ce/z/MQWodU or: https://alive2.llvm.org/ce/z/9GLbB_ Reviewed By: nikic Differential Revision: https://reviews.llvm.org/D93842
-