platform/upstream/llvm.git
2 years ago[mlir] Make `Regions`s `cloneInto` multithread-readable
Markus Böck [Thu, 21 Apr 2022 11:43:00 +0000 (13:43 +0200)]
[mlir] Make `Regions`s `cloneInto` multithread-readable

Prior to this patch, `cloneInto` would do a simple walk over the blocks and contained operations and clone and map them as it encounters them. As finishing touch it then remaps any successor and operands it has remapped during that process.

This is generally fine, but sadly leads to a lot of uses of both operations and blocks from the source region, in the cloned operations in the target region. Those uses lead to writes in the use-def list of the operations, making `cloneInto` never thread safe.

This patch reimplements `cloneInto` in three steps to avoid ever creating any extra uses on elements in the source region:
* It first creates the mapping of all blocks and block operands
* It then clones all operations to create the mapping of all operation results, but does not yet clone any regions or set the operands
* After all operation results have been mapped, it now sets the operations operands and clones their regions.

That way it is now possible to call `cloneInto` from multiple threads if the Region or Operation is isolated-from-above. This allows creating copies of  functions or to use `mlir::inlineCall` with the same source region from multiple threads. In the general case, the method is thread-safe if through cloning, no new uses of `Value`s from outside the cloned Operation/Region are created. This can be ensured by mapping any outside operands via the `BlockAndValueMapping` to `Value`s owned by the caller thread.

While I was at it, I also reworked the `clone` method of `Operation` a little bit and added a proper options class to avoid having a `cloneWithoutRegionsAndOperands` method, and be more extensible in the future. `cloneWithoutRegions` is now also a simple wrapper that calls `clone` with the proper options set. That way all the operation cloning code is now contained solely within `clone`.

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

2 years ago[libcxx][ranges] add views::join adaptor object. added test coverage to join_view
Hui Xie [Thu, 21 Apr 2022 11:08:34 +0000 (13:08 +0200)]
[libcxx][ranges] add views::join adaptor object. added test coverage to join_view

- added views::join adaptor object
- added test for the adaptor object
- fixed some join_view's tests. e.g iter_swap test
- added some negative tests for join_view to test that operations do not exist when constraints aren't met
- added tests that locks down issues that were already addressed in previous change
  - LWG3500 `join_view::iterator::operator->()` is bogus
  - LWG3313 `join_view::iterator::operator--` is incorrectly constrained
  - LWG3517 `join_view::iterator`'s `iter_swap` is underconstrained
  - P2328R1 join_view should join all views of ranges
- fixed some issues in join_view and added tests
  - LWG3535 `join_view::iterator::iterator_category` and `::iterator_concept` lie
  - LWG3474 Nesting ``join_views`` is broken because of CTAD
- added tests for an LWG issue that isn't resolved in the standard yet, but the previous code has workaround.
  - LWG3569 Inner iterator not default_initializable

Reviewed By: #libc, var-const

Spies: var-const, libcxx-commits

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

2 years ago[AMDGPU][MC][NFC][GFX940] Corrected an error position
Dmitry Preobrazhensky [Thu, 21 Apr 2022 10:32:25 +0000 (13:32 +0300)]
[AMDGPU][MC][NFC][GFX940] Corrected an error position

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

2 years agoAdd async dependencies support for gpu.launch op
Uday Bondhugula [Wed, 20 Apr 2022 17:13:35 +0000 (22:43 +0530)]
Add async dependencies support for gpu.launch op

Add async dependencies support for gpu.launch op: this allows specifying
a list of async tokens ("streams") as dependencies for the launch.

Update the GPU kernel outlining pass lowering to propagate async
dependencies from gpu.launch to gpu.launch_func op. Previously, a new
stream was being created and destroyed for a kernel launch. The async
deps support allows the kernel launch to be serialized on an existing
stream.

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

2 years ago[BOLT] Add R_AARCH64_PREL16/32/64 relocations support
Alexey Moksyakov [Thu, 21 Apr 2022 10:52:00 +0000 (13:52 +0300)]
[BOLT] Add R_AARCH64_PREL16/32/64 relocations support

Reviewed By: yota9, rafauler

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

2 years ago[BOLT] Fix build with GCC 7.3.0
Vladislav Khmelevsky [Tue, 19 Apr 2022 15:48:27 +0000 (18:48 +0300)]
[BOLT] Fix build with GCC 7.3.0

The gcc 7.3.0 version raises "could not covert" error without std::move
used explicitly.

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

2 years ago[AMDGPU][GFX90A+] Disabled ds_ordered_count and exp
Dmitry Preobrazhensky [Thu, 21 Apr 2022 10:15:01 +0000 (13:15 +0300)]
[AMDGPU][GFX90A+] Disabled ds_ordered_count and exp

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

2 years ago[flang] Do not ICE on recursive function definition in function result
Daniil Dudkin [Fri, 15 Apr 2022 16:40:15 +0000 (01:40 +0900)]
[flang] Do not ICE on recursive function definition in function result

The following code causes the compiler to ICE in several places due to
lack of support of recursive procedure definitions through the function
result.

  function foo() result(r)
    procedure(foo), pointer :: r
  end function foo

2 years ago[NFC] Test commit
Daniil Dudkin [Thu, 21 Apr 2022 09:58:41 +0000 (18:58 +0900)]
[NFC] Test commit

An empty commit to test the access

2 years ago[OpenCL] Guard read_write images with TypeExtension
Sven van Haastregt [Thu, 21 Apr 2022 09:52:41 +0000 (10:52 +0100)]
[OpenCL] Guard read_write images with TypeExtension

Ensure that any `read_write` image type carries the
`__opencl_c_read_write_images` upon construction of the `ImageType`.

2 years ago[clangd] tweak tile should start with a capital letter.
Haojian Wu [Thu, 21 Apr 2022 09:20:40 +0000 (11:20 +0200)]
[clangd] tweak tile should start with a capital letter.

to consistent with other tweaks.

2 years ago[SimplifyCFG] Handle branch on same condition in pred more directly
Nikita Popov [Wed, 20 Apr 2022 15:03:45 +0000 (17:03 +0200)]
[SimplifyCFG] Handle branch on same condition in pred more directly

Rather than creating a PHI node and then using the PHI threading
code, directly handle this case in
FoldCondBranchOnValueKnownInPredecessor().

This change is supposed to be NFC-ish, but may cause changes due
to different transform order.

2 years ago[AST] Support template declaration found through using-decl for QualifiedTemplateName.
Haojian Wu [Thu, 21 Apr 2022 08:24:56 +0000 (10:24 +0200)]
[AST] Support template declaration found through using-decl for QualifiedTemplateName.

This is a followup of https://reviews.llvm.org/D123127, adding support
for the QualifiedTemplateName.

Reviewed By: sammccall

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

2 years ago[SimplifyCFG] Make FoldCondBranchOnPHI more amenable to extension
Nikita Popov [Wed, 20 Apr 2022 12:02:46 +0000 (14:02 +0200)]
[SimplifyCFG] Make FoldCondBranchOnPHI more amenable to extension

This general threading transform can be performed whenever we know
a constant value for the condition in a predecessor, which would
currently just be the case of a phi node with constant arguments.

2 years agoForce insert zero-idiom and break false dependency of dest register for several instr...
gpei-dev [Tue, 19 Apr 2022 05:44:04 +0000 (13:44 +0800)]
Force insert zero-idiom and break false dependency of dest register for several instructions.

The related instructions are:

VPERMD/Q/PS/PD
VRANGEPD/PS/SD/SS
VGETMANTSS/SD/SH
VGETMANDPS/PD - mem version only
VPMULLQ
VFMULCSH/PH
VFCMULCSH/PH

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

2 years agoRevert "[GVNSink] Regenerate test checks (NFC)"
Nikita Popov [Thu, 21 Apr 2022 08:45:40 +0000 (10:45 +0200)]
Revert "[GVNSink] Regenerate test checks (NFC)"

This reverts commit 3b132300728e7ed06e59e449ceb8175305869a49.

It looks like GVNSink is currently non-deterministic, due to an
std::sort() on BasicBlock* pointers in ModelledPHI. This becomes
visible in the generated checks.

2 years agoRevert "[RISCV] Do not outline CFI instructions when they are needed in EH"
wangpc [Thu, 21 Apr 2022 08:23:10 +0000 (16:23 +0800)]
Revert "[RISCV] Do not outline CFI instructions when they are needed in EH"

This reverts commit 0d40688925a384088c149d1830dc0761a90364f7.

2 years ago[RISCV] Do not outline CFI instructions when they are needed in EH
wangpc [Thu, 21 Apr 2022 08:11:41 +0000 (16:11 +0800)]
[RISCV] Do not outline CFI instructions when they are needed in EH

We saw a failure caused by unwinding with incomplete CFIs, so we
can't outline CFI instructions when they are needed in EH.

Reviewed By: luismarques

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

2 years ago[RISCV] Precommit test for D122634
wangpc [Thu, 21 Apr 2022 08:07:57 +0000 (16:07 +0800)]
[RISCV] Precommit test for D122634

Reviewed By: luismarques

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

2 years ago[GVNSink] Regenerate test checks (NFC)
Nikita Popov [Thu, 21 Apr 2022 08:06:47 +0000 (10:06 +0200)]
[GVNSink] Regenerate test checks (NFC)

2 years ago[CMake] Check for problematic MSVC + /arch:AVX configuration
Tobias Hieta [Thu, 21 Apr 2022 07:42:08 +0000 (09:42 +0200)]
[CMake] Check for problematic MSVC + /arch:AVX configuration

Add a new CMake file to expand on for more problematic configurations
in the future.

Related to #54645

Reviewed By: beanz, phosek, smeenai

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

2 years ago[NFC] Code cleanups for coroutine after we remvoed legacy passes
Chuanqi Xu [Thu, 21 Apr 2022 07:32:39 +0000 (15:32 +0800)]
[NFC] Code cleanups for coroutine after we remvoed legacy passes

2 years agoAdded lowering support for atomic read and write constructs
Nimish Mishra [Thu, 21 Apr 2022 03:45:45 +0000 (09:15 +0530)]
Added lowering support for atomic read and write constructs

This patch adds lowering support for atomic read and write constructs.
Also added is pointer modelling code to allow FIR pointer like types to
be inferred and converted while lowering.

Reviewed By: kiranchandramohan

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

Co-authored-by: Kiran Chandramohan <kiran.chandramohan@arm.com>
2 years ago[HLSL] Add shader attribute
Xiang Li [Thu, 7 Apr 2022 20:48:39 +0000 (13:48 -0700)]
[HLSL] Add shader attribute

Shader attribute is for shader library identify entry functions.
Here's an example,

[shader("pixel")]
float ps_main() : SV_Target {
  return 1;
}

When compile this shader to library target like -E lib_6_3, compiler needs to know ps_main is an entry function for pixel shader. Shader attribute is to offer the information.

A new attribute HLSLShader is added to support shader attribute. It has an EnumArgument which included all possible shader stages.

Reviewed By: aaron.ballman, MaskRay

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

2 years ago[RISCV] Don't emit fractional VIDs with negative steps
Fraser Cormack [Tue, 19 Apr 2022 08:25:40 +0000 (09:25 +0100)]
[RISCV] Don't emit fractional VIDs with negative steps

We can't shift-right negative numbers to divide them, so avoid emitting
such sequences. Use negative numerators as a proxy for this situation, since
the indices are always non-negative.

An alternative strategy could be to add a compiler flag to emit division
instructions, which would at least allow us to test the VID sequence
matching itself.

Reviewed By: craig.topper

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

2 years ago[RISCV] Add another test showing incorrect BUILD_VECTOR lowering
Fraser Cormack [Tue, 19 Apr 2022 08:25:40 +0000 (09:25 +0100)]
[RISCV] Add another test showing incorrect BUILD_VECTOR lowering

This test shows a (contrived) BUILD_VECTOR which is correctly identified
as a sequence of ((vid * -3) / 8) + 5. However, the issue is that using
shift-right for the divide is invalid as the step values are negative.

This patch just adds the test: the fix is added in D123796.

Reviewed By: craig.topper

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

2 years ago[ELF] Fix spurious GOT/PLT assertion failure when .dynsym is discarded
Fangrui Song [Thu, 21 Apr 2022 05:49:49 +0000 (22:49 -0700)]
[ELF] Fix spurious GOT/PLT assertion failure when .dynsym is discarded

Linux kernel arch/arm64/kernel/vmlinux.lds.S discards .dynsym . D123985 triggers
a spurious assertion failure. Detect the case with
`!mainPart->dynSymTab->getParent()`.

2 years ago[mlir][NFC] Update remaining textual references of un-namespaced `func` operations
River Riddle [Thu, 21 Apr 2022 04:39:02 +0000 (21:39 -0700)]
[mlir][NFC] Update remaining textual references of un-namespaced `func` operations

The special case parsing of operations in the `func` dialect is being removed, and
operations will require the dialect namespace prefix.

2 years ago[mlir][NFC] Update textual references of `func` to `func.func` in Transform tests
River Riddle [Wed, 20 Apr 2022 23:22:21 +0000 (16:22 -0700)]
[mlir][NFC] Update textual references of `func` to `func.func` in Transform tests

The special case parsing of `func` operations is being removed.

2 years ago[mlir][NFC] Update textual references of `func` to `func.func` in Pass/Target tests
River Riddle [Wed, 20 Apr 2022 23:22:03 +0000 (16:22 -0700)]
[mlir][NFC] Update textual references of `func` to `func.func` in Pass/Target tests

The special case parsing of `func` operations is being removed.

2 years ago[mlir][NFC] Update textual references of `func` to `func.func` in tool/runner tests
River Riddle [Wed, 20 Apr 2022 23:21:36 +0000 (16:21 -0700)]
[mlir][NFC] Update textual references of `func` to `func.func` in tool/runner tests

The special case parsing of `func` operations is being removed.

2 years ago[mlir][NFC] Update textual references of `func` to `func.func` in IR/Interface tests
River Riddle [Wed, 20 Apr 2022 23:20:54 +0000 (16:20 -0700)]
[mlir][NFC] Update textual references of `func` to `func.func` in IR/Interface tests

The special case parsing of `func` operations is being removed.

2 years ago[mlir][NFC] Update textual references of `func` to `func.func` in Integration tests
River Riddle [Wed, 20 Apr 2022 23:20:21 +0000 (16:20 -0700)]
[mlir][NFC] Update textual references of `func` to `func.func` in Integration tests

The special case parsing of `func` operations is being removed.

2 years ago[mlir][NFC] Update textual references of `func` to `func.func` in Tensor/Tosa/Vector...
River Riddle [Wed, 20 Apr 2022 23:19:48 +0000 (16:19 -0700)]
[mlir][NFC] Update textual references of `func` to `func.func` in Tensor/Tosa/Vector tests

The special case parsing of `func` operations is being removed.

2 years ago[mlir][NFC] Update textual references of `func` to `func.func` in SPIRV tests
River Riddle [Wed, 20 Apr 2022 23:19:21 +0000 (16:19 -0700)]
[mlir][NFC] Update textual references of `func` to `func.func` in SPIRV tests

The special case parsing of `func` operations is being removed.

2 years ago[mlir][NFC] Update textual references of `func` to `func.func` in SparseTensor tests
River Riddle [Wed, 20 Apr 2022 23:18:14 +0000 (16:18 -0700)]
[mlir][NFC] Update textual references of `func` to `func.func` in SparseTensor tests

The special case parsing of `func` operations is being removed.

2 years ago[mlir][NFC] Update textual references of `func` to `func.func` in LLVM/Math/MemRef...
River Riddle [Wed, 20 Apr 2022 23:17:16 +0000 (16:17 -0700)]
[mlir][NFC] Update textual references of `func` to `func.func` in LLVM/Math/MemRef/NVGPU/OpenACC/OpenMP/Quant/SCF/Shape tests

The special case parsing of `func` operations is being removed.

2 years ago[mlir][NFC] Update textual references of `func` to `func.func` in Linalg tests
River Riddle [Wed, 20 Apr 2022 23:16:23 +0000 (16:16 -0700)]
[mlir][NFC] Update textual references of `func` to `func.func` in Linalg tests

The special case parsing of `func` operations is being removed.

2 years ago[mlir][NFC] Update textual references of `func` to `func.func` in Bufferization/Compl...
River Riddle [Wed, 20 Apr 2022 23:15:59 +0000 (16:15 -0700)]
[mlir][NFC] Update textual references of `func` to `func.func` in Bufferization/Complex/EmitC/CF/Func/GPU tests

The special case parsing of `func` operations is being removed.

2 years ago[mlir][NFC] Update textual references of `func` to `func.func` in AMX/Arithmetic...
River Riddle [Wed, 20 Apr 2022 23:14:19 +0000 (16:14 -0700)]
[mlir][NFC] Update textual references of `func` to `func.func` in AMX/Arithmetic/ArmSVE/Async tests

The special case parsing of `func` operations is being removed.

2 years ago[mlir][NFC] Update textual references of `func` to `func.func` in Affine/ tests
River Riddle [Wed, 20 Apr 2022 23:13:44 +0000 (16:13 -0700)]
[mlir][NFC] Update textual references of `func` to `func.func` in Affine/ tests

The special case parsing of `func` operations is being removed.

2 years ago[mlir][NFC] Update textual references of `func` to `func.func` in Conversion/ tests
River Riddle [Wed, 20 Apr 2022 23:12:25 +0000 (16:12 -0700)]
[mlir][NFC] Update textual references of `func` to `func.func` in Conversion/ tests

The special case parsing of `func` operations is being removed.

2 years ago[mlir][NFC] Update textual references of `func` to `func.func` in Analysis/ tests
River Riddle [Wed, 20 Apr 2022 23:06:22 +0000 (16:06 -0700)]
[mlir][NFC] Update textual references of `func` to `func.func` in Analysis/ tests

The special case parsing of `func` operations is being removed.

2 years ago[mlir][NFC] Update textual references of `func` to `func.func` in ODS documentation
River Riddle [Wed, 20 Apr 2022 23:05:29 +0000 (16:05 -0700)]
[mlir][NFC] Update textual references of `func` to `func.func` in ODS documentation

The special case parsing of `func` operations is being removed.

2 years ago[mlir][NFC] Update textual references of `func` to `func.func` in examples+python...
River Riddle [Wed, 20 Apr 2022 23:01:51 +0000 (16:01 -0700)]
[mlir][NFC] Update textual references of `func` to `func.func` in examples+python scripts

The special case parsing of `func` operations is being removed.

2 years ago[RISCV] Make getInstSeqCost handle other Zb* instructions.
Craig Topper [Thu, 21 Apr 2022 05:00:10 +0000 (22:00 -0700)]
[RISCV] Make getInstSeqCost handle other Zb* instructions.

We haven't been updating this as Zb* instructions have been used
for immediate materialization. They will hit the default case and
trigger an llvm_unreachable. Instead of trying to list them all,
assume instructions that aren't explicitly listed aren't compressible.

Spotted while looking at integer materialization for other reasons.
I haven't seen a crash from this yet.

2 years ago[C++20] [Modules] Judge current module correctly
Chuanqi Xu [Thu, 21 Apr 2022 03:08:52 +0000 (11:08 +0800)]
[C++20] [Modules] Judge current module correctly

Now the implementation would accept following code:
```
//--- impl.cppm
module M:impl;
class A {};

//--- M.cppm
export module M;
import :impl;

//--- Use.cpp
import M;
void test() {
    A a; // Expected error. A is not visible here.
}
```

which is clearly wrong.  The root cause is the implementation of
`isInCurrentModule` would return true if the module is a partition! So
in the above example, although Use.cpp is not a module unit,
`isInCurrentModule ` would still return true when the compiler tries to
see if the owning module of `A` is the current module. I believe this is
an oversight. This patch tries to fix this problem.

Reviewed By: iains

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

2 years ago[Pipelines] Remove Legacy Passes in Coroutines
Chuanqi Xu [Thu, 21 Apr 2022 02:57:01 +0000 (10:57 +0800)]
[Pipelines] Remove Legacy Passes in Coroutines

The legacy passes are deprecated now and would be removed in near
future. This patch tries to remove legacy passes in coroutines.

Reviewed By: aeubanks

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

2 years ago[AMDGPU] On gfx908, reserve VGPR for AGPR copy based on register budget.
hsmahesha [Thu, 21 Apr 2022 02:27:26 +0000 (07:57 +0530)]
[AMDGPU] On gfx908, reserve VGPR for AGPR copy based on register budget.

Based on available register budget, reserve highest available VGPR for
AGPR copy before RA. After RA, shift it to lowest unused VGPR if the one
exist.

Fixes SWDEV-330006.

Reviewed By: rampitec

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

2 years ago[LoongArch] Add basic floating-point instructions definition
Weining Lu [Tue, 29 Mar 2022 12:50:41 +0000 (20:50 +0800)]
[LoongArch] Add basic floating-point instructions definition

These instructions are added by following the `LoongArch Reference
Manual Volume 1: Basic Architecture Version 1.00`.

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

2 years ago[mlir][OpenMP] Add checks and tests for hint clause and fix empty hint
Shraiysh Vaishay [Thu, 21 Apr 2022 01:22:38 +0000 (06:52 +0530)]
[mlir][OpenMP] Add checks and tests for hint clause and fix empty hint

This patch handles empty hint value for critical and atomic constructs.

This also adds checks and tests for hint clause on atomic constructs.

Reviewed By: peixin, kiranchandramohan, NimishMishra

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

2 years ago[AMDGPU] Split the lit test spill-vgpr-to-agpr.ll to different tests
hsmahesha [Thu, 21 Apr 2022 01:18:16 +0000 (06:48 +0530)]
[AMDGPU] Split the lit test spill-vgpr-to-agpr.ll to different tests

[1]. Move the test which reject the usage of agpr before gfx908 into a separate file - reject-agpr-usage-before-gfx908.ll.
[2]. Move those tests which are applicable to both gfx900 and gfx908 into a separate file - spill-vgpr.ll.
[3]. Keep those tests which are specific to only gfx908 in the file spill-vgpr-to-agpr.ll.

Above split is required to properly update the tests in D123525.

Reviewed By: rampitec

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

2 years agoTreat `std::move`, `forward`, etc. as builtins.
Richard Smith [Thu, 21 Apr 2022 00:13:56 +0000 (17:13 -0700)]
Treat `std::move`, `forward`, etc. as builtins.

This is extended to all `std::` functions that take a reference to a
value and return a reference (or pointer) to that same value: `move`,
`forward`, `move_if_noexcept`, `as_const`, `addressof`, and the
libstdc++-specific function `__addressof`.

We still require these functions to be declared before they can be used,
but don't instantiate their definitions unless their addresses are
taken. Instead, code generation, constant evaluation, and static
analysis are given direct knowledge of their effect.

This change aims to reduce various costs associated with these functions
-- per-instantiation memory costs, compile time and memory costs due to
creating out-of-line copies and inlining them, code size at -O0, and so
on -- so that they are not substantially more expensive than a cast.
Most of these improvements are very small, but I measured a 3% decrease
in -O0 object file size for a simple C++ source file using the standard
library after this change.

We now automatically infer the `const` and `nothrow` attributes on these
now-builtin functions, in particular meaning that we get a warning for
an unused call to one of these functions.

In C++20 onwards, we disallow taking the addresses of these functions,
per the C++20 "addressable function" rule. In earlier language modes, a
compatibility warning is produced but the address can still be taken.

The same infrastructure is extended to the existing MSVC builtin
`__GetExceptionInfo`, which is now only recognized in namespace `std`
like it always should have been.

This is a re-commit of
  fc3090109643af8d2da9822d0f99c84742b9c877,
  a571f82a50416b767fd3cce0fb5027bb5dfec58c,
  64c045e25b8471bbb572bd29159c294a82a86a2, and
  de6ddaeef3aaa8a9ae3663c12cdb57d9afc0f906,
and reverts aa643f455a5362de7189eac630050d2c8aefe8f2.
This change also includes a workaround for users using libc++ 3.1 and
earlier (!!), as apparently happens on AIX, where std::move sometimes
returns by value.

Reviewed By: aaron.ballman

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

Revert "Fixup D123950 to address revert of D123345"

This reverts commit aa643f455a5362de7189eac630050d2c8aefe8f2.

2 years ago[LLDB] Skip TestCrashDuringStep.py AArch64/Windows
Muhammad Omair Javaid [Thu, 21 Apr 2022 00:09:33 +0000 (05:09 +0500)]
[LLDB] Skip TestCrashDuringStep.py AArch64/Windows

TestCrashDuringStep.py hangs on AArch64 windows with no resonable
possible fix. I am marking it skipped for now.

2 years ago[BOLT] Add fuzzy function name matching for LLVM LTO
Maksim Panchenko [Wed, 20 Apr 2022 23:59:41 +0000 (16:59 -0700)]
[BOLT] Add fuzzy function name matching for LLVM LTO

LLVM with LTO can generate function names in the form
func.llvm.<number>, where <number> could vary based on the compilation
environment. As a result, if a profiled binary originated from a
different build than a corresponding binary used for BOLT optimization,
then profiles for such LTO functions will be ignored.

To fix the problem, use "fuzzy" matching with "func.llvm.*" form.

Reviewed By: yota9, Amir

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

2 years agoFixup D123950 to address revert of D123345
David Tenty [Wed, 20 Apr 2022 23:59:07 +0000 (19:59 -0400)]
Fixup D123950 to address revert of D123345

Since D123345 got reverted Builtin::BIaddressof and Builtin::BI__addressof don't exist and cause build breaks.

2 years ago[BOLT][DWARF] Handle Error returned by visitLocationList
Alexander Yermolovich [Wed, 20 Apr 2022 23:40:46 +0000 (16:40 -0700)]
[BOLT][DWARF] Handle Error returned by visitLocationList

Looks like implementation in llvm changed, and now we need to process error
being returned.

Reviewed By: maksfb

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

2 years agoRevert "Treat `std::move`, `forward`, etc. as builtins."
David Tenty [Wed, 20 Apr 2022 23:06:48 +0000 (19:06 -0400)]
Revert "Treat `std::move`, `forward`, etc. as builtins."

This reverts commit b27430f9f46b88bcd54d992debc8d72e131e1bd0 as the
    parent https://reviews.llvm.org/D123345 breaks the AIX CI:

    https://lab.llvm.org/buildbot/#/builders/214/builds/819

2 years agoRevert "Don't treat 'T &forward(T&&)' as builtin."
David Tenty [Wed, 20 Apr 2022 23:03:04 +0000 (19:03 -0400)]
Revert "Don't treat 'T &forward(T&&)' as builtin."

This reverts commit e43c93dd63cca295ef26ab69cd305816a71d45fd as the
parent https://reviews.llvm.org/D123345 breaks the AIX CI.

2 years ago[clang][CUDA][Windows] Fix compilation error on Windows with `uint32_t __nvvm_get_sme...
Evgeny Mankov [Wed, 20 Apr 2022 21:41:20 +0000 (00:41 +0300)]
[clang][CUDA][Windows] Fix compilation error on Windows with `uint32_t __nvvm_get_smem_pointer`

The change fixes https://github.com/llvm/llvm-project/issues/54609 (the second reported issue) by eliminating a compilation error occurring only on Windows while trying to compile any CUDA source file by clang (-x cuda).

[Repro]
clang -x cuda <any_cu_source>

[Error]

__clang_cuda_runtime_wrapper.h:473:
__clang_cuda_intrinsics.h(517,19): error GC871EEFB: unknown type name 'uint32_t'; did you mean 'cuuint32_t'?
__device__ inline uint32_t __nvvm_get_smem_pointer(void *__ptr) {
                          ^
C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v11.6/include\cuda.h:57:26: note: 'cuuint32_t' declared here
typedef unsigned __int32 cuuint32_t;

Reviewed By: tra

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

2 years ago[MC][NFC] Ensure tests that intended to cover compact unwind code paths do so
Jez Ng [Wed, 20 Apr 2022 22:11:19 +0000 (18:11 -0400)]
[MC][NFC] Ensure tests that intended to cover compact unwind code paths do so

These two tests were intended to cover the CU code paths, but invoked
llvm-mc using a generic "darwin" platform. However, MC only attempts to
emit CU for `macos >= 10.6` [1]. Thus we adjust the tests accordingly.

compact-unwind-cfi_def_cfa.s was added in 2fca51d3b45efcf00ffcfe2879cd6d7d98c26258
fp-setup-macho.s was added in 03ffa797ad4fe8f85da532aa3f687841a60b4c0c

[1]: https://github.com/llvm/llvm-project/blob/16c93aaa4a955676fe05f876bd036719a1b14b2d/llvm/lib/MC/MCObjectFileInfo.cpp#L43

Reviewed By: MaskRay, smeenai

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

2 years ago[flang] Semantics limits on kP scale factors
V Donaldson [Wed, 20 Apr 2022 18:42:44 +0000 (11:42 -0700)]
[flang] Semantics limits on kP scale factors

When known at compile time, Ew.d and Dw.d output edit descriptors
should respect limitations from the standard on the value of a
kP scale factor with respect to the digit count (d), at least for
values of k other than zero.

2 years ago[Hexagon] Establish size limit for RegisterSet in hexbit
Krzysztof Parzyszek [Wed, 20 Apr 2022 16:51:35 +0000 (09:51 -0700)]
[Hexagon] Establish size limit for RegisterSet in hexbit

This should reduce compilation time for huge functions.

2 years ago[clang] Add a raw_ostream operator<< overload for QualType
Nathan James [Wed, 20 Apr 2022 21:09:03 +0000 (22:09 +0100)]
[clang] Add a raw_ostream operator<< overload for QualType

Under the hood this prints the same as `QualType::getAsString()` but cuts out the middle-man when that string is sent to another raw_ostream.

Also cleaned up all the call sites where this occurs.

Reviewed By: aaron.ballman

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

2 years ago[libc++] Granularize <functional> includes
Nikolas Klauser [Sun, 17 Apr 2022 14:01:38 +0000 (16:01 +0200)]
[libc++] Granularize <functional> includes

Reviewed By: Mordante, #libc

Spies: libcxx-commits, miyuki

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

2 years agoImprove invalid-ir-print-after-failure.mlir to show the effects of -mlir-print-assume...
Mehdi Amini [Wed, 20 Apr 2022 20:39:44 +0000 (20:39 +0000)]
Improve invalid-ir-print-after-failure.mlir to show the effects of -mlir-print-assume-verified (NFC)

2 years ago[LLDB] Update inspect getargspec to getfullargspec
Muhammad Omair Javaid [Wed, 20 Apr 2022 20:32:23 +0000 (01:32 +0500)]
[LLDB] Update inspect getargspec to getfullargspec

This patch replaces getargspec with getfullargspec in funcutils.py.
getargspec has been deprecated by python 11x release. This is
important to run LLDB testsuite in Windows/Arm64 platform
where Python native will be available from python release onwards.

Note: getfullargspec is not available in python 2

Reviewed By: labath

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

2 years agoReland "[COFF, ARM64] Add __break intrinsic"
Pengxuan Zheng [Fri, 15 Apr 2022 21:57:40 +0000 (14:57 -0700)]
Reland "[COFF, ARM64] Add __break intrinsic"

https://docs.microsoft.com/en-us/cpp/intrinsics/arm64-intrinsics?view=msvc-170

Reland after fixing the test failure. The failure was due to conflict with a
change (D122983) which was merged right before this patch.

Reviewed By: rnk, mstorsjo

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

2 years ago[clang-tblgen] Automatically document options values
serge-sans-paille [Wed, 13 Apr 2022 13:28:58 +0000 (15:28 +0200)]
[clang-tblgen] Automatically document options values

This is a port of f5c666742f7bb4ae79ec79c8acf61dced4d37cc9 to clang's tablegen,
with a better wording.

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

2 years ago[libc] Add the implementation of the fflush function.
Siva Chandra Reddy [Wed, 20 Apr 2022 08:29:22 +0000 (08:29 +0000)]
[libc] Add the implementation of the fflush function.

Note that the underlying flush implementation does not yet fully implement
the POSIX standard. It is complete with respect to the C standard
however. A future change will add the POSIX behavior. It should not affect
the implementation of the fflush function however as the POSIX behavior
will be added in a lower layer.

Reviewed By: lntue

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

2 years agoRevert "[COFF, ARM64] Add __break intrinsic"
Pengxuan Zheng [Wed, 20 Apr 2022 18:57:49 +0000 (11:57 -0700)]
Revert "[COFF, ARM64] Add __break intrinsic"

This reverts commit 8a9b4fb4aa6d2dde026d9ae08459aa9e7a1edb05.

2 years ago[AMDGPU] Remove obsolete hack from allowsMisalignedMemoryAccesses. NFCI.
Stanislav Mekhanoshin [Tue, 19 Apr 2022 19:44:40 +0000 (12:44 -0700)]
[AMDGPU] Remove obsolete hack from allowsMisalignedMemoryAccesses. NFCI.

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

2 years ago[VPlan] Initial modeling of middle block in VPlan.
Florian Hahn [Wed, 20 Apr 2022 18:34:41 +0000 (19:34 +0100)]
[VPlan] Initial modeling of middle block in VPlan.

This patch extends the scope of VPlan to also include the exit (aka
middle) block.

For now, the exit block remains empty, but handling of exit values will
subsequently be moved to VPlan, by adding recipes to model exit values
in the exit block.

As a first step, this will allow fixing #51366.

Reviewed By: Ayal

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

2 years agoLook through calls to std::addressof to compute pointer alignment.
Eli Friedman [Mon, 18 Apr 2022 17:19:57 +0000 (10:19 -0700)]
Look through calls to std::addressof to compute pointer alignment.

This is sort of a followup to D37310; that basically fixed the same
issue, but then the libstdc++ implementation of <atomic> changed. Re-fix
the the issue in essentially the same way: look through the addressof
operation to find the alignment of the underlying object.

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

2 years ago[safestack] Support safestack in stack size diagnostics
Paul Kirth [Tue, 19 Apr 2022 16:34:23 +0000 (16:34 +0000)]
[safestack] Support safestack in stack size diagnostics

Current stack size diagnostics ignore the size of the unsafe stack.
This patch attaches the size of the static portion of the unsafe stack
to the function as metadata, which can be used by the backend to emit
diagnostics regarding stack usage.

Reviewed By: phosek, mcgrathr

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

2 years agoRevert "[clang][lex] NFCI: Use DirectoryEntryRef in HeaderSearch::load*()"
Jan Svoboda [Wed, 20 Apr 2022 18:09:04 +0000 (20:09 +0200)]
Revert "[clang][lex] NFCI: Use DirectoryEntryRef in HeaderSearch::load*()"

This reverts commit 1d3ba05e4a288b49287fe997763e90234b8c62db which caused failures of the VFS/real-path-found-first.m test on Windows build bots.

2 years ago[clang][lex] NFCI: Use FileEntryRef in ModuleMap::diagnoseHeaderInclusion()
Jan Svoboda [Wed, 20 Apr 2022 17:02:03 +0000 (19:02 +0200)]
[clang][lex] NFCI: Use FileEntryRef in ModuleMap::diagnoseHeaderInclusion()

This patch removes uses of the deprecated `DirectoryEntry::getName()` from the `ModuleMap::diagnoseHeaderInclusion()` function by using `{File,Directory}EntryRef` instead.

Reviewed By: bnbarham

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

2 years ago[COFF, ARM64] Add __break intrinsic
Pengxuan Zheng [Fri, 15 Apr 2022 21:57:40 +0000 (14:57 -0700)]
[COFF, ARM64] Add __break intrinsic

https://docs.microsoft.com/en-us/cpp/intrinsics/arm64-intrinsics?view=msvc-170

Reviewed By: rnk, mstorsjo

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

2 years agoRevert D119136 "[clang] Implement Change scope of lambda trailing-return-type" and...
Fangrui Song [Wed, 20 Apr 2022 17:57:12 +0000 (10:57 -0700)]
Revert D119136 "[clang] Implement Change scope of lambda trailing-return-type" and its follow-up

This reverts commit 69dd89fdcbd846375a45e2fe3a88710887236d7a.
This reverts commit 04000c2f928a7adc32138a664d167f01b642bef3.

The current states breaks libstdc++ usage (https://reviews.llvm.org/D119136#3455423).
The fixup has been reverted as it caused other valid code to be disallowed.
I think we should start from the clean state by reverting all relevant commits.

2 years ago[NFC] Avoid unnecessary duplication of code generating diagnostic.
Dan Liew [Tue, 19 Apr 2022 23:28:33 +0000 (16:28 -0700)]
[NFC] Avoid unnecessary duplication of code generating diagnostic.

The previous code unneccessarily duplicated the creation of a diagnostic
where the only difference was the `AssignmentAction` being passed.

rdar://88664722

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

2 years ago[LICM] Add additional writeonly tests, check attributes.
Florian Hahn [Wed, 20 Apr 2022 17:49:37 +0000 (18:49 +0100)]
[LICM] Add additional writeonly tests, check attributes.

Add additional test coverage for D123473.

2 years ago[ELF] Shrink binding and type in Symbol
Shoaib Meenai [Tue, 19 Apr 2022 20:46:04 +0000 (13:46 -0700)]
[ELF] Shrink binding and type in Symbol

STB_HIPROC and STT_HIPROC are both 15, so we can fit the symbol binding
and type in 4 bits. This gives us an additional byte to use for Symbol
flags (without increasing the type's size), which I'll be making use of
in the next diff.

Reorder type and binding based on a suggestion from @MaskRay, to
optimize st_info computation on little-endian systems (see
https://godbolt.org/z/nMn8Yar43).

Reviewed By: MaskRay

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

2 years ago[ELF] Assert on invalid GOT or PLT relocations
Shoaib Meenai [Tue, 19 Apr 2022 06:24:46 +0000 (23:24 -0700)]
[ELF] Assert on invalid GOT or PLT relocations

Because of https://llvm.org/PR50675, we can end up producing a PLT
relocation referencing a symbol that's dropped from the dynamic symbol
table, which in turn causes a crash at runtime. We ran into this again
recently, resulting in crashes for our users. A subsequent diff will fix
that issue, but add an assert to catch it if it happens again.

Reviewed By: MaskRay

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

2 years agoSpeculatively fix build bot
Aaron Ballman [Wed, 20 Apr 2022 17:39:15 +0000 (13:39 -0400)]
Speculatively fix build bot

This should fix the issue found by:
https://lab.llvm.org/buildbot/#/builders/37/builds/12606

2 years ago[AMDGPU] Regenerate lit test pattern (NFC).
Christudasan Devadasan [Tue, 19 Apr 2022 14:42:05 +0000 (20:12 +0530)]
[AMDGPU] Regenerate lit test pattern (NFC).

2 years ago[LLDB][NativePDB] Fix the case when S_DEFRANGE_SUBFIELD_REGISTERs are out of order.
Zequan Wu [Wed, 20 Apr 2022 03:11:44 +0000 (20:11 -0700)]
[LLDB][NativePDB] Fix the case when S_DEFRANGE_SUBFIELD_REGISTERs are out of order.

Previously, I was assuming that S_DEFRANGE_SUBFIELD_REGISTERs are always in the
increasing order of offset_in_parent until I saw a counter example.

Using `std::map` so that they are sorted by offset_in_parent.

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

2 years agoRevert D123909 "[Clang] Use of decltype(capture) in parameter-declaration-clause"
Fangrui Song [Wed, 20 Apr 2022 17:32:41 +0000 (10:32 -0700)]
Revert D123909 "[Clang] Use of decltype(capture) in parameter-declaration-clause"

This reverts commit daa6d7b250edb81ffef7770a71049d7af211698b.

It breaks valid code like https://reviews.llvm.org/D123909#3461716

2 years ago[C2x] Disallow functions without prototypes/functions with identifier lists
Aaron Ballman [Wed, 20 Apr 2022 17:26:38 +0000 (13:26 -0400)]
[C2x] Disallow functions without prototypes/functions with identifier lists

WG14 has elected to remove support for K&R C functions in C2x. The
feature was introduced into C89 already deprecated, so after this long
of a deprecation period, the committee has made an empty parameter list
mean the same thing in C as it means in C++: the function accepts no
arguments exactly as if the function were written with (void) as the
parameter list.

This patch implements WG14 N2841 No function declarators without
prototypes (http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2841.htm)
and WG14 N2432 Remove support for function definitions with identifier
lists (http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2432.pdf).

It also adds The -fno-knr-functions command line option to opt into
this behavior in other language modes.

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

2 years agoReland "[Clang][Sema] Fix invalid redefinition error in if/switch/for statement"
Jun Zhang [Wed, 20 Apr 2022 17:17:47 +0000 (01:17 +0800)]
Reland "[Clang][Sema] Fix invalid redefinition error in if/switch/for statement"

This reverts commit 9f075c3d84fb359efb6496535ab397a6f09609e2.
The broken build has alreasy been fixed in D124012, so reland it now.
Signed-off-by: Jun Zhang <jun@junz.org>
2 years ago[flang] Set LBOUND() folding for (x) expression as ones
Mike Kashkarov [Wed, 20 Apr 2022 16:53:09 +0000 (19:53 +0300)]
[flang] Set LBOUND() folding for (x) expression as ones

Set LBOUND() constant folding for parentheses expr. as ones

Array bounds should not propagate throught omitted bounds specifications or
temporary variables - fix constant folding in case of Parentheses<T> expression
by explicitly returning array of ones (or scalar in case of DIM=).

Add set of tests for (x) bounds checks (w/ and w/o 'parameter' arrays)

Reviewed By: jeanPerier

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

2 years ago[flang] Fix LBOUND() folding for constant arrays
Mike Kashkarov [Wed, 20 Apr 2022 16:47:21 +0000 (19:47 +0300)]
[flang] Fix LBOUND() folding for constant arrays

Previously constant folding uses 'dim' without checks which leads to ICE if we
do not have DIM= parameter. And for inputs without DIM= we need to form an
array of rank size with computed bounds instead of single value.

Add additional PackageConstant function to simplify 'if (dim)' handling since we
need to distinguish between scalar initialization in case of DIM= argument and
rank=1 array.

Also add a few more tests with 'parameter' type to verify folding for constant
arrays.

Reviewed By: jeanPerier

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

2 years ago[clang][dataflow] Ensure well-formed flow conditions.
Yitzhak Mandelbaum [Mon, 11 Apr 2022 19:41:42 +0000 (19:41 +0000)]
[clang][dataflow] Ensure well-formed flow conditions.

Ensure that the expressions associated with terminators are associated with a
value. Otherwise, we can generate degenerate flow conditions, where both
branches share the same condition.

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

2 years ago[clang][lex] NFCI: Use DirectoryEntryRef in FrameworkCacheEntry
Jan Svoboda [Wed, 20 Apr 2022 16:55:58 +0000 (18:55 +0200)]
[clang][lex] NFCI: Use DirectoryEntryRef in FrameworkCacheEntry

This patch changes the member of `FrameworkCacheEntry` from `const DirectoryEntry *` to `Optional<DirectoryEntryRef>` in order to remove uses of the deprecated `DirectoryEntry::getName()`.

Reviewed By: bnbarham

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

2 years ago[clang] NFCI: Use DirectoryEntryRef in FrontendAction::BeginSourceFile()
Jan Svoboda [Wed, 20 Apr 2022 16:54:36 +0000 (18:54 +0200)]
[clang] NFCI: Use DirectoryEntryRef in FrontendAction::BeginSourceFile()

This patch removes use of the deprecated `DirectoryEntry::getName()` from `FrontendAction::BeginSourceFile()`.

Reviewed By: bnbarham

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

2 years ago[clang][lex] NFCI: Use DirectoryEntryRef in HeaderSearch::load*()
Jan Svoboda [Wed, 20 Apr 2022 16:52:24 +0000 (18:52 +0200)]
[clang][lex] NFCI: Use DirectoryEntryRef in HeaderSearch::load*()

This patch removes uses of the deprecated `DirectoryEntry::getName()` from `HeaderSearch::load*()` functions by using `DirectoryEntryRef` instead.

Note that we bail out in one case and use the also deprecated `FileEntry::getLastRef()`. That's to prevent this patch from growing, and is addressed in a follow-up.

Reviewed By: bnbarham

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

2 years ago[DAG]Introduce llvm::processShuffleMasks and use it for shuffles in DAG Type Legalizer.
Alexey Bataev [Mon, 13 Dec 2021 18:38:28 +0000 (10:38 -0800)]
[DAG]Introduce llvm::processShuffleMasks and use it for shuffles in DAG Type Legalizer.

We can process the long shuffles (working across several actual
vector registers) in the best way if we take the actual register
represantion into account. We can build more correct representation of
register shuffles, improve number of recognised buildvector sequences.
Also, same function can be used to improve the cost model for the
shuffles. in future patches.

Part of D100486

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

2 years agoSpeculatively fix build bot
Aaron Ballman [Wed, 20 Apr 2022 16:32:14 +0000 (12:32 -0400)]
Speculatively fix build bot

This should address the issue in:
https://lab.llvm.org/buildbot/#/builders/77/builds/16683

2 years ago[InstCombine] Don't look through bitcast from vector in collectInsertionElements.
Craig Topper [Wed, 20 Apr 2022 16:05:35 +0000 (09:05 -0700)]
[InstCombine] Don't look through bitcast from vector in collectInsertionElements.

We're making a recursive call here and everything in the function
assumes we're looking at scalars. This would be violated if we
looked through a bitcast from vectors.

Reviewed By: spatel

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

2 years ago[InstCombine] Pre-commit test for D124015
Craig Topper [Wed, 20 Apr 2022 16:05:28 +0000 (09:05 -0700)]
[InstCombine] Pre-commit test for D124015

Reviewed By: spatel

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

2 years ago[InstCombine] Fold mul nuw+lshr to a single multiplication when the latter is a factor
chenglin.bi [Wed, 20 Apr 2022 15:51:34 +0000 (23:51 +0800)]
[InstCombine] Fold mul nuw+lshr to a single multiplication when the latter is a factor

if c is divisible by (1 << ShAmtC), we can fold this pattern:
lshr (mul nuw x, c), ShAmtC -> mul nuw x, (c >> ShAmtC)

https://alive2.llvm.org/ce/z/ox4wAt

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

Reviewed By: spatel, lebedev.ri, craig.topper

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