- Feb 16, 2020
-
-
Sanjay Patel authored
The unseen logic diff occurs because MayFoldLoad() is defined like this: static bool MayFoldLoad(SDValue Op) { return Op.hasOneUse() && ISD::isNormalLoad(Op.getNode()); } The test diffs here all seem ok to me on screen/paper, but it's hard to know if that will lead to universally better perf for all targets. For example, if a target implements broadcast from mem as multiple uops, we would have to weigh the potential reduction of instructions and register pressure vs. possible increase in number of uops. I don't know if we can make a truly informed decision on this at compile-time. The motivating case that I'm looking at in PR42024: https://bugs.llvm.org/show_bug.cgi?id=42024 ...resembles the diff in extract-concat.ll, but we're not going to change the larger example there without at least 1 other fix. Differential Revision: https://reviews.llvm.org/D74088 -
Nikita Popov authored
Rather than mixing creation of new instructions and in-place modification here, create a new log2 intrinsic. This should be NFC apart from worklist order changes.
-
Nikita Popov authored
These show incorrect duplication of instructions.
-
Mark de Wever authored
Converting a pointer to an integer whose result cannot represented in the integer type is undefined behavior is C and prohibited in C++. C++ already has a diagnostic when casting. This adds a diagnostic for C. Since this diagnostic uses the range of the conversion it also modifies int-to-pointer-cast diagnostic to use a range. Fixes PR8718: No warning on casting between pointer and non-pointer-sized int Differential Revision: https://reviews.llvm.org/D72231
-
Nikita Popov authored
Try to fix -Wnon-virtual-dtor warnings that cause build failure on clang-pcc64le-rhel.
-
Nikita Popov authored
Related llvm-dev thread: http://lists.llvm.org/pipermail/llvm-dev/2020-February/138951.html This patch moves the IRBuilder from templating over the constant folder and inserter towards making both of these virtual. There are a couple of motivations for this: 1. It's not possible to share code between use-sites that use different IRBuilder folders/inserters (short of templating the code and moving it into headers). 2. Methods currently defined on IRBuilderBase (which is not templated) do not use the custom inserter, resulting in subtle bugs (e.g. incorrect InstCombine worklist management). It would be possible to move those into the templated IRBuilder, but... 3. The vast majority of the IRBuilder implementation has to live in the header, because it depends on the template arguments. 4. We have many unnecessary dependencies on IRBuilder.h, because it is not easy to forward-declare. (Significant parts of the backend depend on it via TargetLowering.h, for example.) This patch addresses the issue by making the following changes: * IRBuilderDefaultInserter::InsertHelper becomes virtual. IRBuilderBase accepts a reference to it. * IRBuilderFolder is introduced as a virtual base class. It is implemented by ConstantFolder (default), NoFolder and TargetFolder. IRBuilderBase has a reference to this as well. * All the logic is moved from IRBuilder to IRBuilderBase. This means that methods can in the future replace their IRBuilder<> & uses (or other specific IRBuilder types) with IRBuilderBase & and thus be usable with different IRBuilders. * The IRBuilder class is now a thin wrapper around IRBuilderBase. Essentially it only stores the folder and inserter and takes care of constructing the base builder. What this patch doesn't do, but should be simple followups after this change: * Fixing use of the inserter for creation methods originally defined on IRBuilderBase. * Replacing IRBuilder<> uses in arguments with IRBuilderBase, where useful. * Moving code from the IRBuilder header to the source file. From the user perspective, these changes should be mostly transparent: The only thing that consumers using a custom inserted may need to do is inherit from IRBuilderDefaultInserter publicly and mark their InsertHelper as public. Differential Revision: https://reviews.llvm.org/D73835
-
Georgii Rymar authored
The current code has following issues: 1) It has a duplicated logic part. 2) This logic relies on unwrapOrError calls, but if we want to convert them to warnings, we will need to change all of them what is hard to do because of the duplication. In this patch I've created a new method that returns Expected<> what allows now to catch all errors in a single place and remove the code duplication. Note: this change is itself a refactor NFC. It does not change the current logic anyhow. It prepares the code for the follow-up(s). Differential revision: https://reviews.llvm.org/D74545
-
riverriddle@google.com authored
Summary: This matches the similar feature on operation definitions. Reviewers: jpienaar, antiagainst Reviewed By: jpienaar, antiagainst Subscribers: mehdi_amini, burmako, shauheen, antiagainst, nicolasvasilache, arpith-jacob, mgester, lucyrfox, liufengdb, Joonsoo, llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D74438
-
River Riddle authored
Summary: getEncodedSourceLocation can be very costly to compute, especially if the input line becomes very long. This revision inlines some of the verification of a few `getChecked` methods to avoid the materialization of an encoded source location. Differential Revision: https://reviews.llvm.org/D74587
-
Johannes Doerfert authored
Some buildbots signaled a problem in this method when the llvm::function_ref was copied and reused after 1228d42d. To eliminate the problem we avoid copying the llvm::function_ref and instead we pass it as a const reference.
-
Johannes Doerfert authored
-
Dimitry Andric authored
After b18cb9c4, clang would sometimes prefer the host C++ includes (e.g. in /usr/include/c++/v1) before those specified via --sysroot. While this behavior may be desirable on Linux, it is not so on FreeBSD, where we make extensive use of --sysroot during the build of the base system. In that case, clang must *not* search outside the sysroot, except for its own internal headers. Add an override addLibCxxIncludePaths() to restore the old behavior, which is to simply append /usr/include/c++/v1 to the specified sysroot. While here, apply clang-format to the FreeBSD specific toolchain files. Fixes PR44923.
-
Greg Clayton authored
[NFC] Move ValidTextRanges out of DwarfTransformer and into GsymCreator and unify address is not in GSYM errors so all strings match.
-
Johannes Doerfert authored
-
Eric Fiselier authored
libc++ is careful to not fracture overload sets. When one overload is visible to a user, all of them should be. Anything less causes subtle bugs and ODR violations. Previously, in order to support ::abs and ::div being supplied by both <cmath> and <cstdlib> we had to do awful things that make <math.h> and <stdlib.h> have header cycles and be non-modular. This really breaks with modules. Specifically the problem was that in C++ ::abs introduces overloads for floating point numbers, these overloads forward to ::fabs, which are defined in math.h. Therefore ::abs needed to be in math.h too. But this required stdlib.h to include math.h and math.h to include stdlib.h. To avoid these problems the definitions have been moved to stddef.h (which math includes), and the floating point overloads of ::abs have been changed to call __builtin_fabs, which both Clang and GCC support.
-
Eric Fiselier authored
graph.
-
Simon Pilgrim authored
-
Simon Pilgrim authored
-
Simon Pilgrim authored
Split off shuffle combine tests that use AVX512F intrinsics, so we can test it with/without AVX512BW support.
-
Fangrui Song authored
-
Florian Hahn authored
Currently we always return true, when markConstantRange is used on an object already containing a constant range. If NewR is equal to the existing constant range however, nothing changes and we should return false. I also went ahead and added a clarifying comment and improved the assertion. Reviewers: efriedma, davide, nikic Reviewed By: efriedma Differential Revision: https://reviews.llvm.org/D73240
-
Craig Topper authored
-
Craig Topper authored
-
Simon Pilgrim authored
Refactors matchShuffleAsBitRotate to allow use by both lowerShuffleAsBitRotate and matchUnaryPermuteShuffle.
-
Florian Hahn authored
This patch prepares ValueLatticeElement to be used by SCCP, by: * making the mark* functions public * make the mark* functions return a bool indicating if the value has changed. Reviewers: efriedma, davide, mssimpso, nikic Reviewed By: nikic Differential Revision: https://reviews.llvm.org/D60581
-
Simon Pilgrim authored
-
Craig Topper authored
This allows it to work properly with masked inc/dec for avx512. Those would have a vselect as the root node so didn't get a chance to call combineIncDecVector. This also simplifies the logic because we don't have to manage the topological ordering.
-
Florian Hahn authored
This includes a fix for cases where things get marked as overdefined in ResolvedUndefsIn, but we later discover a constant. To avoid crashing, we consistently bail out on overdefined values in the visitors. This is similar to the previous behavior with forcedconstant. This reverts the revert commit 02b72f56.
-
Fangrui Song authored
So far, all non-COFF-related Emit* functions have been de-capitalized.
-
Simon Pilgrim authored
Reported by @lbenes (Luke Benes)
-
- Feb 15, 2020
-
-
Georgii Rymar authored
I was reported that with commit: https://github.com/llvm/llvm-project/commit/d3963051c490 gcc-9.2 is giving the warning below. This should help (I have no gcc 9.2 to test). [ 57%] Building CXX object tools/obj2yaml/CMakeFiles/obj2yaml.dir/elf2yaml.cpp.o /llvm/tools/obj2yaml/elf2yaml.cpp: In instantiation of ‘llvm::Expected<llvm::ELFYAML::Object*> {anonymous}::ELFDumper<ELFT>::dump() [with ELFT = llvm::object::ELFType<llvm::support::little, false>]’: /llvm/tools/obj2yaml/elf2yaml.cpp:1218:31: required from ‘llvm::Error elf2yaml(llvm::raw_ostream&, const llvm::object::ELFFile<ELFT>&) [with ELFT = llvm::object::ELFType<llvm::support::little, false>]’ /llvm/tools/obj2yaml/elf2yaml.cpp:1231:47: required from here /llvm/tools/obj2yaml/elf2yaml.cpp:207:41: warning: comparison of integer expressions of different signedness: ‘llvm::support::detail::packed_endian_specific_integral<unsigned int, llvm::support::little, 1>::value_type’ {aka ‘unsigned int’} and ‘int’ [-Wsign-compare] 207 | if (!SymTab || SymTabShndx->sh_link != SymTab - Sections.begin()) /llvm/tools/obj2yaml/elf2yaml.cpp: In instantiation of ‘llvm::Expected<llvm::ELFYAML::Object*> {anonymous}::ELFDumper<ELFT>::dump() [with ELFT = llvm::object::ELFType<llvm::support::big, false>]’: ...
-
Alexandre Ganea authored
-
Simon Pilgrim authored
-
Simon Pilgrim authored
As noted on D74621, the bswap intrinsic has a self imposed limitation that the type's bitwidth must be divisible by 16, but there's no reason that APInt::byteSwap must have the same limitation, given that it can already handle any byte width.
-
Pavel Iliin authored
This commit fixes the broken tests after commit b6a9fe20 on the expensive check builder: http://lab.llvm.org:8011/builders/llvm-clang-x86_64-expensive-checks-ubuntu/builds/2884
-
Simon Pilgrim authored
We can just byteSwap the entire uint64_t VAL and then shift down into place like we do for the multi-word case.
-
Simon Pilgrim authored
rGf0181cc7 added specific tests up to i64, this adds a general loop to test some basic byte moves for larger APInts.
-
David Green authored
This hopefully fixes up the expensive checks bot.
-
Nico Weber authored
-
Alexey Lapshin authored
Summary: This patch is extracted from D74308. It patches all usages of WithColor::error() and WithColor::warning in DebugInfoDWARF library. Depends on D74481 Reviewers: jhenderson, dblaikie, probinson, aprantl, JDevlieghere Reviewed By: JDevlieghere Subscribers: hiraditya, llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D74635
-