platform/upstream/llvm.git
18 months agoAMDGPU: Fix enqueue block lowering for opaque pointers
Matt Arsenault [Fri, 23 Dec 2022 20:39:55 +0000 (15:39 -0500)]
AMDGPU: Fix enqueue block lowering for opaque pointers

This was looking for a specific constant cast of the function, when
the type doesn't matter. Doesn't bother trying to handle typed
pointers, it will just assert.

Things probably don't work completely correctly if the block kernel
address is captured somewhere else, but that wouldn't work before
either. The uses should really be loads out of the handle, and the
handle initializer should contain the kernel address.

18 months agoAMDGPU: Convert enqueue-kernel.ll to opaque pointers
Matt Arsenault [Fri, 23 Dec 2022 22:14:06 +0000 (17:14 -0500)]
AMDGPU: Convert enqueue-kernel.ll to opaque pointers

This demonstrates the pass is broken with them, the follow up change
will fix it.

18 months ago[Clang] Fix mispelled option passed to the linker wrapper
Joseph Huber [Sat, 7 Jan 2023 02:02:23 +0000 (20:02 -0600)]
[Clang] Fix mispelled option passed to the linker wrapper

Summary:
This option was spelled wrong and caused errors if used in combination
with the linking job. Fix it.

18 months ago[OpenMP] Introduce '-f[no-]openmp-target-jit' flag to control JIT for offloading
Joseph Huber [Fri, 6 Jan 2023 21:22:12 +0000 (15:22 -0600)]
[OpenMP] Introduce '-f[no-]openmp-target-jit' flag to control JIT for offloading

JIT support for OpenMP offloading was introduced in D139287. This patch
adds a simple flag that enables this mode. It simply requires enabling
`-foffload-lto` mode and `--embed-bitcode` in the linker wrapper. This
option implies LTO if it is not enabled.

Reviewed By: jdoerfert

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

18 months ago[SLP][NFC]Fix compile build by declaring ArrayRef, NFC.
Alexey Bataev [Sat, 7 Jan 2023 01:01:48 +0000 (17:01 -0800)]
[SLP][NFC]Fix compile build by declaring ArrayRef, NFC.

Fix compiler build reported in https://lab.llvm.org/buildbot#builders/243/builds/218

18 months ago[SLP][NFC]Remove unused variables, NFC.
Alexey Bataev [Sat, 7 Jan 2023 00:55:54 +0000 (16:55 -0800)]
[SLP][NFC]Remove unused variables, NFC.

18 months ago[SLP]Fix incorrect reordering of clustered scalars.
Alexey Bataev [Fri, 6 Jan 2023 19:07:22 +0000 (11:07 -0800)]
[SLP]Fix incorrect reordering of clustered scalars.

The new mask represents the order, not the mask itself. At first, need
to treat as the order, convert to mask and only after that reorder
gathered scalars to build correct clustered order.

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

18 months ago[libc] Add a separate install target for the libc static archives.
Siva Chandra Reddy [Fri, 6 Jan 2023 08:21:49 +0000 (08:21 +0000)]
[libc] Add a separate install target for the libc static archives.

Also, skip installing startup objects for baremetal targets for now.

Reviewed By: michaelrj

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

18 months ago[mlir][spirv] Add folder for LogicalNotEqual
Thomas Raoux [Fri, 6 Jan 2023 23:03:12 +0000 (23:03 +0000)]
[mlir][spirv] Add folder for LogicalNotEqual

Add a folder for LogicalNotEqual when rhs is false. This pattern shows
up after lowering to SPIRV.

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

18 months ago[DebugInfo] Add support for variadic DBG_INSTR_REFs in LiveDebugValues
Stephen Tozer [Tue, 3 Jan 2023 13:53:25 +0000 (13:53 +0000)]
[DebugInfo] Add support for variadic DBG_INSTR_REFs in LiveDebugValues

Following support from the previous patches in this stack being added for
variadic DBG_INSTR_REFs to exist, this patch modifies LiveDebugValues to
handle those instructions. Support already exists for DBG_VALUE_LISTs, which
covers most of the work needed to handle these instructions; this patch only
modifies the transferDebugInstrRef function to correctly track them.

Reviewed By: jmorse

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

18 months ago[MLIR][TOSA] Switch Tosa to DenseArrayAttr
Alexander Shaposhnikov [Fri, 6 Jan 2023 22:57:14 +0000 (22:57 +0000)]
[MLIR][TOSA] Switch Tosa to DenseArrayAttr

This diff completes switching Tosa to DenseArrayAttr.

Test plan: ninja check-mlir check-all

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

18 months ago[Fix][-Wunsafe-buffer-usage] Add a new `forEachDescendant` matcher that skips callabl...
ziqingluo-90 [Fri, 6 Jan 2023 22:29:19 +0000 (14:29 -0800)]
[Fix][-Wunsafe-buffer-usage] Add a new `forEachDescendant` matcher that skips callable declarations

The original patch does include a `new` statement without a matching
`delete`, causing Sanitizer warnings in
https://lab.llvm.org/buildbot/#/builders/5/builds/30522/steps/13/logs/stdio.

This commit is a fix to it.

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

18 months agoAMDGPU: Try to fix 32-bit build bot
Matt Arsenault [Fri, 6 Jan 2023 22:33:56 +0000 (17:33 -0500)]
AMDGPU: Try to fix 32-bit build bot

18 months ago[ubsan][test] Fix typo in D139230
Roy Sundahl [Mon, 19 Dec 2022 18:31:22 +0000 (10:31 -0800)]
[ubsan][test] Fix typo in D139230

Fix "runtime runtime error" -> "runtime error"

Reviewed By: MaskRay

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

18 months agoAMDGPU: Use BinaryByteStream in printf expansion
Matt Arsenault [Fri, 6 Jan 2023 17:51:10 +0000 (12:51 -0500)]
AMDGPU: Use BinaryByteStream in printf expansion

Attempt to fix test failures on big endian bots. This pass definitely
needs more test coverage.

18 months agoAMDGPU: Add additional printf string tests
Matt Arsenault [Fri, 6 Jan 2023 18:37:31 +0000 (13:37 -0500)]
AMDGPU: Add additional printf string tests

Test various inputs passed to %s.

18 months ago[mlir][tensor] Add producer fusion for tensor.unpack op.
Hanhan Wang [Fri, 6 Jan 2023 18:49:08 +0000 (10:49 -0800)]
[mlir][tensor] Add producer fusion for tensor.unpack op.

Reviewed By: mravishankar

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

18 months ago[Support] On Windows 11 and Windows Server 2022, fix an affinity mask issue on large...
Alexandre Ganea [Thu, 5 Jan 2023 20:27:30 +0000 (15:27 -0500)]
[Support] On Windows 11 and Windows Server 2022, fix an affinity mask issue on large core count machines

Before Windows 11 and Windows Server 2022, only one 'processor group' is assigned by default to a starting process, then the program is responsible for dispatching its own threads on more 'processor groups'. That is what 8404aeb56a73ab24f9b295111de3b37a37f0b841 was doing, allowing LLVM tools to automatically use all hardware threads in the machine.

After Windows 11 and Windows Server 2022, the OS takes care of that. This has an adverse effect reported in #56618 which is that using `GetProcessAffinityMask()` API in some edge cases seems buggy now. That API is used to detect if an affinity mask was set, and adjust accordingly the available threads for a ThreadPool.

With this patch, on one hand, we let the OS dispatch threads on all 'processor groups', but only for Windows 11 & Windows Server 2022 and after. We retain the old behavior for older OS versions. On the other hand, a workaround was added to mitigate the `GetProcessAffinityMask()` issue described above (see Threading.inc, L226).

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

18 months ago[mlir][py] Fix python modules build with clang-cl due to requiring exceptions
Markus Böck [Fri, 6 Jan 2023 21:48:02 +0000 (22:48 +0100)]
[mlir][py] Fix python modules build with clang-cl due to requiring exceptions

The generator expression previously used to enable exceptions would not work since the compiler id of clang-cl is Clang, even if used via clang-cl.

The patch fixes that by replacing the generator expression with simple logic, setting the right compiler flags for all MSVC like compilers (including clang-cl) and all GCC like compilers.

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

18 months ago[BOLT][DWARF] Change rangelists to use DW_RLE_offset_pair
Alexander Yermolovich [Fri, 6 Jan 2023 21:45:43 +0000 (13:45 -0800)]
[BOLT][DWARF] Change rangelists to use DW_RLE_offset_pair

Before we always used DW_RLE_startx_length. This is not very efficient and leads
to bigger .debug_addr section. Changed it to use
DW_RLE_base_addressx/DW_RLE_offset_pair.

clang-16 build in debug mode
llvm-bolt ran on it with --update-debug-sections
| section | before | after | diff | % decrease |
| .debug_rnglists | 32732292 | 31986051 | -746241 | 2.3% |
| .debug_addr | 14415808 | 14184128 |  -231680 | 1.6% |

Reviewed By: maksfb

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

18 months agoRevert "[Fix][-Wunsafe-buffer-usage] Add a new `forEachDescendant` matcher that skips...
ziqingluo-90 [Fri, 6 Jan 2023 21:37:13 +0000 (13:37 -0800)]
Revert "[Fix][-Wunsafe-buffer-usage] Add a new `forEachDescendant` matcher that skips callable declarations"

This reverts commit 6d140b952805bd9277fba666520ce46c19f2c637.

This commit may causes `test/SemaCXX/warn-unsafe-buffer-usage.cpp` failure.

18 months ago[Fix][-Wunsafe-buffer-usage] Add a new `forEachDescendant` matcher that skips callabl...
ziqingluo-90 [Fri, 6 Jan 2023 20:30:11 +0000 (12:30 -0800)]
[Fix][-Wunsafe-buffer-usage] Add a new `forEachDescendant` matcher that skips callable declarations

The original patch does include a `new` statement without a matching
`delete`, causing Sanitizer warnings in
https://lab.llvm.org/buildbot/#/builders/5/builds/30522/steps/13/logs/stdio.

This commit is a fix to it.

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

18 months ago[mlir][Arith] Remove expansions of integer min and max ops
Krzysztof Drewniak [Mon, 2 Jan 2023 21:24:39 +0000 (21:24 +0000)]
[mlir][Arith] Remove expansions of integer min and max ops

As of several months ago, both ArithToLLVM and ArithToSPIRV have
native support for integer min and max operations. Since these are all
the targets available in MLIR core, the need to "expand" arith.minui,
arith.minsi, arith,maxsi, and arith.manxui to more primitive
operations is to longer present.

Therefore, the expanding of integer min and max operations in Arith,
while correct, is likely to lead to performance loss by way of
misoptimization further down the line, and is no longer needed for
anyone's correctness.

This change may break downstream tests, but will not affect the
semantics of MLIR programs.

arith.minf and arith.maxf have a lot of underlying complexity due to
the many different possible NaN and signed zero semantics available on
various platforms, and so removing their expansion is left to a future
commit.

Reviewed By: ThomasRaoux, Mogball

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

18 months ago[-Wunsafe-buffer-usage] Changing the use of None with std::nullopt to address a warning.
MalavikaSamak [Fri, 6 Jan 2023 20:18:40 +0000 (12:18 -0800)]
[-Wunsafe-buffer-usage] Changing the use of None with std::nullopt to address a warning.

18 months ago[mlir] Add header file for ssize_t
Ashay Rane [Fri, 6 Jan 2023 20:29:04 +0000 (21:29 +0100)]
[mlir] Add header file for ssize_t

ssize_t is part of POSIX and not standard C/C++, so using ssize_t
without the necessary header files causes the build to fail on Windows
with the following error: 'ssize_t': undeclared identifier.

This patch includes llvm/Support/DataTypes.h to resolve the problem.

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

18 months ago[-Wunsafe-buffer-usage] Safe-buffers re-architecture to introduce Fixable gadgets
MalavikaSamak [Fri, 6 Jan 2023 19:33:49 +0000 (11:33 -0800)]
[-Wunsafe-buffer-usage] Safe-buffers re-architecture to introduce Fixable gadgets

Re-architecture of safe-buffers gadgets to re-classify them as warning and fixable
gadgets. The warning gadgets identify unsafe operations on buffer variables and
emit suitable warnings. While the fixable gadgets consider all operations on
variables identified by the warning gadgets and emit necessary fixits.

Differential Revision: https://reviews.llvm.org/D140062?id=486625

18 months ago[libc] add noexcept to external function headers
Michael Jones [Wed, 4 Jan 2023 18:37:51 +0000 (10:37 -0800)]
[libc] add noexcept to external function headers

To improve code generation for C++ code that directly includes our
headers, the external function definitions will now be marked noexcept.
This may not be necessary for the internal definitions since we build
with the -fno-exceptions flag.

Reviewed By: sivachandra

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

18 months agoFix PDL verifiers to be resilient to invalid IR
Mehdi Amini [Fri, 6 Jan 2023 19:34:28 +0000 (19:34 +0000)]
Fix PDL verifiers to be resilient to invalid IR

This would cause a crash when calling `dump()` on an operation that
didn't have a parent yet.

18 months ago[libc++][test] Add missing include
Casey Carter [Fri, 6 Jan 2023 19:35:26 +0000 (11:35 -0800)]
[libc++][test] Add missing include

`std::out_of_range` is in `<stdexcept>`

18 months ago[DebugInfo] Allow non-stack_value variadic expressions and use in DBG_INSTR_REF
Stephen Tozer [Tue, 3 Jan 2023 10:11:22 +0000 (10:11 +0000)]
[DebugInfo] Allow non-stack_value variadic expressions and use in DBG_INSTR_REF

Prior to this patch, variadic DIExpressions (i.e. ones that contain
DW_OP_LLVM_arg) could only be created by salvaging debug values to create
stack value expressions, resulting in a DBG_VALUE_LIST being created. As of
the previous patch in this patch stack, DBG_INSTR_REF's syntax has been
changed to match DBG_VALUE_LIST in preparation for supporting variadic
expressions. This patch adds some minor changes needed to allow variadic
expressions that aren't stack values to exist, and allows variadic expressions
that are trivially reduceable to non-variadic expressions to be handled
similarly to non-variadic expressions.

Reviewed by: jmorse

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

18 months ago[mlir] Support TBAA metadata in LLVMIR dialect.
Slava Zakharin [Thu, 29 Dec 2022 23:14:41 +0000 (15:14 -0800)]
[mlir] Support TBAA metadata in LLVMIR dialect.

This change introduces new LLVMIR dialect operations to represent
TBAA root, type descriptor and access tag metadata nodes.

For the purpose of importing TBAA metadata from LLVM IR it only
supports the current version of TBAA format described in
https://llvm.org/docs/LangRef.html#tbaa-metadata (i.e. size-aware
representation introduced in D41501 is not supported).

TBAA attribute support is only added for LLVM::LoadOp and LLVM::StoreOp.
Support for intrinsics operations (e.g. LLVM::MemcpyOp) may be added later.

The TBAA attribute is represented as an array of access tags, though,
LLVM IR supports only single access tag per memory accessing instruction.
I implemented it as an array anticipating similar support in LLVM IR
to combine TBAA graphs with different roots for Flang - one of the options
described in https://docs.google.com/document/d/16kKZVmI585wth01VSaJAqZMZpoX68rcdBmgfj0kNAt0/edit#heading=h.jzzheaz9vqac

It should be easy to restrict MLIR operation to a single access tag,
if we end up using a different approach for Flang.

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

18 months ago[AMDGPU] Combine redundant Asm64 and AsmVOP3DPPBase. NFC
Joe Nash [Thu, 5 Jan 2023 21:48:46 +0000 (16:48 -0500)]
[AMDGPU] Combine redundant Asm64 and AsmVOP3DPPBase. NFC

Reduce duplication in the codebase by combining these fields in
VOPProfile.

Reviewed By: rampitec

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

18 months agoCleanup unwind table emission code a bit.
James Y Knight [Fri, 6 Jan 2023 18:26:03 +0000 (13:26 -0500)]
Cleanup unwind table emission code a bit.

This change removes the `tidyLandingPads` function, which previously
had a few responsibilities:

1. Dealing with the deletion of an invoke, after MachineFunction lowering.
2. Dealing with the deletion of a landing pad BB, after MachineFunction lowering.
3. Cleaning up the type-id list generated by `MachineFunction::addLandingPad`.

Case 3 has been fixed in the generator, and the others are now handled
during table emission.

This change also removes `MachineFunction`'s `addCatchTypeInfo`,
`addFilterTypeInfo`, and `addCleanup` helper fns, as they had a single
caller, and being outlined didn't make it simpler.

Finally, as calling `tidyLandingPads` was effectively the only thing
`DwarfCFIExceptionBase` did, that class has been eliminated.

18 months agoRemove special cases for invoke of non-throwing inline-asm.
James Y Knight [Fri, 6 Jan 2023 15:11:44 +0000 (10:11 -0500)]
Remove special cases for invoke of non-throwing inline-asm.

Non-throwing inline asm infers the nounwind attribute in
instcombine. Thus, it can be handled in the same manner as
non-throwing target functions are generally. Further special casing is
unnecessary complexity.

18 months ago[mlir][tosa] Add tosa.conv3d lowering to Linalg
Rob Suderman [Fri, 6 Jan 2023 18:13:32 +0000 (10:13 -0800)]
[mlir][tosa] Add tosa.conv3d lowering to Linalg

Conv3D has an existing linalg operation for floating point. Adding a quantized
variant and corresponding lowering from TOSA. Numerical correctness was validated
using the TOSA conformance tests.

Reviewed By: jpienaar

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

18 months agoWhen loading mach-o corefile, new fallback for finding images
Jason Molenda [Fri, 6 Jan 2023 18:45:07 +0000 (10:45 -0800)]
When loading mach-o corefile, new fallback for finding images

When lldb is reading a user process corefile, it starts by finding
dyld, then finding the dyld_all_image_infos structure in dyld by
symbol name, then getting the list of loaded binaries.  If it fails
to find the structure by name, it can't load binaries.  There is
an additional fallback that this patch adds, which is to look for
this object by the section name it is stored in, if the symbol name
lookup fails.

Differential Revision: https://reviews.llvm.org/D140066
rdar://103369931

18 months agoRe-land "[-Wunsafe-buffer-usage] Add a new `forEachDescendant` matcher that skips...
ziqingluo-90 [Fri, 6 Jan 2023 18:33:21 +0000 (10:33 -0800)]
Re-land "[-Wunsafe-buffer-usage] Add a new `forEachDescendant` matcher that skips callable declarations"

This reverts commit 22df4549a3718dcd8b387ba8246978349e4be50c.

After a quick investigation, realizing that the Sanitizer test
failures caused by this patch is not likely to block other
contributors. I re-land this patch before taking a closer look at
those tests so that it won't block the [-Wunsafe-buffer-usage]
development.

18 months agoFix: Title underline too short in D129372
Stephen Tozer [Fri, 6 Jan 2023 18:21:11 +0000 (18:21 +0000)]
Fix: Title underline too short in D129372

This patch fixes an error in commit e10e9363 in which the
added documentation contained an incorrectly-styled underline
for the title "Debug Instruction Reference Operands".

18 months ago[DebugInfo][NFC] Add new MachineOperand type and change DBG_INSTR_REF syntax
Stephen Tozer [Thu, 15 Sep 2022 10:26:57 +0000 (11:26 +0100)]
[DebugInfo][NFC] Add new MachineOperand type and change DBG_INSTR_REF syntax

This patch makes two notable changes to the MIR debug info representation,
which result in different MIR output but identical final DWARF output (NFC
w.r.t. the full compilation). The two changes are:

  * The introduction of a new MachineOperand type, MO_DbgInstrRef, which
    consists of two unsigned numbers that are used to index an instruction
    and an output operand within that instruction, having a meaning
    identical to first two operands of the current DBG_INSTR_REF
    instruction. This operand is only used in DBG_INSTR_REF (see below).
  * A change in syntax for the DBG_INSTR_REF instruction, shuffling the
    operands to make it resemble DBG_VALUE_LIST instead of DBG_VALUE,
    and replacing the first two operands with a single MO_DbgInstrRef-type
    operand.

This patch is the first of a set that will allow DBG_INSTR_REF
instructions to refer to multiple machine locations in the same manner
as DBG_VALUE_LIST.

Reviewed By: jmorse

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

18 months ago[libc++][test] Suppress MSVC warnings in std::expected tests
Casey Carter [Fri, 6 Jan 2023 03:28:21 +0000 (19:28 -0800)]
[libc++][test] Suppress MSVC warnings in std::expected tests

* initializing `short`s with `short`s instead of `int`s to avoid narrowing warnings
* Explicitly discard the result of `value` calls to avoid `[[nodiscard]]` warnings

Drive-by: `testException` from `value` test is duplicated in `value_or` test; remove the duplicate.
Differential Review: https://reviews.llvm.org/D141108

18 months ago[PPC] Add support for tune-cpu attribute
Kai Nacke [Fri, 18 Nov 2022 19:12:01 +0000 (19:12 +0000)]
[PPC] Add support for tune-cpu attribute

clang (like gcc) has the -mtune= command line option. This option
adds the "tune-cpu" attribute to a function. The intended functionality
is that the scheduling model of that cpu is used. E.g. -mtune=pwr9 -march=pwr8
generates only instructions supported on pwr8 but uses the scheduling model
of pwr9 for it.
This PR adds the infrastructure to support this in LLVM.
clang support was added in https://reviews.llvm.org/D130526.

Reviewed By: amyk, qiucf

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

18 months agoRecommit "[RISCV] Enable the LocalStackSlotAllocation pass support"
LiDongjin [Fri, 6 Jan 2023 17:54:19 +0000 (09:54 -0800)]
Recommit "[RISCV] Enable the LocalStackSlotAllocation pass support"

This includes a fix for the tramp3d failure from the llvm-testsuite
that caused the last revert. Hopefully the others failures were the
same issue.

Original commit message:
For RISC-V, load/store(exclude vector load/store) instructions only has a 12 bit immediate operand. If the offset is out-of-range, it must make use of a temp register to make up this offset. If between these offsets, they have a small(IsInt<12>) relative offset, LocalStackSlotAllocation pass can find a value as frame base register's value, and replace the origin offset with this register's value plus the relative offset.

Co-authored-by: luxufan <luxufan@iscas.ac.cn>
Co-authored-by: Craig Topper <craig.topper@sifive.com>
Differential Revision: https://reviews.llvm.org/D98101

18 months agoRe-gernerate a test in preparation for D141060
Alex Richardson [Fri, 6 Jan 2023 14:59:24 +0000 (14:59 +0000)]
Re-gernerate a test in preparation for D141060

18 months ago[mlir] improve error handling in Linalg op splitting
Alex Zinenko [Fri, 6 Jan 2023 16:09:28 +0000 (17:09 +0100)]
[mlir] improve error handling in Linalg op splitting

In several cases, the splitting may be known to be a noop, i.e., produce
no second part. Thread this information through the transform utilities
to the transform dialect, and differentiate it from the error state.

Reviewed By: nicolasvasilache

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

18 months ago[mlir][nvvm] Add lowering of gpu.printf to nvvm
Thomas Raoux [Thu, 5 Jan 2023 21:20:45 +0000 (21:20 +0000)]
[mlir][nvvm] Add lowering of gpu.printf to nvvm

When converting to nvvm lowering gpu.printf to vprintf allows us to
support printing when running on cuda.

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

18 months ago[SLP]Fix cost of the broadcast buildvector/gather.
Alexey Bataev [Wed, 21 Dec 2022 21:38:38 +0000 (13:38 -0800)]
[SLP]Fix cost of the broadcast buildvector/gather.

Need to include the cost of the initial insertelement to the cost of the
broadcasts. Also, need to adjust the cost of the gather/buildvector if
the element is inserted into poison/undef vector.

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

18 months ago[RISCV] Improve 4x and 8x (s/u)int_to_fp.
Craig Topper [Fri, 6 Jan 2023 16:39:14 +0000 (08:39 -0800)]
[RISCV] Improve 4x and 8x (s/u)int_to_fp.

Previously we emitted a 4x or 8x vzext followed by a vfcvt.
We can instead use a 2x or 4x vzext followed by a vfwcvt.

18 months agoRevert "[Dominator] Add findNearestCommonDominator() for Instructions (NFC)"
Nikita Popov [Fri, 6 Jan 2023 16:33:53 +0000 (17:33 +0100)]
Revert "[Dominator] Add findNearestCommonDominator() for Instructions (NFC)"

This reverts commit 7f0de9573f758f5f9108795850337a5acbd17eef.

This is missing handling for !isReachableFromEntry() blocks, which
may be relevant for some callers. Revert for now.

18 months ago[RISCV] Add more XVentanaCondOps patterns.
Craig Topper [Fri, 6 Jan 2023 16:29:23 +0000 (08:29 -0800)]
[RISCV] Add more XVentanaCondOps patterns.

Add patterns with seteq/setne conditions.

We don't have instructions for seteq/setne except for comparing
with zero and need to emit an ADDI or XOR before a seqz/snez to
compare other values.

The select ISD node takes a 0/1 value for the condition, but the
VT_MASKC(N) instructions check all XLen bits for zero or non-zero.
We can use this to avoid the seqz/snez in many cases.

This is pretty ridiculous number of patterns. I wonder if we could
use some ComplexPatterns to merge them, but I'd like to do that as
a follow up and focus on correctness of the result in this patch.

Reviewed By: reames

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

18 months ago[GVN] Name instructions in test (NFC)
Nikita Popov [Fri, 6 Jan 2023 16:28:18 +0000 (17:28 +0100)]
[GVN] Name instructions in test (NFC)

18 months ago[EntryExitInstrumenter] Convert test to opaque pointers (NFC)
Nikita Popov [Fri, 6 Jan 2023 16:25:09 +0000 (17:25 +0100)]
[EntryExitInstrumenter] Convert test to opaque pointers (NFC)

18 months ago[RISCV] Add support for the vscale_range attribute.
Craig Topper [Fri, 6 Jan 2023 16:20:37 +0000 (08:20 -0800)]
[RISCV] Add support for the vscale_range attribute.

This is based on @frasercrmck's D107290. At least some of the clang
portion of D107290 has already been committed.

This uses vscale_range for min/max vector width unless the command
line overrides are used.

As a follow up, I plan to add a max or exact VLEN option to clang
to control the vscale_range. This will eliminate many of the reasons
for users to use the overrides through the -mllvm interface.

Reviewed By: reames

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

18 months ago[mlir][vector] Relax restriction on reduction distribution
Thomas Raoux [Fri, 6 Jan 2023 16:09:21 +0000 (16:09 +0000)]
[mlir][vector] Relax restriction on reduction distribution

Relax unnecessary restriction when distribution a vector.reduce op.
All the float and integer types can be supported by user's lambda.

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

18 months agoflang: break the build on 32bit systems
Sylvestre Ledru [Fri, 6 Jan 2023 16:12:03 +0000 (17:12 +0100)]
flang: break the build on 32bit systems

Reviewed By: PeteSteinfeld

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

18 months agoDoc: improve the flang readme page
Sylvestre Ledru [Fri, 6 Jan 2023 16:09:21 +0000 (17:09 +0100)]
Doc: improve the flang readme page

Reviewed By: PeteSteinfeld

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

18 months ago[Dominator] Add findNearestCommonDominator() for Instructions (NFC)
Nikita Popov [Fri, 6 Jan 2023 15:56:34 +0000 (16:56 +0100)]
[Dominator] Add findNearestCommonDominator() for Instructions (NFC)

This is a recurring pattern: We want to find the nearest common
dominator (instruction) for two instructions, but currently only
provide an API for the nearest common dominator of two basic blocks.

Add an overload that accepts and return instructions.

18 months ago[gn build] Port 16c1c9fdcc48
LLVM GN Syncbot [Fri, 6 Jan 2023 15:46:03 +0000 (15:46 +0000)]
[gn build] Port 16c1c9fdcc48

18 months ago[SelectionDAG] Implicitly truncate known bits in SPLAT_VECTOR
Luke Lau [Thu, 5 Jan 2023 18:27:12 +0000 (18:27 +0000)]
[SelectionDAG] Implicitly truncate known bits in SPLAT_VECTOR

Now that D139525 fixes the Hexagon infinite loop, the stopgap can be
removed to provide more information about known bits in SPLAT_VECTOR
whose operands are smaller than the bit width (which is most of the
time)

Reviewed By: reames

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

18 months ago[WebAssembly][NFC] Add test case for PR59626
Luke Lau [Fri, 6 Jan 2023 11:30:09 +0000 (11:30 +0000)]
[WebAssembly][NFC] Add test case for PR59626

For D141079

Reviewed By: reames

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

18 months agoRevert D140263 "[NFC] Vastly simplifies TypeSize"
Guillaume Chatelet [Fri, 6 Jan 2023 15:31:46 +0000 (15:31 +0000)]
Revert D140263 "[NFC] Vastly simplifies TypeSize"

This broke some build bots : https://lab.llvm.org/buildbot/#/builders/16/builds/41419/steps/5/logs/stdio

This reverts commit 4670d5ece57d9b030597da679072f78bb3f4d419.

18 months ago[LoopFlattening] Check for extra uses on Mul
David Green [Fri, 6 Jan 2023 15:32:38 +0000 (15:32 +0000)]
[LoopFlattening] Check for extra uses on Mul

Similar to D138404, we were not guarding against extra uses of the Mul.
In most cases other checks would catch the issue due to unsupported
instructions in the outer loop, but certain non-canonical loop forms
could still get through.

Fixes #59339

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

18 months ago[LoopFlatten][NFC] Run instnamer on pr59339.ll
David Green [Fri, 6 Jan 2023 14:18:27 +0000 (14:18 +0000)]
[LoopFlatten][NFC] Run instnamer on pr59339.ll

18 months ago[AArch64][SME]: Make 'Expand' the default action for all Ops.
Hassnaa Hamdi [Thu, 5 Jan 2023 16:10:50 +0000 (16:10 +0000)]
[AArch64][SME]: Make 'Expand' the default action for all Ops.

By default expand all operations, then change to Custom/Legal if needed.

Reviewed By: sdesmalen

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

18 months agoRevert D141134 "[NFC] Only expose getXXXSize functions in TypeSize"
Guillaume Chatelet [Fri, 6 Jan 2023 15:27:50 +0000 (15:27 +0000)]
Revert D141134 "[NFC] Only expose getXXXSize functions in TypeSize"

The patch should be discussed further.

This reverts commit dd56e1c92b0e6e6be249f2d2dd40894e0417223f.

18 months ago[NFC] Only expose getXXXSize functions in TypeSize
Guillaume Chatelet [Fri, 6 Jan 2023 14:47:21 +0000 (14:47 +0000)]
[NFC] Only expose getXXXSize functions in TypeSize

Currently 'TypeSize' exposes two functions that serve the same purpose:
 - getFixedSize / getFixedValue
 - getKnownMinSize / getKnownMinValue

source : https://github.com/llvm/llvm-project/blob/bf82070ea465969e9ae86a31dfcbf94c2a7b4c4c/llvm/include/llvm/Support/TypeSize.h#L337-L338

This patch offers to remove one of the two and stick to a single function in the code base.

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

18 months ago[StackLifetime] Fix sign compare warning (NFC)
Nikita Popov [Fri, 6 Jan 2023 15:10:47 +0000 (16:10 +0100)]
[StackLifetime] Fix sign compare warning (NFC)

18 months ago[MemCpyOpt] Extract processStoreOfLoad() method (NFC)
Nikita Popov [Fri, 6 Jan 2023 14:58:49 +0000 (15:58 +0100)]
[MemCpyOpt] Extract processStoreOfLoad() method (NFC)

18 months ago[Libomptarget] Add more moves to expected conversion
Joseph Huber [Fri, 6 Jan 2023 15:09:18 +0000 (09:09 -0600)]
[Libomptarget] Add more moves to expected conversion

Summary:
Fixes other instances of the same problem in the previous patch.

18 months ago[Libomptarget] Add move to expected conversion
Joseph Huber [Fri, 6 Jan 2023 14:56:31 +0000 (08:56 -0600)]
[Libomptarget] Add move to expected conversion

Summary:
These implicit conversions from move-only types to expected seem to only
work with newer compilers. This should hopefully fix it.

18 months ago[mlir] fix use-after-free on error path in transform dialect
Alex Zinenko [Fri, 6 Jan 2023 15:02:14 +0000 (16:02 +0100)]
[mlir] fix use-after-free on error path in transform dialect

18 months ago[clang-format] fix template closer followed by >
Backl1ght [Fri, 6 Jan 2023 13:05:15 +0000 (21:05 +0800)]
[clang-format] fix template closer followed by >

fix https://github.com/llvm/llvm-project/issues/59785

Reviewed By: HazardyKnusperkeks, MyDeveloperDay, owenpan

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

18 months ago[IR] Use isEntryBlock() API (NFC)
Nikita Popov [Fri, 6 Jan 2023 14:43:02 +0000 (15:43 +0100)]
[IR] Use isEntryBlock() API (NFC)

18 months ago[IR] Add AllocaInst::getAllocationSize() (NFC)
Nikita Popov [Fri, 6 Jan 2023 14:33:39 +0000 (15:33 +0100)]
[IR] Add AllocaInst::getAllocationSize() (NFC)

When fetching allocation sizes, we almost always want to have the
size in bytes, but we were only providing an InBits API. Also add
the corresponding byte-based conjugate to save some *8 and /8
juggling everywhere.

18 months ago[SDAG] try to avoid multiply for X*Y==0
Sanjay Patel [Fri, 6 Jan 2023 13:49:19 +0000 (08:49 -0500)]
[SDAG] try to avoid multiply for X*Y==0

Forking this off from D140850 -
https://alive2.llvm.org/ce/z/TgBeK_
https://alive2.llvm.org/ce/z/STVD7d

We could almost justify doing this in IR, but consideration for
"minsize" requires that we only try it in codegen -- the
transform is not reversible.

In all other cases, avoiding multiply should be a win because a
mul is more expensive than simple/parallelizable compares. AArch
even has a trick to keep instruction count even for some types.

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

18 months agoAMDGPU/GlobalISel: Add missing test for implicit_def regbankselect
Matt Arsenault [Fri, 30 Dec 2022 14:45:32 +0000 (09:45 -0500)]
AMDGPU/GlobalISel: Add missing test for implicit_def regbankselect

18 months agoAMDGPU/GlobalISel: Add wave32 checks to bool test
Matt Arsenault [Tue, 27 Dec 2022 23:26:54 +0000 (18:26 -0500)]
AMDGPU/GlobalISel: Add wave32 checks to bool test

18 months ago[C++20] Determine the dependency of unevaluated lambdas more accurately
Liming Liu [Fri, 6 Jan 2023 13:56:25 +0000 (05:56 -0800)]
[C++20] Determine the dependency of unevaluated lambdas more accurately

During template instantiation, the instantiator will enter constant
evaluated
context before instantiate a template argument originated from an
expression,
and this impedes the instantiator from creating lambdas with independent
types.

This patch solves the problem via widening the condition that the
instantiator
marks lambdas as never dependent, and fixes the issue #57960

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

18 months ago[AMDGPU] Add a feature for VALUTransUseHazard
Jay Foad [Fri, 6 Jan 2023 11:09:36 +0000 (11:09 +0000)]
[AMDGPU] Add a feature for VALUTransUseHazard

NFCI. This just allows us to experiment with enabling/disabling the
workaround on different subtargets.

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

18 months ago[llvm-exegesis][NFC] Update benchmark phase naming to match documentation
Guillaume Chatelet [Fri, 6 Jan 2023 13:24:44 +0000 (13:24 +0000)]
[llvm-exegesis][NFC] Update benchmark phase naming to match documentation

18 months ago[mlir][memref] Add runtime verification for memref::CastOp
Matthias Springer [Fri, 6 Jan 2023 13:24:30 +0000 (14:24 +0100)]
[mlir][memref] Add runtime verification for memref::CastOp

Verify unranked -> ranked casts and casts of dynamic sizes/offset/strides to static ones.

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

18 months ago[AArch64] add tests for x*y == 0; NFC
Sanjay Patel [Thu, 5 Jan 2023 20:35:24 +0000 (15:35 -0500)]
[AArch64] add tests for x*y == 0; NFC

18 months ago[x86] add tests for x*y == 0; NFC
Sanjay Patel [Thu, 5 Jan 2023 19:58:56 +0000 (14:58 -0500)]
[x86] add tests for x*y == 0; NFC

18 months ago[UpdateTestChecks] Do not add --force-update to UTC_ARGS
Alex Richardson [Fri, 6 Jan 2023 13:23:10 +0000 (13:23 +0000)]
[UpdateTestChecks] Do not add --force-update to UTC_ARGS

Persisting this flag only introduces test churn.

Reviewed By: nikic

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

18 months agoMake switch-to-lookup-large-types.ll more reliable
Alex Richardson [Fri, 6 Jan 2023 13:20:11 +0000 (13:20 +0000)]
Make switch-to-lookup-large-types.ll more reliable

When larger integer types are natively supported simplifycfg will use an
inline constant instead of a global variable for this transform. I noticed
this while trying to automatically infer the datalayout from the target
triple in opt if it is not explicitly specified. Since the x86_64
datalayout includes "n8:16:32:64", this test started failing.

While touching this file also change i128 to i64 in the first test since
this was intended behaviour in the original commit.

Reviewed By: spatel, fhahn

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

18 months ago[CallSiteSplitting] Convert test to opaque pointers (NFC)
Nikita Popov [Fri, 6 Jan 2023 13:34:41 +0000 (14:34 +0100)]
[CallSiteSplitting] Convert test to opaque pointers (NFC)

Keeping the bitcasts here because this is in part testing the
(legal) bitcast after a musttail call, even though it's no longer
really relevant.

18 months ago[gn build] Port 4670d5ece57d
LLVM GN Syncbot [Fri, 6 Jan 2023 13:20:13 +0000 (13:20 +0000)]
[gn build] Port 4670d5ece57d

18 months ago[NFC] Vastly simplifies TypeSize
Guillaume Chatelet [Sat, 17 Dec 2022 17:48:36 +0000 (17:48 +0000)]
[NFC] Vastly simplifies TypeSize

Simplifies the implementation of `TypeSize` while retaining its interface.
There is no need for abstract concepts like `LinearPolyBase`, `UnivariateLinearPolyBase` or `LinearPolySize`.

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

18 months ago[WebAssembly] Explicitly add {z,s}ext so extends are selected
Luke Lau [Tue, 3 Jan 2023 19:37:16 +0000 (19:37 +0000)]
[WebAssembly] Explicitly add {z,s}ext so extends are selected

During DAG legalization, {u,s}itofp instructions on v2i8, v2i16, v4i8
and v4i16 types ended up being legalized into scalar instructions, when
they could just be extended to v2i32/v4i32 instead.

Fixes https://github.com/llvm/llvm-project/issues/57182

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

18 months ago[mlir] adapt TransformEachOpTrait to parameter values
Alex Zinenko [Tue, 3 Jan 2023 16:01:07 +0000 (16:01 +0000)]
[mlir] adapt TransformEachOpTrait to parameter values

Adapt the implementation of TransformEachOpTrait to the existence of
parameter values recently introduced into the transform dialect. In
particular, allow `applyToOne` hooks to return a list containing a mix
of `Operation *` that will be associated with handles and `Attribute`
that will be associated with parameter values by the trait
implementation of the transform interface's `apply` method.

Disentangle the "transposition" of the list of per-payload op partial
results to decrease its overall complexity and detemplatize the code
that doesn't really need templates. This removes the poorly documented
special handling for single-result ops with TransformEachOpTrait that
could have assigned null pointer values to handles.

Reviewed By: springerm

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

18 months ago[mlir] NFC: move DiagnosedSilenceableFailure to Utils in Transform dialect
Alex Zinenko [Mon, 2 Jan 2023 17:11:40 +0000 (17:11 +0000)]
[mlir] NFC: move DiagnosedSilenceableFailure to Utils in Transform dialect

It was originally placed in TransformInterfaces for convenience, but it
is really a generic utility. It may also create an include cycle between
TransformTypes and TransformInterfaces if the latter needs to include
the former because the former uses the failure util.

Reviewed By: springerm

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

18 months ago[mlir] NFC: rename TransformTypeInterface to TransformHandleTypeInterface
Alex Zinenko [Mon, 2 Jan 2023 13:58:53 +0000 (13:58 +0000)]
[mlir] NFC: rename TransformTypeInterface to TransformHandleTypeInterface

This makes it more consistent with the recently added
TransformParamTypeInterface.

Reviewed By: springerm

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

18 months ago[mlir] introduce parameters into the transofrm dialect
Alex Zinenko [Mon, 2 Jan 2023 13:07:02 +0000 (13:07 +0000)]
[mlir] introduce parameters into the transofrm dialect

Introduce a new kind of values into the transform dialect -- parameter
values. These values have a type implementing the new
`TransformParamTypeInterface` and are associated with lists of
attributes rather than lists of payload operations. This mechanism
allows one to wrap numeric calculations, typically heuristics, into
transform operations separate from those at actually applying the
transformation. For example, tile size computation can be now separated
from tiling itself, and not hardcoded in the transform dialect. This
further improves the separation of concerns between transform choice and
implementation.

Reviewed By: springerm

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

18 months ago[bazel] Add missing :Support dependency after 1b8224537070
Benjamin Kramer [Fri, 6 Jan 2023 11:51:01 +0000 (12:51 +0100)]
[bazel] Add missing :Support dependency after 1b8224537070

18 months ago[mlir][tensor] Support parallel_insert_slice in MergeConsecutiveInsertExtractSlicePat...
Matthias Springer [Fri, 6 Jan 2023 10:59:30 +0000 (11:59 +0100)]
[mlir][tensor] Support parallel_insert_slice in MergeConsecutiveInsertExtractSlicePatterns.cpp

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

18 months ago[mlir][linalg] Swap extract_slice(fill(x)) ops
Matthias Springer [Fri, 6 Jan 2023 10:59:41 +0000 (11:59 +0100)]
[mlir][linalg] Swap extract_slice(fill(x)) ops

This pattern is similar to `FoldFillWithTensorReshape`, which performs the same swapping with reshapes.

Fill the smaller extracted tensor slice instead of `x`. This allows for additional simplifications in case `x` is the result of another extract_slice.

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

18 months ago[clang][analyzer] Extend StreamChecker with some new functions.
Balázs Kéri [Fri, 6 Jan 2023 10:21:41 +0000 (11:21 +0100)]
[clang][analyzer] Extend StreamChecker with some new functions.

The stream handling functions `ftell`, `rewind`, `fgetpos`, `fsetpos`
are evaluated in the checker more exactly than before.
New tests are added to test behavior of the checker together with
StdLibraryFunctionsChecker. The option ModelPOSIX of that checker
affects if (most of) the stream functions are recognized, and checker
StdLibraryFunctionArgs generates warnings if constraints for arguments
are not satisfied. The state of `errno` is set by StdLibraryFunctionsChecker
too for every case in the stream functions.
StreamChecker works with the stream state only, does not set the errno state,
and is not dependent on other checkers.

Reviewed By: Szelethus

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

18 months ago[Transforms] Convert some tests to opaque pointers (NFC)
Nikita Popov [Fri, 6 Jan 2023 11:09:52 +0000 (12:09 +0100)]
[Transforms] Convert some tests to opaque pointers (NFC)

18 months ago[AArch64] add GlobalIsel support for scalar CNT instruction
Ties Stuij [Fri, 6 Jan 2023 10:09:46 +0000 (10:09 +0000)]
[AArch64] add GlobalIsel support for scalar CNT instruction

When feature CSSC is available we should use instruction CNT for s32, s64 and
s128 types in GlobalIsel's G_CTPOP.

spec:
https://developer.arm.com/documentation/ddi0602/2022-09/Base-Instructions/CNT--Count-bits-

Reviewed By: aemerson

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

18 months ago[GlobalSplit] Convert test to opaque pointers (NFC)
Nikita Popov [Fri, 6 Jan 2023 11:07:06 +0000 (12:07 +0100)]
[GlobalSplit] Convert test to opaque pointers (NFC)

18 months ago[ConstantFold] Don't drop zero index gep with inrange attribute
Nikita Popov [Fri, 6 Jan 2023 11:02:52 +0000 (12:02 +0100)]
[ConstantFold] Don't drop zero index gep with inrange attribute

This may cause GlobalSplit to fail if opaque pointers are used.

inrange really needs a new representation, but for now restore the
pre-opaque pointers status.