Roy Jacobson [Sun, 25 Dec 2022 21:48:13 +0000 (23:48 +0200)]
[Sema] Don't mark deleted special member functions as non-trivial
As noted in https://github.com/llvm/llvm-project/issues/59624, we sometimes mark implicitly
deleted special member functions as non-trivial. This is unnecessary work and leads to some
weird type traits errors.
This fixes the problem by making the implicitly deleted special member functions always
trivial.
Reviewed By: #clang-language-wg, erichkeane
Differential Revision: https://reviews.llvm.org/D140664
Jakub Kuderski [Wed, 4 Jan 2023 19:06:47 +0000 (14:06 -0500)]
[mlir][spirv] Relax instruction order checks in test
Fix a windows buildbot failure: https://lab.llvm.org/buildbot#builders/13/builds/30439.
Stefan Pintilie [Wed, 21 Dec 2022 14:47:55 +0000 (08:47 -0600)]
[PowerPC] Materialize floats in the range [-16.0, 15.0].
Previous to this patch we only materialized 0.0 and all other floating point
values would be loaded from the TOC. This patch adds materialization for the
floating point values that can be represented as integers in [-16.0, 15.0].
For example we will now materialize 3.0 and -5.0 but not 4.7.
Reviewed By: nemanjai, lei, #powerpc
Differential Revision: https://reviews.llvm.org/D138844
Philip Reames [Wed, 4 Jan 2023 18:45:56 +0000 (10:45 -0800)]
[MachineCombine] Reorganize code for readability and tracing [nfc]
Alexey Bataev [Wed, 4 Jan 2023 18:26:53 +0000 (10:26 -0800)]
[SLP][NFC]Add a pass.
Jakub Kuderski [Wed, 4 Jan 2023 18:29:46 +0000 (13:29 -0500)]
[mlir][spirv] Add pattern to expand UMulExtended for WebGPU
This is needed because WGSL does not yet support extended multiplication
ops.
Set up pattern/pass stuff and handle the first op: `UMulExtended`.
`SMulExtended` handling will go to a separate patch.
Issue: https://github.com/llvm/llvm-project/issues/59563
Reviewed By: antiagainst
Differential Revision: https://reviews.llvm.org/D140995
Alexey Bataev [Wed, 4 Jan 2023 18:11:47 +0000 (10:11 -0800)]
[SLP][NFC]Add a test for incorrect skipping of shuffle instruction at
peek-through-shuffles, NFC.
Roman Lebedev [Wed, 4 Jan 2023 18:13:48 +0000 (21:13 +0300)]
[exegesis] Analysis: filtering for benchmark results
By default, all benchmark results are analysed, but sometimes it may be useful
to only look at those that to not involve memory, or vice versa. This option
allows to either keep all benchmarks, or filter out (ignore) either all the
ones that do involve memory (involve instructions that may read or write to
memory), or the opposite, to only keep such benchmarks.
Personally, so far i have found the benchmarks that do involve memory
to have dubious results. But the ones that do not involve memory,
are generally actionable. So i would like to have a toggle to declutter results.
Reviewed By: courbet
Differential Revision: https://reviews.llvm.org/D140734
Roman Lebedev [Wed, 4 Jan 2023 17:43:42 +0000 (20:43 +0300)]
[Codegen][X86] `LowerBUILD_VECTOR()`: improve lowering w/ multiple FREEZE-UNDEF ops
While we have great handling for UNDEF operands,
FREEZE-UNDEF operands are effectively normal operands.
We are better off "interleaving" such BUILD_VECTORS into a blend
between a splat of FREEZE-UNDEF, and "thawed" source BUILD_VECTOR,
both of which are more natural for us to handle.
Refs. https://github.com/llvm/llvm-project/commit/
f738ab9075f838dd4365adf3a92ca1acced114d7#r95017306
Roman Lebedev [Wed, 4 Jan 2023 17:34:24 +0000 (20:34 +0300)]
[NFC][X86] Add few more tests for freezing BUILD_VECTOR
Johannes Doerfert [Wed, 28 Dec 2022 06:31:28 +0000 (22:31 -0800)]
[OpenMP][JIT] Introduce support for AMDGPU
To JIT kernels for AMDGPUs we need to provide the architecture, the
triple, and a post-link callback. The first two are simple, the last one
is a little more complicated since we need to invoke `lld`. There is
some library interface but for that we need the lld library, which is
not generally available, thus we go with the executable for now. In
either way we need to manifest the (amdgcn) object file and read the
output from another file. We should try to avoid that in the future.
The options for `lld` are copied from the way clang invokes it.
Reviewed By: tianshilei1992
Differential Revision: https://reviews.llvm.org/D140720
Sanjay Patel [Wed, 4 Jan 2023 17:43:30 +0000 (12:43 -0500)]
[InstCombine] don't let 'exact' inhibit demanded bits folds for udiv
We shouldn't penalize instructions that have extra flags.
Drop the poison-generating flags if needed instead of bailing out.
This makes canonicalization/optimization more uniform.
There is a chance that dropping flags will cause some
other transform to not fire, but we added a preliminary
patch to avoid that with:
f0faea571403
See D140665 for more details.
Craig Topper [Wed, 4 Jan 2023 02:36:14 +0000 (18:36 -0800)]
[SelectionDAG][GlobalISel] Don't use UnsignedDivisionByConstantInfo for divisor of 1.
The magic algorithm sets IsAdd indication for division by 1 that
the caller had to ignore.
I considered folding the ignore into UnsignedDivisionByConstantInfo,
but we only allow 1 for vectors of mixed visiors. And really what we
want to end up with is undef. Currently, we get to undef via
DemandedElts optimizations using the select instruction. We could
directly emit undef.
Differential Revision: https://reviews.llvm.org/D140940
Florian Hahn [Wed, 4 Jan 2023 18:00:36 +0000 (18:00 +0000)]
[ConstraintElim] Enable pass by default.
The pass should help to close a functional gap when it comes to
reasoning about related conditions in a relatively general way.
It addresses multiple existing issues (linked below) and the need for a
more powerful reasoning system was also discussed recently in
https://discourse.llvm.org/t/rfc-alternative-approach-of-dealing-with-implications-from-comparisons-through-pos-analysis/65601/7
On AArch64, the new pass performs ~2000 simplifications on
MultiSource,SPEC2006,SPEC2017 with -O3.
Compile-time impact:
NewPM-O3: +0.20%
NewPM-ReleaseThinLTO: +0.32%
NewPM-ReleaseLTO-g: +0.28%
https://llvm-compile-time-tracker.com/compare.php?from=
f01a3a893c147c1594b9a3fbd817456b209dabbf&to=
577688758ef64fb044215ec3e497ea901bb2db28&stat=instructions:u
Fixes #49344.
Fixes #47888.
Fixes #48253.
Fixes #49229.
Fixes #58074.
Reviewed By: asbirlea
Differential Revision: https://reviews.llvm.org/D135915
Aart Bik [Wed, 4 Jan 2023 02:06:54 +0000 (18:06 -0800)]
[mlir][sparse] minor code layout edits
Reviewed By: bixia
Differential Revision: https://reviews.llvm.org/D140934
Anshil Gandhi [Wed, 4 Jan 2023 17:10:40 +0000 (10:10 -0700)]
[AMDGPU] Unify divergent nodes if the PostDom tree has one root
This patch allows AMDGPUUnifyDivergenceExitNodes pass
to transform a function whose PDT has exactly one root
and ends in a branch instruction. Fixes
https://github.com/llvm/llvm-project/issues/58861.
Reviewed By: ruiling, arsenm
Differential Revision: https://reviews.llvm.org/D139780
Vy Nguyen [Wed, 4 Jan 2023 14:43:34 +0000 (09:43 -0500)]
[lld-macho][nfc] Re-enable previously disabled test.
This check was previous disabled because the test kept failing on ARM64. The output from reported failure message
gave the impression that the bundle was created as an x86-64 bundle but upon further inspection, I believe that's
a bug in llvm-otool where it prints both -h and -f for both input files on ARM64.
So the "fix" here is to rewrite the test to run the two otool commands separately but concatenate the
output into one file for checking.
Differential Revision: https://reviews.llvm.org/D140987
Kevin Gleason [Wed, 4 Jan 2023 17:09:27 +0000 (18:09 +0100)]
[NFC] Update parseDimensionList comments for dynamic size from -1 to kDynamic
Comment is stale now that kDynamic is defined as intmin instead of -1.
Confirmed that implementation in `parseDimensionListRanked` uses kDynamic.
Reviewed By: ftynse
Differential Revision: https://reviews.llvm.org/D140994
Blue Gaston [Wed, 4 Jan 2023 16:49:34 +0000 (09:49 -0700)]
Fix to D140567
Amaury Séchet [Wed, 4 Jan 2023 16:43:47 +0000 (16:43 +0000)]
[NFC] Autogenerate CodeGen/X86/sdiv-pow2.ll
Matt Arsenault [Wed, 4 Jan 2023 16:07:34 +0000 (11:07 -0500)]
IROutliner: Fix assert with non-0 alloca addrspace
The arguments are passed as stored to new allocas so the address space
needs to match.
Nikita Popov [Wed, 4 Jan 2023 16:18:17 +0000 (17:18 +0100)]
[LoopVectorize] Convert some tests to opaque pointers (NFC)
Check lines for some of these tests were regenerated. The difference
is that with opaque pointers SCEVExpander always emits i8 GEPs,
making the address calculation explicit. This is a known problem
that will be solved long term by making all address calculations
explicit.
Nikita Popov [Wed, 4 Jan 2023 16:13:32 +0000 (17:13 +0100)]
[LoopVersioningLICM] Convert tests to opaque pointers (NFC)
Tobias Gysi [Wed, 4 Jan 2023 16:04:14 +0000 (17:04 +0100)]
[mlir][llvm] Modernize the import of LLVM IR globals.
Return failure if the import of a global variable fails and add a
test case to check the emitted error message. Additionally, convert
the globals in iteration order and do not process them recursively
when translating a constant expression referencing it. Additionally,
use the module location rather unknown location.
Reviewed By: Dinistro
Differential Revision: https://reviews.llvm.org/D140966
Nikita Popov [Wed, 4 Jan 2023 16:09:46 +0000 (17:09 +0100)]
[LowerTypeTests] Convert tests to opaque pointers (NFC)
Nikita Popov [Wed, 4 Jan 2023 16:09:13 +0000 (17:09 +0100)]
[MakeGuardsExplicit] Convert test to opaque pointers (NFC)
Nikita Popov [Wed, 4 Jan 2023 16:05:13 +0000 (17:05 +0100)]
[MergeFunc] Convert tests to opaque pointers (NFC)
Nikita Popov [Wed, 4 Jan 2023 16:03:43 +0000 (17:03 +0100)]
[MergeICmps] Convert tests to opaque pointers (NFC)
Nikita Popov [Wed, 4 Jan 2023 16:02:50 +0000 (17:02 +0100)]
[MetaRenamer] Convert tests to opaque pointers (NFC)
Nikita Popov [Wed, 4 Jan 2023 15:46:03 +0000 (16:46 +0100)]
[OpenMP] Convert some tests to opaque pointers (NFC)
David Green [Wed, 4 Jan 2023 16:02:20 +0000 (16:02 +0000)]
[NFC] Regenerate reduction-inloop.ll check lines. NFC
Paul Robinson [Wed, 4 Jan 2023 15:56:37 +0000 (07:56 -0800)]
[llgdb-tests] Convert test to check 'target=...'
Part of the project to eliminate special handling for triples in lit
expressions.
Liming Liu [Wed, 4 Jan 2023 15:46:03 +0000 (07:46 -0800)]
[clang] Add the check of membership in decltype for the issue #58674#
Originally, the code would take a lookup result as a member in the
current scope and build a member expression accordingly, if the lookup
result was not an operand of the address operator, or it was a field
declaration. However, a field declaration may come from another class,
and cause the issue #58674.
Thus, this patch fixes the issue via checking where does the field
declaration comes from, and if it comes from another class, then marks
it as not member in the current scope. The parent scopes of the current
scope are also checked, as the current scope may be associated to a
lambda or friend declaration.
Differential Revision: https://reviews.llvm.org/D137531
Nikita Popov [Wed, 4 Jan 2023 15:43:14 +0000 (16:43 +0100)]
[NewGVN] Convert some tests to opaque pointers (NFC)
Nikita Popov [Wed, 4 Jan 2023 15:42:45 +0000 (16:42 +0100)]
[Reg2Mem] Convert test to opaque pointers (NFC)
Nikita Popov [Wed, 4 Jan 2023 15:39:32 +0000 (16:39 +0100)]
[SLPVectorizer] Convert test to opaque pointers (NFC)
bixia1 [Tue, 3 Jan 2023 23:16:12 +0000 (15:16 -0800)]
[mlir][sparse] Add layout to the memref for the indices buffers to prepare for the AOS storage optimization for COO regions.
Fix relevant FileCheck tests.
Reviewed By: aartbik
Differential Revision: https://reviews.llvm.org/D140742
Nikita Popov [Wed, 4 Jan 2023 15:35:45 +0000 (16:35 +0100)]
[SLPVectorizer] Name instructions in test (NFC)
Nikita Popov [Wed, 4 Jan 2023 15:32:48 +0000 (16:32 +0100)]
[SLPVectorizer] Convert some tests to opaque pointers (NFC)
Nikita Popov [Wed, 4 Jan 2023 15:30:34 +0000 (16:30 +0100)]
[SCCP] Convert test to opaque pointers (NFC)
Aaron Ballman [Wed, 4 Jan 2023 15:29:43 +0000 (10:29 -0500)]
Fix the LLVM sphinx build
This should address the issue found in:
https://lab.llvm.org/buildbot/#/builders/30/builds/30330
Matthias Braun [Fri, 16 Dec 2022 15:21:41 +0000 (07:21 -0800)]
CoroFrame: Put escaped variables with multiple lifetimes on coroutine frame
The llvm.lifetime.start intrinsic guarantees that the address for a
given alloca is always the same. So variables with escaped addresses
reaching reaching a lifetime start/end block before and after a suspend
must be placed onto the coroutine frame even if the variable itself
is not alive across the suspend point.
This computes a new `LoopKill` flag in the suspend crossing data flow
anaysis to catch the case where a lifetime marker can reach itself
via suspend-crossing path.
This fixes https://llvm.org/PR52501
Differential Revision: https://reviews.llvm.org/D140231
Nikita Popov [Wed, 4 Jan 2023 15:28:13 +0000 (16:28 +0100)]
[SimpleLoopUnswitch] Convert tests to opaque pointers (NFC)
Nikita Popov [Wed, 4 Jan 2023 15:27:23 +0000 (16:27 +0100)]
[SimplifyCFG] Convert some tests to opaque pointers (NFC)
Guillaume Chatelet [Wed, 4 Jan 2023 15:25:48 +0000 (15:25 +0000)]
[libc][NFC] Remove unused variable
Nikita Popov [Wed, 4 Jan 2023 15:26:13 +0000 (16:26 +0100)]
[TypePromotion] Convert tests to opaque pointers (NFC)
Nikita Popov [Wed, 4 Jan 2023 15:21:56 +0000 (16:21 +0100)]
[Annotation2Metadata] Support opaque pointers
Strip pointer casts instead of matching specific constant
expressions.
Nikita Popov [Wed, 4 Jan 2023 15:13:56 +0000 (16:13 +0100)]
[UnifyLoopExits] Convert test to opaque pointers (NFC)
Luke Lau [Mon, 12 Dec 2022 19:53:27 +0000 (19:53 +0000)]
[WebAssembly] Replace LOAD_SPLAT with SPLAT_VECTOR
Splats were selected by matching on uses of `build_vector` with
identical elements, but a while back a target independent node for
vector splatting was added.
This removes the WebAssembly specific LOAD_SPLAT intrinsic, and instead
makes SPLAT_VECTOR legal and adds patterns for splat loads.
Differential Revision: https://reviews.llvm.org/D139871
Paul Robinson [Wed, 4 Jan 2023 14:41:59 +0000 (06:41 -0800)]
[Driver] Convert test to check 'target=...'
Part of the project to eliminate special handling for triples in lit
expressions.
Florian Hahn [Wed, 4 Jan 2023 13:59:22 +0000 (13:59 +0000)]
[ConstraintElim] Add option to limit number of rows tracked in system.
Once the constraint system grows too large in terms of number of rows,
queries can become very slow. This patch adds a new option to limit the
number of rows tracked.
The python script below can be used to generate worst-case IR with a
chain of conditional branches with N branches.
With this limit, we get the following runtimes:
* python3 generate.py 100: 0.1s
* python3 generate.py 1000: 2s
* python3 generate.py 10000: 4s
Without the limit, the case with 1000 chained conditions takes 20+
seconds.
generate.py:
import sys
N = int(sys.argv[1])
args = []
checks = []
for i in range(0, N):
args.append('i32 %l{}'.format(i))
checks.append("""
bb{0}:
%c{0} = icmp uge i32 %l{0}, 100
br i1 %c{0}, label %bb{1}, label %exit
""".format(i, i+1))
print("""
define i1 @foo({0}) {{
{1}
bb{2}:
%c{2} = icmp uge i32 %l0, 100
ret i1 %c{2}
exit:
ret i1 false
}}
""".format(' ,'.join(args), '\n'.join(checks), N))
Reviewed By: nikic
Differential Revision: https://reviews.llvm.org/D140926
Jay Foad [Wed, 4 Jan 2023 13:15:09 +0000 (13:15 +0000)]
[MC] Consistently use MCInstrDesc::getImplicitUses and getImplicitDefs. NFC.
David Green [Wed, 4 Jan 2023 13:09:26 +0000 (13:09 +0000)]
[AArch64] Alter arm_neon_sve_bridge.h to be target-based, not preprocessor based.
Similar to D131064, this alters the arm_neon_sve_bridge.h header to use
target-based intrinsics that give an error if used in a function that
does not have the sve features, but are not preprocessed out. This
header is simpler than the arm_sve.h and other headers, not including
any tablegen'd content. The main change is altering the builtin
definitions from using BUILTIN to TARGET_BUILTIN.
Differential Revision: https://reviews.llvm.org/D132639
Diana Picus [Wed, 4 Jan 2023 13:07:35 +0000 (14:07 +0100)]
MachineIRBuilder.h: Fix typo. NFC
Jonas Hahnfeld [Sun, 1 Jan 2023 22:08:18 +0000 (23:08 +0100)]
[JITLink][RISCV] Add R_RISCV_RVC_BRANCH and R_RISCV_RVC_JUMP
These are the compressed equivalents of the relocations R_RISCV_BRANCH
and R_RISCV_JAL with slightly more complex immediate handling.
Differential Revision: https://reviews.llvm.org/D140827
Haojian Wu [Wed, 4 Jan 2023 09:42:24 +0000 (10:42 +0100)]
[clangd] Disable backend-releated filelist compiler options.
These options doesn't affect the AST generation, and clang will crash
(CreateOrDie in ASTContext) immedidately when the provided file are not existed.
Disable them in clangd to make clangd more robust.
Differential Revision: https://reviews.llvm.org/D140960
Pavel Kopyl [Wed, 4 Jan 2023 11:56:24 +0000 (14:56 +0300)]
[NFC] Add x86 triple to lower-offset-expression.ll
This prevents failing the test on targets other than X86 that are set
as default when X86 one is also supported.
Luke Drummond [Tue, 20 Dec 2022 00:57:54 +0000 (00:57 +0000)]
[NVPTX] Replace PTX's ManagedStringPool with StringSaver
In use ManagedStringPool caused a lot of heap allocations. At least one
for every register name lookup in NVPTXTargetRegisterInfo and one for
every symbol lookup in the target machine and isel lowering. There
already exists an llvm/Support string interning-class that has better
memory performance. Use LLVM's and delete ManagedStringPool which was
unique to PTX
llc Binary Size (.text only; bss and data were unchanged):
MinsizeRel:
Before:
31219884
After:
31219796
Release:
Before:
42961872
After:
42960656
Total heap allocations by the NVPTX string saving code running
check-llvm-codegen-nvptx
Total bytes allocated:
Before: 2431825
After: 2288151
(All numbers on x86-64-linux-gnu / gcc-12 / lld14)
I didn't see obvious time differences when running the tests.
Reviewers: tra, avasonic
Differential Revision: https://reviews.llvm.org/D140704
Shoaib Meenai [Tue, 13 Dec 2022 05:51:14 +0000 (21:51 -0800)]
[runtimes] Only depend on builtins for same target
We don't need to have built all the builtins before building the
runtimes for a particular target, only the builtins for that target.
While I'm here, rename the variable that stores the builtins dep to
something less generic than `deps`, to minimize the chances of
accidentally using a variable with the same name from an outer scope.
Reviewed By: phosek
Differential Revision: https://reviews.llvm.org/D139913
Sameer Sahasrabuddhe [Tue, 3 Jan 2023 05:55:14 +0000 (11:25 +0530)]
[AAPointerInfo] fix assertion at the pass-through use of a pointer
HandlePassthroughUser may sometimes create a new entry for the OffsetInfo of a
user in the OffsetInfoMap. This can invalidate outstanding references into the
map, including the one which needs to be copied into the new entry. This
produces invalid offset info that can trigger assertions.
Fixed this by not using references at this point. The bug was originally
introduced in commit ID
0dc0a441323d41b4860668f38d290579e0de130c.
Reviewed By: ronlieb
Differential Revision: https://reviews.llvm.org/D140837
David Green [Wed, 4 Jan 2023 11:22:20 +0000 (11:22 +0000)]
[AArch64] Alter arm_sve.h to be target-based, not preprocessor based.
This patch makes SVE intrinsics more useable by gating them on the
target, not by ifdef preprocessor macros. See #56480. This alters the
SVEEmitter for arm_sve.h to remove the #ifdef guards and instead use
TARGET_BUILTIN with the correct features so that the existing "'func'
needs target feature sve" error will be generated when sve is not
present.
The ArchGuard containing defines in the SVEEmitter are changed to
TargetGuard containing target features. In the arm_neon.h emitter there
are both existing ArchGuard ifdefs mixed with new TargetGuard target
feature guards, so the name is change in the SVE too for consistency.
The few functions that are present in arm_sve.h (as opposed to builtin
aliases) have __attribute__((target("sve"))) added. Some of the tests
needed to be rejigged a little, as well as updating the error message,
as the error now happens at a later point.
Differential Revision: https://reviews.llvm.org/D131064
Florian Hahn [Wed, 4 Jan 2023 11:21:12 +0000 (11:21 +0000)]
[ConstraintElim] Remove legacy pass implementation.
The pass is exclusively used with the new pass manager now, so remove
the legacy PM implementation.
Matthias Springer [Wed, 4 Jan 2023 10:39:41 +0000 (11:39 +0100)]
[mlir] Add `test-convergence` option to Canonicalizer tests
This new option is set to `false` by default. It should be set only in Canonicalizer tests to detect faulty canonicalization patterns. I.e., patterns that prevent the canonicalizer from converging. The canonicalizer should always convergence on such small unit tests that we have in `canonicalize.mlir`.
Two faulty canonicalization patterns were detected and fixed with this change.
Differential Revision: https://reviews.llvm.org/D140873
Chuanqi Xu [Wed, 4 Jan 2023 10:57:33 +0000 (18:57 +0800)]
[NFC] let FunctionDecl::isReservedGlobalPlacementOperator return false when the function decl is not allocation functions
Currently `FunctionDecl::isReservedGlobalPlacementOperator` will crash
if the function is not an allocation/deallocation function, which is
surprising. Also, its semantics is not consistent with
isReplaceableGlobalAllocationFunction, which will return false if the
function is not an allocation/deallocation function.
This patch make FunctionDecl::isReservedGlobalPlacementOperator not
crash if the function is not an allocation/deallocation function, which
is consistent with isReplaceableGlobalAllocationFunction too.
Guillaume Chatelet [Wed, 4 Jan 2023 10:42:43 +0000 (10:42 +0000)]
[llvm-exegesis] Allow building llvm_exegesis_tests on builtkite
LLVM GN Syncbot [Wed, 4 Jan 2023 10:40:23 +0000 (10:40 +0000)]
[gn build] Port
ba874483137d
Guillaume Chatelet [Tue, 3 Jan 2023 16:17:30 +0000 (16:17 +0000)]
[llvm-exegesis] Remove functional test from unit tests
As discussed offline, let's remove this one as it's hard to test on the build bots.
Differential Revision: https://reviews.llvm.org/D140898
Christian Ulmann [Wed, 4 Jan 2023 10:16:11 +0000 (11:16 +0100)]
[mlir][llvm] Support importing magic globals
This commit adds support for importing the magic globals "global_ctors"
and "global_dtors" from LLVM IR to the LLVM IR dialect. The import
fails when these globals have a non-null data pointer, as this can
currently not be represented in the corresponding MLIR operations.
Reviewed By: gysit
Differential Revision: https://reviews.llvm.org/D140877
Matthias Springer [Wed, 4 Jan 2023 09:56:43 +0000 (10:56 +0100)]
[mlir][affine][NFC] Extract core functionality of `canonicalizeMinMaxOp`
Move code from SCF to Affine: Add a new helper function `simplifyConstrainedMinMaxOp` to Affine/Analysis/Utils.h. `canonicalizeMinMaxOp` was originally designed for loop peeling, but it is not SCF-specific and can be used to simplify any affine.min/max ops.
Various functions in SCF/Transforms are simplified by dropping unnecessary parameters.
Differential Revision: https://reviews.llvm.org/D140962
Tom Eccles [Fri, 23 Dec 2022 21:03:14 +0000 (21:03 +0000)]
[mlir] Allow overriding AbstractDenseDataFlowAnalysis::visitOperation
AbstractDenseDataFlowAnalysis::visitOperation controls how the dataflow
analysis proceeds around control flow. In particular, conservative
assumptions are made about call operations which can prevent some
analysis from succeeding.
The motivating case for this change is https://reviews.llvm.org/D140415,
for which it is correct and necessary for the lattice to be preserved
after call operations.
Some renaming was necessary to avoid confusion with
DenseDataFlowAnalysis::visitOperation.
AbstractDenseDataFlowAnalysis::visitRegionBranchOperation and
DenseDataFlowAnalysis::visitOperationImpl are also made protected
to allow implementation of AbstractDenseDataFlowAnalysis::visitOperation,
although I did not need these to be virtual.
Differential Revision: https://reviews.llvm.org/D140879
chenglin.bi [Wed, 4 Jan 2023 09:49:40 +0000 (17:49 +0800)]
[InstCombine] add more tests into select-factorize; NFC
Haojian Wu [Mon, 2 Jan 2023 11:04:49 +0000 (12:04 +0100)]
[clang-tidy] Don't emit misc-unused-using-decl warnings for header files.
Using decls in header files are special, usually as part of the
public API, the check should not emit warnings on these.
The check already detects unused using-decls which are in the current main
file, but if the main file happens to be a header file, we still
emit warnings, this patch suppresses that.
Differential Revision: https://reviews.llvm.org/D140894
chenglin.bi [Wed, 4 Jan 2023 08:31:42 +0000 (16:31 +0800)]
[Instcombine] Regenerate tests for logical-select; NFC
Vitaly Buka [Wed, 4 Jan 2023 03:30:43 +0000 (19:30 -0800)]
[libcxx] Fix build with GLIBC
Reviewed By: #libc, philnik
Differential Revision: https://reviews.llvm.org/D140946
serge-sans-paille [Wed, 4 Jan 2023 07:14:42 +0000 (08:14 +0100)]
Move from llvm::makeArrayRef to ArrayRef deduction guides
Since we're now requiring C++17, Let's get rid of makeXXX functions like
makeArrayRef, and use deduction guides instead.
This is a first step: Introduce the deduction guide. Following steps
will be a) use them and b) deprecate makeArrayRef.
Apart from codebase modernization, there isn't much benefit from that
move, but I can still mention that it would slightly (probably
negligibly) decrease the number of symbols / debug info, as deduction
guides don't generate new code.
Differential Revision: https://reviews.llvm.org/D140896
Yeting Kuo [Tue, 20 Dec 2022 05:24:01 +0000 (13:24 +0800)]
[VP][RISCV] Add vp.ctlz/cttz and RISC-V support.
The patch also adds expandVPCTLZ and expandVPCTTZ to expand vp.ctlz/cttz nodes
and the cost model of vp.ctlz/cttz.
Reviewed By: craig.topper
Differential Revision: https://reviews.llvm.org/D140370
Xiaodong Liu [Wed, 4 Jan 2023 06:10:43 +0000 (14:10 +0800)]
[LoongArch] Add intrinsics for MOVFCSR2GR and MOVGR2FCSR instructions
Instruction formats:
`movgr2fcsr fcsr, rj`
`movfcsr2gr rd, fcsr`
MOVGR2FCSR modifies the value of the software writable field
corresponding to the FCSR (floating-point control and status
register) `fcsr` according to the value of the lower 32 bits of
the GR (general purpose register) `rj`.
MOVFCSR2GR sign extends the 32-bit value of the FCSR `fcsr`
and writes it into the GR `rd`.
Add "i32 @llvm.loongarch.movfcsr2gr(i32)" intrinsic for MOVFCSR2GR
instruction. The argument is FCSR register number. The return value
is the value in the FCSR.
Add "void @llvm.loongarch.movgr2fcsr(i32, i32)" intrinsic for MOVGR2FCSR
instruction. The first argument is the FCSR number, the second argument
is the value in GR.
Reviewed By: SixWeining, xen0n
Differential Revision: https://reviews.llvm.org/D140685
Amaury Séchet [Wed, 4 Jan 2023 02:05:30 +0000 (02:05 +0000)]
[NFC] Autogenerate test/Transforms/InstCombine/fls.ll
Amir Ayupov [Wed, 4 Jan 2023 01:39:55 +0000 (17:39 -0800)]
[BOLT][CMake] Add merge-fdata to bolt component
Build and install `merge-fdata` tool as part of `bolt` component:
```
$ ninja bolt
# builds llvm-bolt, perf2bolt and merge-fdata
$ cmake --install . --component bolt --prefix $HOME/test-install-bolt
-- Install configuration: "Release"
-- Install configuration: "Release"
-- Installing: /home/aaupov/test-install-bolt/lib/libbolt_rt_instr.a
-- Installing: /home/aaupov/test-install-bolt/lib/libbolt_rt_hugify.a
-- Installing: /home/aaupov/test-install-bolt/lib/libbolt_rt_instr_osx.a
-- Installing: /home/aaupov/test-install-bolt/bin/llvm-bolt
-- Installing: /home/aaupov/test-install-bolt/bin/perf2bolt
-- Installing: /home/aaupov/test-install-bolt/bin/llvm-boltdiff
-- Installing: /home/aaupov/test-install-bolt/bin/merge-fdata
```
Fixes #57249.
Reviewed By: #bolt, rafauler
Differential Revision: https://reviews.llvm.org/D139972
Amir Ayupov [Wed, 4 Jan 2023 01:38:52 +0000 (17:38 -0800)]
[BOLT][Docs] Add Sphinx documentation
Add stub Sphinx documentation, with configuration copy-pasted from lld and
index page converted from bolt/README.md.
Reviewed By: #bolt, rafauler
Differential Revision: https://reviews.llvm.org/D140156
Amir Ayupov [Wed, 4 Jan 2023 01:31:44 +0000 (17:31 -0800)]
[BOLT][NFC] Use llvm::reverse
Use llvm::reverse instead of `for (auto I = rbegin(), E = rend(); I != E; ++I)`
Reviewed By: #bolt, rafauler
Differential Revision: https://reviews.llvm.org/D140516
Matt Arsenault [Mon, 19 Dec 2022 16:23:27 +0000 (11:23 -0500)]
CodeGen: Clean up some tests with broken "strictfp" attribute
Johannes Doerfert [Wed, 28 Dec 2022 06:05:44 +0000 (22:05 -0800)]
[OpenMP][AMDGPU][NFC] Improve error message for errors
Johannes Doerfert [Wed, 28 Dec 2022 06:03:52 +0000 (22:03 -0800)]
[OpenMP][JIT][FIX] Create the default O0 pipeline for -O0
Johannes Doerfert [Wed, 28 Dec 2022 04:43:10 +0000 (20:43 -0800)]
[OpenMP] Unify "exec_mode" query code and default to SPMD
Defaulting to Generic mode doesn't make much sense as the kernel needs
to be prepared for it. SPMD mode is the "native" execution, e.g., for
"bare" kernels. It also is the execution method for constructors and
destructors (as we might otherwise throw an extra warp onto them).
Differential Revision: https://reviews.llvm.org/D140718
Matt Arsenault [Wed, 7 Dec 2022 18:20:39 +0000 (13:20 -0500)]
clang: Don't emit "frame-pointer"="none"
This is the default behavior and cuts down on attribute spam.
Probably should also do something to consolidate the option spellings;
printing and parsing it is repeated in at least 3 different places.
In the OpenMP tests, I had to manually delete some metadata check
lines update_cc_test_checks was inserting that included the local
build revision.
Craig Topper [Wed, 4 Jan 2023 00:25:08 +0000 (16:25 -0800)]
[SelectionDAG][GlobalISel] Move even divisor optimization for division by constant into UnsignedDivideUsingMagic implementation. NFC
I've added a bool to UnsignedDivideUsingMagic so we can continue
testing it in the unit test with and without this optimization in
the unit test.
This is a step towards supporting "uncooperative" odd divisors.
See https://ridiculousfish.com/blog/posts/labor-of-division-episode-iii.html
Reviewed By: lebedev.ri
Differential Revision: https://reviews.llvm.org/D140924
Tony Tye [Sat, 24 Dec 2022 01:04:30 +0000 (01:04 +0000)]
[AMDGPU][NFC] DWARF extensions minor update
1. Minor editorial corrections.
2. Allow different call frames to be associated with different target
architectures in a single thread.
Reviewed By: scott.linder
Differential Revision: https://reviews.llvm.org/D140646
Fangrui Song [Tue, 3 Jan 2023 23:48:17 +0000 (15:48 -0800)]
[ELF] Improve --obj-path tests
Combine two ThinLTO --obj-path tests and improve checks.
Add a --obj-path test for regular LTO.
Fangrui Song [Tue, 3 Jan 2023 23:06:43 +0000 (15:06 -0800)]
[ELF] Simplify --thinlto-index-only tests
James Y Knight [Fri, 16 Dec 2022 18:48:39 +0000 (13:48 -0500)]
[AMDGPU] Fix useDeprecatedPositionallyEncodedOperands errors.
This is a follow-on to https://reviews.llvm.org/D134073.
The errors in the R600 half were fixed previously in
https://reviews.llvm.org/D134078. Originally, I thought that the fixes
to the AMDGPU half would be tricky, but upon taking another look,
there were only a couple minor issues that needed fixing:
1. Previously, buffer load instructions (`BUFFER_LOAD_*_LDS_*`) were
populating the `vdata` field in the instruction from the `swz`
operand. This was incorrect, but harmless, as when the LDS option is
set, the instruction does not use the vdata field.
2. The `BUFFER_STORE_LDS_DWORD_gfx90a` instruction was populating
`acc` from the `swz` operand, because `acc` was set to `?`. (I believe
that the intent here was to leave the instruction bit as an "unknown
value", but you can't do that except by setting the bits on `Inst`
directly). Also harmless, for the same reason.
Differential Revision: https://reviews.llvm.org/D140918
Philip Reames [Tue, 3 Jan 2023 22:34:28 +0000 (14:34 -0800)]
[RISCV][InsertVSETVLI] Split out demanded property for zero/non-zero of VL
The scalar move instructions (vmv.s.x, and fvmv.s.f) depend solely on whether the VL is 0 or non-zero. By tracking the fact we only demand the zeroness and not the whole VL value, we can allow changing VL over a scalar move. This helps to eliminate vsetvli toggles.
Differential Revision: https://reviews.llvm.org/D140157
V Donaldson [Tue, 3 Jan 2023 18:31:30 +0000 (10:31 -0800)]
[flang] Control flow graph issues
Address several issues involving control flow graph generation and
structured code ops.
- Fix a problem with constructs nested inside unstructured selection
constructs. This is a general problem involving branches that are
implied rather than explicit. It is addressed in the generic genFIR
"wrapper" function that calls individual statement-specific genFIR calls.
- The previous fix requires some compensating changes in IF and DO
construct code lowering.
- Streamline the code to generate explicit DO loop variable updates.
- Fix a problem with the individual detailed genFIR calls made in the
genFIR(SelectTypeConstruct) call.
- Modify control flow graph generation to support the insertion of
deallocation and finalization code when lowering most END <construct>
statements.
Amir Ayupov [Thu, 22 Dec 2022 00:31:26 +0000 (16:31 -0800)]
[BOLT] Check no-LBR samples in mayHaveProfileData
No-LBR mode wasn't tested and slipped when mayHaveProfileData was added for
Lite mode. This enables processing of profiles collected without LBR and
converted with `perf2bolt -nl` option.
Test Plan:
bin/llvm-lit -a tools/bolt/test/X86/nolbr.s
https://github.com/rafaelauler/bolt-tests/pull/20
Reviewed By: #bolt, rafauler
Differential Revision: https://reviews.llvm.org/D140256
Rob Suderman [Tue, 3 Jan 2023 22:14:43 +0000 (14:14 -0800)]
[mlir][tosa] Add broadcasting case for tosa.resize to linalg implementation
When lowering tosa.resize it is possible there is an unary input dimension.
Lowering to a new tosa.resize and explicit broadcast simplifies the
tosa.resize operation to avoid recomputing the identical broadcasted values.
This change reworks the broadcast optimization reuse the tosa.resize generic
implementation.
Reviewed By: jpienaar
Differential Revision: https://reviews.llvm.org/D139963
Owen Anderson [Sat, 31 Dec 2022 06:12:20 +0000 (23:12 -0700)]
[ValueTracking] Improve ComputeNumSignBits to handle Trunc
Reviewed By: nikic
Differential Revision: https://reviews.llvm.org/D140796
Philip Reames [Tue, 3 Jan 2023 22:22:38 +0000 (14:22 -0800)]
[RISCV] Minor type fix [nfc]
Philip Reames [Tue, 3 Jan 2023 22:17:33 +0000 (14:17 -0800)]
[RISCV][InsertVSETVLI] Rewrite scalar insert forward rule in terms of demanded fields
This is mostly geared at consolidating logic into one form to reduce code duplication, but also has the effect of being a slight generalization. Since these operations aren't masked, we can ignore the mask policy bit when deciding on compatibility. The previous code was overly strict in checking that both policy bits matched.
Note: There's a slight difference from the reviewed version. The reviewed version was based on a local revision which included the isCompatible change to only check AVL if VL is used. I apparently never landed that change, and while functional, the functional change isn't visible without this one. I chose to role the extra change into this patch.
Differential Revision: https://reviews.llvm.org/D140147
LLVM GN Syncbot [Tue, 3 Jan 2023 22:08:13 +0000 (22:08 +0000)]
[gn build] Port
a455c91601a8
Matt Arsenault [Mon, 2 Jan 2023 02:29:20 +0000 (21:29 -0500)]
llvm-reduce: Add reduction for invokes
Main thing I was unsure about was to whether try to delete the now
dead landing blocks, or leave that for the unreachable block reduction.
Personality function is not reduced, but that should be a separate
reduction on the function.
Fixes #58815