platform/upstream/llvm.git
16 months agoRevert "Reland [MergeICmps] Adapt to non-eq comparisons, bugfix"
Mikhail Goncharov [Tue, 6 Jun 2023 14:26:07 +0000 (16:26 +0200)]
Revert "Reland [MergeICmps] Adapt to non-eq comparisons, bugfix"

Causes miscompile. See https://reviews.llvm.org/D141188.

This reverts commit fb2c98a929aa65603e9d984307a41325e577e9d3

16 months ago[Flang][OpenMP] Support depend clause for task construct, excluding array sections
Prabhdeep Singh Soni [Thu, 23 Mar 2023 15:26:50 +0000 (11:26 -0400)]
[Flang][OpenMP] Support depend clause for task construct, excluding array sections

This patch adds support for the OpenMP 4.0 depend clause for the task
construct, excluding array sections, to Flang lowering from parse-tree
to MLIR.

Reviewed By: kiranchandramohan

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

16 months ago[compiler-rt] Avoid memintrinsic calls inserted by the compiler
Marco Elver [Tue, 30 May 2023 09:59:22 +0000 (11:59 +0200)]
[compiler-rt] Avoid memintrinsic calls inserted by the compiler

D135716 introduced -ftrivial-auto-var-init=pattern where supported.
Unfortunately this introduces unwanted memset() for large stack arrays,
as shown by the new tests added for asan and msan (tsan already had this
test).

In general, the problem of compiler-inserted memintrinsic calls
(memset/memcpy/memmove) is not new to compiler-rt, and has been a
problem before.

To avoid introducing unwanted memintrinsic calls, we redefine
memintrinsics as __sanitizer_internal_mem* at the assembly level for
most source files automatically (where sanitizer_common_internal_defs.h
is included).

In few cases, redefining a symbol in this way causes issues for
interceptors, namely the memintrinsic interceptor themselves. For such
source files we have to selectively disable the redefinition.

Other alternatives have been considered, but simply do not work well in
the context of compiler-rt:

1. Linker --wrap:  this does not work because --wrap only
   applies to the final link, and would not apply when building
   sanitizer static libraries.

2. Changing references to memset() via objcopy:  this may work,
   but due to the complexities of the build system, introducing
   such a post-processing step for the right object files (in
   particular object files defining memset cannot be touched)
   seems infeasible.

The chosen solution works well (as shown by the tests). Other libraries
have chosen the same solution where nothing else works (see e.g. glibc's
"symbol-hacks.h").

v4:
- Add interface attribute to __sanitizer_internal_mem* declarations as
  well, as otherwise some compilers (MSVC) will complain.
- Add SANITIZER_COMMON_NO_REDEFINE_BUILTINS to source files using
  C++STL, since this could lead to ODR violations (see added comment).

v3:
- Don't use ALIAS() to alias internal_mem*() functions to
  __sanitizer_internal_mem*() functions, but just define them as
  ALWAYS_INLINE functions instead. This will work on darwin and windows.

v2:
- Fix ubsan_minimal build where compiler decides to insert
  memset/memcpy: ubsan_minimal has work without RTSanitizerCommonLibc,
  therefore do not redefine the builtins.
- Fix definition of internal_mem* functions with compilers that want the
  aliased function to already be defined before.
- Fix definition of __sanitizer_internal_mem* functions with compilers
  more pedantic about attribute placement around extern "C".

Reviewed By: vitalybuka, dvyukov

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

16 months ago[RISCV] Rework .option arch target streamer interface
Jessica Clarke [Tue, 6 Jun 2023 13:54:43 +0000 (14:54 +0100)]
[RISCV] Rework .option arch target streamer interface

The current interface requires some rather ugly tracking of state due to
splitting up the calls for each argument. Instead, pack them all into a
single call by passing an ArrayRef. Also clean up the dodgy whitespace
emitted for the directive whilst here; there was a stray space between
the tab and .option, and there was a tab rather than a space after the
first comma for some strange reason.

Reviewed By: craig.topper

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

16 months ago[RISCV] Make .option arch parser less mind-bending
Jessica Clarke [Tue, 6 Jun 2023 13:54:40 +0000 (14:54 +0100)]
[RISCV] Make .option arch parser less mind-bending

Currently the early-return flow in the infinite loop makes it hard to
find the non-error termination points amongst the sea of errors. Rewrite
it with a more conventional control flow that has a clear loop guard (in
place of one of the early returns) and a break (in place of the other),
and with greater code reuse.

This has a small effect on the errors given for malformed input, as seen
in the affected test, and is probably more helpful as a result. Note
that we also bail early now if parseComma fails, as is standard.

Reviewed By: craig.topper

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

16 months ago[clang][test] Use a physical copy of FS
Kadir Cetinkaya [Tue, 6 Jun 2023 13:40:33 +0000 (15:40 +0200)]
[clang][test] Use a physical copy of FS

Make use of a physical copy, rather than real FS in unittests that
change working-directory to get rid of the side effect of changing cwd for the
whole process. It's triggering crashes depending on the test order.

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

16 months ago[GlobalISel][X86] Move G_SEXT_INREG legalization handling to beside the regular integ...
Simon Pilgrim [Tue, 6 Jun 2023 13:38:19 +0000 (14:38 +0100)]
[GlobalISel][X86] Move G_SEXT_INREG legalization handling to beside the regular integer extension legalizations

16 months ago[llvm-objcopy][ELF] Preserve sh_link to .symtab when applicable
Andrew Ng [Wed, 17 May 2023 18:20:59 +0000 (19:20 +0100)]
[llvm-objcopy][ELF] Preserve sh_link to .symtab when applicable

This change to llvm-objcopy preserves the ELF section sh_link to .symtab
so long as none of the symbol table indices have been changed.
Previously, any invocation of llvm-objcopy including a "no-op" would
clear any section sh_link to .symtab.

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

16 months ago[InstCombine] Add stats for number of iterations (NFC)
Nikita Popov [Tue, 6 Jun 2023 12:55:56 +0000 (14:55 +0200)]
[InstCombine] Add stats for number of iterations (NFC)

16 months ago[GlobalIsel][X86] Remove an unused variable
Jay Foad [Tue, 6 Jun 2023 13:10:07 +0000 (14:10 +0100)]
[GlobalIsel][X86] Remove an unused variable

16 months ago[AMDGPU] Remove extract_subvector patterns
Jay Foad [Thu, 4 May 2023 14:34:28 +0000 (15:34 +0100)]
[AMDGPU] Remove extract_subvector patterns

Removing them seems to slightly increase code quality as well as
simplifying both the tablegen and C++ parts of the code.

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

16 months ago[Clang] Allow omitting `typename` in befriended constructors parameters
Corentin Jabot [Tue, 6 Jun 2023 07:21:16 +0000 (09:21 +0200)]
[Clang] Allow omitting `typename` in befriended constructors parameters

Fixes #63119

Reviewed By: #clang-language-wg, aaron.ballman

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

16 months ago[AArch64][NFC] Normalise name of indexed forms of SQRDMLAH/SQRDMLSH
Ricardo Jesus [Fri, 2 Jun 2023 09:02:06 +0000 (09:02 +0000)]
[AArch64][NFC] Normalise name of indexed forms of SQRDMLAH/SQRDMLSH

Most indexed vector instructions are suffixed with v<N><TY>_indexed.

SQRDMLAH/SQRDMLSH are the exception, being suffixed with <TY>_indexed
instead, which can complicate matching them slightly.

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

16 months ago[NFC][COFF] Refine access specifiers for WinCOFFObjectWriter
Haohai Wen [Tue, 6 Jun 2023 13:01:19 +0000 (21:01 +0800)]
[NFC][COFF] Refine access specifiers for WinCOFFObjectWriter

Set public specifiers only for constructor and inherited methods from
MCObjectWriter and leave others as private. Also change the order of
MCObjectWriter methods' definition according to it's declaration order.

Reviewed By: skan

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

16 months agoSwitch from full to unreleased for a Clang 17 fix; NFC
Aaron Ballman [Tue, 6 Jun 2023 12:57:57 +0000 (08:57 -0400)]
Switch from full to unreleased for a Clang 17 fix; NFC

16 months ago[GlobalIsel][X86] Update legalization of G_FADD/G_FSUB/G_FMUL/G_FDIV + G_FC
Simon Pilgrim [Tue, 6 Jun 2023 12:47:22 +0000 (13:47 +0100)]
[GlobalIsel][X86] Update legalization of G_FADD/G_FSUB/G_FMUL/G_FDIV + G_FC

Replace the legacy legalizer versions

16 months ago[Clang] Limit FunctionTypeExtraBitfields::NumExceptionType to 16 bits.
Sander de Smalen [Mon, 5 Jun 2023 14:34:25 +0000 (14:34 +0000)]
[Clang] Limit FunctionTypeExtraBitfields::NumExceptionType to 16 bits.

In https://reviews.llvm.org/D127762#4102578 @erichkeane suggested to
limit size of this field to 16bits, such that the field that encodes the
SME attributes for a function fall within the alignment of the struct for
32bit platforms.

Standard implimits defines the minimum handlers per try block to 256,
which suggests that 16bits should be more than sufficient for most
programs. Erich also pointed out that exception specs are being
deprecated and are rarely used, so hopefully this change is safe to make.

Reviewed By: erichkeane

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

16 months agoRevert "[AMDGPU] New PAL metadata updates to ps_extra_lds_size and float_mode"
David Stuttard [Tue, 6 Jun 2023 12:02:28 +0000 (13:02 +0100)]
Revert "[AMDGPU] New PAL metadata updates to ps_extra_lds_size and float_mode"

This reverts commit 6d5a653dda628250b373ec89e0e11cdd27603c24.

16 months ago[AMDGPU] New PAL metadata updates to ps_extra_lds_size and float_mode
David Stuttard [Thu, 11 May 2023 13:09:38 +0000 (14:09 +0100)]
[AMDGPU] New PAL metadata updates to ps_extra_lds_size and float_mode

New metadata format contains full calculation of field contents for
ps_extra_lds_size (vs old format where the value in RSRC register is used by PAL
to calculate the value required).

Also stop updating float_mode and rely on front end settings for this field.

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

16 months ago[GlobalISel][X86] Add G_IMPLICIT_DEF / G_CONSTANT legalization handling
Simon Pilgrim [Tue, 6 Jun 2023 10:32:32 +0000 (11:32 +0100)]
[GlobalISel][X86] Add G_IMPLICIT_DEF / G_CONSTANT legalization handling

16 months agoFix unused variable warning. NFC.
Simon Pilgrim [Tue, 6 Jun 2023 09:54:32 +0000 (10:54 +0100)]
Fix unused variable warning. NFC.

16 months ago[ARM][Driver] Warn if -mhard-float is incompatible
Michael Platings [Mon, 22 May 2023 13:48:00 +0000 (14:48 +0100)]
[ARM][Driver] Warn if -mhard-float is incompatible

Mixing -mfloat-abi=hard with a CPU that doesn't have floating point
registers is an error in GCC:
  cc1: error: '-mfloat-abi=hard': selected processor lacks an FPU

Since there is code in the wild (including in clang tests) that relies
on Clang's current behaviour, emit a warning instead of an error.

Unlike the GCC error, the new warning refers to floating point
registers instead of an FPU. This is because -mfloat-abi=hard and
-march=armv8.1-m.main+mve+nofp are compatible - in that case floating
point registers are required, but an FPU is not required.

My initial thought was to use the floating point ABI calculated by
arm::getARMFloatABI() but in invalid cases which error for other
reasons the ABI is miscalculated and the warning would cause confusion.
Therefore only warn if the user specifies the float ABI explicitly.

Fixes part of https://github.com/llvm/llvm-project/issues/55755

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

16 months ago[GlobalIsel][X86] Legalize G_ANYEXT, G_SEXT, and G_ZEXT
Thorsten Schütt [Tue, 6 Jun 2023 10:19:36 +0000 (12:19 +0200)]
[GlobalIsel][X86] Legalize G_ANYEXT, G_SEXT, and G_ZEXT

Reviewed By: RKSimon

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

16 months agoRevert "[ARM][Driver] Warn if -mhard-float is incompatible"
Michael Platings [Tue, 6 Jun 2023 10:05:05 +0000 (11:05 +0100)]
Revert "[ARM][Driver] Warn if -mhard-float is incompatible"

An associated -W flag is needed.

This reverts commit 1d511e1864f142d08a491a89940d70c516a6c6a2.

16 months ago[mlir][transform] Use separate ops instead of PatternRegistry
Matthias Springer [Tue, 6 Jun 2023 09:19:59 +0000 (11:19 +0200)]
[mlir][transform] Use separate ops instead of PatternRegistry

* Remove `transform::PatternRegistry`.
* Add a new op for each currently registered pattern set.
* Change names of vector dialect pattern selector ops, so that they are consistent with the remaining code base.
* Remove redundant `transform.vector.extract_address_computations` op.

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

16 months ago[clang][analyzer] Add report of NULL stream to StreamChecker.
Balázs Kéri [Tue, 6 Jun 2023 09:12:20 +0000 (11:12 +0200)]
[clang][analyzer] Add report of NULL stream to StreamChecker.

The report of NULL stream was removed in commit 570bf97.
The old reason is not actual any more because the checker dependencies are changed.
It is not good to eliminate a failure state (where the stream is NULL) without
generating a bug report because other checkers are not able to find it later.
The checker did this with the NULL stream pointer, and because this checker
runs now before other checkers that can detect NULL pointers, the null pointer
bug was not found at all.

Reviewed By: steakhal

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

16 months ago[RISCV] Handle "o" inline asm memory constraint
wangpc [Tue, 6 Jun 2023 09:49:58 +0000 (17:49 +0800)]
[RISCV] Handle "o" inline asm memory constraint

This is the same as D100412.

We just found the same crash when we tried to compile some packages
like mariadb, php, etc.

For constraint "o", it means "A memory operand is allowed, but
only if the address is offsettable". So I think it can be handled
just like constraint "m" for RISCV target.

And we print verbose information when unsupported constraints occur.

Reviewed By: asb

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

16 months agoRevert "[VPlan] Mark recurrence recipes as not having side-effects."
Florian Hahn [Tue, 6 Jun 2023 09:35:25 +0000 (11:35 +0200)]
Revert "[VPlan] Mark recurrence recipes as not having side-effects."

This reverts commit 02369b75fdd7b5fc5d9b47f1b60587c225918511.

At the moment, live-outs used *only* for the resume values in the scalar
loop are not modeled in VPlan yet. This means first-order recurrence
recipes could be removed, when a scalar epilogue is required and the
only use of a FOR is outside the loop.

Keep treating recurrence recipes as having side-effects for now, to
avoid them being removed.

Fixes #62954.

16 months ago[mlir][transform] generate transform module on-the-fly
Alex Zinenko [Mon, 5 Jun 2023 18:42:15 +0000 (18:42 +0000)]
[mlir][transform] generate transform module on-the-fly

Add a TransformInterpreterPassBase capability to generate the (shared)
module containing the transform script during the pass initialization.
This is helpful to programmatically generate the script as opposed to
parsing it from the textual module.

Reviewed By: springerm

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

16 months ago[LV] Use force-vector-width for X86 recurrence test.
Florian Hahn [Tue, 6 Jun 2023 09:26:55 +0000 (11:26 +0200)]
[LV] Use force-vector-width for X86 recurrence test.

This makes sure that all tests that can be vectorized in the file are
vectorized.

16 months ago[LV] Add test for #62954.
Florian Hahn [Tue, 6 Jun 2023 09:20:21 +0000 (11:20 +0200)]
[LV] Add test for #62954.

16 months ago[clang][ThreadSafety][NFC] Make isReference() const
Timm Bäder [Tue, 6 Jun 2023 08:33:00 +0000 (10:33 +0200)]
[clang][ThreadSafety][NFC] Make isReference() const

16 months ago[AMDGPU] WQM: Ensure exact mode placement before branches
Carl Ritson [Tue, 6 Jun 2023 08:25:22 +0000 (17:25 +0900)]
[AMDGPU] WQM: Ensure exact mode placement before branches

Fix for D151797 where the change accidentally allowed exit to
exact mode between branch instructions.

Reviewed By: dstuttard

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

16 months ago[AArch64] Make .arch without extra features actually take effect
Martin Storsjö [Fri, 2 Jun 2023 09:25:52 +0000 (12:25 +0300)]
[AArch64] Make .arch without extra features actually take effect

This fixes PR32873 / https://github.com/llvm/llvm-project/issues/32220.

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

16 months ago[AArch64] Complete the list of extensions supported by .arch and .arch_extension
Martin Storsjö [Fri, 2 Jun 2023 08:36:40 +0000 (11:36 +0300)]
[AArch64] Complete the list of extensions supported by .arch and .arch_extension

This brings the list of extensions supported here up to date
with what is supported by current git versions of binutils.

Also add a comment to AArch64TargetParser to remind people to
consider adding new ones to the list supported in assembly.

In the case of the "rdma" extension, there's a slight surprise:
LLVM knows of the extension under the name "rdm", while binutils
has it named "rdma". However, binutils appears to accept any
abbreviated prefix of an arch extension, so it does accept the
form "rdm" too even if it formally considers it called "rdma".

Support both spellings for the extensions here, for simplicity.

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

16 months agoUse symbolic name for previous MLIR Bytecode versions
Mehdi Amini [Mon, 5 Jun 2023 19:35:30 +0000 (12:35 -0700)]
Use symbolic name for previous MLIR Bytecode versions

Reviewed By: jpienaar, burmako

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

16 months ago[ARM][Driver] Warn if -mhard-float is incompatible
Michael Platings [Mon, 22 May 2023 13:48:00 +0000 (14:48 +0100)]
[ARM][Driver] Warn if -mhard-float is incompatible

Mixing -mfloat-abi=hard with a CPU that doesn't have floating point
registers is an error in GCC:
  cc1: error: '-mfloat-abi=hard': selected processor lacks an FPU

Since there is code in the wild (including in clang tests) that relies
on Clang's current behaviour, emit a warning instead of an error.

Unlike the GCC error, the new warning refers to floating point
registers instead of an FPU. This is because -mfloat-abi=hard and
-march=armv8.1-m.main+mve+nofp are compatible - in that case floating
point registers are required, but an FPU is not required.

My initial thought was to use the floating point ABI calculated by
arm::getARMFloatABI() but in invalid cases which error for other
reasons the ABI is miscalculated and the warning would cause confusion.
Therefore only warn if the user specifies the float ABI explicitly.

Fixes part of https://github.com/llvm/llvm-project/issues/55755

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

16 months ago[FPEnv] Get rid of extra moves in fpenv calls
Serge Pavlov [Tue, 6 Jun 2023 07:54:52 +0000 (14:54 +0700)]
[FPEnv] Get rid of extra moves in fpenv calls

If intrinsic `get_fpenv` or `set_fpenv` is lowered to the form where FP
environment is represented as a region in memory, extra moves can
appear. For example the code:

  define void @func_01(ptr %ptr) {
    %env = call i256 @llvm.get.fpenv.i256()
    store i256 %env, ptr %ptr
    ret void
  }

produces DAG:

  ch = get_fpenv_mem ch, memory_region
  val: i256, ch = load ch, memory_region
  ch = store ch, ptr, val

In this case the extra moves can be avoided if `get_fpenv_mem` got
pointer to the memory where the FP environment should be finally placed.

This change implement such optimization for this use case.

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

16 months ago[mlir][vector] Use transform.apply_patterns in vector tests
Matthias Springer [Tue, 6 Jun 2023 07:18:10 +0000 (09:18 +0200)]
[mlir][vector] Use transform.apply_patterns in vector tests

All vector transform ops are now `PatternDescriptorOpInterface` ops that merely select the patterns. The patterns are applied by the `apply_patterns` op. This is to ensure that ops are properly tracked. (TrackingListener is used in the implementation of `apply_patterns`.) Furthermore, handles are no longer invalidated when applying patterns in the vector tests.

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

16 months agollvm-extract: Replace IFuncs with declarations
Christian Ulmann [Tue, 6 Jun 2023 06:54:03 +0000 (06:54 +0000)]
llvm-extract: Replace IFuncs with declarations

This commit ensures that llvm-extract does not copy all IFuncs into the
resulting modules. Before this change, ifuncs were not modified which
could cause the emission unexpected IR files.

Reviewed By: darthscsi

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

16 months ago[mlir][transform] Add region to ApplyPatternsOp
Matthias Springer [Tue, 6 Jun 2023 07:07:22 +0000 (09:07 +0200)]
[mlir][transform] Add region to ApplyPatternsOp

Patterns should be selected by adding ops that implement `PatternDescriptorOpInterface` to the region of `apply_pattern` ops. Such ops can have operands, allowing for pattern parameterization. The existing way of selecting patterns from the PatternRegistry is deprecated.

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

16 months ago[AMDGPU] Pre-commit test for D152228 (NFC)
Carl Ritson [Tue, 6 Jun 2023 06:40:51 +0000 (15:40 +0900)]
[AMDGPU] Pre-commit test for D152228 (NFC)

16 months ago[X86] Pre-commit test case for D152227.
Luo, Yuanke [Tue, 6 Jun 2023 06:56:45 +0000 (14:56 +0800)]
[X86] Pre-commit test case for D152227.

16 months ago[X86] Add test cases for D152227.
Luo, Yuanke [Tue, 6 Jun 2023 06:23:49 +0000 (14:23 +0800)]
[X86] Add test cases for D152227.

16 months agoRevert "[RISCV] Minor readability improvement to RISCVMatInt. NFC"
Craig Topper [Tue, 6 Jun 2023 06:21:51 +0000 (23:21 -0700)]
Revert "[RISCV] Minor readability improvement to RISCVMatInt. NFC"

This reverts commit 1ebe06017df607d4fc140f6b166e35cd32fc5f16.

I've been informed the old way was documented in the psABI.

16 months ago[libc++] Removes CMake work-arounds.
Mark de Wever [Sun, 4 Jun 2023 15:38:59 +0000 (17:38 +0200)]
[libc++] Removes CMake work-arounds.

CMake older than 3.20.0 is no longer supported.
This removes work-arounds for no longer supported versions.

Reviewed By: #libc, jloser, philnik

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

16 months ago[RISCV] Minor readability improvement to RISCVMatInt. NFC
Craig Topper [Tue, 6 Jun 2023 06:04:21 +0000 (23:04 -0700)]
[RISCV] Minor readability improvement to RISCVMatInt. NFC

When splitting a simm32 into LUI+ADDI(W). Subtract Lo12 from Val
to calculate Hi20. This replaces the old method of adding 0x800 to
Val. This change makes the math the reverse of how the LUI+ADDI(W)
create the immediate.

16 months ago[WebAssembly] Add tests ensuring rotates persist
Paulo Matos [Mon, 5 Jun 2023 08:09:09 +0000 (10:09 +0200)]
[WebAssembly] Add tests ensuring rotates persist

Due to the nature of WebAssembly, it's always better to keep
rotates instead of trying to optimize it. Commit 9485d983
disabled the generation of fsh for rotates, however these
tests ensure that future changes don't change the behaviour for
the Wasm backend that tends to have different optimization
requirements than other architectures. Also see:
https://github.com/llvm/llvm-project/issues/62703

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

16 months ago[libc++][spaceship] Implement `operator<=>` for `queue`
Hristo Hristov [Tue, 14 Mar 2023 16:32:15 +0000 (18:32 +0200)]
[libc++][spaceship] Implement `operator<=>` for `queue`

Implements parts of P1614R2 `operator<=>` for `queue`

Reviewed By: #libc, Mordante

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

16 months ago[gn build] Port c336c983bcd9
LLVM GN Syncbot [Tue, 6 Jun 2023 05:06:30 +0000 (05:06 +0000)]
[gn build] Port c336c983bcd9

16 months ago[C++20] [Modules] [Serialization] Don't write comments to BMI for C++20 Named Modules
Chuanqi Xu [Tue, 6 Jun 2023 05:01:53 +0000 (13:01 +0800)]
[C++20] [Modules] [Serialization] Don't write comments to BMI for C++20 Named Modules

This patch forbids to write comment to BMIs for C++20 Named Modules.
Originally I thought this was helpful for language services like clangd.
But I found clangd don't want the BMI to contain comments actually. So
it is meaningless for C++20 Named Modules to keep such comments in
their BMI.

It is simple to enable this when someday we found we want this actually.

16 months ago[RISCV] Migrate to new encodeInstruction that uses SmallVectorImpl<char>. NFC
Fangrui Song [Tue, 6 Jun 2023 04:40:32 +0000 (21:40 -0700)]
[RISCV] Migrate to new encodeInstruction that uses SmallVectorImpl<char>. NFC

Similar to AArch64,AVR,PowerPC: 9e2d100e5322c52e29280c96bbb5609ca5af1539.

16 months ago[AArch64,AVR,PowerPC] Migrate to new encodeInstruction that uses SmallVectorImpl...
Fangrui Song [Tue, 6 Jun 2023 04:33:10 +0000 (21:33 -0700)]
[AArch64,AVR,PowerPC] Migrate to new encodeInstruction that uses SmallVectorImpl<char>. NFC

Similar to 49488490d195591bfc90daef111cd7293f8c80aa.

16 months ago[InstCombine] add overflow checking on Add ~X + C --> (C-1) - X
khei4 [Sun, 4 Jun 2023 04:07:02 +0000 (13:07 +0900)]
[InstCombine] add overflow checking on Add ~X + C --> (C-1) - X
Differential Revision: https://reviews.llvm.org/D152088

16 months ago[InstCombine] precommit test for D152088(NFC)
khei4 [Sun, 4 Jun 2023 04:06:06 +0000 (13:06 +0900)]
[InstCombine] precommit test for D152088(NFC)
Differential Revision: https://reviews.llvm.org/D152089

16 months ago[AVR][NFC][test] Supplement more tests of 8-bit rotation
Ben Shi [Mon, 5 Jun 2023 08:23:38 +0000 (16:23 +0800)]
[AVR][NFC][test] Supplement more tests of 8-bit rotation

Reviewed By: Patryk27, jacquesguan

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

16 months agoReland "[X86][NFC] Refactor: there's only v16bf16 in 256-bit shuffle"
Phoebe Wang [Tue, 6 Jun 2023 02:46:37 +0000 (10:46 +0800)]
Reland "[X86][NFC] Refactor: there's only v16bf16 in 256-bit shuffle"

16 months agoRevert "[X86][NFC] Refactor: there's only v16bf16 in 256-bit shuffle"
Phoebe Wang [Tue, 6 Jun 2023 02:41:26 +0000 (10:41 +0800)]
Revert "[X86][NFC] Refactor: there's only v16bf16 in 256-bit shuffle"

This reverts commit 50a2341fe92f8a5ff934bd279450581e9cbcf103.

This results in buildbot fail.

16 months ago[flang] Fix crash in shape analysis of PACK()
Peter Klausler [Fri, 2 Jun 2023 23:30:43 +0000 (16:30 -0700)]
[flang] Fix crash in shape analysis of PACK()

A CHECK() was firing when a call to the PACK intrinsic does not have a
VECTOR= argument and at least one dimension of the shape of the ARRAY=
argument could not be determined.  The CHECK was inappropriate, since
this can of course happen, such as when that argument is the result
of the SPREAD() intrinsic with non-constant DIM= or NCOPIES= arguments.
Replace with an if() statement.

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

16 months ago[X86][NFC] Refactor: there's only v16bf16 in 256-bit shuffle
Phoebe Wang [Tue, 6 Jun 2023 02:24:37 +0000 (10:24 +0800)]
[X86][NFC] Refactor: there's only v16bf16 in 256-bit shuffle

16 months ago[RISCV] Improve selection for vector fpclass.
Jianjian GUAN [Fri, 2 Jun 2023 04:01:10 +0000 (12:01 +0800)]
[RISCV] Improve selection for vector fpclass.

Since vfclass intruction will only set one single bit in the result, so if we only want to check 1 fp class, we could use vmseq to do it.

Reviewed By: craig.topper

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

16 months ago[libc++][ranges] Implement the changes to container adaptors from P1206 (`ranges...
varconst [Sat, 3 Jun 2023 02:23:29 +0000 (19:23 -0700)]
[libc++][ranges] Implement the changes to container adaptors from P1206 (`ranges::to`):

- add the `from_range_t` constructors and the related deduction guides;
- add the `push_range` member function.

(Note: this patch is split from https://reviews.llvm.org/D142335)

Reviewed By: #libc, ldionne

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

16 months ago[CMake] Quote variables where "TARGET" may be a value
Sam James [Tue, 6 Jun 2023 01:08:01 +0000 (02:08 +0100)]
[CMake] Quote variables where "TARGET" may be a value

In CMake, "TARGET" is a special keyword. But it's also an LLVM component, which
means downstreams may request "target" or "TARGET" from CMake. Quote such input
so "TARGET" is interpreted as a string rather than a keyword.

This is a followup to 75a0502fe0053c72b57b61143a55600814d931fd (D150884).

Fixes Meson's test suite and an issue which manifested identically to #61436
but appears to have been a slightly different problem.

Bug: https://github.com/mesonbuild/meson/issues/11642
Bug: https://github.com/llvm/llvm-project/issues/61436

Reviewed By: tstellar

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

16 months agoAMDGPU: Fix broken test
Matt Arsenault [Tue, 6 Jun 2023 00:44:38 +0000 (20:44 -0400)]
AMDGPU: Fix broken test

16 months agoAutoUpgrade: Fix crash when tbaa has an empty argument
Matt Arsenault [Mon, 5 Jun 2023 13:03:54 +0000 (09:03 -0400)]
AutoUpgrade: Fix crash when tbaa has an empty argument

Produce a verifier error instead.

16 months ago[CMake][libc] Don't put archive in build/lib/<target triple> by default
Aiden Grossman [Mon, 5 Jun 2023 19:57:13 +0000 (19:57 +0000)]
[CMake][libc] Don't put archive in build/lib/<target triple> by default

ea8f4b98419750c8cc7c60ea43b570adf47b3f78 broke some build configurations
because it was enabled by default and some people are using a just built
libc/clang/LLVM to work on other projects where having a just built LLVM
libc in one of Clang's default include directories can make things
unusable.

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

16 months ago[libc] Replace the `PRINT_TO_STDERR` opcode for RPC printing.
Joseph Huber [Mon, 5 Jun 2023 23:56:26 +0000 (18:56 -0500)]
[libc] Replace the `PRINT_TO_STDERR` opcode for RPC printing.

A previous patch added general support for printing via the RPC
interface. we should consolidate this functionality and get rid of the
old opcode that was used for simple testing.

Reviewed By: lntue

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

16 months agobazel build fix
Aart Bik [Tue, 6 Jun 2023 00:16:18 +0000 (17:16 -0700)]
bazel build fix

Reviewed By: Peiming, manishucsd

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

16 months ago[Attributor] Identify and remove no-op fences
Johannes Doerfert [Thu, 18 May 2023 23:46:11 +0000 (16:46 -0700)]
[Attributor] Identify and remove no-op fences

The logic and implementation follows the removal of no-op barriers. If
the fence is not making updates visible, either to the world or the
current thread, it is not needed. Said differently, the fences we remove
do not establish synchronization (happens-before) edges.
This allows us to eliminate some of the regression caused by:
  https://reviews.llvm.org/D145290

16 months agotest/AMDGPU: REQUIRES asserts (D148184)
NAKAMURA Takumi [Mon, 5 Jun 2023 23:29:08 +0000 (08:29 +0900)]
test/AMDGPU: REQUIRES asserts (D148184)

16 months agoRISCVISelLowering.cpp: Suppress a warning. (D150824)
NAKAMURA Takumi [Mon, 5 Jun 2023 23:34:01 +0000 (08:34 +0900)]
RISCVISelLowering.cpp: Suppress a warning. (D150824)

16 months ago[Attributor] Merge ranges by expansion, avoid unknown ranges
Johannes Doerfert [Sat, 3 Jun 2023 02:30:17 +0000 (19:30 -0700)]
[Attributor] Merge ranges by expansion, avoid unknown ranges

Different offsets can be handled by expansion rather than defaulting to
an unknown offset. Thus, [4,4] & [8,8] will result in [4, 12] rather
than [unknown, unknown].

16 months ago[Attributor][NFC] Precommit vector write range tests
Johannes Doerfert [Sat, 3 Jun 2023 04:46:43 +0000 (21:46 -0700)]
[Attributor][NFC] Precommit vector write range tests

16 months ago[libc][obvious] Fix conditional when CUDA is not found
Joseph Huber [Mon, 5 Jun 2023 23:49:35 +0000 (18:49 -0500)]
[libc][obvious] Fix conditional when CUDA is not found

If CUDA is not found this string will expand into nothing. We need to
surround it with a string otherwise it will cause build failures.

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

16 months ago[mlir][sparse] fix crashes when using custom reduce with unary operation.
Peiming Liu [Mon, 5 Jun 2023 22:26:30 +0000 (22:26 +0000)]
[mlir][sparse] fix crashes when using custom reduce with unary operation.

The tests case is directly copied from https://reviews.llvm.org/D152179 authored by @aartbik

Reviewed By: aartbik

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

16 months ago[OpenMP] Improve default block count selection fow low block counts
Johannes Doerfert [Thu, 18 May 2023 21:49:40 +0000 (14:49 -0700)]
[OpenMP] Improve default block count selection fow low block counts

If a combined loop has insufficient parallelism (= low trip count), we
might end up with too few teams/blocks. To counter that we can reduce
the number of threads per team we use. This patch implements a heuristic
and exposes a new environment variable to control the minimum of threads
to be employed in this case.

Issue reported by:
Felipe Cabarcas Jaramillo <cabarcas@udel.edu> (@fel-cab).

Reviewed By: tianshilei1992

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

16 months ago[OpenMP] Use "kernel" attribute consistently
Johannes Doerfert [Sat, 3 Jun 2023 01:35:53 +0000 (18:35 -0700)]
[OpenMP] Use "kernel" attribute consistently

16 months ago[OpenMP] Mark kernels as mustprogress
Johannes Doerfert [Thu, 18 May 2023 20:39:57 +0000 (13:39 -0700)]
[OpenMP] Mark kernels as mustprogress

16 months ago[Attributor] Create `AAMustProgress` for the `mustprogress` attribute
Johannes Doerfert [Mon, 15 May 2023 22:53:44 +0000 (15:53 -0700)]
[Attributor] Create `AAMustProgress` for the `mustprogress` attribute

Derive the mustprogress attribute based on the willreturn attribute
or the fact that all callers are mustprogress.

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

16 months ago[Sanitizers][Darwin] In DlAddrSymbolizer, return only the module file name instead...
usama hameed [Fri, 2 Jun 2023 20:46:10 +0000 (13:46 -0700)]
[Sanitizers][Darwin] In DlAddrSymbolizer, return only the module file name instead of the comlpete module path during symbolication.

rdar://108858834

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

16 months ago[mlir][Vector] Adds a pattern to fold `arith.extf` into `vector.contract`
Manish Gupta [Thu, 1 Jun 2023 02:00:56 +0000 (02:00 +0000)]
[mlir][Vector] Adds a pattern to fold `arith.extf` into `vector.contract`

Consider mixed precision data type, i.e., F16 input lhs, F16 input rhs, F32 accumulation, and F32 output. This is typically written as F32 <= F16*F16 + F32.

During vectorization from linalg to vector for mixed precision data type (F32 <= F16*F16 + F32), linalg.matmul introduces arith.extf on input lhs and rhs operands.

"linalg.matmul"(%lhs, %rhs, %acc) ({
      ^bb0(%arg1: f16, %arg2: f16, %arg3: f32):
        %lhs_f32 = "arith.extf"(%arg1) : (f16) -> f32
        %rhs_f32 = "arith.extf"(%arg2) : (f16) -> f32
       %mul = "arith.mulf"(%lhs_f32, %rhs_f32) : (f32, f32) -> f32
        %acc = "arith.addf"(%arg3, %mul) : (f32, f32) -> f32
      "linalg.yield"(%acc) : (f32) -> ()
    })
There are backend that natively supports mixed-precision data type and does not need the arith.extf. For example, NVIDIA A100 GPU has mma.sync.aligned.*.f32.f16.f16.f32 that can support mixed-precision data type. However, the presence of arith.extf in the IR, introduces the unnecessary casting targeting F32 Tensor Cores instead of F16 Tensor Cores for NVIDIA backend. This patch adds a folding pattern to fold arith.extf into vector.contract

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

16 months agoissue#62488: Correct some syntax errors. Leave location and custom-operation-format...
Stevengre [Mon, 5 Jun 2023 23:06:33 +0000 (16:06 -0700)]
issue#62488: Correct some syntax errors. Leave location and custom-operation-format unchanged, because I'm not sure.

Reviewed By: Mogball

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

16 months ago[libc] Add initial support for 'puts' and 'fputs' to the GPU
Joseph Huber [Wed, 24 May 2023 03:35:21 +0000 (22:35 -0500)]
[libc] Add initial support for 'puts' and 'fputs' to the GPU

This patch adds the initial support required to support basic priting in
`stdio.h` via `puts` and `fputs`. This is done using the existing LLVM C
library `File` API. In this sense we can think of the RPC interface as
our system call to dump the character string to the file. We carry a
`uintptr_t` reference as our native "file descriptor" as it will be used
as an opaque reference to the host's version once functions like
`fopen` are supported.

For some unknown reason the declaration of the `StdIn` variable causes
both the AMDGPU and NVPTX backends to crash if I use the `READ` flag.
This is not used currently as we only support output now, but it needs
to be fixed

Reviewed By: sivachandra, lntue

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

16 months ago[libc] Implement basic `malloc` and `free` support on the GPU
Joseph Huber [Tue, 30 May 2023 17:08:44 +0000 (12:08 -0500)]
[libc] Implement basic `malloc` and `free` support on the GPU

This patch adds support for the `malloc` and `free` functions. These
currently aren't implemented in-tree so we first add the interface
filies.

This patch provides the most basic support for a true `malloc` and
`free` by using the RPC interface. This is functional, but in the future
we will want to implement a more intelligent system and primarily use
the RPC interface more as a `brk()` or `sbrk()` interface only called
when absolutely necessary. We will need to design an intelligent
allocator in the future.

The semantics of these memory allocations will need to be checked. I am
somewhat iffy on the details. I've heard that HSA can allocate
asynchronously which seems to work with my tests at least. CUDA uses an
implicit synchronization scheme so we need to use an explicitly separate
stream from the one launching the kernel or the default stream. I will
need to test the NVPTX case.

I would appreciate if anyone more experienced with the implementation details
here could chime in for the HSA and CUDA cases.

Reviewed By: sivachandra

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

16 months agoAMDGPU: Add baseline test for undoing mul add 1 reassociation
Matt Arsenault [Mon, 5 Jun 2023 19:13:01 +0000 (15:13 -0400)]
AMDGPU: Add baseline test for undoing mul add 1 reassociation

Add some tests for combines to undo regressions caused by
0cfc6510323fbb5a56a5de23cbc65f7cc30fd34c.

16 months agoDAG: Reorder conditions
Matt Arsenault [Mon, 5 Jun 2023 12:46:33 +0000 (08:46 -0400)]
DAG: Reorder conditions

16 months ago[OpenMP][libomp] Allow white spaces in OMP_TARGET_OFFLOAD value
Hansang Bae [Thu, 4 May 2023 14:35:38 +0000 (09:35 -0500)]
[OpenMP][libomp] Allow white spaces in OMP_TARGET_OFFLOAD value

Remove heading/trailing white spaces when matching OMP_TARGET_OFFLOAD
value.

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

16 months agoAMDGPU: Fold zext into result of v_mad_u16 on high zeroing targets
Matt Arsenault [Mon, 5 Jun 2023 17:04:37 +0000 (13:04 -0400)]
AMDGPU: Fold zext into result of v_mad_u16 on high zeroing targets

Avoids regressions in future patch.

16 months agoAMDGPU: Add baseline 16-bit mad matching tests
Matt Arsenault [Mon, 5 Jun 2023 17:52:12 +0000 (13:52 -0400)]
AMDGPU: Add baseline 16-bit mad matching tests

16 months agoAMDGPU: Convert test to generated checks
Matt Arsenault [Mon, 5 Jun 2023 17:51:03 +0000 (13:51 -0400)]
AMDGPU: Convert test to generated checks

16 months ago[flang] Pad output correctly after tabbing with ADVANCE='no' (bug#63111)
Peter Klausler [Mon, 5 Jun 2023 21:58:20 +0000 (14:58 -0700)]
[flang] Pad output correctly after tabbing with ADVANCE='no' (bug#63111)

Correct the code that implements the production of spaces to bring the
furthestPositionInRecord up to a positionInRecord that was tabbed forward
by a T or TR control edit descriptor.

Fixes bug https://github.com/llvm/llvm-project/issues/63111.

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

16 months agofix build issue on bazel
Aart Bik [Mon, 5 Jun 2023 22:13:32 +0000 (15:13 -0700)]
fix build issue on bazel

Needed to fix:
https://github.com/llvm/llvm-project/commit/53a5c3ab4dbe434753e0e4e3505efa2e5692e752
https://github.com/llvm/llvm-project/commit/db7cc0348c9a0aa44b23948949afef488d5083dd

Reviewed By: Peiming, anlunx

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

16 months ago[hwasan] Properly restore SP tag on exceptions
Florian Mayer [Mon, 5 Jun 2023 21:14:27 +0000 (14:14 -0700)]
[hwasan] Properly restore SP tag on exceptions

Reviewed By: vitalybuka

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

16 months ago[bazel][libc] Add targets for integer abs and div functions.
Siva Chandra Reddy [Sat, 3 Jun 2023 23:04:20 +0000 (23:04 +0000)]
[bazel][libc] Add targets for integer abs and div functions.

Reviewed By: lntue

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

16 months ago[libc++][NFC] Add __element_count and use it in the constexpr C functions
Nikolas Klauser [Mon, 5 Jun 2023 22:07:42 +0000 (15:07 -0700)]
[libc++][NFC] Add __element_count and use it in the constexpr C functions

This makes it less ambiguous what the parameter is meant to get.

Reviewed By: #libc, ldionne

Spies: ldionne, libcxx-commits

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

16 months ago[RISCV] Lower experimental_get_vector_length intrinsic to vsetvli for some cases.
Craig Topper [Mon, 5 Jun 2023 22:02:11 +0000 (15:02 -0700)]
[RISCV] Lower experimental_get_vector_length intrinsic to vsetvli for some cases.

This patch lowers to vsetvli when the AVL is i32 or XLenVT and
the VF is a power of 2 in the range [1, 64]. VLEN=32 is not supported
as we don't have a valid type mapping for that. VF=1 is not supported
with Zve32* only.

The element width is used to set the SEW for the vsetvli if possible.
Otherwise we use SEW=8.

Reviewed By: reames

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

16 months ago[Demangle] refactor DLangDemangle to use std::string_view
Nick Desaulniers [Mon, 5 Jun 2023 21:31:55 +0000 (14:31 -0700)]
[Demangle] refactor DLangDemangle to use std::string_view

Many existing methods of the D Language Demangler take a C style string
and return an adjusted pointer to the same object as the input string is
consumed.

Make it more obvious by changing the signatures to accept
std::string_view& when the input is modified vs a copy of a
std::string_view when the input is not.

Reviewed By: efriedma

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

16 months ago[lld] StringRef::{starts,ends}with => {starts,ends}_with. NFC
Fangrui Song [Mon, 5 Jun 2023 21:36:19 +0000 (14:36 -0700)]
[lld] StringRef::{starts,ends}with => {starts,ends}_with. NFC

The latter form is now preferred to be similar to C++20 starts_with.
This replacement also removes one function call when startswith is not inlined.

16 months agoReland [compiler-rt][CMake] Properly set COMPILER_RT_HAS_LLD
Arthur Eubanks [Thu, 23 Feb 2023 19:21:33 +0000 (11:21 -0800)]
Reland [compiler-rt][CMake] Properly set COMPILER_RT_HAS_LLD

LLVM_TOOL_LLD_BUILD is a relic of the pre-monorepo times. This causes us to never set COMPILER_RT_HAS_LLD.

Instead, set it from the runtimes build if lld is being built and lld is used as the compiler-rt linker.

Mark a test that requires libstdc++ as requiring Android, as other platforms may not have a libstdc++ lying around.

Reviewed By: MaskRay

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

16 months ago[RISCV] Add RISCVISD nodes for vfwadd/vfwsub.
Craig Topper [Mon, 5 Jun 2023 20:47:28 +0000 (13:47 -0700)]
[RISCV] Add RISCVISD nodes for vfwadd/vfwsub.

Add a DAG combine to form these from FADD_VL/FSUB_VL and FP_EXTEND_VL.

This makes it similar to other widening ops and allows us to handle
using the same FP_EXTEND_VL for both operands.

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