Kazu Hirata [Fri, 12 Nov 2021 06:28:55 +0000 (22:28 -0800)]
[CodeGen, Target] Use MachineRegisterInfo::use_operands (NFC)
David Blaikie [Fri, 12 Nov 2021 05:47:30 +0000 (21:47 -0800)]
DebugInfo/Printing: Improve name of policy for including types for template arguments
Feedback from Richard Smith that the policy should be named closer to
the context its used in.
Serge Pavlov [Wed, 3 Nov 2021 12:34:52 +0000 (19:34 +0700)]
[X86] Preserve FPSW when popping x87 stack
When compiler converts x87 operations to stack model, it may insert
instructions that pop top stack element. To do it the compiler inserts
instruction FSTP right after the instruction that calculates value on
the stack. It can break the code that uses FPSW set by the last
instruction. For example, an instruction FXAM is usually followed by
FNSTSW, but FSTP is inserted after FXAM. As FSTP leaves condition code
in FPSW undefined, the compiler produces incorrect code.
With this change FSTP in inserted after the FPSW consumer if the last
instruction sets FPSW.
Differential Revision: https://reviews.llvm.org/D113335
Kazu Hirata [Fri, 12 Nov 2021 04:29:48 +0000 (20:29 -0800)]
Revert "[lld-macho] Fix symbol relocs handling for compact unwind's functionAddress"
This reverts commit
e941fe506114569410ec8c77e600cddd5a77559d.
The commit in question causes:
lld/MachO/InputFiles.cpp:916:13: error: use of undeclared identifier
'it'
Jez Ng [Fri, 12 Nov 2021 03:53:35 +0000 (22:53 -0500)]
[lld-macho] Fix symbol relocs handling for compact unwind's functionAddress
Clang seems to emit all functionAddress relocs as section relocs, but
`ld -r` can turn those relocs into symbol ones. It turns out that we
weren't handling that case correctly when the symbol was a weak def
whose definition did not prevail.
Reviewed By: #lld-macho, oontvoo
Differential Revision: https://reviews.llvm.org/D113702
Petr Hosek [Fri, 12 Nov 2021 03:24:49 +0000 (19:24 -0800)]
[Fuchsia][CMake] Don't set libcxxabi and libunwind variables on Windows
We don't build libcxxabi and libunwind for Windows so don't set the
corresponding variables to avoid configuration errors.
Differential Revision: https://reviews.llvm.org/D113729
Mogball [Fri, 12 Nov 2021 03:12:36 +0000 (03:12 +0000)]
[mlir][ods] Fix DenseSet ambiguous reference
Luís Ferreira [Thu, 11 Nov 2021 21:39:50 +0000 (13:39 -0800)]
[DebugInfo] run clang-format on some unformatted files
This trivial patch runs clang-format on some unformatted files before
doing logic changes and prevent hard to review diffs.
Differential Revision: https://reviews.llvm.org/D113572
Arthur Eubanks [Fri, 12 Nov 2021 02:53:34 +0000 (18:53 -0800)]
[llvm-reduce] Fix build after D113537
Forgot to amend D113537 with these changes before committing.
Arthur Eubanks [Fri, 12 Nov 2021 02:45:59 +0000 (18:45 -0800)]
[llvm-reduce] Count chunks by running a preliminary reduction
Having a separate counting method runs the risk of a mismatch between
the actual reduction method and the counting method.
Instead, create an Oracle that always returns true for shouldKeep(), run
the reduction, and count how many times shouldKeep() was called. The
module should not be modified if shouldKeep() always returns true.
Reviewed By: Meinersbur
Differential Revision: https://reviews.llvm.org/D113537
Arthur Eubanks [Wed, 10 Nov 2021 01:47:43 +0000 (17:47 -0800)]
[llvm-reduce] Skip replacing metadata and callee operands
Metadata operands tend to require special conditions, especially on dbg
intrinsics. We also don't have a zero value for metadata.
Replacing callee operands is a little weird, since calling undef/null
doesn't make sense. It also causes tons of invalid reductions when
reducing calls to intrinsics since only arguments to intrinsics can be
of the metadata type.
Reviewed By: Meinersbur
Differential Revision: https://reviews.llvm.org/D113532
Arthur Eubanks [Wed, 10 Nov 2021 20:51:51 +0000 (12:51 -0800)]
[gn build] Fix Android compiler-rt targets
If a sysroot was specified, it would take precedence over the Android
NDK sysroot since it would appear after in the command line.
Also only build runtimes for enabled target arches. Many places have
copied this around so create and use supported_android_toolchains.
Reviewed By: pcc
Differential Revision: https://reviews.llvm.org/D113606
Mehdi Amini [Fri, 12 Nov 2021 02:30:53 +0000 (02:30 +0000)]
Revert "[mlir] Allow out-of-tree python building from installed MLIR."
This reverts commit
c7be8b75399c727ec9e1ddc3f81510f284c65155.
Build is broken (multiple buildbots)
LLVM GN Syncbot [Fri, 12 Nov 2021 02:22:04 +0000 (02:22 +0000)]
[gn build] Port
c15f930e9656
Michael Kruse [Fri, 12 Nov 2021 00:23:27 +0000 (18:23 -0600)]
[llvm-reduce] Introduce operands-skip pass.
Add a new "operands-skip" pass whose goal is to remove instructions in the middle of dependency chains. For instance:
```
%baseptr = alloca i32
%arrayidx = getelementptr i32, i32* %baseptr, i32 %idxprom
store i32 42, i32* %arrayidx
```
might be reducible to
```
%baseptr = alloca i32
%arrayidx = getelementptr ... ; now dead, together with the computation of %idxprom
store i32 42, i32* %baseptr
```
Other passes would either replace `%baseptr` with undef (operands, instructions) or move it to become a function argument (operands-to-args), both of which might fail the interestingness check.
In principle the implementation allows operand replacement with any value or instruction in the function that passes the filter constraints (same type, dominance, "more reduced"), but is limited in this patch to values that are directly or indirectly used to compute the current operand value, motivated by the example above. Additionally, function arguments are added to the candidate set which helps reducing the number of relevant arguments mitigating a concern of too many arguments mentioned in https://reviews.llvm.org/D110274#3025013.
Possible future extensions:
* Instead of requiring the same type, bitcast/trunc/zext could be automatically inserted for some more flexibility.
* If undef is added to the candidate set, "operands-skip"is able to produce any reduction that "operands" can do. Additional candidates might be zero and one, where the "reductive power" classification can prefer one over the other. If undefined behaviour should not be introduced, undef can be removed from the candidate set.
Recommit after resolving conflict with D112651 and reusing
shouldReduceOperand from D113532.
Reviewed By: aeubanks
Differential Revision: https://reviews.llvm.org/D111818
Stella Laurenzo [Fri, 12 Nov 2021 01:31:39 +0000 (17:31 -0800)]
[mlir] Allow out-of-tree python building from installed MLIR.
* Depends on D111504, which provides the boilerplate for building aggregate shared libraries from installed MLIR.
* Adds a full-fledged Python example dialect and tests to the Standalone example (need to do a bit of tweaking in the top level CMake and lit tests to adapt better to if not building with Python enabled).
* Rips out remnants of custom extension building in favor of `pybind11_add_module` which does the right thing.
* Makes python and extension sources installable (outputs to src/python/${name} in the install tree): Both Python and C++ extension sources get installed as downstreams need all of this in order to build a derived version of the API.
* Exports sources targets (with our properties that make everything work) by converting them to INTERFACE libraries (which have export support), as recommended for the forseeable future by CMake devs. Renames custom properties to start with lower-case letter, as also recommended/required (groan).
* Adds a ROOT_DIR argument to `declare_mlir_python_extension` since now all C++ sources for an extension must be under the same directory (to line up at install time).
* Need to validate against a downstream or two and adjust, prior to submitting.
Downstreams will need to adapt by:
* Remove absolute paths from any SOURCES for `declare_mlir_python_extension` (I believe all downstreams are just using `${CMAKE_CURRENT_SOURCE_DIR}` here, which can just be ommitted). May need to set `ROOT_DIR` if not relative to the current source directory.
* To allow further downstreams to install/build, will need to make sure that all C++ extension headers are also listed under SOURCES for `declare_mlir_python_extension`.
Reviewed By: stephenneuendorffer, mikeurbach
Differential Revision: https://reviews.llvm.org/D111513
Mogball [Fri, 12 Nov 2021 01:39:15 +0000 (01:39 +0000)]
[mlir][ods] Escape attribute summaries
Phoebe Wang [Fri, 12 Nov 2021 00:50:07 +0000 (08:50 +0800)]
[X86][FP16] Avoid to generate VZEXT_MOVL with i16
This fixes the crash due to lacking VZEXT_MOVL support with i16.
Reviewed By: LuoYuanke, RKSimon
Differential Revision: https://reviews.llvm.org/D113661
Michael Kruse [Fri, 12 Nov 2021 01:25:39 +0000 (19:25 -0600)]
Revert "[llvm-reduce] Introduce operands-skip pass."
This reverts commit
fa4210a9a0729eba04593b7df7b701e2b243de39.
It causes compile failures, presumably because conflicting with another
patch landed after I checked locally.
Matthias Springer [Fri, 12 Nov 2021 01:00:43 +0000 (10:00 +0900)]
[mlir][linalg][bufferize] Decouple ComprehensiveBufferize from Linalg
The remaining dialects will be decoupled from ComprehensiveBufferize in separate commits.
Differential Revision: https://reviews.llvm.org/D113459
Mogball [Thu, 11 Nov 2021 22:08:54 +0000 (22:08 +0000)]
[mlir][ods] Unique attribute, successor, region constraints
With `-Os` turned on, results in 2-5% binary size reduction
(depends on the original binary). Without it, the binary size
is essentially unchanged.
Depends on D113128
Differential Revision: https://reviews.llvm.org/D113331
Michael Kruse [Fri, 12 Nov 2021 00:23:27 +0000 (18:23 -0600)]
[llvm-reduce] Introduce operands-skip pass.
Add a new "operands-skip" pass whose goal is to remove instructions in the middle of dependency chains. For instance:
```
%baseptr = alloca i32
%arrayidx = getelementptr i32, i32* %baseptr, i32 %idxprom
store i32 42, i32* %arrayidx
```
might be reducible to
```
%baseptr = alloca i32
%arrayidx = getelementptr ... ; now dead, together with the computation of %idxprom
store i32 42, i32* %baseptr
```
Other passes would either replace `%baseptr` with undef (operands, instructions) or move it to become a function argument (operands-to-args), both of which might fail the interestingness check.
In principle the implementation allows operand replacement with any value or instruction in the function that passes the filter constraints (same type, dominance, "more reduced"), but is limited in this patch to values that are directly or indirectly used to compute the current operand value, motivated by the example above. Additionally, function arguments are added to the candidate set which helps reducing the number of relevant arguments mitigating a concern of too many arguments mentioned in https://reviews.llvm.org/D110274#3025013.
Possible future extensions:
* Instead of requiring the same type, bitcast/trunc/zext could be automatically inserted for some more flexibility.
* If undef is added to the candidate set, "operands-skip"is able to produce any reduction that "operands" can do. Additional candidates might be zero and one, where the "reductive power" classification can prefer one over the other. If undefined behaviour should not be introduced, undef can be removed from the candidate set.
Reviewed By: aeubanks
Differential Revision: https://reviews.llvm.org/D111818
Matthias Springer [Fri, 12 Nov 2021 00:50:35 +0000 (09:50 +0900)]
[mlir][linalg][bufferize] Add PostAnalysisStep
This helper struct allows users of ComprehensiveBufferize to inject "post analysis" steps that are implemented after the analysis but before the bufferization.
Differential Revision: https://reviews.llvm.org/D113458
Matheus Izvekov [Fri, 12 Nov 2021 00:27:27 +0000 (01:27 +0100)]
[lldb] fix test expectation broken by clang fix at D110216
Signed-off-by: Matheus Izvekov <mizvekov@gmail.com>
Differential Revision: https://reviews.llvm.org/D113722
Matheus Izvekov [Mon, 13 Sep 2021 13:35:45 +0000 (15:35 +0200)]
[clang] retain type sugar in auto / template argument deduction
This implements the following changes:
* AutoType retains sugared deduced-as-type.
* Template argument deduction machinery analyses the sugared type all the way
down. It would previously lose the sugar on first recursion.
* Undeduced AutoType will be properly canonicalized, including the constraint
template arguments.
* Remove the decltype node created from the decltype(auto) deduction.
As a result, we start seeing sugared types in a lot more test cases,
including some which showed very unfriendly `type-parameter-*-*` types.
Signed-off-by: Matheus Izvekov <mizvekov@gmail.com>
Reviewed By: rsmith
Differential Revision: https://reviews.llvm.org/D110216
Alex Langford [Thu, 11 Nov 2021 23:41:40 +0000 (15:41 -0800)]
[lldb][NFC] Delete commented out code in AddressRange
Tue Ly [Thu, 11 Nov 2021 16:22:52 +0000 (11:22 -0500)]
[libc] Simplify decimalStringToFloat and hexadecimalStringToFloat and improve their performance.
Combine two loops in decimalStringToFloat and hexadecimalStringToFloat that extract the digits and re-arrange them a little bit. This slightly improves the performance of strtof and strtod:
Running libc_str_to_float_comparison_test parse-number-fxx-test_data/data/* on my machine (Ryzen 1700)
- with glibc: ~1.92 seconds
- with current implementation: ~1.78 seconds
- with this change: ~1.67 seconds
Differential Revision: https://reviews.llvm.org/D113681
Benjamin Kramer [Thu, 11 Nov 2021 23:20:21 +0000 (00:20 +0100)]
[Driver] Fix unused variable warning in release builds. NFC.
Yaxun (Sam) Liu [Thu, 7 Oct 2021 03:55:26 +0000 (23:55 -0400)]
[Driver] Fix ToolChain::getSanitizerArgs
The driver uses class SanitizerArgs to store parsed sanitizer arguments. It keeps a cached
SanitizerArgs object in ToolChain and uses it for different jobs. This does not work if
the sanitizer options are different for different jobs, which could happen when an
offloading toolchain translates the options for different jobs.
To fix this, SanitizerArgs should be created by using the actual arguments passed
to jobs instead of the original arguments passed to the driver, since the toolchain
may change the original arguments. And the sanitizer arguments should be diagnose
once.
This patch also fixes HIP toolchain for handling -fgpu-sanitize: a warning is emitted
for GPU's not supporting sanitizer and skipped. This is for backward compatibility
with existing -fsanitize options. -fgpu-sanitize is also turned on by default.
Reviewed by: Artem Belevich, Evgenii Stepanov
Differential Revision: https://reviews.llvm.org/D111443
Butygin [Thu, 11 Nov 2021 21:34:37 +0000 (16:34 -0500)]
[mlir][spirv] Regenerate SPIRVBase.td from recent spec
* Some long names were added and script decided to change whitespaces in a lot of places
* `ImageOperand` was renamed to `ImageOperands` in spec
* Some *NV enums were renamed to *KHR (spec actually maintains both variants with same value, but script pulled only *KHR versions)
Reviewed By: antiagainst
Differential Revision: https://reviews.llvm.org/D113667
Peter Klausler [Wed, 10 Nov 2021 22:36:15 +0000 (14:36 -0800)]
[flang] Allow exterior branch to outermost WHERE construct statement
The labels of WHERE constructs were being created within the scope of
the construct, not the scope of its parent, leading to incorrect error
messages for branches to that label.
Differential Revision: https://reviews.llvm.org/D113696
Thomas Raoux [Wed, 10 Nov 2021 22:32:15 +0000 (14:32 -0800)]
[mlir][VectorToGPU] Support more cases in conversion to MMA ops
Support load with broadcast, elementwise divf op and remove the
hardcoded restriction on the vector size. Picking the right size should
be enfored by user and will fail conversion to llvm/spirv if it is not
supported.
Differential Revision: https://reviews.llvm.org/D113618
Quinn Pham [Tue, 2 Nov 2021 13:58:19 +0000 (08:58 -0500)]
[lldb][NFC] Inclusive Language: rename master plan to controlling plan
[NFC] As part of using inclusive language within the llvm project, this patch
renames master plan to controlling plan in lldb.
Reviewed By: jingham
Differential Revision: https://reviews.llvm.org/D113019
Chris Bieneman [Thu, 11 Nov 2021 19:50:49 +0000 (13:50 -0600)]
Emit final macro diagnostics in system headers
Final macro diagnostics should log from system headers.
As planned, final macros are hard-mode. They always log diagnostics.
Daniel McIntosh [Thu, 7 Oct 2021 21:32:09 +0000 (17:32 -0400)]
[libcxx][format] Fix how we handle char traits in formatter<string> and formatter<string_view>
Right now we drop the char_traits template argument, which presumes that
string<_CharT, _Traits> and string<_CharT> are interchangeable.
Reviewed By: Mordante, #libc, Quuxplusone
Differential Revision: https://reviews.llvm.org/D112017
Aaron Ballman [Thu, 11 Nov 2021 19:38:11 +0000 (14:38 -0500)]
Fix Sphinx build diagnostics
This won't parse as either C or C++ according to Sphinx, so switched to
text to appease Sphinx.
Snehasish Kumar [Wed, 10 Nov 2021 22:37:15 +0000 (14:37 -0800)]
[memprof] Make the raw binary format the default.
Set the default memprof serialization format as binary. 9 tests are
updated to use print_text=true. Also fixed an issue with concatenation
of default and test specified options (missing separator).
Differential Revision: https://reviews.llvm.org/D113617
Snehasish Kumar [Tue, 12 Oct 2021 18:30:23 +0000 (11:30 -0700)]
[memprof] Add a raw binary format to serialize memprof profiles.
This change implements the raw binary format discussed in
https://lists.llvm.org/pipermail/llvm-dev/2021-September/153007.html
Summary of changes
* Add a new memprof option to choose binary or text (default) format.
* Add a rawprofile library which serializes the MIB map to profile.
* Add a unit test for rawprofile.
* Mark sanitizer procmaps methods as virtual to be able to mock them.
* Extend memprof_profile_dump regression test.
Differential Revision: https://reviews.llvm.org/D113317
Snehasish Kumar [Mon, 11 Oct 2021 22:03:29 +0000 (15:03 -0700)]
[memprof] Replace the block cache with a hashmap.
The existing implementation uses a cache + eviction based scheme to
record heap profile information. This design was adopted to ensure a
constant memory overhead (due to fixed number of cache entries) along
with incremental write-to-disk for evictions. We find that since the
number to entries to track is O(unique-allocation-contexts) the overhead
of keeping all contexts in memory is not very high. On a clang workload,
the max number of unique allocation contexts was ~35K, median ~11K.
For each context, we (currently) store 64 bytes of data - this amounts
to 5.5MB (max). Given the low overheads for a complex workload, we can
simplify the implementation by using a hashmap without eviction.
Other changes:
* Memory map is dumped at the end rather than startup. The relative
order in the profile dump is unchanged since we no longer have evicted
entries at runtime.
* Added a test to check meminfoblocks are merged.
Differential Revision: https://reviews.llvm.org/D111676
Snehasish Kumar [Fri, 5 Nov 2021 19:51:34 +0000 (12:51 -0700)]
[memprof] Move the MemInfoBlock definition to a separate header.
Move the memprof MemInfoBlock struct to it's own header as requested
during the review of D111676.
Differential Revision: https://reviews.llvm.org/D113315
Snehasish Kumar [Thu, 7 Oct 2021 23:35:11 +0000 (16:35 -0700)]
[sanitizer] Add a ForEach callback interface for AddrHashMap.
This change adds a ForEach method to the AddrHashMap class which can
then be used to iterate over all the key value pairs in the hash map.
I intend to use this in an upcoming change to the memprof runtime.
Added a unit test to cover basic insertion and the ForEach callback.
Differential Revision: https://reviews.llvm.org/D111368
Nikita Popov [Thu, 11 Nov 2021 18:15:11 +0000 (19:15 +0100)]
[InstCombine] Drop redundant fold for and/or of icmp eq/ne (NFCI)
This handles a special case of foldAndOrOfICmpsUsingRanges()
with two equality predicates.
Sanjay Patel [Thu, 11 Nov 2021 18:31:46 +0000 (13:31 -0500)]
[x86] add tests and RUNs for vector compares; NFC
More coverage for D113603
Louis Dionne [Mon, 8 Nov 2021 20:30:32 +0000 (15:30 -0500)]
[libc++] Implement file_clock::{to,from}_sys
This is part of https://wg21.link/P0355R7. I am adding these methods
to provide an alternative for the {from,to}_time_t methods that were
removed in https://llvm.org/D113027.
Differential Revision: https://reviews.llvm.org/D113430
Louis Dionne [Tue, 9 Nov 2021 19:44:19 +0000 (14:44 -0500)]
[libc++] Disallow running the libc++ benchmarks in standalone builds
We are trying to remove duplication of third-party code in
https://reviews.llvm.org/D112012, which will move the Google
Benchmark code outside of the `libcxx/` directory. That breaks
running the benchmarks in the Standalone build. Since we have
deprecated the Standalone build anyway, this patch just removes
support for the benchmark in Standalone mode until we remove that
mode entirely.
Differential Revision: https://reviews.llvm.org/D113503
Louis Dionne [Thu, 11 Nov 2021 16:55:20 +0000 (11:55 -0500)]
[libc++] Allow running the bootstrapping CI build on Darwin
Instead of hard-coding the target for our CI nodes, use the default
compiler triple. Also, allow building compiler-rt for the single
specified triple in case we're running on Darwin (otherwise, the
bootstrapping build complains).
Differential Revision: https://reviews.llvm.org/D113683
Bran Hagger [Thu, 11 Nov 2021 19:08:25 +0000 (13:08 -0600)]
[OpenMP] Allow building libomp using Microsoft Visual C++ naming scheme
Differential Revision: https://reviews.llvm.org/D110354
Erich Keane [Fri, 5 Nov 2021 13:25:34 +0000 (06:25 -0700)]
Implement target_clones multiversioning
As discussed here: https://lwn.net/Articles/691932/
GCC6.0 adds target_clones multiversioning. This functionality is
an odd cross between the cpu_dispatch and 'target' MV, but is compatible
with neither.
This attribute allows you to list all options, then emits a separately
optimized version of each function per-option (similar to the
cpu_specific attribute). It automatically generates a resolver, just
like the other two.
The mangling however, is... ODD to say the least. The mangling format
is:
<normal_mangling>.<option string>.<option ordinal>.
Differential Revision:https://reviews.llvm.org/D51650
Steven Wan [Thu, 11 Nov 2021 19:10:37 +0000 (14:10 -0500)]
[AIX][NFC] Disable clang-repl tests failing due to lack of 64-bit XCOFF support.
The following interpreter tests failed on AIX because 64-bit XCOFF object files are currently not supported on AIX. This patch disables the tests on AIX for the time being.
Reviewed By: Jake-Egan
Differential Revision: https://reviews.llvm.org/D113614
Min-Yih Hsu [Thu, 11 Nov 2021 18:59:00 +0000 (10:59 -0800)]
[M68k][NFC] Rename 'GlSel' -> 'GISel'
AArch64 as well as other targets use the abbrev "GISel" so we'd better
to be consistent with them. NFC.
Abhimanyu Goyal [Thu, 11 Nov 2021 18:59:11 +0000 (18:59 +0000)]
Fully qualify `::mlir::IntegerAttr` type in ODS generated code (NFC)
Craig Topper [Thu, 11 Nov 2021 18:08:51 +0000 (10:08 -0800)]
[RISCV] Add rv32i/rv64i command lines to some floating point tests. NFC
This improves our coverage of soft float libcalls lowering.
Remove most of the test cases from rv64i-single-softfloat.ll. They
were duplicated in the test files that now test softflow. Only
a couple test cases for constrained FP remain. Those should be
removed when we start supporting constrained FP.
This is follow up from D113528.
Simon Pilgrim [Thu, 11 Nov 2021 18:45:37 +0000 (18:45 +0000)]
[X86] Move LowerFunnelShift below LowerShift. NFC.
Makes it easier to reuse the various vector shift helpers defined above LowerShift
Simon Pilgrim [Thu, 11 Nov 2021 14:13:33 +0000 (14:13 +0000)]
[DAG] reassociateOpsCommutative - test getNode result directly. NFC
Matches the clean code style we use directly above
Adrian Vogelsgesang [Thu, 11 Nov 2021 18:19:54 +0000 (18:19 +0000)]
[clang-apply-replacements] Correctly handle relative paths
The fixes from the YAML file can refer to relative paths.
Those relative paths are meant to be resolved relative to the
corresponding `build directory`.
However, `clang-apply-replacements` currently interprets all
paths relative to its own working directory. This causes issues,
e.g., when `clang-apply-replacements` is run from outside of
the original build directory.
This commit adjusts `clang-apply-replacements` to take the build
directory into account when resolving relative file paths.
Reviewed By: ymandel
Differential Revision: https://reviews.llvm.org/D112647
Dmitry Vyukov [Thu, 11 Nov 2021 18:17:17 +0000 (19:17 +0100)]
tsan: enable clone interceptor only on Linux
Clone does not exist on Mac.
There are chances it will break on other OSes.
Enable it incrementally starting with Linux only,
other OSes can enable it later as needed.
Reviewed By: melver, thakis
Differential Revision: https://reviews.llvm.org/D113693
Mircea Trofin [Thu, 11 Nov 2021 18:23:40 +0000 (10:23 -0800)]
[NFC][InlineAdvisor] Inform advisor when the module is invalidated
This avoids unnecessary re-calculation of module-wide features in the
MLInlineAdvisor. In cases where function passes don't invalidate
functions (and, thus, don't invalidate the module), but we re-process a
CGSCC, we currently refreshed module features unnecessarily. The
overhead of fetching cached results (albeit they weren't themselves
invalidated) was noticeable in certain modules' compilations.
We don't want to just invalidate the advisor object, though, via the
analysis manager, because we'd then need to re-create expensive state
(like the model evaluator in the ML 'development' mode).
Reviewed By: phosek
Differential Revision: https://reviews.llvm.org/D113644
Florian Hahn [Thu, 11 Nov 2021 18:21:44 +0000 (18:21 +0000)]
[AArch64] Add some fp16 cast cost-model tests.
This adds initial tests for cost-modeling {u,s}itofp for fp16 vectors.
At the moment, they are under-estimated in a couple of cases.
Michael Jones [Thu, 11 Nov 2021 00:19:29 +0000 (16:19 -0800)]
[libc] tweak strtof errno behavior
When strtof/d/ld return a subnormal number they may set errno to
ERANGE. This change makes this behavior more consistent by making any
decimal number converting to a subnormal set errno to ERANGE. This
brings it in line with hexadecimals, which currently only set errno to
ERANGE if the number is truncated when converting to a subnormal.
Reviewed By: sivachandra, lntue
Differential Revision: https://reviews.llvm.org/D113626
Michael Jones [Thu, 11 Nov 2021 00:11:18 +0000 (16:11 -0800)]
[libc] clean up FPUtil long doubles
Add quietNaNMask consts to FloatProperties and make LongDoubleBitsX86
clear the extra bits that aren't set when initializing with an 80 bit
long double.
Reviewed By: sivachandra, lntue
Differential Revision: https://reviews.llvm.org/D113625
Andrzej Warzynski [Mon, 8 Nov 2021 11:35:48 +0000 (11:35 +0000)]
[flang][CodeGen] Transform `IsPresentOpConversion` and `AbsentOpConversion`
This patch extends the `FIRToLLVMLowering` pass in Flang by adding
hooks to transform `fir.is_present` and `fir.absent` to the LLVM dialect
of MLIR.
This is part of the upstreaming effort from the `fir-dev` branch in [1].
[1] https://github.com/flang-compiler/f18-llvm-project
Differential Revision: https://reviews.llvm.org/D113395
Originally written by:
Co-authored-by: Jean Perier <jperier@nvidia.com>
Co-authored-by: Eric Schweitz <eschweitz@nvidia.com>
Nico Weber [Thu, 11 Nov 2021 18:07:17 +0000 (13:07 -0500)]
[gn build] (manually) port
57c22ade867
Nikita Popov [Thu, 11 Nov 2021 17:59:03 +0000 (18:59 +0100)]
[InstCombine] Handle undefs in and of icmp eq zero fold
For the scalar/splat case, this fold is subsumed by
foldLogOpOfMaskedICmps(). However, the conjugated fold for "or"
also supports splats with undef. Make both code paths consistent
by using m_ZeroInt() for the "and" implementation as well.
https://alive2.llvm.org/ce/z/tN63cu
https://alive2.llvm.org/ce/z/ufB_Ue
Nikolas Klauser [Thu, 11 Nov 2021 17:57:25 +0000 (18:57 +0100)]
[libc++] Implement P2186R2 (Remove Garbage Collection)
Reviewed By: Quuxplusone, #libc, ldionne
Differential Revision: https://reviews.llvm.org/D112869
Nikita Popov [Thu, 11 Nov 2021 17:59:07 +0000 (18:59 +0100)]
[InstCombine] Add test for and of icmp ne zero with undefs (NFC)
We handle this in the conjugated "or" fold, but not for "and".
Mark de Wever [Wed, 27 Oct 2021 16:50:07 +0000 (18:50 +0200)]
[libc++] Use addressof in list.
This addresses the usage of `operator&` in `<list>`.
(Note there are still more headers with the same issue.)
Reviewed By: #libc, Quuxplusone, ldionne
Differential Revision: https://reviews.llvm.org/D112654
Dmitry Vyukov [Thu, 11 Nov 2021 15:17:58 +0000 (16:17 +0100)]
tsan: intercept clone
gtest uses clone for death tests and it needs the same
handling as fork to prevent deadlock (take runtime mutexes
before and release them after).
Reviewed By: melver
Differential Revision: https://reviews.llvm.org/D113677
Nicolas Vasilache [Thu, 11 Nov 2021 17:33:24 +0000 (17:33 +0000)]
[mlir][Linalg] Add 1-d depthwise conv with opdsl
Differential Revision: https://reviews.llvm.org/D113686
Nicolas Vasilache [Thu, 11 Nov 2021 14:18:57 +0000 (14:18 +0000)]
[mlir][Linalg] Make a LinalgStrategyDecomposePass available.
Differential Revision: https://reviews.llvm.org/D113684
Mark de Wever [Wed, 27 Oct 2021 20:27:05 +0000 (22:27 +0200)]
[libc++] Use addressof in forward_list.
This addresses the usage of `operator&` in `<forward_list>`.
(Note there are still more headers with the same issue.)
Reviewed By: #libc, Quuxplusone, ldionne
Differential Revision: https://reviews.llvm.org/D112660
Petr Hosek [Tue, 9 Nov 2021 20:35:44 +0000 (12:35 -0800)]
[lld][ELF] Support for R_ARM_THM_JUMP8
This change implements support for R_ARM_THM_JUMP8 relocation in
addition to R_ARM_THM_JUMP11 which is already supported by LLD.
Differential Revision: https://reviews.llvm.org/D21225
Craig Topper [Thu, 11 Nov 2021 16:37:11 +0000 (08:37 -0800)]
[X86] Honor command line features along with cpu_specific attribute
If the feature is on the command line we should honor it for all
functions. I don't think we could reliably target a single function
for a less capable processor than what the rest of the program is
compiled for.
Fixes PR52407.
Reviewed By: erichkeane
Differential Revision: https://reviews.llvm.org/D113647
Jordan Rupprecht [Thu, 11 Nov 2021 16:57:40 +0000 (08:57 -0800)]
[PowerPC][NFC] Ignore unused var in release builds.
Note we can't inline this call into assert because `isIntS16Immediate` has a side effect. But we only look at the return value in asserts builds.
Craig Topper [Thu, 11 Nov 2021 16:33:29 +0000 (08:33 -0800)]
[RISCV] Fix non-sensical intrinsic names in rv64i-single-softfloat.ll. NFC
Many of these had an extra 'f' at the beginning of their name that
caused them to not be treated as intrinsics.
I'm not sure what fpround was supposed to be so I deleted it.
frem was changed from an intrinsic to an instruction.
Reviewed By: luismarques
Differential Revision: https://reviews.llvm.org/D113528
Peter Hawkins [Thu, 11 Nov 2021 16:34:18 +0000 (08:34 -0800)]
Split headers from implementations in MLIR C API Bazel build.
This allows clients to build, e.g., the Python bindings against the C API headers, without including the C API implementations. This is useful when distributing software as multiple shared libraries.
Reviewed By: GMNGeoffrey
Differential Revision: https://reviews.llvm.org/D113565
Craig Topper [Thu, 11 Nov 2021 16:27:58 +0000 (08:27 -0800)]
[RISCV] Promote f16 ceil/floor/round/roundeven/nearbyint/rint/trunc intrinsics to f32 libcalls.
Previously these would crash. I don't think these can be generated
directly from C. Not sure if any optimizations can introduce them.
Reviewed By: asb
Differential Revision: https://reviews.llvm.org/D113527
Nikolas Klauser [Tue, 9 Nov 2021 16:41:46 +0000 (11:41 -0500)]
[libc++] Implement P1147R1 (Printing volatile T*)
Differential Revision: https://reviews.llvm.org/D113482
Louis Dionne [Thu, 11 Nov 2021 16:06:07 +0000 (11:06 -0500)]
[libc++] Fix GDB pretty printer test on 32 bit targets
On 32 bit targets, size_t is unsigned int, not unsigned long, so
std::bitset's template argument gets printed with a `u` suffix,
not `ul`.
Victor Huang [Wed, 10 Nov 2021 19:58:36 +0000 (13:58 -0600)]
[PowerPC] PPC backend optimization to lower int_ppc_tdw/int_ppc_tw intrinsics to TDI/TWI machine instructions
This patch adds the backend optimization to match XL behavior for the two
builtins __tdw and __tw that when the second input argument is an immediate,
emitting tdi/twi instructions instead of td/tw.
Reviewed By: nemanjai, amyk, PowerPC
Differential revision: https://reviews.llvm.org/D112285
Kai Luo [Thu, 11 Nov 2021 15:50:11 +0000 (15:50 +0000)]
[AIX] Set D111860's test unsupported on AIX
Reviewed By: jsji
Differential Revision: https://reviews.llvm.org/D113654
Sanjay Patel [Thu, 11 Nov 2021 15:24:24 +0000 (10:24 -0500)]
[DAGCombiner] add fold for vselect based on mask of signbit, part 3
(Cond0 s> -1) ? N1 : 0 --> ~(Cond0 s>> BW-1) & N1
https://alive2.llvm.org/ce/z/mGCBrd
This was suggested as a potential enhancement in D113212 (also
7e30404c3b6c ).
There's an improvement for AArch that could be generalized ( X > -1 --> X >= 0 ).
For x86, we have a counter-acting fold for most cases that turns the shift+not
back into a setcc, so that needs a work-around to get more cases to use "pandn":
D113603
Note that this pattern (and a previous one) are not currently canonical forms
in IR:
https://alive2.llvm.org/ce/z/e4o96b
Adding swapped variants is left as a TODO item here, but is planned as
a near-term follow-up patch.
Differential Revision: https://reviews.llvm.org/D113426
Jay Foad [Thu, 11 Nov 2021 15:26:22 +0000 (15:26 +0000)]
[AMDGPU] Regenerate some div/rem test checks
Jay Foad [Thu, 11 Nov 2021 13:31:52 +0000 (13:31 +0000)]
[CodeGen] Tweak whitespace in LiveInterval printing
When printing a LiveInterval, tweak the use of single and double spaces
to try to make it clearer that the valnos are associated with the
preceding range or subrange, not the following subrange.
Compare the output before and then after this patch:
%1 [32r,144r:0) 0@32r L000000000000000C [32r,144r:0) 0@32r L00000000000000F3 [32r,32d:0) 0@32r weight:0.000000e+00
%1 [32r,144r:0) 0@32r L000000000000000C [32r,144r:0) 0@32r L00000000000000F3 [32r,32d:0) 0@32r weight:0.000000e+00
Differential Revision: https://reviews.llvm.org/D113671
Jay Foad [Thu, 11 Nov 2021 15:16:57 +0000 (15:16 +0000)]
[AMDGPU] Fix line endings
Kazu Hirata [Thu, 11 Nov 2021 15:10:30 +0000 (07:10 -0800)]
[CodeGen] Use MachineInstr::operands (NFC)
Stephan Herhut [Thu, 11 Nov 2021 14:54:26 +0000 (15:54 +0100)]
[mlir][linalg] Avoid illegal elementwise fusion into reductions
Fusing into a reduction is only valid if doing so does not erase information on a reduction dimensions size.
Differential Revision: https://reviews.llvm.org/D113500
Valentin Clement [Thu, 11 Nov 2021 14:39:24 +0000 (15:39 +0100)]
[fir] Add !fir.field type conversion
This patch adds conversion for !fir.field types.
This patch is part of the upstreaming effort from fir-dev branch.
Reviewed By: kiranchandramohan
Differential Revision: https://reviews.llvm.org/D113669
Co-authored-by: Eric Schweitz <eschweitz@nvidia.com>
Valentin Clement [Thu, 11 Nov 2021 14:00:18 +0000 (15:00 +0100)]
[fir] Add fir.select_case conversion
The `fir.select_case` operation is converted to a if-then-else ladder.
Conversion of `fir.select_case` operation with character is not
implemented yet.
This patch is part of the upstreaming effort from fir-dev branch.
Reviewed By: kiranchandramohan, mehdi_amini
Differential Revision: https://reviews.llvm.org/D113484
Co-authored-by: Eric Schweitz <eschweitz@nvidia.com>
Valentin Clement [Thu, 11 Nov 2021 12:58:39 +0000 (13:58 +0100)]
[fir] Add placeholder conversion pattern for disptach operations
`fir.dispatch`, `fir.dispatch_table` and `fir.dt_entry` are operations
for type-bound procedures. This patch just adds placeholder conversion
pattern that currently fails since F2003 is not implemented yet.
This patch is part of the upstreaming effort from fir-dev branch.
Reviewed By: kiranchandramohan
Differential Revision: https://reviews.llvm.org/D113662
Zahira Ammarguellat [Tue, 9 Nov 2021 14:35:25 +0000 (09:35 -0500)]
Making the code compliant to the documentation about Floating Point
support default values for C/C++. FPP-MODEL=PRECISE enables
FFP-CONTRACT(FMA is enabled).
Fix for https://bugs.llvm.org/show_bug.cgi?id=50222
Jay Foad [Tue, 28 Sep 2021 16:27:28 +0000 (17:27 +0100)]
[TwoAddressInstruction] Update LiveIntervals after rewriting INSERT_SUBREG to COPY
Also add subranges to an existing live interval when introducing a new
subreg def.
Differential Revision: https://reviews.llvm.org/D113044
Jay Foad [Fri, 24 Sep 2021 12:57:45 +0000 (13:57 +0100)]
[LiveIntervals] Update subranges in processTiedPairs
In TwoAddressInstructionPass::processTiedPairs when updating live
intervals after moving the last use of RegB back to the newly inserted
copy, update any affected subranges as well as the main range.
Differential Revision: https://reviews.llvm.org/D110411
Benjamin Kramer [Thu, 11 Nov 2021 12:18:19 +0000 (13:18 +0100)]
[mlir][X86Vector] Fix unused variable warning
Nicolas Vasilache [Thu, 11 Nov 2021 12:05:23 +0000 (12:05 +0000)]
[mlir][Vector] Silence recently introduced warnings
Simon Pilgrim [Thu, 11 Nov 2021 12:00:12 +0000 (12:00 +0000)]
[DAG] reassociateOpsCommutative - peek through bitcasts to find constants
Now that FoldConstantArithmetic can fold bitcasted constants, we should peek through bitcasts of binop operands to try and find foldable constants
Raphael Isemann [Thu, 11 Nov 2021 11:45:38 +0000 (12:45 +0100)]
[lldb][NFC] Remove commented out code in SymbolFileDWARF
Raphael Isemann [Thu, 11 Nov 2021 11:39:54 +0000 (12:39 +0100)]
[lldb][NFC] Remove no longer valid comment for TypeSystem::SetSymbolFile
Simon Pilgrim [Thu, 11 Nov 2021 11:35:07 +0000 (11:35 +0000)]
[DAG] FoldConstantArithmetic - fold intop(bitcast(buildvector(c1)),bitcast(buildvector(c1))) -> bitcast(intop(buildvector(c1'),buildvector(c2')))
Enable FoldConstantArithmetic to constant fold bitcasted constant build vectors. These have typically been bitcasted for type legalization purposes.
By extracting the raw constant bit data, performing the constant fold, and then casting the constant bit data back to the (legalized) type, we can perform constant folding on integer types after legalization.
This in particular helps 32-bit targets which need to handle vXi64 build vectors - during legalization the (unsupported) i64 elements are split to create a bitcasted v2Xi32 build vector.
Addresses some regressions in D113192.
Differential Revision: https://reviews.llvm.org/D113564
David Spickett [Fri, 8 Oct 2021 10:44:23 +0000 (10:44 +0000)]
[lldb][AArch64] Add UnwindPlan for Linux sigreturn
This adds a specific unwind plan for AArch64 Linux sigreturn frames.
Previously we assumed that the fp would be valid here but it is not.
https://github.com/torvalds/linux/blob/master/arch/arm64/kernel/vdso/sigreturn.S
On Ubuntu Bionic it happened to point to an old frame info which meant
you got what looked like a correct backtrace. On Focal, the info is
completely invalid. (probably due to some code shuffling in libc)
This adds an UnwindPlan that knows that the sp in a sigreturn frame
points to an rt_sigframe from which we can offset to get saved
sp and pc values to backtrace correctly.
Based on LibUnwind's change: https://reviews.llvm.org/D90898
A new test is added that sets all compares the frames from the initial
signal catch to the handler break. Ensuring that the stack/frame pointer,
function name and register values match.
(this test is AArch64 Linux specific because it's the only one
with a specific unwind plan for this situation)
Fixes https://bugs.llvm.org/show_bug.cgi?id=52165
Reviewed By: omjavaid, labath
Differential Revision: https://reviews.llvm.org/D112069
Diana Picus [Mon, 8 Nov 2021 10:59:48 +0000 (10:59 +0000)]
[fir] Add !fir.alloca conversion
Convert !fir.alloca into !llvm.alloca.
This also contains a fix for verifyInType in FIROps.cpp, to make sure we
can handle a !fir.ptr<!fir.array<?xN>>.
Differential Revision: https://reviews.llvm.org/D113563
Co-authored-by: Eric Schweitz <eschweitz@nvidia.com>
Co-authored-by: Jean Perier <jperier@nvidia.com>