platform/upstream/llvm.git
19 months ago[mlir][tosa] Add InferTensorType interface to tosa reduce operations
Aviad Cohen [Sun, 2 Apr 2023 09:12:15 +0000 (12:12 +0300)]
[mlir][tosa] Add InferTensorType interface to tosa reduce operations

When this interface is used, a call to inferReturnTypeComponents()
is generated on creation and verification of the op.

Reviewed By: jpienaar, eric-k256

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

19 months ago[ORC] Return bootstrap map values via reference argument.
Lang Hames [Wed, 5 Apr 2023 01:07:44 +0000 (18:07 -0700)]
[ORC] Return bootstrap map values via reference argument.

This simplifies checking of the result (it's just an Error, rather than an
optional<Expected<T>>), and allows T to be deduced rather than requiring that
it be specified.

19 months ago[gn build] Port 443825c517c8
Nico Weber [Wed, 5 Apr 2023 01:25:45 +0000 (21:25 -0400)]
[gn build] Port 443825c517c8

19 months ago[gn] port 4dc3bcf0124a
Nico Weber [Wed, 5 Apr 2023 01:23:29 +0000 (21:23 -0400)]
[gn] port 4dc3bcf0124a

19 months agoFix bazel overlay after "[mlir] Introduce IRDL dialect"
Tomás Longeri [Wed, 5 Apr 2023 01:07:25 +0000 (01:07 +0000)]
Fix bazel overlay after "[mlir] Introduce IRDL dialect"

Reviewed By: dblaikie

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

19 months agoFix a few clang-tidy warnings (container empty checks, function decl/def param naming)
David Blaikie [Wed, 5 Apr 2023 01:06:16 +0000 (01:06 +0000)]
Fix a few clang-tidy warnings (container empty checks, function decl/def param naming)

19 months ago[libc] Forward CUDA options to the runtimes invocation of `libc`
Joseph Huber [Tue, 4 Apr 2023 23:32:00 +0000 (18:32 -0500)]
[libc] Forward CUDA options to the runtimes invocation of `libc`

Some configurations may require `-DCUDAToolkit_ROOT` to find CUDA
properly. This is currently not forwarded to the CMake invocation. This
patch adds a prefix so it will be visible when the runtimes build is
started.

Reviewed By: tra

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

19 months ago[libc] Ensure that the required clang tools are up-to-date for libc GPU
Joseph Huber [Tue, 4 Apr 2023 23:20:13 +0000 (18:20 -0500)]
[libc] Ensure that the required clang tools are up-to-date for libc GPU

The `clang-offload-packager`. `nvptx-arch`, and `amdgpu-arch` tools are
required for building the GPU target of `libc`. This patch ensures that
we build this tool when directly building `libc` via `ninja libc` or similar.

Reviewed By: tra

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

19 months ago[nvptx-arch] Dynamically load `libcuda.so.1` directly instead
Joseph Huber [Tue, 4 Apr 2023 23:10:51 +0000 (18:10 -0500)]
[nvptx-arch] Dynamically load `libcuda.so.1` directly instead

This patch loads the CUDA driver library directly via its real
`DT_SONAME`. This prevents the filesystem from needing to reload it in
cases when it's already loaded.

Reviewed By: tra

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

19 months ago[FS-AFDO] Assign discriminators to pseudo probes
Hongtao Yu [Fri, 31 Mar 2023 00:36:51 +0000 (17:36 -0700)]
[FS-AFDO] Assign discriminators to pseudo probes

This is the first change for FS-AFDO integration with CSSPGO. There are more patches coming.

With pseudo probes, we do not assign FS discriminators to any other instructions since we will be using only probes for profile correlation.

Also call instructions are excluded since their dwarf discriminators are used for other purposes, i.e, storing probe ids. Since they are not getting a FS discriminator, they will also be excluded from MIR profile loading. The corresponding changes will be in the subsequent patches.

Reviewed By: wenlei

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

19 months ago[M68k] Add `TRAP`, `TRAPV`, `BKPT`, `ILLEGAL` instructions
Ian Douglas Scott [Tue, 4 Apr 2023 23:32:14 +0000 (16:32 -0700)]
[M68k] Add `TRAP`, `TRAPV`, `BKPT`, `ILLEGAL` instructions

This makes it possible to use TRAP to make Linux system calls using
inline assembly for instance.

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

19 months agoasan_memory_profile: Fix for deadlock in memory profiler code.
Sanjeet Karan Singh [Tue, 4 Apr 2023 22:17:29 +0000 (15:17 -0700)]
asan_memory_profile: Fix for deadlock in memory profiler code.

Calling symbolization directly from stopTheWorld was causing deadlock.
For libc dep systems, symbolization uses dl_iterate_phdr, which acquire a
dl write lock. It could deadlock if the lock is already acquired by one of
suspended.

Reviewed By: vitalybuka

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

19 months agoSimplify test.
Adrian Prantl [Tue, 4 Apr 2023 22:15:15 +0000 (15:15 -0700)]
Simplify test.

This test doesn't actually depend on being able to launch the process.
This may or may not explain why this test behaves oddly on some of our bots.

19 months agoSimplify test script
Adrian Prantl [Tue, 4 Apr 2023 22:08:38 +0000 (15:08 -0700)]
Simplify test script

19 months ago[clang][lit] Make LIT aware of env CLANG_CRASH_DIAGNOSTICS_DIR.
Francesco Petrogalli [Tue, 4 Apr 2023 22:07:20 +0000 (00:07 +0200)]
[clang][lit] Make LIT aware of env CLANG_CRASH_DIAGNOSTICS_DIR.

This is useful for retriving crash reports of LIT runs when the
temporary folder is not accessible.

Reviewed By: michaelplatings

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

19 months ago[BPF] Fix assembly parsing errors for atomic_fetch_* instructions
Eduard Zingerman [Mon, 3 Apr 2023 02:05:23 +0000 (05:05 +0300)]
[BPF] Fix assembly parsing errors for atomic_fetch_* instructions

Fixes BPF assembler parsing errors for the following instructions:
- atomic_fetch_add
- atomic_fetch_and
- atomic_fetch_xor
- atomic_fetch_or
- cmpxchg32_32
- cmpxchg_64
- xchg32_32
- xchg_64

Also add a test to verify that all instructions could be assembled and disassembled.

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

19 months ago[SPIR-V] Remove switch G_ICMP+G_BRCOND+G_BR before ISel
Michal Paszkowski [Sun, 26 Mar 2023 18:07:11 +0000 (20:07 +0200)]
[SPIR-V] Remove switch G_ICMP+G_BRCOND+G_BR before ISel

IRTranslator lowers switches to [G_SUB] + G_ICMP + G_BRCOND + G_BR
sequences. Since values and destination MBBs are included in the
spv_switch intrinsics, the sequences are not needed for ISel.

Before this commit, the information decoded by these sequences were
added to spv_switch intrinsics in SPIRVPreLegalizer and the sequences
were kept until SPIRVModuleAnalysis where they were marked skipped for
emission.

After this commit, the [G_SUB] + G_ICMP + G_BRCOND + G_BR sequences
and MBBs containing only these MIs are erased in SPIRVPreLegalizer.

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

19 months ago[MC][WebAssembly] Fix type checking for bulk memory instructions
Sam Clegg [Tue, 4 Apr 2023 15:37:25 +0000 (08:37 -0700)]
[MC][WebAssembly] Fix type checking for bulk memory instructions

This code currently assumes that all bulk memory operations occur on
memory 0 which who's type is determined by the wasm32 vs wasm64 target
triple.  Further improvements would be need to support multi-memory.

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

19 months ago[msan] Fix handling of ParamTLS overflow.
Evgenii Stepanov [Fri, 24 Mar 2023 23:56:44 +0000 (16:56 -0700)]
[msan] Fix handling of ParamTLS overflow.

Ironically, MSan copies uninitialized data off the stack into
VAArgTLSCopy in the callee-side handling of va_start. Clamp the copy
size to the actual length of the buffer, and zero-initialize the
remainder.

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

19 months ago[-Wunsafe-buffer-usage] Fix-Its transforming `&DRE[any]` to `&DRE.data()[any]`
ziqingluo-90 [Tue, 4 Apr 2023 19:19:12 +0000 (12:19 -0700)]
[-Wunsafe-buffer-usage] Fix-Its transforming `&DRE[any]` to `&DRE.data()[any]`

For an expression of the form `&DRE[any]` under an Unspecified
Pointer Context (UPC), we generate a fix-it for it with respect to a
strategy. In case the strategy is `std::span` (it is the only supported
one for now), the fix-it replaces the expression with
`&DRE.data()[any]`.

A UPC includes at least the contexts where
- the expression is being casted to an integer; and
- the expression is an argument of a call to a function that is not marked unsafe.

Reviewed by: NoQ, malavikasamak, t-rasmud, jkorous

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

19 months ago[lldb] Fix build on older FreeBSD
Brooks Davis [Tue, 4 Apr 2023 20:21:45 +0000 (21:21 +0100)]
[lldb] Fix build on older FreeBSD

Commit 392d9eb03af5a1adac66a86939351b22b3e73495 added a dependency on
FPE_FLTIDO which was only defined in FreeBSD main on May 19, 2022 and
is not in all supported releases. Just define it if it's missing as we
could use a debugger compiled on an older system to debug a newer one.

Reviewed by: DavidSpickett, emaste, dim

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

19 months ago[LV] Add uses of recurrences in exit blocks in some tests.
Florian Hahn [Tue, 4 Apr 2023 20:19:29 +0000 (21:19 +0100)]
[LV] Add uses of recurrences in exit blocks in some tests.

This preserves the spirit of the tests even if a follow-up changes only
generates exit values for recurrences if they are actually used.

19 months ago[AIX][PGO] Add malloc error handling and deallocation to FindBinaryId function
Wael Yehia [Tue, 4 Apr 2023 19:28:21 +0000 (19:28 +0000)]
[AIX][PGO] Add malloc error handling and deallocation to FindBinaryId function

This is a follow up on D146976.

Reviewed By: stephenpeckham

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

19 months ago[RISCV] Add tests for extract/insert subvector costs and extract lowering
Philip Reames [Tue, 4 Apr 2023 19:45:22 +0000 (12:45 -0700)]
[RISCV] Add tests for extract/insert subvector costs and extract lowering

19 months ago[RISCV][TTI] Cost SK_Tranpose as a generic two element shuffle
Philip Reames [Mon, 3 Apr 2023 23:27:38 +0000 (16:27 -0700)]
[RISCV][TTI] Cost SK_Tranpose as a generic two element shuffle

This matches the actual lowering.  The previous costing was "as if" it had been fully scalarized.

19 months ago[Verifier] Verify sizes of matrix.multiply operands and specified shape.
Florian Hahn [Tue, 4 Apr 2023 19:51:30 +0000 (20:51 +0100)]
[Verifier] Verify sizes of matrix.multiply operands and specified shape.

Extend the verifier to check if the size of the matrix operands of
matrix.multiply match the sizes specified by the numeric arguments.

Reviewed By: thegameg

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

19 months ago[DebugInfo][flang] Fix linking modules with similar DIStringType
Vladimir Radosavljevic [Tue, 4 Apr 2023 19:34:56 +0000 (12:34 -0700)]
[DebugInfo][flang] Fix linking modules with similar DIStringType

This issue is caused by incomplete implementation of isKeyOf for DIStringType.

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

19 months ago[HWASAN] Fix test which was failing with tag mismatch due to missing no_sanitize...
Kirill Stoimenov [Tue, 4 Apr 2023 19:39:57 +0000 (19:39 +0000)]
[HWASAN] Fix test which was failing with tag mismatch due to missing no_sanitize statement

19 months ago[flang] HLFIR to FIR lowering for complex parts
Ethan Luis McDonough [Tue, 4 Apr 2023 18:54:14 +0000 (13:54 -0500)]
[flang] HLFIR to FIR lowering for complex parts

This revision implements HLFIR to FIR lowering for complex parts.

Reviewed By: jeanPerier

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

19 months ago[mlir] Introduce IRDL dialect
Mathieu Fehr [Tue, 4 Apr 2023 19:16:45 +0000 (20:16 +0100)]
[mlir] Introduce IRDL dialect

This patch introduces the IRDL dialect, which allow users to represent
dynamic dialect definitions as an MLIR program.

The IRDL dialect defines operations, attributes, and types, using
attribute constraints. For example:

```
module {
  irdl.dialect @cmath {
    irdl.type @complex {
      %0 = irdl.is f32
      %1 = irdl.is f64
      %2 = irdl.any_of(%0, %1)
      irdl.parameters(%2)
    }

    irdl.operation @norm {
      %0 = irdl.any
      %1 = irdl.parametric @complex<%0>
      irdl.operands(%1)
      irdl.results(%0)
    }
}
```

This program will define a new `cmath.complex` type, which expects a single
parameter, which is either an `f32` or an `f64`. It also defines an
`cmath.norm` operation, which expects a single `cmath.complex` type as operand,
and returns a value of the underlying type. Note that like PDL (which IRDL is
heavily inspired from), both uses of `%0` are expected to be of the same attribute.

IRDL handles attributes and types with the same operations, and does this by always
wrapping types in a `TypeAttr`. This is to simplify the language.

Depends on D144690

Reviewed By: rriddle, mehdi_amini

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

19 months ago[scudo] Make the placeholder type specifier be consistent with C/C++
Chia-hung Duan [Tue, 4 Apr 2023 04:13:58 +0000 (04:13 +0000)]
[scudo] Make the placeholder type specifier be consistent with C/C++

This avoids `-Wformat` complains the placeholder type specifier mismatch
on `lld`/`llu`(used for `s64`/`u64`) which have slightly different
interpretation in string_utils.cpp.

Also enable Timer build which was disabled because of the complaining of
`-Wformat`.

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

19 months ago[APFloat] Refactor common code for APFloat<->APInt conversion
David Majnemer [Wed, 29 Mar 2023 21:44:11 +0000 (21:44 +0000)]
[APFloat] Refactor common code for APFloat<->APInt conversion

All the IEEE formats are quite similar, we can merge their code
effectively by writing it parametrically via the fltSemantics object.

We can metaprogram the implementation such that this parametricity is
zero-cost.

19 months ago[amdgpu] Implement dynamic LDS accesses from non-kernel functions
Jon Chesterfield [Tue, 4 Apr 2023 19:06:33 +0000 (20:06 +0100)]
[amdgpu] Implement dynamic LDS accesses from non-kernel functions

The premise here is to allow non-kernel functions to locate external LDS variables without using LDS or extra magic SGPRs to do so.

1/ First it crawls the callgraph to work out which external LDS variables are reachable from a given kernel
2/ Then it creates a new `extern char[0]` variable for each kernel, which will alias all the other extern LDS variables because that's the documented behaviour of these variables
3/ The address of that variable is written to a lookup table. The global variable is tagged with metadata to track what address it was allocated at by codegen
4/ The assembler builds the lookup table using the metadata
5/ Any non-kernel functions use the same magic intrinsic used by table lookups of non-dynamic LDS variables to find the address to use

Heavy overlap with the code paths taken for other lowering, in particular the same intrinsic is used to pass the dynamic scope information through the same sgpr as for table lookups of static LDS.

Reviewed By: arsenm

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

19 months ago[MergedLoadStoreMotion] Merge stores with conflicting value types
Jeff Byrnes [Tue, 28 Mar 2023 23:47:58 +0000 (16:47 -0700)]
[MergedLoadStoreMotion] Merge stores with conflicting value types

Since memory does not have an intrinsic type, we do not need to require value type matching on stores in order to sink them. To facilitate that, this patch finds stores which are sinkable, but have conflicting types, and bitcasts the ValueOperand so they are easily sinkable into a PHINode. Rather than doing fancy analysis to optimally insert the bitcast, we always insert right before the relevant store in the diamond branch. The assumption is that later passes (e.g. GVN, SimplifyCFG) will clean up bitcasts as needed.

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

19 months ago[lld][WebAssembly] Fix stub library parsing with windows line endings
Sam Clegg [Tue, 4 Apr 2023 17:24:40 +0000 (10:24 -0700)]
[lld][WebAssembly] Fix stub library parsing with windows line endings

Also, fix checking of first line in ::parse.  We can't use the
::getLines helper here since that already does comment stripping
internally.

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

19 months ago[dsymutil] Disallow --reproducer=Use
Keith Smiley [Tue, 4 Apr 2023 04:53:33 +0000 (21:53 -0700)]
[dsymutil] Disallow --reproducer=Use

This should be implied by --use-reproducer instead as a path is required
for this mode

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

19 months agoRevert "AMDGPU: Created a subclass for the return address operand in the tail call...
Changpeng Fang [Tue, 4 Apr 2023 18:44:52 +0000 (11:44 -0700)]
Revert "AMDGPU: Created a subclass for the return address operand in the tail call return instruction"

This reverts commit 461a559bc9bd755436ba8f12f8b74757e03f9b9f.

19 months agoDo not move "auto-init" instruction if they're volatile
serge-sans-paille [Tue, 4 Apr 2023 18:38:25 +0000 (20:38 +0200)]
Do not move "auto-init" instruction if they're volatile

This is overly conservative, but at least it's safe.

This is a follow-up to https://reviews.llvm.org/D137707

19 months ago[lld] Support separate native object file path in --thinlto-prefix-replace
Ivan Tadeu Ferreira Antunes Filho [Tue, 4 Apr 2023 16:57:53 +0000 (09:57 -0700)]
[lld] Support separate native object file path in --thinlto-prefix-replace

Currently, the --thinlto-prefix-replace="oldpath;newpath" option is used during
distributed ThinLTO thin links to specify the mapping of the input bitcode object
files' directory tree (oldpath) to the directory tree (newpath) used for both:

1) the output files of the thin link itself (the .thinlto.bc index files and the
optional .imports files)
2) the specified object file paths written to the response file given in the
--thinlto-index-only=${response} option, which is used by the final native
link and must match the paths of the native object files that will be
produced by ThinLTO backend compiles.
This patch expands the --thinlto-prefix-replace option to allow a separate directory
tree mapping to be specified for the object file paths written to the response file
(number 2 above). This is important to support builds and build systems where the
same output directory may not be written by multiple build actions (e.g. the thin link
and the ThinLTO backend compiles).

The new format is: --thinlto-prefix-replace="origpath;outpath[;objpath]"

This replaces the origpath directory tree of the thin link input files with
outpath when writing the thin link index and imports outputs (number 1
above). If objpath is specified it replaces origpath of the input files with
objpath when writing the response file (number 2 above), otherwise it
falls back to the old behavior of using outpath for this as well.

Reviewed By: tejohnson, MaskRay

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

19 months ago[AArch64][GlobalISel][RegBankSelect] Guess the bank for loads using the MMO.
Amara Emerson [Tue, 4 Apr 2023 18:00:50 +0000 (11:00 -0700)]
[AArch64][GlobalISel][RegBankSelect] Guess the bank for loads using the MMO.

We had this patch downstream for a long time, we need to find the users of the
IR load to guess the bank since with opaque pointers we lost the type information.

19 months ago[fuzzer][test] Avoid big-file-copy.test on memory constrained devices
Roy Sundahl [Tue, 4 Apr 2023 05:10:26 +0000 (22:10 -0700)]
[fuzzer][test] Avoid big-file-copy.test on memory constrained devices

The test "big-file-copy.test" introduced in D146189 and constrained to darwin by
D147094, is by this differential further constrained to only those devices with
sufficient resources. Also correct the test to read the environment variable
"result" from the same shell in which it was stored (which may differ on devices).

Reviewed By: thetruestblue

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

19 months agoAMDGPU: Created a subclass for the return address operand in the tail call return...
Changpeng Fang [Tue, 4 Apr 2023 17:56:58 +0000 (10:56 -0700)]
AMDGPU: Created a subclass for the return address operand in the tail call return instruction

Summary:
  This is to avoid using the callee saved registers for the return address of the tail call return instruction.

Reviewers:
  arsenm, cdevadas

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

19 months agoBazel: Try alwayslink
David Blaikie [Tue, 4 Apr 2023 17:45:27 +0000 (17:45 +0000)]
Bazel: Try alwayslink

19 months agoBazel: Try textual hdrs for tblgen .def file
David Blaikie [Tue, 4 Apr 2023 17:37:49 +0000 (17:37 +0000)]
Bazel: Try textual hdrs for tblgen .def file

19 months agoBazel fix spelling
David Blaikie [Tue, 4 Apr 2023 17:35:01 +0000 (17:35 +0000)]
Bazel fix spelling

19 months agoBazel add missing comma
David Blaikie [Tue, 4 Apr 2023 17:32:34 +0000 (17:32 +0000)]
Bazel add missing comma

19 months agoBazel fix - try splitting out llvm-tblgen into a library to support .def files
David Blaikie [Tue, 4 Apr 2023 17:30:31 +0000 (17:30 +0000)]
Bazel fix - try splitting out llvm-tblgen into a library to support .def files

19 months agoRevert "[compiler-rt] Fix scudo build on ARM"
Leandro Lupori [Tue, 4 Apr 2023 17:22:53 +0000 (14:22 -0300)]
Revert "[compiler-rt] Fix scudo build on ARM"

This broke fuchsia cross-compile.

This reverts commit f1f3dd64bfd2af94f9cccd01cf9e213fe3e69707.

19 months ago[IR] Rename a couple calls to ConstantInt::getNullValue to Constant::getNullValue...
Craig Topper [Tue, 4 Apr 2023 17:22:44 +0000 (10:22 -0700)]
[IR] Rename a couple calls to ConstantInt::getNullValue to Constant::getNullValue. NFC

There is no getNullValue in ConstantInt. Due to inheritance, it's
really Constant::getNullValue.

Most of the calls in tree that use ConstantInt::getNullValue do
know the type is an integer. These two calls allow pointers so
shouldn't use "ConstantInt".

19 months agoBazel build fix, second try
David Blaikie [Tue, 4 Apr 2023 17:14:13 +0000 (17:14 +0000)]
Bazel build fix, second try

19 months agoBazel build fix for X86ManualFoldTables.def
David Blaikie [Tue, 4 Apr 2023 17:09:50 +0000 (17:09 +0000)]
Bazel build fix for X86ManualFoldTables.def

19 months ago[ExtractAPI] Remove extra attributes in property declaration fragments
Usman Akinyemi [Tue, 4 Apr 2023 16:58:03 +0000 (09:58 -0700)]
[ExtractAPI] Remove extra attributes in property declaration fragments

Use `getPropertyAttributesAsWritten` instead of `getPropertyAttributes`
to get property attributes actually specified in the source code.
Resolves issue #61478.

https://reviews.llvm.org/D146759

Reviewed By: zixuw, dang

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

19 months ago[ARM] Add some tests for MVE vcmla combines. NFC
David Green [Tue, 4 Apr 2023 16:45:50 +0000 (17:45 +0100)]
[ARM] Add some tests for MVE vcmla combines. NFC

See D147200 and D147201

19 months ago[IR] Remove ConstantFP::getZeroValueForNegation.
Craig Topper [Tue, 4 Apr 2023 16:24:29 +0000 (09:24 -0700)]
[IR] Remove ConstantFP::getZeroValueForNegation.

This was mostly used for integers which was fixed in D147492.

The only FP usage was removed in D147497.

Reviewed By: nikic

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

19 months ago[CodeGen] Add machine verification to a couple of tests
Jay Foad [Tue, 4 Apr 2023 16:01:12 +0000 (17:01 +0100)]
[CodeGen] Add machine verification to a couple of tests

This helps to provoke a couple of errors when I apply D129208 that would
otherwise only show up in an LLVM_ENABLE_EXPENSIVE_CHECKS build.

19 months agoRevert "Recommit DwarfEHPrepare: insert extra unwind paths for stack protector to...
Hans Wennborg [Tue, 4 Apr 2023 16:00:11 +0000 (18:00 +0200)]
Revert "Recommit DwarfEHPrepare: insert extra unwind paths for stack protector to instrument"

This broke Objective-C autorelease / retainAutoreleasedReturnValue, see
comments on the code review.

> This is a mitigation patch for
> https://bugs.chromium.org/p/llvm/issues/detail?id=30, where existing stack
> protection is skipped if a function is returned through by an unwinder rather
> than the normal call/return path. The recent patch D139254 added the ability to
> instrument a visible unwind path, at least in the IR case (I'm working on the
> SelectionDAG instrumentation too) but there are still invisible unwinds it
> can't reach.
>
> So this patch adds logic to DwarfEHPrepare that goes through a function,
> converting any call that might throw into an invoke to a simple resume cleanup,
> and adding cleanup clauses to existing landingpads that lack them. Obviously we
> don't really want to do this if it's wasted effort, so I also exposed
> requiresStackProtector from the actual StackProtector code to skip the extra
> paths if they won't be used.
>
> Changes:
>   * Move test to AArch64 directory as it relies on target presence.
>   * Re-add Dominator-tree maintenance. Accidentally cherry-picked wrong patch.
>   * Skip adding paths on Windows EH functions.
>
> https://reviews.llvm.org/D143637

This reverts commit 2d690684f66fabc9ac6a2c70fcff3b31c9520794.

19 months ago[Flang] Change fir.divc to perform library call rather than generate inline operations.
Sacha Ballantyne [Fri, 10 Mar 2023 16:53:01 +0000 (16:53 +0000)]
[Flang] Change fir.divc to perform library call rather than generate inline operations.

Currently `fir.divc` is always lowered to a sequence of llvm operations to perform complex division, however this causes issues for extreme values when the calculations overflow. While this behaviour would be fine at -Ofast, this is currently the default at all levels.

This patch changes `fir.divc` to lower to a library call instead, except for when KIND=3 as there is no appropriate library call for this case.

Reviewed By: vzakhari

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

19 months ago[AArch64] Use fneg instead of fsub -0.0, X Cin IR expansion of __builtin_neon_vfmsh_f16.
Craig Topper [Tue, 4 Apr 2023 16:00:45 +0000 (09:00 -0700)]
[AArch64] Use fneg instead of fsub -0.0, X Cin IR expansion of __builtin_neon_vfmsh_f16.

Addresses the FIXME and removes the only in tree use of
llvm::ConstantFP::getZeroValueForNegation for an FP type.

Reviewed By: dmgreen, SjoerdMeijer

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

19 months ago[IR] Remove uses of the oddly named ConstantFP::getZeroValueForNegation in integer...
Craig Topper [Tue, 4 Apr 2023 16:00:37 +0000 (09:00 -0700)]
[IR] Remove uses of the oddly named ConstantFP::getZeroValueForNegation in integer code.

Confusingly ConstantFP's getZeroValueForNegation intentionally
handles non-FP constants. It calls getNullValue in Constant.

Nearly all uses in tree are for integers rather than FP. Maybe due
to replacing FSub -0.0, X idiom with an FNeg instructions a few
years ago.

This patch replaces all the integer uses in tree with ConstantInt::get(0, Ty).

The one remaining use is in clang with a FIXME that it should use fneg.
I'll fix that next and then delete ConstantFP::getZeroValueForNegation.

Reviewed By: nikic

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

19 months ago[OpenMP][libomptarget] Do not rely on AsyncInfoWrapperTy's destructor
Kevin Sala [Sun, 29 Jan 2023 22:29:22 +0000 (23:29 +0100)]
[OpenMP][libomptarget] Do not rely on AsyncInfoWrapperTy's destructor

19 months ago[RISCV] Add FIXME comment about expensive vector mem op costs
Luke Lau [Tue, 4 Apr 2023 15:45:07 +0000 (16:45 +0100)]
[RISCV] Add FIXME comment about expensive vector mem op costs

19 months ago[ARM] Fix VMOVSR pattern requirements
Mikhail Maltsev [Tue, 4 Apr 2023 15:45:14 +0000 (16:45 +0100)]
[ARM] Fix VMOVSR pattern requirements

The required target features for VMOVSR instruction (integer -> MVE
FP register copy) are HasFPRegs and UseVMOVSR (see
https://reviews.llvm.org/D60694).

The instruction selection pattern must use the same set of
requirements (i.e., HasFPRegs instead of HasVFP2). The discrepancy
can cause instruction selection failure when compiling code for
execute-only position-independence mode.

Reviewed By: dmgreen

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

19 months ago[flang] Correctly lower optional assumed type dummy
Valentin Clement [Tue, 4 Apr 2023 15:39:37 +0000 (08:39 -0700)]
[flang] Correctly lower optional assumed type dummy

Assumed type are represented differently in the ActualArgument
class. Correctly handle them in intrinsic arg lowering.

Reviewed By: PeteSteinfeld

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

19 months ago[X86] Prefer `vpternlog` instead of `blendv` for `vselect` on masks.
Noah Goldstein [Tue, 4 Apr 2023 05:14:02 +0000 (00:14 -0500)]
[X86] Prefer `vpternlog` instead of `blendv` for `vselect` on masks.

This rarely comes up because most `vselect` are lowered with actually
avx512 mask instructions, but is an improvement in the rare cases.

Reviewed By: RKSimon

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

19 months agoRecommit "[X86] Simplify some `pternlog` intrinsics" (2nd Try)
Noah Goldstein [Tue, 4 Apr 2023 05:13:43 +0000 (00:13 -0500)]
Recommit "[X86] Simplify some `pternlog` intrinsics" (2nd Try)

Original location of the unittests was Transforms/InstCombine/X86
which caused an issue as non-x86 targets ended up with a dependency on
X86 which isn't right.

Moved the unit tests to Target/X86 so should be good now.

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

19 months ago[WebAssembly] Add libcall signatures for roundeven
Thomas Lively [Tue, 4 Apr 2023 15:32:25 +0000 (08:32 -0700)]
[WebAssembly] Add libcall signatures for roundeven

Since clang started emitting roundeven intrinsics in a7d6593a0a17, they would
cause a crash in the WebAssembly backend because it did not know the roundeven
library function signatures. Fix the crash by adding the signatures.

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

19 months ago[clang][modules] Handle explicit modules when checking for .Private -> _Private
Ben Langmuir [Mon, 3 Apr 2023 22:22:20 +0000 (15:22 -0700)]
[clang][modules] Handle explicit modules when checking for .Private -> _Private

While we eventually want to remove the mapping from .Private to _Private
modules, until we do, ensure that it behaves the same for explicit
modules.

rdar://107449872

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

19 months ago[bazel] -lrt is not available on Android.
Byungchul Kim [Tue, 4 Apr 2023 15:08:08 +0000 (08:08 -0700)]
[bazel] -lrt is not available on Android.

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

19 months ago[flang] Fix -Wsign-compare in check-call.cpp (NFC)
Jie Fu [Tue, 4 Apr 2023 14:50:55 +0000 (22:50 +0800)]
[flang] Fix -Wsign-compare in check-call.cpp (NFC)

/data/llvm-project/flang/lib/Semantics/check-call.cpp:1234:29: error: comparison of integers of different signs: 'int' and 'size_type' (aka 'unsigned long') [-Werror,-Wsign-compare]
  CHECK(index >= 0 && index < actuals.size());
                      ~~~~~ ^ ~~~~~~~~~~~~~~
/data/llvm-project/flang/include/flang/Common/idioms.h:89:20: note: expanded from macro 'CHECK'
                   ^
1 error generated.

19 months ago[clang-format] Add option for having one port per line in Verilog
sstwcw [Tue, 4 Apr 2023 14:42:21 +0000 (14:42 +0000)]
[clang-format] Add option for having one port per line in Verilog

We added the option `VerilogBreakBetweenInstancePorts` to put ports on
separate lines in module instantiations.  We made it default to true
because style guides mostly recommend it that way for example:

https://github.com/lowRISC/style-guides/blob/master/VerilogCodingStyle.md#module-instantiation

Reviewed By: HazardyKnusperkeks

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

19 months ago[X86] combineBitcastvxi1 - peek through bitcast(concat(X,undef,undef,undef)) -> aext...
Simon Pilgrim [Tue, 4 Apr 2023 14:38:44 +0000 (15:38 +0100)]
[X86] combineBitcastvxi1 - peek through bitcast(concat(X,undef,undef,undef)) -> aext(bitcast(X))

Improves fix for #61683 to handle cases where the legalization concatenation isn't just 2 subops.

19 months ago[MachineVerifier] Try harder to verify SlotIndexes
Jay Foad [Wed, 6 Jul 2022 13:26:16 +0000 (14:26 +0100)]
[MachineVerifier] Try harder to verify SlotIndexes

Verify the SlotIndexes analysis after a pass that claims to preserve it,
even if there are no further passes (apart from the verifier itself)
that would use the analysis.

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

19 months ago[RISCV] Model vlseg/vsseg in interleaved memory ops
Luke Lau [Tue, 21 Mar 2023 13:02:16 +0000 (13:02 +0000)]
[RISCV] Model vlseg/vsseg in interleaved memory ops

If the legalized type is a legal interleaved access type (i.e. there's a
supported vlseg/vsseg instruction for it), the interleaved access pass
will pick any interleaved memory op (wide load + shuffles) and lower it
into a vlseg/vsseg intrinsic.

Reviewed By: reames

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

19 months ago[NFC][LoopVectorize] Simplify preferPredicateOverEpilogue interface
David Sherwood [Tue, 4 Apr 2023 13:58:58 +0000 (13:58 +0000)]
[NFC][LoopVectorize] Simplify preferPredicateOverEpilogue interface

Given just how many arguments we pass to
preferPredicateOverEpilogue and considering this list may
grow over time I've decided to pass in a pointer to a new
TailFoldingInfo structure instead, similar to what we do
with IntrinsicCostAttributes, etc. In addition, many of the
arguments we pass in are actually available in the
LoopVectorizationLegality class so I've managed to
reduce the set of pointers that we need to pass in the
TailFoldingInfo struct.

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

19 months agoRevert "[mlir][arith] Add expansion pattern for ext/trunc of bf16"
Benjamin Kramer [Tue, 4 Apr 2023 13:53:04 +0000 (15:53 +0200)]
Revert "[mlir][arith] Add expansion pattern for ext/trunc of bf16"

This reverts commit 5bff523793ee8c30c260cc77b23c61dcbb606486. The
bf16->f32 conversion is incorrect. This can't be on by default, if you
want this behavior make it a separate pass.

19 months ago[X86] LowerVectorAllEqual - generalize mask type generation. NFC.
Simon Pilgrim [Tue, 4 Apr 2023 13:48:20 +0000 (14:48 +0100)]
[X86] LowerVectorAllEqual - generalize mask type generation. NFC.

This will be necessary once we merge with combineVectorSizedSetCCEquality and we need to support KORTEST handling for 128/256-bit comparisons

19 months ago[Flang][PowerPC] Implement PPC mtfsf/mtfsfi intrinsics
Paul Scoropan [Tue, 21 Mar 2023 18:32:35 +0000 (18:32 +0000)]
[Flang][PowerPC] Implement PPC mtfsf/mtfsfi intrinsics

Implements the PowerPC mtfsf and mtfsfi intrinsics as well as introduces semantic error checking code for PowerPC intrinsics

Reviewed By: klausler

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

19 months ago[X86] Add additional test coverage for Issue #61683
Simon Pilgrim [Tue, 4 Apr 2023 13:39:58 +0000 (14:39 +0100)]
[X86] Add additional test coverage for Issue #61683

Show failure for other vector size concatenations

19 months ago[lld-macho] Check if DWARF offset is too large for compact unwind
Jez Ng [Tue, 4 Apr 2023 13:26:03 +0000 (09:26 -0400)]
[lld-macho] Check if DWARF offset is too large for compact unwind

For functions that use DWARF encodings, their compact unwind entry will
contain a hint about the offset of their DWARF entry from the start of
the `__eh_frame` section. The encoding only has 3 bytes to encode this
hint.

Previously, I neglected to check for overflow (and didn't realize that
the value was merely a hint without needing to be exact.) So for large
`__eh_frame` sections, the hint would overflow and cause the compact
unwind MODE flag to be corrupted, leading to uncaught exceptions at
runtime.

This diff fixes things by encoding zero as the hint for offsets that are
too large. The unwinder will start a linear search at the hint location
for the matching CFI record. The only requirement is that the hint
points to a valid CFI record start, and the start of the section is
always the start of a CFI record (in well-formed programs).

I'm not adding a test for this because generating the test inputs takes
a bit too much time. However, I have been testing locally with this lit
file, which takes about 15s to run on my machine:

```
# RUN: rm -rf %t; mkdir %t
# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-macos11.0 %s -o %t/test.o
# RUN: %lld -dylib -lSystem %t/test.o -o %t/test

.subsections_via_symbols
.text
.p2align 2

_f:
  .cfi_startproc
.rept 0x7fffff
  .cfi_escape 0x2e, 0x10
.endr
  ret
  .cfi_endproc

_g:
  .cfi_startproc
  .cfi_escape 0x2e, 0x10
  ret
  .cfi_endproc
```

Reviewed By: #lld-macho, smeenai

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

19 months ago[X86] Remove unused variable
Simon Pilgrim [Tue, 4 Apr 2023 13:26:46 +0000 (14:26 +0100)]
[X86] Remove unused variable

Leftover from eb435b7ff569b35ae603886b881f51ac8600bd60

19 months ago[Headers] Add some intrinsic function descriptions to immintrin.h.
Paul Robinson [Mon, 3 Apr 2023 18:19:35 +0000 (11:19 -0700)]
[Headers] Add some intrinsic function descriptions to immintrin.h.

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

19 months ago[X86] combineBitcastvxi1 - peek through bitcast(concat(X,undef)) -> aext(bitcast(X))
Simon Pilgrim [Tue, 4 Apr 2023 13:24:52 +0000 (14:24 +0100)]
[X86] combineBitcastvxi1 - peek through bitcast(concat(X,undef)) -> aext(bitcast(X))

Fixes #61683

19 months ago[python] Expose clang_Location_isInSystemHeader
Artur Ryt [Tue, 4 Apr 2023 13:21:04 +0000 (09:21 -0400)]
[python] Expose clang_Location_isInSystemHeader

Add is_in_system_header property for Location class.

Corresponding unit test was also added.

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

19 months ago[X86] Add test coverage for Issue #61683
Simon Pilgrim [Tue, 4 Apr 2023 13:08:33 +0000 (14:08 +0100)]
[X86] Add test coverage for Issue #61683

19 months agoDrop U6Imm-related definitions
Ilya Leoshkevich [Tue, 4 Apr 2023 12:50:00 +0000 (14:50 +0200)]
Drop U6Imm-related definitions

They are no longer used, which leads to the -Wunused-function warning.

Reviewed By: uweigand

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

19 months ago[RISCV] Move shuffle-reverse test to rvv directory. NFC
Luke Lau [Sun, 2 Apr 2023 14:14:44 +0000 (15:14 +0100)]
[RISCV] Move shuffle-reverse test to rvv directory. NFC

Test is related to vectors so probably belongs in the rvv directory

Reviewed By: craig.topper

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

19 months agoRevert "[test] Remove occurences of br undef in CodeGen/AMDGPU tests"
Nuno Lopes [Tue, 4 Apr 2023 12:45:56 +0000 (13:45 +0100)]
Revert "[test] Remove occurences of br undef in CodeGen/AMDGPU tests"

This reverts commit 18c594c176036b7ffcd8439ed9c4b08d2085a244.
Build bots broke

19 months ago[X86][mem-fold] Refine code, NFCI
Shengchen Kan [Tue, 4 Apr 2023 12:39:59 +0000 (20:39 +0800)]
[X86][mem-fold] Refine code, NFCI

1. Remove redundant definition of constructor
2. Move the array in .inc to .def file
3. Add a licence for the .def file

19 months agoMachO use generic code to detect atomic support.
Tim Northover [Tue, 4 Apr 2023 10:55:19 +0000 (11:55 +0100)]
MachO use generic code to detect atomic support.

The default code can detect what width of atomic instructions are supported
based on the targeted architecture profile, version etc so there's no need to
hard-code 64 on Darwin targets (especially as it's wrong in most M-class
cases).

19 months ago[SystemZ] Remove unused function 'decodeU6ImmOperand' in SystemZDisassembler.cpp...
Jie Fu [Tue, 4 Apr 2023 12:20:54 +0000 (20:20 +0800)]
[SystemZ] Remove unused function 'decodeU6ImmOperand' in SystemZDisassembler.cpp (NFC)

/data/llvm-project/llvm/lib/Target/SystemZ/Disassembler/SystemZDisassembler.cpp:209:21: error: unused function 'decodeU6ImmOperand' [-Werror,-Wunused-function]
static DecodeStatus decodeU6ImmOperand(MCInst &Inst, uint64_t Imm,
                    ^
1 error generated.

19 months ago[test] Remove occurences of br undef in CodeGen/AMDGPU tests
Kriti Gupta [Tue, 4 Apr 2023 12:14:30 +0000 (13:14 +0100)]
[test] Remove occurences of br undef in CodeGen/AMDGPU tests

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

19 months ago[X86] Convert some tests to opaque pointers (NFC)
Nikita Popov [Tue, 4 Apr 2023 12:07:22 +0000 (14:07 +0200)]
[X86] Convert some tests to opaque pointers (NFC)

19 months ago[compiler-rt] Fix scudo build on ARM
Leandro Lupori [Fri, 27 Jan 2023 18:34:00 +0000 (18:34 +0000)]
[compiler-rt] Fix scudo build on ARM

The build of scudo was failing on armv7l, with undefined references
to unwinder symbols, such as __aeabi_unwind_cpp_pr0. These are
needed by RTGwpAsan and thus, on ARM, scudo must also be linked
against an unwind library.

The cmake command that caused the build failure was:

cmake --fresh -S "$PWD/llvm/" -B "$PWD/build/" -G Ninja \
  -DCMAKE_INSTALL_PREFIX="$PWD/install" \
  -DCMAKE_BUILD_TYPE=Release \
  -DLLVM_ENABLE_PROJECTS="clang;lld;lldb;clang-tools-extra;polly" \
  -DLLVM_ENABLE_RUNTIMES="compiler-rt;libcxx;libcxxabi;libunwind" \
  -DLLVM_TOOLCHAIN_TOOLS="llvm-ar;llvm-ranlib;llvm-objdump;\
llvm-rc;llvm-cvtres;llvm-nm;llvm-strings;llvm-readobj;\
llvm-dlltool;llvm-pdbutil;llvm-objcopy;llvm-strip;llvm-cov;\
llvm-profdata;llvm-addr2line;llvm-symbolizer;llvm-windres;llvm-ml;\
llvm-readelf;llvm-size" \
  -DLLVM_INSTALL_BINUTILS_SYMLINKS=OFF -DLLVM_PARALLEL_LINK_JOBS=1

Fixes #60115

Reviewed By: hctim

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

19 months ago[DebugInfo] don't make an MDTuple just to leak it
Jameson Nash [Tue, 4 Apr 2023 11:42:25 +0000 (07:42 -0400)]
[DebugInfo] don't make an MDTuple just to leak it

There does not seem to be any purpose to allocating this object, which
is Metadata, so LLVM will simply leak it until the context is destroyed
(the subprogram metadata it contains are distinct, so there is little
chance of it being reused later). This should not have a functional
change.

This seems to be left over from an earlier design, when it used to call
```
CUNode->replaceSubprograms(SPs.get());
```
here also. (removed in http://reviews.llvm.org/D19034)

Reviewed By: aprantl

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

19 months ago[SystemZ] Allow any I5 in RotateSelect*
Ilya Leoshkevich [Tue, 4 Apr 2023 10:11:50 +0000 (12:11 +0200)]
[SystemZ] Allow any I5 in RotateSelect*

For all RotateSelect* instructions, PoP says:

    Bits 0-1 of the I5 field (bits 32-33 of the instruction) are
    ignored.

LLVM, however, completely prohibits using them, e.g.:

    error: invalid operand for instruction
    asm("rxsbg %[r1],%[r2],177,43,228\n"

Lift this unnecessary restriction.

Reviewed By: uweigand

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

19 months ago[X86] Convert test to opaque pointers (NFC)
Nikita Popov [Tue, 4 Apr 2023 11:48:49 +0000 (13:48 +0200)]
[X86] Convert test to opaque pointers (NFC)

Retaining bitcasts to keep test intent.

addrsig_sym is no longer emitted for metedata_f1, but this
improvement is ultimately inconsequential, as it will get dropped
at a later stage anyway.

19 months ago[lit] Implement -I option for builtin "diff" command to ignore changes where all...
Bing1 Yu [Tue, 4 Apr 2023 11:47:23 +0000 (19:47 +0800)]
[lit] Implement -I option for builtin "diff" command to ignore changes where all lines match RE

Reviewed By: pengfei

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

19 months ago[Verifier] Rename matrix-intrinsics-opaque-ptrs.ll->matrix-intrinsics.ll
Florian Hahn [Tue, 4 Apr 2023 11:47:15 +0000 (12:47 +0100)]
[Verifier] Rename matrix-intrinsics-opaque-ptrs.ll->matrix-intrinsics.ll

The original typed pointer version of the tests (matrix-intrinsics.ll)
is now obsolete. Replace matrix-intrinsics.ll with
matrix-intrinsics-opaque-ptrs.ll.

19 months ago[X86][NFC] Remove redundant flags used in x86-auto-memfold.td
Shengchen Kan [Tue, 4 Apr 2023 11:36:05 +0000 (19:36 +0800)]
[X86][NFC] Remove redundant flags used in x86-auto-memfold.td

19 months ago[include-cleaner] Only ignore builtins without a header
Kadir Cetinkaya [Mon, 3 Apr 2023 15:38:54 +0000 (17:38 +0200)]
[include-cleaner] Only ignore builtins without a header

Certain standard library functions (e.g. std::move) are also implemented
as builtins. This patch moves filtering logic to the symbol->header
mapping phase to rather generate these references without any providers
only when we don't have a mapping.
That way we can also map them to header names mentioned in the builtin
mappings.

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