platform/upstream/llvm.git
21 months ago[Clang] Add lifetimebound attribute to std::move/std::forward
Alexander Shaposhnikov [Thu, 19 Jan 2023 20:57:24 +0000 (20:57 +0000)]
[Clang] Add lifetimebound attribute to std::move/std::forward

Clang now automatically adds [[clang::lifetimebound]] to the parameters of
std::move, std::forward et al, this enables Clang to diagnose more cases
where the returned reference outlives the object.
Associated GitHub issue: https://github.com/llvm/llvm-project/issues/60020

Test plan: ninja check-clang check-all

Differential revision: https://reviews.llvm.org/D141744

21 months ago[VPlan] Add vp_depth_first_deep (NFC)
Florian Hahn [Thu, 19 Jan 2023 20:34:22 +0000 (20:34 +0000)]
[VPlan] Add vp_depth_first_deep (NFC)

Similar to vp_depth_first_shallow (D140512) add vp_depth_first_deep to
make existing code clearer and more compact.

Reviewed By: Ayal

Differential Revision: https://reviews.llvm.org/D142055

21 months ago[OpenMP][libomp] Insert correct HWLOC version guards
Gilles Gouaillardet [Thu, 19 Jan 2023 20:24:00 +0000 (14:24 -0600)]
[OpenMP][libomp] Insert correct HWLOC version guards

Put needed HWLOC version guards around relevant HWLOC API.
Tested OpenMP host runtime build with HWLOC 1.11.13, 2.0-2.9.

Differential Revision: https://reviews.llvm.org/D142152
Fix #54951

21 months ago[mlir] Update VectorToGPU to new memory space
Thomas Raoux [Thu, 19 Jan 2023 13:38:38 +0000 (13:38 +0000)]
[mlir] Update VectorToGPU to new memory space

GPU memory space have changed to new attributes. Update VectorToGPU pass
to use those.

Differential Revision: https://reviews.llvm.org/D142105

21 months agoRevert "[MLIR] Update bazel build file after 455305624884cf9237143e2ba0635fcc5ba5206"
Frederik Gossen [Thu, 19 Jan 2023 20:05:05 +0000 (15:05 -0500)]
Revert "[MLIR] Update bazel build file after 455305624884cf9237143e2ba0635fcc5ba5206"

This reverts commit 399b8ee7edf1b108adf7cddead7bf1ab284cf190.

21 months ago[llvm][codegen] Fix non-determinism in StackFrameLayoutAnalysisPass output
Paul Kirth [Thu, 19 Jan 2023 16:14:43 +0000 (16:14 +0000)]
[llvm][codegen] Fix non-determinism in StackFrameLayoutAnalysisPass output

We were iterating over a SmallPtrSet when outputting slot variables.
This is still correct but made the test fail under reverse iteration.
This patch replaces the SmallPtrSet with a SmallVector.

Also remove the "Stack Frame Layout" lines from arm64-opt-remarks-lazy-bfi test,
since those also break under reverse iteration.

Reviewed By: nickdesaulniers

Differential Revision: https://reviews.llvm.org/D142127

21 months agoRemove the undocumented `help` subcommand.
Jim Ingham [Thu, 19 Jan 2023 19:59:54 +0000 (11:59 -0800)]
Remove the undocumented `help` subcommand.

This is processed by hand in CommandObjectMultiword, and is undiscoverable,
it doesn't work in all cases.  Because it is a bare word, it can't really be
extended w/o introducing the possibility of collisions as well.  If we did
want to do something like this we should add a --help flag to CommandObject.  That
way the feature would be consistent and documented.

Differential Revision: https://reviews.llvm.org/D142067

21 months ago[libc++][format] range-default-formatter for map
Mark de Wever [Thu, 5 May 2022 16:57:32 +0000 (18:57 +0200)]
[libc++][format] range-default-formatter for map

Implements the range-default-formatter specialization range_format::map.

Implements parts of
- P2286R8 Formatting Ranges
- P2585R0 Improving default container formatting

Depends on D140653

Reviewed By: ldionne, #libc

Differential Revision: https://reviews.llvm.org/D140801

21 months agoRemove useless / untested verifier in scf.foreach_thread (NFC)
Mehdi Amini [Tue, 17 Jan 2023 11:36:54 +0000 (11:36 +0000)]
Remove useless / untested verifier in scf.foreach_thread (NFC)

21 months ago[opt] Fix static code analysis concerns
Arvind Sudarsanam [Thu, 19 Jan 2023 18:24:46 +0000 (10:24 -0800)]
[opt] Fix static code analysis concerns

This is an issue reported inside the NewPMDriver module. Static analyzer reported that Null pointer 'P' may be dereferenced at line 371 and two more sites. Proposed change guards this use.

Reviewed By: aeubanks

Differential Revision: https://reviews.llvm.org/D142047

21 months agoRemoving 'TuningSlow3OpsLEA' from ICL config
Noah Goldstein [Thu, 19 Jan 2023 19:02:40 +0000 (11:02 -0800)]
Removing 'TuningSlow3OpsLEA' from ICL config

According to https://uops.info/ ICL and newer have fast 3-term LEA.

Reviewed By: pengfei

Differential Revision: https://reviews.llvm.org/D141974

21 months agoAdd transform ctpop(X) -> 1 iff X is non-zero power of 2
Noah Goldstein [Thu, 19 Jan 2023 19:02:26 +0000 (11:02 -0800)]
Add transform ctpop(X) -> 1 iff X is non-zero power of 2

Definitionally a non-zero power of 2 will only have 1 bit set so this
is a freebee.

Reviewed By: spatel

Differential Revision: https://reviews.llvm.org/D141990

21 months agoAdd tests for ctpop(X) where X is a power of 2; NFC
Noah Goldstein [Thu, 19 Jan 2023 19:01:25 +0000 (11:01 -0800)]
Add tests for ctpop(X) where X is a power of 2; NFC

Reviewed By: spatel

Differential Revision: https://reviews.llvm.org/D141989

21 months ago[MLIR] Update bazel build file after 455305624884cf9237143e2ba0635fcc5ba5206
Frederik Gossen [Thu, 19 Jan 2023 19:25:55 +0000 (14:25 -0500)]
[MLIR] Update bazel build file after 455305624884cf9237143e2ba0635fcc5ba5206

21 months ago[gn build] Port c90801457f7c
LLVM GN Syncbot [Thu, 19 Jan 2023 19:13:26 +0000 (19:13 +0000)]
[gn build] Port c90801457f7c

21 months ago[libc++] Refactor deque::iterator algorithm optimizations
Nikolas Klauser [Sun, 20 Nov 2022 22:16:20 +0000 (23:16 +0100)]
[libc++] Refactor deque::iterator algorithm optimizations

This has multiple benefits:
- The optimizations are also performed for the `ranges::` versions of the algorithms
- Code duplication is reduced
- it is simpler to add this optimization for other segmented iterators,
  like `ranges::join_view::iterator`
- Algorithm code is removed from `<deque>`

Reviewed By: ldionne, huixie90, #libc

Spies: mstorsjo, sstefan1, EricWF, libcxx-commits, mgorny

Differential Revision: https://reviews.llvm.org/D132505

21 months ago[AMDGPU] Treat WMMA the same as MFMA for sched_barrier
Stanislav Mekhanoshin [Wed, 18 Jan 2023 23:20:36 +0000 (15:20 -0800)]
[AMDGPU] Treat WMMA the same as MFMA for sched_barrier

MFMA and WMMA essentially the same thing, but apear on different ASICs.

Differential Revision: https://reviews.llvm.org/D142062

21 months ago[AMDGPU] Introduce separate register limit bias in scheduler
Stanislav Mekhanoshin [Wed, 18 Jan 2023 19:58:50 +0000 (11:58 -0800)]
[AMDGPU] Introduce separate register limit bias in scheduler

Current implementation abuses ErrorMargin to apply an additional
bias to VGPR and SGPR limits under a high register pressure. The
ErrorMargin exists to account for inaccuracies of the RP tracker
and not to tackle an excess pressure. Introduce separate bias for
this purpose and also make it different for SGPRs and VGPRs as we
may want to use different values in the future.

This is supposed to be NFC, however there is a subtle difference
when subtracting a margin overflows the limit. Doing two subtractions
makes it less probable, although manifests only in mir tests with
an artificially small register budget.

Differential Revision: https://reviews.llvm.org/D142051

21 months ago[Clang][NFC] Tweak error message for GPU architecture tools
Joseph Huber [Thu, 19 Jan 2023 18:48:28 +0000 (12:48 -0600)]
[Clang][NFC] Tweak error message for GPU architecture tools

Summary:
There shouldn't be an extra newline in these messages.

21 months ago[LinkerWrapper] Use `clang` to perform the device linking
Joseph Huber [Thu, 19 Jan 2023 17:20:07 +0000 (11:20 -0600)]
[LinkerWrapper] Use `clang` to perform the device linking

Right now in the linker wrapper we manually invoke a lot of the
toolchain programs. This reproduces a lot of logic that is already
handled in clang. Since D140158 we can now target all supported
toolchains directly via cross-compilation.

This patch changes the linker wrapper to consolidate all the alternate
linking and assembler steps into a generic call to `clang` and let clang
handle the argument handling. This heavily simplifies the interface.

Reviewed By: tra, JonChesterfield

Differential Revision: https://reviews.llvm.org/D142133

21 months agoRevert "[mlir][Index] Implement InferIntRangeInterface"
Krzysztof Drewniak [Thu, 19 Jan 2023 18:41:00 +0000 (18:41 +0000)]
Revert "[mlir][Index] Implement InferIntRangeInterface"

This reverts commit 455305624884cf9237143e2ba0635fcc5ba5206a.

Linker error, unbreak build while I work out how to fix it.

Differential Revision: https://reviews.llvm.org/D142142

21 months ago[IRLinker] Replace CallInstr with CallBase
Gulfem Savrun Yeniceri [Sat, 14 Jan 2023 00:48:32 +0000 (00:48 +0000)]
[IRLinker] Replace CallInstr with CallBase

This patch replaces CallInstr with CallBase to cover InvokeInstr
besides CallInstr while removing nocallback attribute on a call site.
It also extends drop-attribute.ll test to include a case for an invoke
instruction.

Differential Revision: https://reviews.llvm.org/D141740

21 months agoRevert "Reland [pgo] Avoid introducing relocations by using private alias"
Arthur Eubanks [Thu, 19 Jan 2023 18:19:27 +0000 (10:19 -0800)]
Revert "Reland [pgo] Avoid introducing relocations by using private alias"

This reverts commit da5a8d14b8cc6cea16ee0929413c0672b47c93d9.

Causes more duplicate symbol errors, see https://bugs.chromium.org/p/chromium/issues/detail?id=1408161.

21 months ago[MLIR] Add InferTypeOpInterface to scf.if op
Frederik Gossen [Thu, 19 Jan 2023 18:18:22 +0000 (13:18 -0500)]
[MLIR] Add InferTypeOpInterface to scf.if op

Differential Revision: https://reviews.llvm.org/D142049

21 months agoForbid implicit conversion of constraint expression to bool
Erich Keane [Tue, 17 Jan 2023 19:29:04 +0000 (11:29 -0800)]
Forbid implicit conversion of constraint expression to bool

As reported in https://github.com/llvm/llvm-project/issues/54524, and
later in https://github.com/llvm/llvm-project/issues/60038, we were not
properly implmenting temp.constr.atomic P3. This patch stops implicitly
converting constraints to bool, and ensures the Rvalue conversion takes
place as needed.

Differential Revision: https://reviews.llvm.org/D141954

21 months ago[LoopUnroll] Directly update DT instead of DTU.
Florian Hahn [Thu, 19 Jan 2023 18:10:51 +0000 (18:10 +0000)]
[LoopUnroll] Directly update DT instead of DTU.

The scope of DT updates are very limited when unrolling loops: the DT
should only need updating for
* new blocks added
* exiting blocks we simplified branches

This can be done manually without too much extra work.
MergeBlockIntoPredecessor also needs to be updated to support direct
DT updates.

This fixes excessive time spent in DTU for same cases. In an internal
example, time spent in LoopUnroll with this patch goes from ~200s to 2s.

It also is slightly positive for CTMark:
* NewPM-O3: -0.13%
* NewPM-ReleaseThinLTO: -0.11%
* NewPM-ReleaseLTO-g: -0.13%

Notable improvements are mafft (~ -0.50%) and lencod (~ -0.30%), with no
workload regressed.

https://llvm-compile-time-tracker.com/compare.php?from=78a9ee7834331fb4360457cc565fa36f5452f7e0&to=687e08d011b0dc6d3edd223612761e44225c7537&stat=instructions:u

Reviewed By: kuhar

Differential Revision: https://reviews.llvm.org/D141487

21 months ago[mlir][SCF] Fix crash in loop peeling
Matthias Springer [Thu, 19 Jan 2023 18:01:22 +0000 (19:01 +0100)]
[mlir][SCF] Fix crash in loop peeling

Upper bound and step size should be symbols instead of dims.

Differential Revision: https://reviews.llvm.org/D142136

21 months ago[Sanitizers] GetMemoryProfile implementation for FreeBSD.
David Carlier [Thu, 19 Jan 2023 18:01:03 +0000 (18:01 +0000)]
[Sanitizers] GetMemoryProfile implementation for FreeBSD.

Reviewers: dvyukov

Reviewed-By: dvyukov
Differental Revision: https://reviews.llvm.org/D140688

21 months ago[mlir][Index] Implement InferIntRangeInterface
Krzysztof Drewniak [Mon, 9 Jan 2023 17:09:17 +0000 (17:09 +0000)]
[mlir][Index] Implement InferIntRangeInterface

Implement InferIntRangeInterface for all operations in the Index dialect. The
inference implementation, unlike the one for Arith, accounts for the
fact that Index can be either 64 or 32 bits long by evaluating both
cases. Bounds are stored as if index were i64, but when inferring new
bounds, we compute both f(...) and f(trunc(...)). We then compare
trunc(f(...)) to f(trunc(...)). If they are equal in the relevant
range components, we use the 64-bit range computation, otherwise we
give the range ext(f(trunc(...))) union f(...).

Note that this can cause surprising behavior as seen in the tests,
where, for example, the order of min and max operations impacts the
behavior of the inference. The inference could perhaps be made more
precise in the future (ex. by tracking 32 and 64-bit results
separately and having them influence each other somehow) butt, since
my project targets an index=i32 platform and doesn't see index-valued
values > uint32_max, I'm not too concerned about it.

Depends on https://reviews.llvm.org/D141299

Depends on https://reviews.llvm.org/D141296

Reviewed By: Mogball

Differential Revision: https://reviews.llvm.org/D140899

21 months ago[clang][driver][AIX] Add OpenMP runtime if -fopenmp specified
Xing Xue [Thu, 19 Jan 2023 17:46:22 +0000 (12:46 -0500)]
[clang][driver][AIX] Add OpenMP runtime if -fopenmp specified

Summary:
This patch adds OpenMP runtime to the linker command line if -fopenmp is specifed for AIX.

Reviewed by: daltenty

Differential Revision: https://reviews.llvm.org/D141862

21 months agoFix zero-initialization fix-it for variable template
v1nh1shungry [Thu, 19 Jan 2023 17:35:09 +0000 (12:35 -0500)]
Fix zero-initialization fix-it for variable template

Current version there is a fix-it for

template <class> constexpr int x = 0;
template <> constexpr int x<int>; // fix-it here
but it will cause

template <> constexpr int x = 0<int>;

Differential Revision: https://reviews.llvm.org/D139705

21 months agoRevert "[lit] Stop supporting triple substrings in UNSUPPORTED and XFAIL"
Paul Robinson [Thu, 19 Jan 2023 17:26:33 +0000 (09:26 -0800)]
Revert "[lit] Stop supporting triple substrings in UNSUPPORTED and XFAIL"

This reverts commit a0f8bdbb18a82ec150515d24f6eefb3519d4459a.

Several bots are failing in shtest-format.py, likely because of this.

21 months ago[NFC][flang] Added debug option to bisect TBAA tag attachments.
Slava Zakharin [Thu, 19 Jan 2023 16:46:52 +0000 (08:46 -0800)]
[NFC][flang] Added debug option to bisect TBAA tag attachments.

Reviewed By: jeanPerier, PeteSteinfeld

Differential Revision: https://reviews.llvm.org/D142070

21 months agoSilence some sign comparison warnings; NFC
Aaron Ballman [Thu, 19 Jan 2023 17:25:14 +0000 (12:25 -0500)]
Silence some sign comparison warnings; NFC

The std::optional implementation in MSVC causes this code to produce a
sign comparison warning. This ensures the types are the same sign.

21 months ago[libc] add scanf float converter
Michael Jones [Wed, 21 Dec 2022 22:29:43 +0000 (14:29 -0800)]
[libc] add scanf float converter

This patch adds the %f/F/e/E/g/G/a/A conversions for scanf, as well as
accompanying tests. This implementation matches the definition set forth
in the standard, which may conflict with some other implementations.

Reviewed By: sivachandra

Differential Revision: https://reviews.llvm.org/D141091

21 months ago[libc] add internal string class
Michael Jones [Fri, 6 Jan 2023 23:00:51 +0000 (15:00 -0800)]
[libc] add internal string class

The scanf implementation needs a dynamically resizing string class. This
patch adds a minimal version of that class along with tests to check the
current functionality.

Reviewed By: sivachandra

Differential Revision: https://reviews.llvm.org/D141162

21 months ago[Flang][Debug] Modifications for getting pathname
Kiran Chandramohan [Thu, 19 Jan 2023 16:49:26 +0000 (16:49 +0000)]
[Flang][Debug] Modifications for getting pathname

-> Use file pathname from the Flang frontend. It is the frontend
that is in-charge of finding the files and is hence the canonical
source for paths.
-> Convert pathname to absolute pathname while creating the moduleOp.

Co-authored-by: Peter Klausler <pklausler@nvidia.com>
Reviewed By: PeteSteinfeld, vzakhari, jeanPerier, awarzynski

Differential Revision: https://reviews.llvm.org/D141674

21 months ago[libc++][format] Adds formatter std::vector<bool>.
Mark de Wever [Tue, 29 Nov 2022 06:57:30 +0000 (07:57 +0100)]
[libc++][format] Adds formatter std::vector<bool>.

Implements parts of
- P2286R8 Formatting Ranges

Depends on D140653

Reviewed By: ldionne, #libc

Differential Revision: https://reviews.llvm.org/D141761

21 months ago[gn build] Port 04d4f4b3d4e4
LLVM GN Syncbot [Thu, 19 Jan 2023 16:51:17 +0000 (16:51 +0000)]
[gn build] Port 04d4f4b3d4e4

21 months ago[AARCH64][SVE] Do not optimize vector conversions
Zino Benaissa [Thu, 19 Jan 2023 16:44:23 +0000 (16:44 +0000)]
[AARCH64][SVE] Do not optimize vector conversions

shuffle_vector instructions are serialized targeting SVE fixed vectors, see
https://reviews.llvm.org/D139111. This patch disables
optimizeExtendOrTruncateConversion peepholes that generates shuffle_vector.

Differential Revision: https://reviews.llvm.org/D141439

21 months ago[CostModel][AArch64] Precommit tests for LD1 single-element to lane. NFC.
Sjoerd Meijer [Wed, 11 Jan 2023 14:41:10 +0000 (14:41 +0000)]
[CostModel][AArch64] Precommit tests for LD1 single-element to lane. NFC.

21 months ago[libc++][format] Adds container adaptor formatters.
Mark de Wever [Thu, 5 May 2022 16:57:32 +0000 (18:57 +0200)]
[libc++][format] Adds container adaptor formatters.

Implements parts of
- P2286R8 Formatting Ranges

Depends on D140653

Reviewed By: ldionne, #libc

Differential Revision: https://reviews.llvm.org/D141290

21 months ago[SystemZ] Improvement in tryRxSBG().
Jonas Paulsson [Wed, 18 Jan 2023 19:29:37 +0000 (13:29 -0600)]
[SystemZ] Improvement in tryRxSBG().

Only allow replacements of nodes that have a single user. This is better as
simple instructions (e.g. XGRK) are one cycle faster, and it helps in cases
where both inputs share a common node.

Review: Ulrich Weigand

21 months ago[NFC][bazel] Move _tensor_ops_ext.py to the correct filegroup
Jordan Rupprecht [Thu, 19 Jan 2023 16:43:24 +0000 (08:43 -0800)]
[NFC][bazel] Move _tensor_ops_ext.py to the correct filegroup

21 months ago[NFC][bazel] Add _tensor_ops_ext.py to SparseTensorOpsPyFiles
Jordan Rupprecht [Thu, 19 Jan 2023 16:39:18 +0000 (08:39 -0800)]
[NFC][bazel] Add _tensor_ops_ext.py to SparseTensorOpsPyFiles

This corresponds to the cmake change in 81ca5aa452400843235e058bc9c83fe71eccd593

21 months ago[lit] Stop supporting triple substrings in UNSUPPORTED and XFAIL
Paul Robinson [Wed, 4 Jan 2023 19:35:59 +0000 (11:35 -0800)]
[lit] Stop supporting triple substrings in UNSUPPORTED and XFAIL

AFAICT all in-tree lit tests have been converted to use `target=...`
and so there is no longer any need for triples being special.
Some project config files still define their own features based on
the triple, but those are normal feature words (although now are
redundant with target= checks).

Downstream tests that use triple substrings will need to convert.
For example:
    UNSUPPORTED: -aix
    XFAIL: arm
becomes
    UNSUPPORTED: target={{.*}}-aix{{.*}}
    XFAIL: target=arm{{.*}}

You can do
    git log --grep "special handling for triples"
to find many examples of updates to the upstream tests.

https://discourse.llvm.org/t/rfc-lits-requires-and-triples/66041

Differential Revision: https://reviews.llvm.org/D141007

21 months ago[flang] Allow pointer association between derived-type pointer and unlimited polymorp...
Valentin Clement [Thu, 19 Jan 2023 16:34:01 +0000 (17:34 +0100)]
[flang] Allow pointer association between derived-type pointer and unlimited polymorphic target

Pointer association to unlimited polymorphic target is allowed for
unlimited polymorphic pointer and non-extensible derived-type.
This is checked by the semantic and this patch allows it in the
fir.rebox operation.

Reviewed By: jeanPerier, PeteSteinfeld

Differential Revision: https://reviews.llvm.org/D142104

21 months ago[flang] Support polymorphic source in RESHAPE intrinsic
Valentin Clement [Thu, 19 Jan 2023 16:33:08 +0000 (17:33 +0100)]
[flang] Support polymorphic source in RESHAPE intrinsic

Result must carry the polymorphic type information
from the source.

Reviewed By: jeanPerier, PeteSteinfeld

Differential Revision: https://reviews.llvm.org/D142095

21 months ago[flang] Fix SELECT TYPE lowering when CLASS DEFAULT is not the last type guard
Valentin Clement [Thu, 19 Jan 2023 16:32:02 +0000 (17:32 +0100)]
[flang] Fix SELECT TYPE lowering when CLASS DEFAULT is not the last type guard

CLASS DEFAULT needs to be the last attribute when fir.select_type op is created.
It needs to be at its actual position in the Fortran code when the TypeGuardStmt
are processed. The current lowering was crashing when CLASS DEFAULT was not at
the last position.
This patch fixes the issue by tracking the actual position of the CLASS DEFAULT
type guard and set it at the correct position after the fir.select_type op
is created.

Reviewed By: jeanPerier, PeteSteinfeld

Differential Revision: https://reviews.llvm.org/D142091

21 months ago[gn build] Port 22e8525dfdd7
LLVM GN Syncbot [Thu, 19 Jan 2023 16:20:20 +0000 (16:20 +0000)]
[gn build] Port 22e8525dfdd7

21 months ago[libc++][format] Implements range_formatter
Mark de Wever [Thu, 5 May 2022 16:57:32 +0000 (18:57 +0200)]
[libc++][format] Implements range_formatter

Implements parts of
- P2286R8 Formatting Ranges
- P2585R0 Improving default container formatting

Depends on D140651

Reviewed By: ldionne, #libc

Differential Revision: https://reviews.llvm.org/D140653

21 months ago[SROA] Check TBAA metadata in tests (NFC)
Nikita Popov [Thu, 19 Jan 2023 16:10:09 +0000 (17:10 +0100)]
[SROA] Check TBAA metadata in tests (NFC)

By switching to --check-globals. Also make sure that the
!tbaa.struct metadata mapping is preserved.

21 months ago[clangd] Fix clangd-fuzzer build.
Haojian Wu [Thu, 19 Jan 2023 16:03:08 +0000 (17:03 +0100)]
[clangd] Fix clangd-fuzzer build.

21 months ago[AArch64] Allow poison elements of fixed-vectors to be duplicated as a widened element
Matt Devereau [Mon, 16 Jan 2023 14:21:18 +0000 (14:21 +0000)]
[AArch64] Allow poison elements of fixed-vectors to be duplicated as a widened element

Expanding upon https://reviews.llvm.org/D138203, allow null indices in
InsertElts to be matched with any value and be duplicated if the fixed
vector the scalar values are inserted into is poison, and the scalable vector
the subvector being inserted into is poison.

Differential Revision: https://reviews.llvm.org/D141846

21 months ago[clang][dataflow] Fix bug in joining bool values.
Yitzhak Mandelbaum [Fri, 13 Jan 2023 18:33:52 +0000 (18:33 +0000)]
[clang][dataflow] Fix bug in joining bool values.

Currently, the code assumes that all boolean-typed values are an instance of
`BoolValue` (or its subclasses). Yet, lvalues violate this assumption. This
patch drops the assumption and strengthens the check to confirm the shape of
both values being joined.

The patch also notes as FIXMES a number of problems discovered fixing this bug.

Differential Revision: https://reviews.llvm.org/D141709

21 months ago[flang][hlfir] Lower whole allocatable or pointer component ref
Jean Perier [Thu, 19 Jan 2023 15:56:56 +0000 (16:56 +0100)]
[flang][hlfir] Lower whole allocatable or pointer component ref

Compare to other component ref lowering, the hlfir.designate result type
computation is different, and the allocatable/pointer/contiguous must
be set on the hlfir.designate so that the component attributes are
kept in the IR.

Differential Revision: https://reviews.llvm.org/D142111

21 months ago[Local] Preserve noundef metadata in copyMetadataForLoad()
Nikita Popov [Thu, 19 Jan 2023 15:55:23 +0000 (16:55 +0100)]
[Local] Preserve noundef metadata in copyMetadataForLoad()

If we're only changing the type of the load, preserve the noundef
metadata.

21 months ago[flang] Add semantic check for multiple part-ref with non-zero rank
Kelvin Li [Thu, 19 Jan 2023 15:52:10 +0000 (10:52 -0500)]
[flang] Add semantic check for multiple part-ref with non-zero rank

This patch is to diagnose the case when a type bound procedure is passed as an actual procedure argument.

   call sub0(t%t3%t2%t%info1)

Fix: https://github.com/llvm/llvm-project/issues/55826

Committed on behalf of DanielCChen

Differential Revision: https://reviews.llvm.org/D141506

21 months ago[InstCombine] Add test for load type conversion with !noundef (NFC)
Nikita Popov [Thu, 19 Jan 2023 15:50:02 +0000 (16:50 +0100)]
[InstCombine] Add test for load type conversion with !noundef (NFC)

The !noundef metadata is currently dropped.

21 months ago[AArch64] Armv9-A implies FP16
David Green [Thu, 19 Jan 2023 15:37:50 +0000 (15:37 +0000)]
[AArch64] Armv9-A implies FP16

As Armv9-a implies SVE2 it implies SVE (added in D141411) and so it
should also imply FP16, which this patch adds. This helps get the target
features correct when using `target("arch=armv9-a")` attributes.

There is also an adjustment to AssertSameExtensionFlags in this patch to
make it print cpu names, useful when the TargetParser unit tests are run
through lit to distinguish which cpu is failing.

Differential Revision: https://reviews.llvm.org/D142087

21 months ago[OpenMP][Fix] Track all threads that may delete an entry
Guilherme Valarini [Thu, 19 Jan 2023 15:11:20 +0000 (12:11 -0300)]
[OpenMP][Fix] Track all threads that may delete an entry

The entries inside a "target data end" is processed in three steps:

  1. Query internal data maps for the entries and dispatch any necessary
     device-side operations (i.e., data retrieval);
  2. Synchronize the such operations;
  3. Update the host-side pointers and remove any entry which reference
     counter reached zero.

Such steps may be executed by multiple threads which may even operate on
the same entries. The current implementation (D121058) tries to
synchronize these threads by tracking the "owner" for the deletion of
each entry using their thread ID. Unfortunately it may failed to do so
because of the following reasons:

  1. The owner is always assigned at the first step only if the
     reference count is 0 when the map is queried. This does not work
     when such owner thread is faster than a previous one that is also
     processing the same entry on another "target data end", leading to
     user-after-free problems.
  2. The entry is only added for post-processing (step 3) if its
     reference count was 0 at query time (step 1). This does not allow
     for threads to exchange responsibility for the deletion, leading
     again to user-after-free problems.
  3. An entry may appear multiple times in the arguments array of a
     "target data end", which may lead to deleting the entry
     prematurely, leading, again, to user-after-free problems.

This patch addresses these problems by tracking all the threads that are
using an entry at "target data end" region through a counter, ensuring
only the last one deletes it when needed. It also ensures that all
entries that are successfully found inside the data maps in step 1 are
also processed in step 3, regardless if their reference count was zeroed
or not at query time. This ensures the deletion ownership may be passed
to any thread that is using such entry.

Reviewed By: ye-luo

Differential Revision: https://reviews.llvm.org/D132676

21 months ago[Dexter] Add on_line parameter to DexExpectStepOrder command
Ben Mudd [Thu, 19 Jan 2023 15:05:04 +0000 (15:05 +0000)]
[Dexter] Add on_line parameter to DexExpectStepOrder command

DexExpectStepOrder uses the line to expect a debugger step from the actual line
of the command in the Dexter source file. Now Dexter scripts have mainly moved
to thier own script files instead of the actual source, there should be a
option to override this behaviour to choose your own debugger step location.

Reviewed By: Orlando

Differential Revision: https://reviews.llvm.org/D142099

21 months ago[InstCombine] Add non-logical variants for some ctpop and/or tests (NFC)
Nikita Popov [Thu, 19 Jan 2023 15:05:45 +0000 (16:05 +0100)]
[InstCombine] Add non-logical variants for some ctpop and/or tests (NFC)

And regenerate test checks to pick up new names.

21 months ago[InstCombine] Drop incorrect test (NFC)
Nikita Popov [Thu, 19 Jan 2023 14:55:26 +0000 (15:55 +0100)]
[InstCombine] Drop incorrect test (NFC)

I made a typo here, this was supposed to be !align rather than
!aligned. But then !align can only be applied to loads, not calls
(where one would use the return attribute instead). And freeze
can't be pushed through loads anyway, so there's no way to test
this case (same as !nonnull).

21 months ago[clang][dataflow] Add (initial) debug printing for `Value` and `Environment`.
Yitzhak Mandelbaum [Fri, 13 Jan 2023 19:26:57 +0000 (19:26 +0000)]
[clang][dataflow] Add (initial) debug printing for `Value` and `Environment`.

Also adds uses of the new printing in analysis inner loop.

Differential Revision: https://reviews.llvm.org/D141716

21 months ago[SPIR-V] Emit OpExecutionMode ContractionOff for no FP_CONTRACT metadata
Michal Paszkowski [Wed, 18 Jan 2023 21:23:11 +0000 (22:23 +0100)]
[SPIR-V] Emit OpExecutionMode ContractionOff for no FP_CONTRACT metadata

This change makes the AsmPrinter emit OpExecutionMode ContractionOff
when both opencl.enable.FP_CONTRACT and spirv.ExecutionMode
metadata are not present.

Differential Revision: https://reviews.llvm.org/D141734

21 months ago[InstCombine] Add tests for freeze with !range and !align metadata (NFC)
Nikita Popov [Thu, 19 Jan 2023 14:23:48 +0000 (15:23 +0100)]
[InstCombine] Add tests for freeze with !range and !align metadata (NFC)

These are currently being miscompiled, see PR59888.

21 months ago[X86] Add register definitions for cfi directives
Alex Brachet [Thu, 19 Jan 2023 14:10:31 +0000 (14:10 +0000)]
[X86] Add register definitions for cfi directives

Add {e,r}flags, {g,f}s.base registers so they can be referenced in cfi
directives,. They are not otherwise useable in any instructions,
but can be implicitly pushed to the stack like with pushf for
{e,r}flags.

Differential Revision: https://reviews.llvm.org/D141879

21 months ago[gn] port 939dce12f9f3 (clangd uses include-cleaner) more
Nico Weber [Thu, 19 Jan 2023 14:01:29 +0000 (09:01 -0500)]
[gn] port 939dce12f9f3 (clangd uses include-cleaner) more

21 months ago[gn] port 939dce12f9f3 (clangd uses include-cleaner)
Nico Weber [Thu, 19 Jan 2023 13:45:56 +0000 (08:45 -0500)]
[gn] port 939dce12f9f3 (clangd uses include-cleaner)

21 months ago[clangd] Implement unused include warnings with include-cleaner library.
Haojian Wu [Mon, 2 Jan 2023 21:10:11 +0000 (22:10 +0100)]
[clangd] Implement unused include warnings with include-cleaner library.

A prototype of using include-cleaner library in clangd:

- (re)implement clangd's "unused include" warnings with the library
- the new implementation is hidden under a flag `Config::UnusedIncludesPolicy::Experiment`

Differential Revision: https://reviews.llvm.org/D140875

21 months ago[llvm][ir] Purge MD_prof custom accessors
Christian Ulmann [Thu, 19 Jan 2023 11:04:53 +0000 (12:04 +0100)]
[llvm][ir] Purge MD_prof custom accessors

This commit purges direct accesses to MD_prof metadata and replaces them
with the accessors provided from the utility file wherever possible.
This commit can be seen as the first step towards switching the branch weights to 64 bits.
See post here: https://discourse.llvm.org/t/extend-md-prof-branch-weights-metadata-from-32-to-64-bits/67492

Reviewed By: davidxl, paulkirth

Differential Revision: https://reviews.llvm.org/D141393

21 months ago[DAG] Peek through ZEXT/TRUNC in foldAddSubMasked1
Amaury Séchet [Tue, 17 Jan 2023 02:17:18 +0000 (02:17 +0000)]
[DAG] Peek through ZEXT/TRUNC in foldAddSubMasked1

Fix a regression in D141883

Depends on D141883

Reviewed By: lebedev.ri

Differential Revision: https://reviews.llvm.org/D141884

21 months ago[clang] Build UsingType for elaborated type specifiers.
Haojian Wu [Tue, 3 Jan 2023 14:08:42 +0000 (15:08 +0100)]
[clang] Build UsingType for elaborated type specifiers.

Support building UsingType for elaborated type specifiers:

```
namespace ns { class Foo {}; }

using ns::Foo;

// The TypeLoc of `Foo` below should be a ElaboratedTypeLoc with an
// inner UsingTypeLoc rather than the underlying `CXXRecordTypeLoc`
class Foo foo;
```

Differential Revision: https://reviews.llvm.org/D141280

21 months ago[flang][hlfir] Enable lowering and passing of allocatables and pointers.
Jean Perier [Thu, 19 Jan 2023 13:18:08 +0000 (14:18 +0100)]
[flang][hlfir] Enable lowering and passing of allocatables and pointers.

Adds support for:
- referencing a whole allocatable/pointer symbol
- passing allocatable/pointer in a call

This required update in HLFIRTools.cpp helpers so that the
raw address, extents, lower bounds, and type parameters of a
fir.box/fir.class can be extracted.
This is required because in hlfir lowering, dereferencing a
pointer/alloc is only doing the fir.load fir.box part, and the
helpers have to be able to reason about that fir.box without the
help of a "fir::FortranVariableOpInterface".

Missing:
- referencing part of allocatable/pointer (will need to update
  Designator lowering to dereference the pointer/alloc). Same
  for whole allocatable and pointer components.
- allocate/deallocate/pointer assignment statements.
- Whole allocatable assignment.
- Lower inquires.

Differential Revision: https://reviews.llvm.org/D142043

21 months agoOptimize OptTable::findNearest implementation and usage
serge-sans-paille [Wed, 18 Jan 2023 15:43:56 +0000 (16:43 +0100)]
Optimize OptTable::findNearest implementation and usage

When used to find an exact match, some extra context can be used to
totally cut some computations.

This saves 1% of the instruction count when pre processing sqlite3.c
through

valgrind --tool=callgrind ./bin/clang -E sqlite3.c -o/dev/null

Differential Revision: https://reviews.llvm.org/D142026

21 months ago[MLIR][Presburger] Support divisions in union of two PWMAFunction
Groverkss [Thu, 19 Jan 2023 13:01:56 +0000 (18:31 +0530)]
[MLIR][Presburger] Support divisions in union of two PWMAFunction

This patch adds support for divisions in the union of two PWMAFunction. This is
now possible because of previous patches, which made divisions explicitly
stored in MultiAffineFunction (MAF). This patch also refactors the previous
implementation, moving the implementation for obtaining a set of points where a
MAF is lexicographically "better" than the other to MAF.

Reviewed By: arjunp

Differential Revision: https://reviews.llvm.org/D138118

21 months ago[SPIR-V] Add -opaque-pointers=0 to some LIT tests
Michal Paszkowski [Wed, 18 Jan 2023 23:05:37 +0000 (00:05 +0100)]
[SPIR-V] Add -opaque-pointers=0 to some LIT tests

Differential Revision: https://reviews.llvm.org/D142061

21 months agoRevert "[clang][Interp] Unify visiting variable declarations"
Timm Bäder [Thu, 19 Jan 2023 12:52:05 +0000 (13:52 +0100)]
Revert "[clang][Interp] Unify visiting variable declarations"

This reverts commit 5b54cf1a2892767fe949826a32d7820732028a38.

This breaks a builder: https://lab.llvm.org/buildbot/#/builders/5/builds/30854

21 months agoRevert "[clang][Interp] Implement missing compound assign operators"
Timm Bäder [Thu, 19 Jan 2023 12:51:26 +0000 (13:51 +0100)]
Revert "[clang][Interp] Implement missing compound assign operators"

This reverts commit 490e8214fca48824beda8b508d6d6bbbf3d8d9a7.

This breaks a builder: https://lab.llvm.org/buildbot/#/builders/214/builds/5415

21 months ago[clang][Interp][NFC] Remove shift error checking code duplication
Timm Bäder [Thu, 19 Jan 2023 12:24:40 +0000 (13:24 +0100)]
[clang][Interp][NFC] Remove shift error checking code duplication

21 months ago[DAG] Do not combine any_ext when we combine and into zext.
Amaury Séchet [Sun, 1 May 2022 15:58:32 +0000 (15:58 +0000)]
[DAG] Do not combine any_ext when we combine and into zext.

This transofrm loses information that can be useful for other transforms.

Reviewed By: lebedev.ri

Differential Revision: https://reviews.llvm.org/D141883

21 months ago[clang] Improve diagnostic for "initializer-string for char array is too long"
Evan Smal [Thu, 19 Jan 2023 12:11:07 +0000 (13:11 +0100)]
[clang] Improve diagnostic for "initializer-string for char array is too long"

This patch improves the diagnostic message "initializer-string for
char array is too long" by specifying an expected array length and by
indicating that the initializer string implicitly includes the
null terminator.

Fixes #58829

Differential Revision: https://reviews.llvm.org/D141283

21 months ago[VPlan] Add vp_depth_first_shallow + graph traits for wrapper(NFC)
Florian Hahn [Thu, 19 Jan 2023 12:07:27 +0000 (12:07 +0000)]
[VPlan] Add vp_depth_first_shallow + graph traits for wrapper(NFC)

This patch adds a new VPBlockShallowTraversalWrapper struct to
provide graph traits specialization that do not traverse through
VPRegionBlocks. This matches the behavior of the existing traits for
plain VPBlockBase and is a step before moving the graph traits for
VPBlockBase to traverse through VPRegionBlocks to enable cross region
support in VPDominatorTree.

Depends on D140511.

Reviewed By: Ayal

Differential Revision: https://reviews.llvm.org/D140512

21 months ago[AMDGPU] Add feature predicate for v_fmac_f64 instruction
Mariusz Sikora [Wed, 18 Jan 2023 14:30:38 +0000 (15:30 +0100)]
[AMDGPU] Add feature predicate for v_fmac_f64 instruction

Introducing feature predicate VFmacF64Inst for targets which
supports v_fmac_f64 instructions.

Differential Revision: https://reviews.llvm.org/D142017

21 months agoRevert "[clang][Interp][NFC] Remove shift error checking code duplication"
Timm Bäder [Thu, 19 Jan 2023 12:03:20 +0000 (13:03 +0100)]
Revert "[clang][Interp][NFC] Remove shift error checking code duplication"

This reverts commit fddf6418e8492a544c9bfdb42a4dbc949d9dc2ee.

Apparently this also breaks some builders:

/usr/bin/ld: EvalEmitter.cpp:(.text._ZN5clang6interp11EvalEmitter7emitShlENS0_8PrimTypeES2_RKNS0_10SourceInfoE+0x1f54): undefined reference to `bool clang::interp::CheckShift<clang::interp::Integral<16u, true> >(clang::interp::InterpState&, clang::interp::CodePtr, clang::interp::Integral<16u, true> const&, unsigned int)'
/usr/bin/ld: EvalEmitter.cpp:(.text._ZN5clang6interp11EvalEmitter7emitShlENS0_8PrimTypeES2_RKNS0_10SourceInfoE+0x1fd4): undefined reference to `bool clang::interp::CheckShift<clang::interp::Integral<32u, true> >(clang::interp::InterpState&, clang::interp::CodePtr, clang::interp::Integral<32u, true> const&, unsigned int)'
/usr/bin/ld: EvalEmitter.cpp:(.text._ZN5clang6interp11EvalEmitter7emitShlENS0_8PrimTypeES2_RKNS0_10SourceInfoE+0x2058): undefined reference to `bool clang::interp::CheckShift<clang::interp::Integral<32u, true> >(clang::interp::InterpState&, clang::interp::CodePtr, clang::interp::Integral<32u, true> const&, unsigned int)'

(etc)

21 months ago[mlir][OpenMP] Add nontemporal clause definition to simd construct
Dominik Adamski [Thu, 22 Dec 2022 12:26:47 +0000 (06:26 -0600)]
[mlir][OpenMP] Add nontemporal clause definition to simd construct

simd nontemporal construct is represented as a list of variables
which have low locality accross simd iterations

Added verifier of nontemporal clause. MLIR tests were updated to test
correctness of MLIR definition of nontemporal clause.

Differential Revision: https://reviews.llvm.org/D140553

Reviewed By: kiranchandramohan

21 months ago[NFC][bazel] Enable layering_check for mlir/unittests
Jordan Rupprecht [Thu, 19 Jan 2023 11:40:59 +0000 (03:40 -0800)]
[NFC][bazel] Enable layering_check for mlir/unittests

21 months agoRevert "[clang][Interp][NFC] Move CheckDivRem() implementation into Interp.cpp"
Timm Bäder [Thu, 19 Jan 2023 11:37:20 +0000 (12:37 +0100)]
Revert "[clang][Interp][NFC] Move CheckDivRem() implementation into Interp.cpp"

This reverts commit 9ee0d7494eb35f5addefcb730cdf5c002ddeacd2.

21 months ago[clang][Interp] Implement missing compound assign operators
Timm Bäder [Mon, 31 Oct 2022 11:44:38 +0000 (12:44 +0100)]
[clang][Interp] Implement missing compound assign operators

Implement mul, div, rem, etc. compound assign operators.

Differential Revision: https://reviews.llvm.org/D137071

21 months ago[clang][Interp][NFC] Move CheckDivRem() implementation into Interp.cpp
Timm Bäder [Sun, 30 Oct 2022 09:21:58 +0000 (10:21 +0100)]
[clang][Interp][NFC] Move CheckDivRem() implementation into Interp.cpp

Just like we do with all the other Check* functions.

21 months ago[clang][Interp][NFC] Remove shift error checking code duplication
Timm Bäder [Sun, 30 Oct 2022 09:20:04 +0000 (10:20 +0100)]
[clang][Interp][NFC] Remove shift error checking code duplication

21 months ago[clang][Interp][NFCI] Pull IsConstantContext into State
Timm Bäder [Sun, 30 Oct 2022 06:28:17 +0000 (07:28 +0100)]
[clang][Interp][NFCI] Pull IsConstantContext into State

This way we can check for this flag in the new interpreter as well.

21 months ago[mlir][vector] Add a custom builder for LowerVectorsOp
Quentin Colombet [Tue, 17 Jan 2023 11:54:40 +0000 (11:54 +0000)]
[mlir][vector] Add a custom builder for LowerVectorsOp

The `lower_vectors` operation of the transform dialect takes a lot of
arguments to build.
In order to make C++ code easier to work with when using this
instruction, introduce a new structure, named `LowerVectorsOptions`, that
aggregates all the options that are used to build this instruction.

This allows to use patterns like:
```
LowerVectorsOptions opts;
opts.setOptZ(...)
  .setOptY(...)...;
builder.create<LowerVectorsOp>(target, opts);
```

Instead of having to pass all N options directly to the builder and set
them in the right order.

NFC

Differential Revision: https://reviews.llvm.org/D141923

21 months ago[mlir][LLVM] Replace readnone with memory effects
Christian Ulmann [Thu, 12 Jan 2023 15:48:19 +0000 (16:48 +0100)]
[mlir][LLVM] Replace readnone with memory effects

This commit introduces LLVM's `MemoryEffects` attribute and replaces the
deprecated usage of `llvm.readnone` in the LLVM dialect.
The absence of the attribute on a `LLVMFuncOp` implies that it might
access all kinds of memory. This semantic corresponds to `llvm::Function`'s
behaviour.

Depends on D142002

Differential Revision: https://reviews.llvm.org/D142013

21 months ago[mlir] fix mlir integration tests
Alex Zinenko [Thu, 19 Jan 2023 10:32:42 +0000 (10:32 +0000)]
[mlir] fix mlir integration tests

21 months ago[mlir] simpler transform dialect silenceable failures
Alex Zinenko [Mon, 9 Jan 2023 18:06:09 +0000 (18:06 +0000)]
[mlir] simpler transform dialect silenceable failures

Simplify the handling of silenceable failures in the transform dialect.
Previously, the logic of `TransformEachOpTrait` required that
`applyToEach` returned a list of null pointers when a silenceable
failure was emitted. This was not done consistently and also crept into
ops without this trait although they did not require it. Handle this
case earlier in the interpreter and homogeneously associated preivously
unset transform dialect values (both handles and parameters) with empty
lists of the matching kind. Ignore the results of `applyToEach` for the
targets for which it produced a silenceable failure. As a result, one
never needs to set results to lists containing nulls. Furthermore, the
objects associated with transform dialect values must never be null.

Depends On D140980

Reviewed By: nicolasvasilache

Differential Revision: https://reviews.llvm.org/D141305

21 months ago[mlir] make multi-size tiling use transform parameters
Alex Zinenko [Wed, 4 Jan 2023 14:04:53 +0000 (14:04 +0000)]
[mlir] make multi-size tiling use transform parameters

Use the recently introduced transform dialect parameter mechanism to
perform controllable multi-size tiling with sizes computed at the
transformation time rather than at runtime.

This requires to generalize tile and split structured transform
operations to work with any transform dialect handle types, which is
desirable in itself to avoid unchecked overuse of PDL OperationType.

Reviewed By: shabalin

Differential Revision: https://reviews.llvm.org/D140980

21 months ago[Regex] Avoid NFA machinery for fixed prefix chars (NFC)
Nikita Popov [Thu, 19 Jan 2023 09:04:03 +0000 (10:04 +0100)]
[Regex] Avoid NFA machinery for fixed prefix chars (NFC)

Similarly to what backref() does, add an "easy path" to slow()
that can handle some non-branching cases, in particular simple
character matches.

This has the dual effect of reducing the number of characters we
need to match, and the number of states in the NFA.

This reduces FileCheck runtime on vloxseg.c from 17s to 12s on
my machine.

21 months ago[clang][Interp] Diagnose uninitialized array record fields
Timm Bäder [Thu, 27 Oct 2022 09:37:11 +0000 (11:37 +0200)]
[clang][Interp] Diagnose uninitialized array record fields

Just like we do for record members, diagnose uninitialized array record
fields.

Differential Revision: https://reviews.llvm.org/D136828