platform/upstream/llvm.git
19 months agoRevert "[JITLink][ORC] Rename MemDeallocPolicy to MemLifetimePolicy, add ..."
Lang Hames [Fri, 17 Mar 2023 19:57:38 +0000 (12:57 -0700)]
Revert "[JITLink][ORC] Rename MemDeallocPolicy to MemLifetimePolicy, add ..."

This reverts commit 2cc64df0bd6a802eab592dbc282463c3e4a4281c while I investigate
bot failures (e.g. https://lab.llvm.org/buildbot/#/builders/3/builds/23081).

19 months ago[lldb] Enable TestPublicAPIHeaders.py on Apple Silicon
Alex Langford [Fri, 17 Mar 2023 18:34:58 +0000 (11:34 -0700)]
[lldb] Enable TestPublicAPIHeaders.py on Apple Silicon

This cleans up the test a bit and enables it to run on apple silicon
machines.

19 months ago[JITLink][ORC] Rename MemDeallocPolicy to MemLifetimePolicy, add NoAlloc option.
Lang Hames [Thu, 16 Mar 2023 00:09:04 +0000 (17:09 -0700)]
[JITLink][ORC] Rename MemDeallocPolicy to MemLifetimePolicy, add NoAlloc option.

The original MemDeallocPolicy had two options:
* Standard: allocated memory lives until deallocated or abandoned.
* Finalize: allocated memory lives until all finalize actions have been run,
            then is destroyed.

This patch introduces a new 'NoAlloc' option. NoAlloc indicates that the
section should be ignored by the JITLinkMemoryManager -- the memory manager
should allocate neither working memory nor executor address space to blocks in
NoAlloc sections. The NoAlloc option is intended to support metadata sections
(e.g. debug info) that we want to keep in the graph and have fixed up if
necessary, but don't want allocated or transmitted to the executor (or we want
that allocation and transmission to be managed manually by plugins).

Since NoAlloc blocks are ignored by the JITLinkMemoryManager they will not have
working memory allocated to them by default post-allocation. Clients wishing to
modify the content of a block in a NoAlloc section should call
`Block::getMutableMemory(LinkGraph&)` to get writable memory allocated on the
LinkGraph's allocator (this memory will exist for the lifetime of the graph).
If no client requests mutable memory prior to the fixup phase then the generic
link algorithm will do so when it encounters the first edge in any given block.

Addresses of blocks in NoAlloc sections are initialized by the LinkGraph
creator (a LinkGraphBuilder, if the graph is generated from an object file),
and should not be modified by the JITLinkMemoryManager. Plugins are responsible
for updating addresses if they add/remove content from these sections. The
meaning of addresses in NoAlloc-sections is backend/plugin defined, but for
fixup purposes they will be treated the same as addresses in Standard/Finalize
sections. References from Standard/Finalize sections to NoAlloc sections are
expected to be common (these represent metadata tracking executor addresses).
References from NoAlloc sections to Standard/Finalize sections are expected to
be rare/non-existent (they would represent JIT'd code / data tracking metadata
in the controller, which would be surprising). LinkGraphBuilders and specific
backends may impose additional constraints on edges between Standard/Finalize
and NoAlloc sections where required for correctness.

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

19 months agoRegAllocGreedy: Don't use Register reference
Matt Arsenault [Fri, 10 Mar 2023 12:56:51 +0000 (08:56 -0400)]
RegAllocGreedy: Don't use Register reference

19 months agoIntrinsics: Make vector reduce intrinsics speculatable
Matt Arsenault [Fri, 17 Mar 2023 16:00:05 +0000 (12:00 -0400)]
Intrinsics: Make vector reduce intrinsics speculatable

19 months ago[RISCV] Add isReMaterializable to FLI instructions.
Craig Topper [Fri, 17 Mar 2023 19:16:36 +0000 (12:16 -0700)]
[RISCV] Add isReMaterializable to FLI instructions.

Reviewed By: reames

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

19 months ago[RISCV] Add isAsCheapAsAMove to FLI instructions.
Craig Topper [Fri, 17 Mar 2023 19:05:51 +0000 (12:05 -0700)]
[RISCV] Add isAsCheapAsAMove to FLI instructions.

This can prevent unnecessarily hoisting out of loops.

Test case cribbed from AArch64.

I also intend to make them rematerializable.

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

19 months ago[RISCV] Add test case showing fli being hoisted out of a loop and creating extra...
Craig Topper [Fri, 17 Mar 2023 19:05:44 +0000 (12:05 -0700)]
[RISCV] Add test case showing fli being hoisted out of a loop and creating extra copies/spills.

Test case for D146314.

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

19 months ago[libc++][NFC] Move the stdlib= test suite configuration for Apple into the cfg.in...
Louis Dionne [Fri, 17 Mar 2023 16:40:50 +0000 (12:40 -0400)]
[libc++][NFC] Move the stdlib= test suite configuration for Apple into the cfg.in files

This centralizes where configuration lives.

19 months ago[MLIR] Add label to print-ir pass
Frederik Gossen [Fri, 17 Mar 2023 18:47:18 +0000 (14:47 -0400)]
[MLIR] Add label to print-ir pass

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

19 months ago[libc++][NFC] Precise comments in test suite setup
Louis Dionne [Fri, 17 Mar 2023 16:41:49 +0000 (12:41 -0400)]
[libc++][NFC] Precise comments in test suite setup

19 months ago[SLP]Introduce shuffle of the nodes + gather/vectorbuild of the remaining scalars.
Alexey Bataev [Wed, 15 Mar 2023 19:33:00 +0000 (12:33 -0700)]
[SLP]Introduce shuffle of the nodes + gather/vectorbuild  of the remaining scalars.

Currently compiler does not support mixing of shuffled nodes
+ gather/buildvector of the remaining scalar values. It may reduce total
  number of instructions and improve performance of the
  gather/buildvector sequences.

Part of D110978

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

19 months ago[AMDGPU] Remove some unneeded curly braces
Jay Foad [Fri, 17 Mar 2023 18:08:01 +0000 (18:08 +0000)]
[AMDGPU] Remove some unneeded curly braces

19 months ago[libc] Fix dependency to unit tests, and quitting in non-GPU mode
Joseph Huber [Fri, 17 Mar 2023 18:06:58 +0000 (13:06 -0500)]
[libc] Fix dependency to unit tests, and quitting in non-GPU mode

Summary:
Fixes the lack of a dependency after changing the order of some
includes. Also we weren't running any tests as the GPU was always
disabling them. Fix the logic.

19 months ago[AMDGPU] Simplify SMEM Real instruction definitions. NFC.
Jay Foad [Fri, 17 Mar 2023 17:57:34 +0000 (17:57 +0000)]
[AMDGPU] Simplify SMEM Real instruction definitions. NFC.

Only override InOperandList when the Real instruction needs a different
type for $offset than the Pseudo.

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

19 months ago[libc] Enable integration tests targeting the GPU
Joseph Huber [Thu, 16 Mar 2023 16:42:57 +0000 (11:42 -0500)]
[libc] Enable integration tests targeting the GPU

This patch enables integration tests running on the GPU. This uses the
RPC interface implemented in D145913 to compile the necessary
dependencies for the integration test object. We can then use this to
compile the objects for the GPU directly and execute them using the AMD
HSA loader combined with its RPC server. For example, the compiler is
performing the following actions to execute the integration tests.

```
$ clang++ --target=amdgcn-amd-amdhsa -mcpu=gfx1030 -nostdlib -flto -ffreestanding \
    crt1.o io.o quick_exit.o test.o rpc_client.o args_test.o -o image
$ ./amdhsa_loader image 1 2 5
args_test.cpp:24: Expected 'my_streq(argv[3], "3")' to be true, but is false
```

This currently only works with a single threaded client implementation
running on AMDGPU. Further work will implement multiple clients for AMD
and the ability to run on NVPTX as well.

Depends on D145913

Reviewed By: sivachandra, JonChesterfield

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

19 months ago[libc] Add initial support for an RPC mechanism for the GPU
Joseph Huber [Fri, 10 Mar 2023 22:48:53 +0000 (16:48 -0600)]
[libc] Add initial support for an RPC mechanism for the GPU

This patch adds initial support for an RPC client / server architecture.
The GPU is unable to perform several system utilities on its own, so in
order to implement features like printing or memory allocation we need
to be able to communicate with the executing process. This is done via a
buffer of "sharable" memory. That is, a buffer with a unified pointer
that both the client and server can use to communicate.

The implementation here is based off of Jon Chesterfields minimal RPC
example in his work. We use an `inbox` and `outbox` to communicate
between if there is an RPC request and to signify when work is done.
We use a fixed-size buffer for the communication channel. This is fixed
size so that we can ensure that there is enough space for all
compute-units on the GPU to issue work to any of the ports. Right now
the implementation is single threaded so there is only a single buffer
that is not shared.

This implementation still has several features missing to be complete.
Such as multi-threaded support and asynchrnonous calls.

Depends on D145912

Reviewed By: sivachandra

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

19 months ago[lldb] Fix d875838e8b45cb0da5070298d0c1a2d1ee78ce7e
Dave Lee [Fri, 17 Mar 2023 17:42:45 +0000 (10:42 -0700)]
[lldb] Fix d875838e8b45cb0da5070298d0c1a2d1ee78ce7e

19 months ago[mlir][spirv] Allow vectors of index types in elementwise conversions
Quinn Dawkins [Thu, 16 Mar 2023 19:03:36 +0000 (15:03 -0400)]
[mlir][spirv] Allow vectors of index types in elementwise conversions

Currently the conversion of elementwise ops only checks for scalar index
types when checking for bitwidth emulation.

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

19 months ago[clang][WebAssembly] Initial support for reference type funcref in clang
Paulo Matos [Wed, 26 Oct 2022 06:48:39 +0000 (08:48 +0200)]
[clang][WebAssembly] Initial support for reference type funcref in clang

This is the funcref counterpart to 890146b. We introduce a new attribute
that marks a function pointer as a funcref. It also implements builtin
__builtin_wasm_ref_null_func(), that returns a null funcref value.

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

19 months ago[lldb][test] Replace use of p with expression in Shell tests (NFC)
Dave Lee [Thu, 16 Mar 2023 15:20:06 +0000 (08:20 -0700)]
[lldb][test] Replace use of p with expression in Shell tests (NFC)

In Shell tests, replace use of the `p` alias with the `expression` command.

To avoid conflating tests of the alias with tests of the expression command,
this patch canonicalizes to the use `expression`.

See also D141539 which made the same change to API tests.

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

19 months ago[lldb] Unify WatchpointSP variable names (NFC)
Jonas Devlieghere [Fri, 17 Mar 2023 17:06:25 +0000 (10:06 -0700)]
[lldb] Unify WatchpointSP variable names (NFC)

LLDB uses `_up`, `_sp` and `_wp` suffixes for unique, shared and weak
pointers respectively. This can become confusing in combination with
watchpoints which are commonly abbreviated to `wp`. Update
CommandObjectWatchpoint to use `watch_sp` for all `WatchpointSP`
variables.

19 months agoRevert "[flang] Feature list plugin"
Valentin Clement [Fri, 17 Mar 2023 16:59:22 +0000 (17:59 +0100)]
Revert "[flang] Feature list plugin"

This reverts commit bde91fd03f72a25151caa9f8ee2d4572ff14619b.

Failing buildbot: https://lab.llvm.org/buildbot/#/builders/181/builds/15552

19 months ago[flang] Pass box address for bind(c) assumed type dummy argument
Valentin Clement [Fri, 17 Mar 2023 16:58:15 +0000 (17:58 +0100)]
[flang] Pass box address for bind(c) assumed type dummy argument

When interfacing with C code, assumed type should be passed as
basic pointer.

Reviewed By: PeteSteinfeld

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

19 months ago[lldb] Set the watchpoint spec for expression watchpoints
Jonas Devlieghere [Fri, 17 Mar 2023 02:19:32 +0000 (19:19 -0700)]
[lldb] Set the watchpoint spec for expression watchpoints

When setting a variable watchpoint, the watchpoint stores the variable
name in the watchpoint spec. For expression variables we should store
the expression in the watchpoint spec. This patch adds that
functionality.

rdar://106096860

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

19 months ago[flang][NFC] Fix subroutine name
Valentin Clement [Fri, 17 Mar 2023 16:35:58 +0000 (09:35 -0700)]
[flang][NFC] Fix subroutine name

19 months ago[Libomptarget] Emit a special warning when no images are found
Joseph Huber [Fri, 17 Mar 2023 15:37:29 +0000 (10:37 -0500)]
[Libomptarget] Emit a special warning when no images are found

When offloading is mandatory we can emit a more helpful message if we
did not find any compatible images with the user's system.

Fixes #60221

Reviewed By: ye-luo

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

19 months ago[LV] Don't consider pointer as uniform if it is also stored.
Florian Hahn [Fri, 17 Mar 2023 16:26:07 +0000 (16:26 +0000)]
[LV] Don't consider pointer as uniform if it is also stored.

Update isVectorizedMemAccessUse to also check if the pointer is stored.
This prevents LV to incorrectly consider a pointer as uniform if it is
used as both pointer and stored by the same StoreInst.

Fixes #61396.

19 months agoRevert "[AST] Use ModRefInfo to represent access kind (NFC)"
Nikita Popov [Fri, 17 Mar 2023 16:22:37 +0000 (17:22 +0100)]
Revert "[AST] Use ModRefInfo to represent access kind (NFC)"

This reverts commit 2c78a9e65ccfe36d213a409592bebdd3ed8ba771.

Fails to compile on mlir-s390x-linux buildbot using GCC 9.4 with:

    llvm/lib/Analysis/AliasSetTracker.cpp: In member function 'void llvm::AliasSet::mergeSetIn(llvm::AliasSet&, llvm::AliasSetTracker&, llvm::BatchAAResults&)':
    llvm/lib/Analysis/AliasSetTracker.cpp:50:19: error: invalid operands of types 'unsigned char:2' and 'unsigned char:2' to binary 'operator|'

19 months ago[mlir][gpu][nvvm] fixed bug with literal for inline asm for mma instruction
Aart Bik [Wed, 15 Mar 2023 04:43:20 +0000 (21:43 -0700)]
[mlir][gpu][nvvm] fixed bug with literal for inline asm for mma instruction

The 'mma.sp.sync.aligned' family of instructions expects
the sparsity selector as a direct literal (0x0 or 0x1).
The current MLIR inline asm passed this as a value in
register, which broke the downstream assemblers

This is a small step towards supporting 2:4 sparsity on
NVidia GPUs in the sparse compiler of MLIR.

Reviewed By: ThomasRaoux, guraypp

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

19 months ago[LV] Remove scalable constraints on creating bitcasts
Graham Hunter [Thu, 16 Mar 2023 13:48:45 +0000 (13:48 +0000)]
[LV] Remove scalable constraints on creating bitcasts

InnerLoopVectorizer::createBitOrPointerCast only supported fixed
length vectors since it hadn't been updated. Supporting scalable
vectors is just a matter of changing types and using elementcount
instead of numelements, since there's nothing which actually relies
on knowing the exact length of the vector.

Original written by mgabka.

Split out from D145163.

19 months ago[clang] Fix two unused variable warnings from if statements. NFC
Craig Topper [Fri, 17 Mar 2023 16:17:57 +0000 (09:17 -0700)]
[clang] Fix two unused variable warnings from if statements. NFC

19 months ago[LICM] Regenerate test checks (NFC)
Nikita Popov [Fri, 17 Mar 2023 16:16:54 +0000 (17:16 +0100)]
[LICM] Regenerate test checks (NFC)

19 months ago[Flang][Driver] Add support for fopenmp-is-device and fembed-offload-object to Flang...
Andrew Gozillon [Fri, 17 Mar 2023 16:06:55 +0000 (11:06 -0500)]
[Flang][Driver] Add support for fopenmp-is-device and fembed-offload-object to Flang ToolChain

This allows-fembed-offload-object's and -fopenmp-is-device
compiler invocation arguments to be passed to the Flang frontend
during split compilation when offloading in OpenMP.

An example use case is when passing an offload-arch alongside
-fopenmp to embed device objects compiled for the offload-arch
within the host architecture.

This borrows from existing clangDriver+Clang.h/.cpp work and the intent
is currently to reuse as much of the existing infrastructure and design as
we can to achieve offloading for Flang+OpenMP. An overview of
Clang's offloading design can be found
here: https://clang.llvm.org/docs/OffloadingDesign.html

Reviewers:
awarzynski
jhuber6

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

19 months ago[StandardInstrumentations] Check that module analyses are properly invalidated
Arthur Eubanks [Thu, 16 Mar 2023 16:57:35 +0000 (09:57 -0700)]
[StandardInstrumentations] Check that module analyses are properly invalidated

Followup to D146003/D146160

Reviewed By: nikic

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

19 months ago[CodeView] Add source languages ObjC and ObjC++
Stefan Gränitz [Fri, 17 Mar 2023 16:08:20 +0000 (17:08 +0100)]
[CodeView] Add source languages ObjC and ObjC++

This patch adds llvm::codeview::SourceLanguage entries, DWARF translations, and PDB source file extensions in LLVM and allow LLDB's PDB parsers to recognize them correctly.

The CV_CFL_LANG enum in the Visual Studio 2022 documentation https://learn.microsoft.com/en-us/visualstudio/debugger/debug-interface-access/cv-cfl-lang defines:
```
    CV_CFL_OBJC     = 0x11,
    CV_CFL_OBJCXX   = 0x12,
```

Since the initial commit in D24317, ObjC was emitted as C language and ObjC++ as Masm.

Reviewed By: DavidSpickett

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

19 months ago[fuzzer] Use puts() rather than printf() in CopyFileToErr()
Roy Sundahl [Thu, 16 Mar 2023 01:56:11 +0000 (18:56 -0700)]
[fuzzer] Use puts() rather than printf() in CopyFileToErr()

CopyFileToErr() uses Printf("%s", ...) which fails with a negative size on
files >2Gb (Its path is through var-args wrappers to an unnecessary "%s"
expansion and subject to int overflows) Using puts() in place of printf()
bypasses this path and writes the string directly to stderr. This avoids the
present loss of data when a crashed worker has generated >2Gb of output.

rdar://99384640

Reviewed By: yln

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

19 months ago[AST] Use ModRefInfo to represent access kind (NFC)
Nikita Popov [Fri, 17 Mar 2023 16:05:11 +0000 (17:05 +0100)]
[AST] Use ModRefInfo to represent access kind (NFC)

AST was using a custom enum with exactly the same semantics. Use
the standard one instead.

19 months ago[Docs] Add release notes for D146089.
Craig Topper [Fri, 17 Mar 2023 15:59:03 +0000 (08:59 -0700)]
[Docs] Add release notes for D146089.

19 months agoRevert "[Coroutines] Fix premature conversion of return object"
Ilya Biryukov [Fri, 17 Mar 2023 15:52:17 +0000 (16:52 +0100)]
Revert "[Coroutines] Fix premature conversion of return object"

This reverts commit 54225c457a336b1609c6d064b2b606a9238a28b9.
The lack of RVO causes compile errors in our code.
Reverting to unblock our integrate.

See D145639 for full discussion.

19 months ago[libc++][NFC] Fix typo in comment
Louis Dionne [Fri, 17 Mar 2023 15:57:34 +0000 (11:57 -0400)]
[libc++][NFC] Fix typo in comment

19 months agoInstCombine: Fold is.fpclass for single infinity to fcmp
Matt Arsenault [Sun, 11 Dec 2022 00:59:39 +0000 (19:59 -0500)]
InstCombine: Fold is.fpclass for single infinity to fcmp

llvm.is.fpclass(x, fcPosInf) -> fcmp oeq x, +inf
llvm.is.fpclass(x, fcNegInf) -> fcmp oeq x, -inf
llvm.is.fpclass(x, ~fcPosInf) -> fcmp one x, +inf
llvm.is.fpclass(x, ~fcNegInf) -> fcmp one x, -inf

llvm.is.fpclass(x, fcPosInf|fcNan) -> fcmp ueq x, +inf
llvm.is.fpclass(x, fcNegInf|fcNan) -> fcmp ueq, -inf
llvm.is.fpclass(x, ~fcPosInf & ~fcNan) -> fcmp one, x, +inf
llvm.is.fpclass(x, ~fcNegInf & ~fcNan) -> fcmp one, x, -inf

This regresses some of the logic of fcmp tests. These should be restored
in a future patch to better handle combining logic of fcmp and class.

19 months ago[flang] Use llvm-readobj instead of llvm-readelf in rv64 test
David Spickett [Fri, 17 Mar 2023 15:45:42 +0000 (15:45 +0000)]
[flang] Use llvm-readobj instead of llvm-readelf in rv64 test

In some circumstances llvm-readelf symlink to llvm-readobj appears
to not be available. For want of a proper fix in CMake, use llvm-readobj
in the test instead.

19 months agoInstCombine: Fold is.fpclass nan|zero to fcmp ueq 0
Matt Arsenault [Fri, 3 Feb 2023 21:29:31 +0000 (17:29 -0400)]
InstCombine: Fold is.fpclass nan|zero to fcmp ueq 0

19 months agoRevert "InstCombine: Fold is.fpclass nan|zero to fcmp ueq 0"
Matt Arsenault [Fri, 17 Mar 2023 15:36:53 +0000 (11:36 -0400)]
Revert "InstCombine: Fold is.fpclass nan|zero to fcmp ueq 0"

This reverts commit b5ff7640cd1391ebe67e47a043fed6faf8bdcbb7.

Merge resolution gone wrong merged two unrelated patches

19 months ago[LSR] Cleanup term-fold tests
Philip Reames [Fri, 17 Mar 2023 15:32:00 +0000 (08:32 -0700)]
[LSR] Cleanup term-fold tests

Autogen for naming change, and remove comments about C code inspiration.  Multiple of these are out of sync with the actual IR, and these are IR tests anyways.

19 months agoInstCombine: Fold is.fpclass nan|zero to fcmp ueq 0
Matt Arsenault [Fri, 3 Feb 2023 21:29:31 +0000 (17:29 -0400)]
InstCombine: Fold is.fpclass nan|zero to fcmp ueq 0

19 months agoCodeGen: Reorder case handling for is.fpclass legalization
Matt Arsenault [Thu, 2 Feb 2023 14:14:36 +0000 (10:14 -0400)]
CodeGen: Reorder case handling for is.fpclass legalization

Subnormal and zero checks can be combined into one, so move
the code closer to reduce the diff in a future change.

19 months ago[Hexagon] Ensure proper ordering of instructions in HVC::AlignVectors
Krzysztof Parzyszek [Fri, 17 Mar 2023 14:01:16 +0000 (07:01 -0700)]
[Hexagon] Ensure proper ordering of instructions in HVC::AlignVectors

The shuffle reduction creates a dependency chain. Make sure that the
inputs to the next instruction are placed ahead of the instruction itself.

19 months ago[Hexagon] Add names to all instructions created in HVC
Krzysztof Parzyszek [Fri, 17 Mar 2023 13:47:46 +0000 (06:47 -0700)]
[Hexagon] Add names to all instructions created in HVC

19 months ago[Hexagon] Add debug code to HVC::AlignVectors
Krzysztof Parzyszek [Fri, 17 Mar 2023 13:44:42 +0000 (06:44 -0700)]
[Hexagon] Add debug code to HVC::AlignVectors

That and clarify/expand some comments.

19 months ago[LSR] Another minor code style improvement [nfc]
Philip Reames [Fri, 17 Mar 2023 15:08:46 +0000 (08:08 -0700)]
[LSR] Another minor code style improvement [nfc]

19 months ago[Polly] Remove some bitcasts (NFC)
Nikita Popov [Fri, 17 Mar 2023 14:58:52 +0000 (15:58 +0100)]
[Polly] Remove some bitcasts (NFC)

No longer relevant with opaque pointers.

19 months ago[LSR] Minor code style improvement [nfc]
Philip Reames [Fri, 17 Mar 2023 14:50:26 +0000 (07:50 -0700)]
[LSR] Minor code style improvement [nfc]

19 months ago[clang][test] Fix -DBUILD_SHARED_LIBS build by adding depency on MC from clangTesting
Alex Bradbury [Fri, 17 Mar 2023 14:42:41 +0000 (14:42 +0000)]
[clang][test] Fix -DBUILD_SHARED_LIBS build by adding depency on MC from clangTesting

Commit 34de7da6246cdfa6ff6f3d3c514583cddc0a10ec (D143436) introduced a
dependency on the TargetRegistry in `getAnyTargetForTesting`. This is
part of MC, which wasn't listed in clang/lib/Testing/CMakeLists.txt.
This broke the -DBUILD_SHARED_LIBS=True builds.

19 months ago[Polly] Convert remaining tests to opaque pointers (NFC)
Nikita Popov [Fri, 17 Mar 2023 14:28:24 +0000 (15:28 +0100)]
[Polly] Convert remaining tests to opaque pointers (NFC)

19 months agoInstCombine: Add a few more tests for is.fpclass folding
Matt Arsenault [Wed, 15 Mar 2023 11:24:38 +0000 (07:24 -0400)]
InstCombine: Add a few more tests for is.fpclass folding

19 months ago[LLDB] Remove some typed pointer code (NFCI)
Nikita Popov [Fri, 17 Mar 2023 14:21:41 +0000 (15:21 +0100)]
[LLDB] Remove some typed pointer code (NFCI)

Various bitcast handling should no longer be necessary with
opaque pointers.

19 months ago[LV] Add test where pointer is incorrectly marked as uniform.
Florian Hahn [Fri, 17 Mar 2023 14:23:56 +0000 (14:23 +0000)]
[LV] Add test where pointer is incorrectly marked as uniform.

Test for #61396.

19 months agoGlobalISel: Use FPClassTest in is.fpclass lowering
Matt Arsenault [Fri, 17 Mar 2023 13:21:57 +0000 (09:21 -0400)]
GlobalISel: Use FPClassTest in is.fpclass lowering

19 months ago[Polly] Convert some tests to opaque pointers (NFC)
Nikita Popov [Fri, 17 Mar 2023 13:45:41 +0000 (14:45 +0100)]
[Polly] Convert some tests to opaque pointers (NFC)

19 months ago[LV] Convert consecutive-ptr-uniforms.ll to use opaque pointers (NFC).
Florian Hahn [Fri, 17 Mar 2023 14:07:10 +0000 (14:07 +0000)]
[LV] Convert consecutive-ptr-uniforms.ll to use opaque pointers (NFC).

19 months agoAdd __builtin_FILE_NAME()
Ilya Karapsin [Fri, 17 Mar 2023 13:50:34 +0000 (09:50 -0400)]
Add __builtin_FILE_NAME()

Add '__builtin_FILE_NAME()', which expands to the filename because the
full path is not always needed. It corresponds to the '__FILE_NAME__'
predefined macro and is consistent with the other '__builin' functions
added for predefined macros.

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

19 months ago[Polly] Convert some tests to opaque pointers (NFC)
Nikita Popov [Fri, 17 Mar 2023 13:30:41 +0000 (14:30 +0100)]
[Polly] Convert some tests to opaque pointers (NFC)

19 months ago[Docs] Fix typo in LoopTerminology.
Carlos Alberto Enciso [Fri, 17 Mar 2023 13:38:44 +0000 (13:38 +0000)]
[Docs] Fix typo in LoopTerminology.

19 months ago[lldb][PDB] Rename GetDeclarationForSymbol() -> AddSourceInfoToDecl()
Stefan Gränitz [Fri, 17 Mar 2023 13:37:26 +0000 (14:37 +0100)]
[lldb][PDB] Rename GetDeclarationForSymbol() -> AddSourceInfoToDecl()

The old name of this function was confusing for me, when I started working on the PDB parser. The new name clearifies that the function adds file, line and column (typically referred as source info) and indicates that the information is stored in the provided decl parameter.

Reviewed By: DavidSpickett

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

19 months ago[SCEVExpander] Always use scevgep as name
Nikita Popov [Fri, 17 Mar 2023 12:18:33 +0000 (13:18 +0100)]
[SCEVExpander] Always use scevgep as name

With opaque pointers the scevgep / uglygep distinction no longer
makes sense -- GEPs are always emitted in offset-based representation.

19 months ago[BOLT] Add .relr.dyn section support
Vladislav Khmelevsky [Tue, 14 Mar 2023 20:08:11 +0000 (00:08 +0400)]
[BOLT] Add .relr.dyn section support

Vladislav Khmelevsky,
Advanced Software Technology Lab, Huawei

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

19 months ago[Clang] Stop demoting ElementCount/TypeSize conversion errors to warnings.
Paul Walker [Tue, 14 Mar 2023 17:52:13 +0000 (17:52 +0000)]
[Clang] Stop demoting ElementCount/TypeSize conversion errors to warnings.

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

19 months ago[clang] Include the error message in file reading error diagnostic
Hans Wennborg [Fri, 17 Mar 2023 09:59:03 +0000 (10:59 +0100)]
[clang] Include the error message in file reading error diagnostic

in order to provide as much information as possible to the user. The
diagnostic will now look like for example:

  error: error reading '/tmp/foo.c': Permission denied

(This addresses a FIXME from 2019, 9ef6c49baf45)

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

19 months ago[libclang] Fix documentation; NFC
Igor Kushnir [Fri, 17 Mar 2023 12:39:33 +0000 (08:39 -0400)]
[libclang] Fix documentation; NFC

Fixes cc929590ad305f0d068709c7c7999f5fc6118dc9. The
CXIndexOptions::GlobalOptions data member has been replaced with the two
CXChoice data members during code review.

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

19 months ago[bazel] update build for d60d3455eb2
Mikhail Goncharov [Fri, 17 Mar 2023 12:31:21 +0000 (13:31 +0100)]
[bazel] update build for d60d3455eb2

19 months agoRevert "Attributor: Add isAtFixpoint part of nofpclass handling"
Matt Arsenault [Fri, 17 Mar 2023 12:14:34 +0000 (08:14 -0400)]
Revert "Attributor: Add isAtFixpoint part of nofpclass handling"

This reverts commit 78313e8531c412f4b57b23e0ee04ea4a131e8d71.

Accidentally pushed

19 months agoRoll back claims that we implement P0960R3 and P1975R0
Aaron Ballman [Fri, 17 Mar 2023 12:01:51 +0000 (08:01 -0400)]
Roll back claims that we implement P0960R3 and P1975R0

We thought we had implemented these papers appropriately but have since
discovered significant issues. See discussion of the issues at:
https://github.com/llvm/llvm-project/issues/61145

The work already done on these papers is remaining in tree for the
moment while people investigate whether the issues can be fixed
forward in main. The status page is being updated so the status is
clear to users of the upcoming Clang 16 release.

19 months agoAttributor: Assume handling for nofpclass
Matt Arsenault [Fri, 3 Mar 2023 19:54:56 +0000 (15:54 -0400)]
Attributor: Assume handling for nofpclass

19 months agoAttributor: Update test
Matt Arsenault [Fri, 17 Mar 2023 11:34:07 +0000 (07:34 -0400)]
Attributor: Update test

19 months agoAttributor: Add isAtFixpoint part of nofpclass handling
Matt Arsenault [Fri, 17 Mar 2023 10:48:51 +0000 (06:48 -0400)]
Attributor: Add isAtFixpoint part of nofpclass handling

19 months agoAttributor: Start looking at uses when inferring nofpclass
Matt Arsenault [Fri, 3 Mar 2023 01:04:22 +0000 (21:04 -0400)]
Attributor: Start looking at uses when inferring nofpclass

Pretty much just copy pasted from noundef handling

19 months agoAttributor: Add baseline tests for nofpclass
Matt Arsenault [Fri, 17 Mar 2023 10:46:37 +0000 (06:46 -0400)]
Attributor: Add baseline tests for nofpclass

Guess at suggestions from D145278

19 months ago[clangd] Move standard options adaptor to CommandMangler
Dmitry Polukhin [Thu, 16 Feb 2023 13:06:53 +0000 (05:06 -0800)]
[clangd] Move standard options adaptor to CommandMangler

There is a discrepancy between how clangd processes CDB loaded from
JSON file on disk and pushed via LSP. Thus the same CDB pushed via
LSP protocol may not work as expected. Some difference between these two
paths is expected but we still need to insert driver mode and target from
binary name and expand response files.

Test Plan: check-clang-tools

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

19 months ago[clangd] Refine logic on $0 in completion snippets
Younan Zhang [Tue, 14 Mar 2023 05:15:34 +0000 (13:15 +0800)]
[clangd] Refine logic on $0 in completion snippets

We have a workaround from D128621 that makes $0 no longer being
a placeholder to conform a vscode feature. However, we have to
refine the logic as it may suppress the last parameter placeholder
for constructor of base class because not all patterns of completion
are compound statements.

This fixes clangd/clangd#1479

Reviewed By: nridge

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

19 months ago[flang][hlfir] lower hlfir.matmul_transpose to runtime call
Tom Eccles [Fri, 17 Mar 2023 09:26:45 +0000 (09:26 +0000)]
[flang][hlfir] lower hlfir.matmul_transpose to runtime call

Depends on D145960

Reviewed By: jeanPerier

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

19 months ago[flang] add fused matmul-transpose to the runtime
Tom Eccles [Fri, 17 Mar 2023 09:26:39 +0000 (09:26 +0000)]
[flang] add fused matmul-transpose to the runtime

This fused operation should run a lot faster than first transposing the
lhs array and then multiplying the matrices separately.

Based on flang/runtime/matmul.cpp

Depends on D145959

Reviewed By: klausler

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

19 months ago[flang][hlfir] add matmul canonicalizer
Tom Eccles [Fri, 17 Mar 2023 09:26:33 +0000 (09:26 +0000)]
[flang][hlfir] add matmul canonicalizer

hlfir.matmul_transpose will be lowered to a new runtime call.

A canonicalizer was chosen because
  - Alternative: a new pass for rewriting chained intrinsics - this
    would add a lot of unnecessary boilerplate.
  - Alternative: including this in the HLFIR Intrinsic Lowering pass -
    I wanted to separate these two concerns: not adding a second purpose
    complicating the intrinsic lowering pass.

With this change, the MLIR built-in canonicalization pass should be run
before the HLFIR Intrinsic Lowering pass.

Depends on D145504, D145957

Reviewed By: clementval, vzakhari

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

19 months ago[flang][hlfir] add hlfir.matmul_transpose operation
Tom Eccles [Fri, 17 Mar 2023 09:26:27 +0000 (09:26 +0000)]
[flang][hlfir] add hlfir.matmul_transpose operation

This operation will be used to transform MATMUL(TRANSPOSE(a), b). The
transformation will go in the following stages:
        1. Lowering to hlfir.transpose and hlfir.matmul
        2. Canonicalise to hlfir.matmul_transpose
        3. hlfir.matmul_transpose will be lowered to FIR as a new runtime
          library call

Step 2 (and this operation) are included for consistency with the other
hlfir intrinsic operations and to avoid mixing concerns in the intrinsic
lowering pass.

In step 3, a new runtime library call is used because this operation is
most easily implemented in one go (the transposed indexing actually
makes the indexing simpler than for a normal matrix multiplication). In
the long run, it is intended that HLFIR will allow the same buffer
to be shared between different runtime calls without temporary
allocations, but in this specific case we can do even better than that
with a dedicated implementation.

This should speed up galgel from SPEC2000 (but this hadn't been tested
yet). The optimization was implemented in Classic Flang.

Reviewed By: vzakhari

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

19 months ago[flang][hlfir] add a test chaining intrinsics
Tom Eccles [Fri, 17 Mar 2023 09:26:09 +0000 (09:26 +0000)]
[flang][hlfir] add a test chaining intrinsics

This test checks all of the parts of intrinsic lowering work together,
and makes sure that we can pass the hlfir.expr result of one intrinsic
as an argument to another.

Depends on D145503

Reviewed By: jeanPerier

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

19 months ago[flang][hlfir] clean up intrinsic arg extended values
Tom Eccles [Fri, 17 Mar 2023 09:26:02 +0000 (09:26 +0000)]
[flang][hlfir] clean up intrinsic arg extended values

Depends on D145502

Reviewed By: jeanPerier

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

19 months ago[flang][hlfir] move intrinsic lowering out of BufferizeHLFIR
Tom Eccles [Fri, 17 Mar 2023 09:25:52 +0000 (09:25 +0000)]
[flang][hlfir] move intrinsic lowering out of BufferizeHLFIR

This move is useful for a few reasons:
  - It is easier to see what the intrinsic lowering is doing when the
    operations it creates are not immediately lowered
  - When lowering a HLFIR intrinsic generates an operation which needs
    to be lowered by another pattern matcher in the same pass, MLIR will
    run that other substitution before validating and finalizing the
    original changes. This means that the erasure of operations is not
    yet visible to subsequent matchers, which hugely complicates
    transformations (in this case, hlfir.exprs cannot be rewritten
    because they are still used by the now-erased HLFIR intrinsic op.

Reviewed By: jeanPerier

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

19 months ago[OpenMP] [OMPT] [8/8] Added lit tests for OMPT target callbacks
Dhruva Chakrabarti [Fri, 17 Mar 2023 08:55:27 +0000 (09:55 +0100)]
[OpenMP] [OMPT] [8/8] Added lit tests for OMPT target callbacks

Added a new target ompt mode that depends on libomptarget OMPT support.
Added tests that verify callbacks for target regions, kernel launch,
and data transfer operations. All of them should pass on amdgpu using
make check-libomptarget.

Reviewed By: jplehr

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

19 months ago[SCEV] Recognize vscale intrinsics
Nikita Popov [Thu, 16 Mar 2023 10:27:25 +0000 (11:27 +0100)]
[SCEV] Recognize vscale intrinsics

Now that SCEV has a dedicated vscale node type, we should also map
vscale intrinsics to it. To make sure this does not regress ranges
(which were KnownBits based previously), add support for vscale to
getRangeRef() as well.

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

19 months ago[ValueTracking] Support vscale in computeConstantRange()
Nikita Popov [Thu, 16 Mar 2023 11:42:59 +0000 (12:42 +0100)]
[ValueTracking] Support vscale in computeConstantRange()

Add support for vscale in computeConstantRange(), based on
vscale_range attributes. This allows simplifying based on the
precise range, rather than a KnownBits approximation (which will
be off by a factor of two for the usual case of a power of two
upper bound).

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

19 months ago[PassBuilder] Support O0 in default pipelines
Nikita Popov [Thu, 16 Mar 2023 08:57:44 +0000 (09:57 +0100)]
[PassBuilder] Support O0 in default pipelines

The default and pre-link pipeline builders currently require you to
call a separate method for optimization level O0, even though they
have perfectly well-defined O0 optimization pipelines.

Accept O0 optimization level and call buildO0DefaultPipeline()
internally, so all consumers don't need to repeat this.

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

19 months ago[Analysis] Make order of analysis executions more stable
Bjorn Pettersson [Thu, 16 Mar 2023 18:48:06 +0000 (19:48 +0100)]
[Analysis] Make order of analysis executions more stable

When debugging and using debug-pass-manager (e.g. in regression tests)
we prefer a consistent order in which analysis passes are executed.
But when for example doing

  return MyClass(AM.getResult<LoopAnalysis>(F),
                 AM.getResult<DominatorTreeAnalysis>(F));

then the order in which LoopAnalysis and DominatorTreeAnalysis isn't
guaranteed, and might for example depend on which compiler that is
used when building LLVM.

I've not scanned the full source tree, but this fixes some occurances
of the above pattern found in lib/Analysis.

This problem was discussed briefly in review for D146206.

19 months ago[LAA] Fix transitive analysis invalidation bug by implementing LoopAccessInfoManager...
Bjorn Pettersson [Thu, 16 Mar 2023 01:00:47 +0000 (02:00 +0100)]
[LAA] Fix transitive analysis invalidation bug by implementing LoopAccessInfoManager::invalidate

The default invalidate method for analysis results is just looking
at the preserved state of the pass itself. It does not consider if
the analysis has an internal state that depend on other analyses.
Thus, we need to implement LoopAccessInfoManager::invalidate in order
to catch if LoopAccessAnalysis needs to be invalidated due to
transitive analyses such as AAManager is being invalidated. Otherwise
we might end up having references to an AAManager that is stale.

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

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

19 months ago[test][MemDep] Correct the 'NOT' checks in the invalidation.ll test case. NFC
Bjorn Pettersson [Thu, 16 Mar 2023 00:57:33 +0000 (01:57 +0100)]
[test][MemDep] Correct the 'NOT' checks in the invalidation.ll test case. NFC

The MemoryDependenceAnalysis/invalidation.ll test case was using
  ; CHECK-NOT-AA-INVALIDATE:
but I think the intention was to use
  ; CHECK-AA-INVALIDATE-NOT:

Simply changing the checks like that would make the test fail.

The old statement that AA being stateless would result in nothing
to invalidate when doing invalidate<aa> is not true afaict.
It would be different if for example doing invalidate<basic-aa>, then
the AAManager isn't invalidated (and then neither memdep would be
invalidated). But when the AAManager itself is invalidated then we
should expect to find both "Invalidating analysis: AAManager" and
"Invalidating analysis: MemoryDependenceAnalysis" in the output.

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

19 months ago[libunwind][AArch64] Unbreak building with GNU assembler
Xi Ruoyao [Fri, 17 Mar 2023 08:27:41 +0000 (09:27 +0100)]
[libunwind][AArch64] Unbreak building with GNU assembler

GNU assembler mandates armv8.5-a for memtag instructions. Maybe
we should remove this restriction in GNU assembler, but let's work
around it for current GNU Binutils releases.

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

19 months agoMake globals used for array initialization codegen constant
Hans Wennborg [Thu, 16 Mar 2023 10:23:31 +0000 (11:23 +0100)]
Make globals used for array initialization codegen constant

As pointed out in D133835 these globals will never be written to
(they're only used for trivially copyable types), so they can always be
constant.

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

19 months ago[NFC] [C++20] [Modules] Tests that the duplicated declarations in GMF
Chuanqi Xu [Fri, 17 Mar 2023 07:53:24 +0000 (15:53 +0800)]
[NFC] [C++20] [Modules] Tests that the duplicated declarations in GMF
won't get generated again

As the test shows, we don't want to see the specialized function bodies
if it is already contained in the imported modules. So we can save a lot
of compiling time then.

19 months ago[Target][RISCV] Update SubtargetFeature definition for RV32/RV64 (NFCI).
Francesco Petrogalli [Wed, 15 Mar 2023 12:09:03 +0000 (13:09 +0100)]
[Target][RISCV] Update SubtargetFeature definition for RV32/RV64  (NFCI).

This is done for consistency with other Predicate/Subtargetfeature
pairs, where the second parameter of the SubtargetFeature correspond
to the NAME of the def of the Predicate associated to the
SubtargetFeature.

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

19 months ago[Tools] Changed the number printing format for sorting
dbakunevich [Tue, 7 Mar 2023 10:34:00 +0000 (17:34 +0700)]
[Tools] Changed the number printing format for sorting

As part of this patch, I added the ability to add leading zeros.
This is necessary so that the generated files are sorted in ascending order.

Reviewed By: yrouban

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