platform/upstream/llvm.git
17 months ago[WebAssembly] Initial support for reference type externref in clang
Paulo Matos [Sat, 18 Feb 2023 02:38:58 +0000 (18:38 -0800)]
[WebAssembly] Initial support for reference type externref in clang

This patch introduces a new type __externref_t that denotes a WebAssembly opaque
reference type. It also implements builtin __builtin_wasm_ref_null_extern(),
that returns a null value of __externref_t. This lays the ground work
for further builtins and reference types.

Reviewed By: aaron.ballman

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

17 months ago[OpenMP] Make isDone lightweight without calling synchronize
Ye Luo [Sat, 18 Feb 2023 01:55:40 +0000 (19:55 -0600)]
[OpenMP] Make isDone lightweight without calling synchronize

~TaskAsyncInfoWrapperTy() calls isDone. With synchronize inside isDone, we need to handle the error return from synchronize in the destructor.
The consumers of TaskAsyncInfoWrapperTy, targetDataMapper and targetKernel, both call AsyncInfo.synchronize() before exiting.
For this reason in ~TaskAsyncInfoWrapperTy(), calling synchronize() via isDone() is redundant.
This patch removes synchronize() call inside isDone() and makes it a lightweight check.
__tgt_target_nowait_query needs to call synchronize() before checking isDone().

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

17 months agoIROutliner: cast instead of dyn_cast and assert
Matt Arsenault [Mon, 26 Dec 2022 17:14:36 +0000 (12:14 -0500)]
IROutliner: cast instead of dyn_cast and assert

17 months agoCodeExtractor: Fix creating addrspacecasts for lifetime markers
Matt Arsenault [Thu, 5 Jan 2023 16:13:44 +0000 (11:13 -0500)]
CodeExtractor: Fix creating addrspacecasts for lifetime markers

Also stop caring about typed pointers.

17 months agoSimplify with hasFeature. NFC
Fangrui Song [Sat, 18 Feb 2023 02:22:24 +0000 (18:22 -0800)]
Simplify with hasFeature. NFC

17 months ago[flang] Adding fir::getSymbolAttrName attribute to the function corresponding to...
Renaud-K [Fri, 17 Feb 2023 20:44:33 +0000 (12:44 -0800)]
[flang] Adding fir::getSymbolAttrName attribute to the function corresponding to the main subprogram.
This is because the source name cannot be deconstructed from _QQmain

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

17 months ago[RISCV] Add missing plumbing and tests for zfa
Philip Reames [Sat, 18 Feb 2023 00:25:01 +0000 (16:25 -0800)]
[RISCV] Add missing plumbing and tests for zfa

Experimental support for the zfa extension was recently added in https://reviews.llvm.org/D141984. A couple of the normal test changes and clang plumbing got missed in that change. This commit updates the usual suspects.

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

17 months ago[lldb] Make persisting result variables configurable
Dave Lee [Thu, 16 Feb 2023 23:39:09 +0000 (15:39 -0800)]
[lldb] Make persisting result variables configurable

Context: The `expression` command uses artificial variables to store the expression
result. This result variable is unconditionally kept around after the expression command
has completed. These variables are known as persistent results. These are the variables
`$0`, `$1`, etc, that are displayed when running `p` or `expression`.

This change allows users to control whether result variables are persisted, by
introducing a `--persistent-result` flag.

This change keeps the current default behavior, persistent results are created by
default. This change gives users the ability to opt-out by re-aliasing `p`. For example:

```
command unalias p
command alias p expression --persistent-result false --
```

For consistency, this flag is also adopted by `dwim-print`. Of note, if asked,
`dwim-print` will create a persistent result even for frame variables.

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

17 months ago[lldb] Add expression command options in dwim-print
Dave Lee [Wed, 15 Feb 2023 16:23:57 +0000 (08:23 -0800)]
[lldb] Add expression command options in dwim-print

Adopt `expression`'s options in `dwim-print`.

This is primarily added to support the `--language`/`-l` flag.

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

17 months ago[gn build] Port 07e3ca238e68
LLVM GN Syncbot [Sat, 18 Feb 2023 00:29:10 +0000 (00:29 +0000)]
[gn build] Port 07e3ca238e68

17 months agoRevert "[TextAPI] Implement TBDv5 Reader"
Cyndy Ishida [Sat, 18 Feb 2023 00:25:33 +0000 (16:25 -0800)]
Revert "[TextAPI] Implement TBDv5 Reader"

This reverts commit b861b1225380175a5a724e2a677754f5f74e5b0d.
This reverts commit 4be17641b05df1e63fa8e069af92676f1246eb83.

This patch wont build on some compilers on buildbot.

17 months ago[TextAPI] wrap returned Errors in std::move
Cyndy Ishida [Sat, 18 Feb 2023 00:15:12 +0000 (16:15 -0800)]
[TextAPI] wrap returned Errors in std::move

17 months ago[gn build] Port b861b1225380
LLVM GN Syncbot [Sat, 18 Feb 2023 00:06:09 +0000 (00:06 +0000)]
[gn build] Port b861b1225380

17 months ago[TextAPI] Implement TBDv5 Reader
Cyndy Ishida [Fri, 17 Feb 2023 23:58:04 +0000 (15:58 -0800)]
[TextAPI] Implement TBDv5 Reader

    [TextAPI] Implement TBDv5 Reader

    Introduce initial reader for TBDv5 which is in JSON. This captures all
    the currently understood fields within the internal structure
    `InterfaceFile`.

    New fields & follow up tests will be followed up in future PRs.

Reviewed By: pete

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

17 months ago[GlobalISel] Combine out-of-range shifts to undef.
Amara Emerson [Fri, 17 Feb 2023 22:35:22 +0000 (14:35 -0800)]
[GlobalISel] Combine out-of-range shifts to undef.

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

17 months ago[Clang] Fix __VA_OPT__ implementation so that it treats the concatenation of a non...
Shafik Yaghmour [Fri, 17 Feb 2023 22:56:02 +0000 (14:56 -0800)]
[Clang] Fix __VA_OPT__ implementation so that it treats the concatenation of a non-placemaker token and placemaker token as a non-placemaker token

Currently the implementation of __VA_OPT__ will treat the concatenation of a
non-placemaker token and placemaker token as a placemaker token which is not
correct. This will fix the implementation and treat the result as a
non-placemaker token.

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

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

17 months ago[RISCV] Use MCSubtargetInfo::hasFeature where possible. NFC
Craig Topper [Fri, 17 Feb 2023 22:36:48 +0000 (14:36 -0800)]
[RISCV] Use MCSubtargetInfo::hasFeature where possible. NFC

Rather than using operator[] on getFeatureBits we can use
hasFeature to shorten the code.

Reviewed By: MaskRay

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

17 months ago[AArch64] Simplify with MCSubtargetInfo::hasFeature. NFC
Fangrui Song [Fri, 17 Feb 2023 22:29:21 +0000 (14:29 -0800)]
[AArch64] Simplify with MCSubtargetInfo::hasFeature. NFC

17 months agoRevert "[Fuchsia] Enable llvm-driver build"
Alex Brachet [Fri, 17 Feb 2023 21:29:14 +0000 (21:29 +0000)]
Revert "[Fuchsia] Enable llvm-driver build"

This reverts commit 4eadd19cc423b860f7ce0217000276da769b7809.

Doesn't work on macos. I'll investigate more

17 months ago[libc++][NFC] Remove TODOs that are already done
Nikolas Klauser [Fri, 17 Feb 2023 21:17:45 +0000 (22:17 +0100)]
[libc++][NFC] Remove TODOs that are already done

17 months ago[llvm-cov] Create syntax to pass source w/o binary.
Daniel Thornburgh [Wed, 15 Feb 2023 23:27:21 +0000 (15:27 -0800)]
[llvm-cov] Create syntax to pass source w/o binary.

Since binary ID lookup makes CLI object arguments optional, it should be
possible to pass a list of source files without a binary. Unfortunately,
the current syntax will always interpret the first source file as a
binary. This change adds a `-sources` option to cause all later
positional arguments to be considered sources.

Reviewed By: gulfem

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

17 months ago[Fuchsia] Enable llvm-driver build
Alex Brachet [Fri, 17 Feb 2023 21:02:18 +0000 (21:02 +0000)]
[Fuchsia] Enable llvm-driver build

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

17 months ago[libc++][NFC] Replace _VSTD and _LIBCPP_INLINE_VISIBILITY in <__atomic/*>
Nikolas Klauser [Fri, 17 Feb 2023 12:00:21 +0000 (13:00 +0100)]
[libc++][NFC] Replace _VSTD and _LIBCPP_INLINE_VISIBILITY in <__atomic/*>

Reviewed By: Mordante, #libc

Spies: libcxx-commits

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

17 months ago[RISCV] Select signed and unsigned bitfield extracts for XTHeadBb
Philipp Tomsich [Fri, 17 Feb 2023 20:11:51 +0000 (21:11 +0100)]
[RISCV] Select signed and unsigned bitfield extracts for XTHeadBb

The XTHeadBb extension hab both signed and unsigned bitfield
extraction instructions (TH.EXT and TH.EXTU, respectively) which have
previously only been supported for sign extension on byte, halfword,
and word-boundaries.

This adds the infrastructure to use TH.EXT and TH.EXTU for arbitrary
bitfield extraction.

Reviewed By: craig.topper

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

17 months ago[lldb] StructuredData should not truncate uint64_t values
Alex Langford [Fri, 17 Feb 2023 02:17:59 +0000 (18:17 -0800)]
[lldb] StructuredData should not truncate uint64_t values

In json::Value, getAsInteger returns an optional<int64_t> and getAsNumber
returns an optional<double>. If a value is larger than what an int64_t
can hold but smaller than what a uint64_t can hold, the getAsInteger
function will fail but the getAsNumber will succeed. However, the value
shouldn't be interpreted as a double.

rdar://105556974

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

17 months ago[libc++][format] Addresses LWG3810.
Mark de Wever [Fri, 17 Feb 2023 17:10:14 +0000 (18:10 +0100)]
[libc++][format] Addresses LWG3810.

  LWG3810 CTAD for std::basic_format_args

Reviewed By: #libc, philnik

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

17 months ago[NVPTX] Use by default 'sm_60' architecture when expanding %ptxas-verify macro.
Pavel Kopyl [Fri, 13 Jan 2023 18:02:49 +0000 (19:02 +0100)]
[NVPTX] Use by default 'sm_60' architecture when expanding %ptxas-verify macro.

Also get rid of explicitly specified '-march' values for old architectures.
This simplifies %ptxas-verify statements.
After the change, we can potentially miss cases where a new functionality
is added to the architecture without appropriate checks in the
backend. On the other hand, this is mostly true for old architectures
that have been thoroughly tested.

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

17 months ago[libc++] Mark a test relying on `typeid` as unsupported without RTTI.
Konstantin Varlamov [Fri, 17 Feb 2023 19:20:29 +0000 (11:20 -0800)]
[libc++] Mark a test relying on `typeid` as unsupported without RTTI.

17 months ago[libc] Add basic fuzz target for the printf parser
Michael Jones [Fri, 10 Feb 2023 23:00:32 +0000 (15:00 -0800)]
[libc] Add basic fuzz target for the printf parser

The goal is to fuzz the entirety of printf, but the plan is to do it in
pieces for simplicity. This test fuzzes just the parser, while later
tests will fuzz the converters. This also adds a mock version of the
arg_list class.

Reviewed By: sivachandra

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

17 months ago[libc] add mock arg list
Michael Jones [Thu, 16 Feb 2023 00:03:04 +0000 (16:03 -0800)]
[libc] add mock arg list

For testing purposes we need to be able to mock out the ArgList class.
This patch adds a mock version of that class as well as a flag to enable
it.

Reviewed By: sivachandra

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

17 months ago[mlir][tensor] Do not use affine ops on non-perfect-tiling unpack cases.
Hanhan Wang [Thu, 16 Feb 2023 01:36:21 +0000 (17:36 -0800)]
[mlir][tensor] Do not use affine ops on non-perfect-tiling unpack cases.

Do not create an Affine ops for expanded size because the affine op is
too complicated which would hit an assertion in affine ops
simplification.

Reviewed By: mravishankar

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

17 months ago[RISCV] For rv32, accept constants like 0xfffff800 as a valid simm12.
Craig Topper [Fri, 17 Feb 2023 18:53:44 +0000 (10:53 -0800)]
[RISCV] For rv32, accept constants like 0xfffff800 as a valid simm12.

Internally we store constants in int64_t after parsing, but this is
kind of an implementation detail. If we only supported rv32, we might
have chosen int32_t.

For rv32, I think it makes sense to accept the constants that we
would accept if int32_t was the internal type. In fact we already
do this for the `li` alias. This patch extends this to sign
extended constants for other instructions.

This matches the GNU assembler. The difference between LLVM and gcc
was previously noted here. https://github.com/riscv-non-isa/riscv-asm-manual/pull/71

Reviewed By: reames

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

17 months agoRevert "[RISCV] Add performMULcombine to perform strength-reduction"
Philipp Tomsich [Fri, 17 Feb 2023 18:46:13 +0000 (19:46 +0100)]
Revert "[RISCV] Add performMULcombine to perform strength-reduction"

This reverts commit 20cc23c708f04ca3fbc4289a68302a4b684ce448.

17 months agoRevert "[RISCV] Add vendor-defined XTheadMemPair (two-GPR Memory Operations) extension"
Philipp Tomsich [Fri, 17 Feb 2023 18:45:55 +0000 (19:45 +0100)]
Revert "[RISCV] Add vendor-defined XTheadMemPair (two-GPR Memory Operations) extension"

This reverts commit d2918544a7fc4b5443879fe12f32a712e6dfe325.

17 months ago[RISCV] xtheadmac: fix commutativity issue for the in/out register
Manolis Tsamis [Fri, 17 Feb 2023 18:32:07 +0000 (19:32 +0100)]
[RISCV] xtheadmac: fix commutativity issue for the in/out register

The instructions in the XTHeadMac extension (multiply accumulate
instructions) were marked as commutative but because the destination
register was also an input (accumulate) register and was connected to
the destination register with a register allocator constraint, all
three operands (instead of two) were incorrectly considered
commutative. To fix that an appropriate fixCommutedOpIndices call was
added for these instructions in findCommutedOpIndices

New test functions have been added to test the correct behaviour in
xtheadmac.ll.

Reviewed By: craig.topper

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

17 months ago[RISCV] Add performMULcombine to perform strength-reduction
Philipp Tomsich [Fri, 3 Feb 2023 21:03:07 +0000 (22:03 +0100)]
[RISCV] Add performMULcombine to perform strength-reduction

The RISC-V backend thus far does not provide strength-reduction, which
causes a long (but not complete) list of 3-instruction patterns listed
to utilize the shift-and-add instruction from Zba and XTHeadBa in
strength-reduction.

This adds the logic to perform strength-reduction through the DAG
combine for ISD::MUL.  Initially, we wire this up for XTheadBa only,
until this has had some time to settle and get real-world test
exposure.

The following strength-reductions strategies are currently supported:
  - XTheadBa
    - C = (n + 1)           // th.addsl
    - C = (n + 1)k          // th.addsl, slli
    - C = (n + 1)(m + 1)    // th.addsl, th.addsl
    - C = (n + 1)(m + 1)k   // th.addsl, th.addsl, slli
    - C = ((n + 1)m + 1)    // th.addsl, th.addsl
    - C = ((n + 1)m + 1)k   // th.addslm th.addsl, slli
  - base ISA
    - C being 2 set-bits    // slli, slli, add
       (possibly slli, th.addsl)

Even though the slli+slli+add sequence would we supported without
XTheadBa, this currently is gated to avoid having to update a large
number of test cases (i.e., anything that has a multiplication with a
constant where only 2 bits are set) in this commit.

With the strength reduction now being performed in performMUL combine,
we drop the (now redundant) patterns from RISCVInstrInfoXTHead.td.

Depends on D143029

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

17 months ago[RISCV] Add vendor-defined XTheadMemPair (two-GPR Memory Operations) extension
Manolis Tsamis [Mon, 13 Feb 2023 13:07:45 +0000 (14:07 +0100)]
[RISCV] Add vendor-defined XTheadMemPair (two-GPR Memory Operations) extension

The vendor-defined XTHeadMemPair (no comparable standard extension exists
at the time of writing) extension adds two-GPR load/store pair instructions.

It is supported by the C9xx cores (e.g., found in the wild in the
Allwinner D1) by Alibaba T-Head.

The current (as of this commit) public documentation for this
extension is available at:
  https://github.com/T-head-Semi/thead-extension-spec/releases/download/2.2.2/xthead-2023-01-30-2.2.2.pdf

Support for these instructions has already landed in GNU Binutils:
  https://sourceware.org/git/?p=binutils-gdb.git;a=commit;h=6e17ae625570ff8f3c12c8765b8d45d4db8694bd

Depends on D143847

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

17 months ago[libc++] Add missing include in <__atomic/cxx_atomic_impl.h>
Nikolas Klauser [Fri, 17 Feb 2023 18:33:16 +0000 (19:33 +0100)]
[libc++] Add missing include in <__atomic/cxx_atomic_impl.h>

17 months ago[RISCV][CodeGen] Add codegen patterns for experimental zfa extension (try 2)
Jun Sha (Joshua) [Fri, 17 Feb 2023 17:36:18 +0000 (09:36 -0800)]
[RISCV][CodeGen] Add codegen patterns for experimental zfa extension (try 2)

Recommit by preames with commit message, various style cleanups, and unaddressed review comments corrected.

This patch implements experimental codegen support for the RISCV Zfa extension as specified here: https://github.com/riscv/riscv-isa-manual/releases/download/draft-20221119-5234c63/riscv-spec.pdf, Ch. 25. This extension has not been ratified.

This change does not include support for FLI (upcoming in a follow up change) or FCVTMOD (not relevant for C/C++).

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

17 months ago[IR] Fix a warning
Kazu Hirata [Fri, 17 Feb 2023 18:21:10 +0000 (10:21 -0800)]
[IR] Fix a warning

This patch fixes:

  llvm/lib/IR/Instruction.cpp:141:20: warning: unused variable ‘CB’ [-Wunused-variable]

17 months ago[mlir] Reintroduce API for creating operations with a DictionaryAttr
Jeff Niu [Thu, 16 Feb 2023 18:27:10 +0000 (10:27 -0800)]
[mlir] Reintroduce API for creating operations with a DictionaryAttr

This patch reintroduces an API to create operations with a pre-existing
DictionaryAttr. This API does not populate the attributes with any
default attributes the operation may have, like the API that takes a
NamedAttrList does. NamedAttrList is effective at not re-hashing the
attributes if no default attributes were added, but this new API speeds
up clone-heavy workloads slightly (~5%).

Reviewed By: rriddle

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

17 months ago[ADT] Fix tests for `StringMap::at` and `DenseMap::at`
Ryan Guo [Fri, 17 Feb 2023 17:07:35 +0000 (09:07 -0800)]
[ADT] Fix tests for `StringMap::at` and `DenseMap::at`

These methods won't assert for release build.

17 months ago[RISCV] Improve isInterleaveShuffle to handle interleaving the high half and low...
Craig Topper [Fri, 17 Feb 2023 18:00:40 +0000 (10:00 -0800)]
[RISCV] Improve isInterleaveShuffle to handle interleaving the high half and low half of the same source.

This is needed to support the new interleave intrinsics from D141924 for
fixed vectors.

I've reworked the core loop to operate in terms of half of a source. Making 4
possible half sources. The first element of the half is used to indicate which
source using the same numbering as the shuffle where the second source elements
are numbered after the first source.

I've added restrictions to only match the first half of two vectors or the
first and second half of a single vector. This was done to prevent regressions
on the cases we have coverage for. I saw cases where generic DAG combine split
a single interleave into 2 smaller interleaves a concat. We can revisit in the
future.

Reviewed By: reames

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

17 months ago[ELF][llvm-objcopy] Reject duplicate SHT_SYMTAB sections
Moshe Berman [Fri, 17 Feb 2023 17:18:14 +0000 (17:18 +0000)]
[ELF][llvm-objcopy] Reject duplicate SHT_SYMTAB sections

The gABI prohibits multiple SH_SYMTAB sections. As a result,
llvm-objcopy was crashing in SymbolTableSection::removeSymbols(). This
patch fixes the issue by emitting an error if multiple SH_SYMTAB
sections are encountered when building an ELF object.

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

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

17 months agoReland [gn build] Support linux/win compiler-rt cross compilation
Arthur Eubanks [Wed, 8 Feb 2023 02:11:35 +0000 (18:11 -0800)]
Reland [gn build] Support linux/win compiler-rt cross compilation

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

17 months agoRevert "[gn build] Support linux/win compiler-rt cross compilation"
Arthur Eubanks [Fri, 17 Feb 2023 17:56:51 +0000 (09:56 -0800)]
Revert "[gn build] Support linux/win compiler-rt cross compilation"

This reverts commit d73eb92cc673acf532b396537d78fe041dc9a9c2.

Breaks win/mac, e.g. http://45.33.8.238/win/75236/step_4.txt

17 months ago[lib++][format] Uses the new exception test macros.
Mark de Wever [Sat, 21 Jan 2023 12:35:30 +0000 (13:35 +0100)]
[lib++][format] Uses the new exception test macros.

Reviewed By: #libc, ldionne

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

17 months ago[RISCV][MC] Add support for experimental zfa extension (FLI instruction not included...
Jun Sha (Joshua) [Fri, 17 Feb 2023 17:02:15 +0000 (09:02 -0800)]
[RISCV][MC] Add support for experimental zfa extension (FLI instruction not included) (try 3)

(Opening comment by preames - submitter, not patch author)

Try 1 was reverted because it had been landed in pieces, none of which had a meaningful commit message.

Try 2 was reverted because of a buildbot failure.  It turns out this was a spurious revert on my (preames) part.  The buildbots were failing, and it was from one of my changes in this sequence, but not the recommit.  I had reverted both of the try 1 commits in a single git push, but in separate *commits*.  Some of the builders decided to build the broken state between the original try 1 commit, and I'd not noticed that.  I'd assumed the breakage was because of the try2 re-commit.  So the revert of the try 2 recommit was spurious.

Original commit message:

This implements experimental support for the RISCV Zfa extension as specified here: https://github.com/riscv/riscv-isa-manual/releases/download/draft-20221119-5234c63/riscv-spec.pdf, Ch. 25. This extension has not been ratified. Once ratified, it'll move out of experimental status.

This change adds assembly support for all instructions except load-immediate instructions (fli.s/fli.d/fli.h).  Assembly support for that instruction and codegen support will follow in separate patches.

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

17 months ago[gn build] Support linux/win compiler-rt cross compilation
Arthur Eubanks [Wed, 8 Feb 2023 02:11:35 +0000 (18:11 -0800)]
[gn build] Support linux/win compiler-rt cross compilation

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

17 months ago[M68k] fix test regression introduced by D140180
Nick Desaulniers [Fri, 17 Feb 2023 17:19:36 +0000 (09:19 -0800)]
[M68k] fix test regression introduced by D140180

I added a new pass, callbrprepare, to the pass pipelines in
commit a3a84c9e2511 ("[llvm] add CallBrPrepare pass to pipelines")
but did not test experimental backends.

17 months ago[libc++] Fixes a flaky test.
Mark de Wever [Sat, 11 Feb 2023 15:45:35 +0000 (16:45 +0100)]
[libc++] Fixes a flaky test.

While investigating the flaky tests on the mac backdeployment targets
it seems the tests are different than suggested in the LWG issue.
That tests "does work", grabs the mutex, marks the task as done, and
finally calls the notifier.
Our test emulated "does work" after the notification, effectively
sleeping with a lock held. This has been fixed.

A second improvement is that the test fails when, due to OS
scheduling, the condition variable is not used in the main thread.

During discussing the approach of the patch with @ldionne, he
noticed the real reason why the test is flaky; the Apple
backdeployment targets use a dylib, which does not contain the
fix. So the test can't be tested on that platform; it only
proves the LWG issue was correct and the Standard contained
a bug.

Reviewed By: ldionne, #libc

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

17 months ago[gn build] Support building x86/64 Android libraries
Arthur Eubanks [Wed, 8 Feb 2023 19:05:38 +0000 (11:05 -0800)]
[gn build] Support building x86/64 Android libraries

Reviewed By: hans

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

17 months agoPort PlaceSafepoints pass to the new pass manager
Jan Dupej [Thu, 16 Feb 2023 20:37:16 +0000 (12:37 -0800)]
Port PlaceSafepoints pass to the new pass manager

This patch ports the PlaceSafepoints pass to the new pass manager as it is used by .NET/Mono. Compatibility with the legacy pass manager is maintained by adding PlaceSafepointsLegacyPass. This pass also depends on PlaceBackedgeSafepointsLegacyPass, which has been kept in the legacy-only variant, since it is apparently used only from PlaceSafepointsPass. It has been renamed, though, to indicate its legacy interface.

Reviewed By: aeubanks

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

17 months ago[flang][runtime] Support DT edit descriptor in result of READ(SIZE=)
Peter Klausler [Fri, 17 Feb 2023 00:30:38 +0000 (16:30 -0800)]
[flang][runtime] Support DT edit descriptor in result of READ(SIZE=)

When a formatted I/O READ statement processes a DT edit descriptor to call a
user-defined I/O subroutine to read a derived type data item, all of the
characters that that subroutine reads via child I/O count as charecters
read by an edit descriptor and should accumulate in the result returned
by a SIZE= item in the original READ statement's control list.

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

17 months ago[libc++][CI] Switches to clang-format-16.
Mark de Wever [Wed, 15 Feb 2023 20:00:06 +0000 (21:00 +0100)]
[libc++][CI] Switches to clang-format-16.

Uses an absolute path to the selected binary.
Updates the formatting of two files to match clang-format-16 style.

Depends on D144126

Reviewed By: #libc, philnik

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

17 months ago[libc++] Improve the format ignorelist generation.
Mark de Wever [Wed, 15 Feb 2023 18:50:55 +0000 (19:50 +0100)]
[libc++] Improve the format ignorelist generation.

Several improvements
- Only add files that we actually want to format.
- Sort according to a fixed locale.

Some drive-by fixes
- Rename a text file, this avoids a filter exception.
- Adds a some missing source files extensions.
- Removes unused extensions hh, hxx, cc, and cxx from clang-format.

Reviewed By: philnik, #libc

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

17 months ago[RISCV] Add preferred function and loop alignment RISCVSubtarget. NFC
Craig Topper [Fri, 17 Feb 2023 16:43:40 +0000 (08:43 -0800)]
[RISCV] Add preferred function and loop alignment RISCVSubtarget. NFC

These seem like properties we will want to adjust based on -mtune.
Move them to subtarget like is done on ARM and AArch64. Don't add
any overrides yet.

Note there's a slight change here. We are now passing Align(1) for
preferred function alignment where we previously passed the minimum
alignment. As far as I could tell, it will be maxed with min when
it used so this should be ok.

Reviewed By: reames

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

17 months ago[libc++][NFC] Rename _LIBCPP_NO_EXCEPTIONS to _LIBCPP_HAS_NO_EXCEPTIONS
Nikolas Klauser [Thu, 2 Feb 2023 10:47:01 +0000 (11:47 +0100)]
[libc++][NFC] Rename _LIBCPP_NO_EXCEPTIONS to _LIBCPP_HAS_NO_EXCEPTIONS

Other macros that disable parts of the library are named `_LIBCPP_HAS_NO_WHATEVER`.

Reviewed By: ldionne, Mordante, #libc

Spies: libcxx-commits, smeenai

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

17 months ago[ADT] Add `at` method (assertive lookup) to DenseMap and StringMap
Ryan Guo [Tue, 14 Feb 2023 04:06:44 +0000 (20:06 -0800)]
[ADT] Add `at` method (assertive lookup) to DenseMap and StringMap

This patch makes it easier for users when they want to use validated
lookup on DenseMap/StringMap as a composable C++ expression. For
instance:

```
// instead of
if (auto val = map.lookup(key))
   return val;
assert("...");

// we can write
return map.at(key);
```

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

17 months ago[clang-tidy] Clarify bugprone-branch-clone diagnostic message
Donát Nagy [Mon, 13 Feb 2023 14:35:24 +0000 (15:35 +0100)]
[clang-tidy] Clarify bugprone-branch-clone diagnostic message

This simple commit inserts "body" into the message "repeated branch _body_ in
conditional chain". This is motivated by feedback from a user who (at first
glance) thought that clang-tidy complained about a repeated branch _condition_.

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

17 months ago[libc][bazel] Export .bzl files for libc/test and libc/test/src/math.
Tue Ly [Fri, 17 Feb 2023 16:02:22 +0000 (11:02 -0500)]
[libc][bazel] Export .bzl files for libc/test and libc/test/src/math.

17 months ago[libc++][test] Adds more generic test macros.
Mark de Wever [Sat, 21 Jan 2023 12:35:30 +0000 (13:35 +0100)]
[libc++][test] Adds more generic test macros.

These macros are intended to replace the macros in rapid-cxx-test.h.

Reviewed By: #libc, ldionne

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

17 months ago[gn build] Port bf0f94a5cf82
LLVM GN Syncbot [Fri, 17 Feb 2023 15:40:33 +0000 (15:40 +0000)]
[gn build] Port bf0f94a5cf82

17 months ago[mlir] add option to multi-buffering
Thomas Raoux [Fri, 17 Feb 2023 15:05:23 +0000 (15:05 +0000)]
[mlir] add option to multi-buffering

Allow user to apply multi-buffering transformation for cases where proving
that there is no loop carried dependency is not trivial. In this case user needs
to ensure that the data are written and read in the same iteration otherwise the
result is incorrect.

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

17 months ago[InstCombine] create a pass options container and add "use-loop-info" argument
Sanjay Patel [Fri, 17 Feb 2023 15:11:40 +0000 (10:11 -0500)]
[InstCombine] create a pass options container and add "use-loop-info" argument

This is a cleanup/modernization patch requested in D144045 to make loop
analysis a proper optional parameter to the pass rather than a
semi-arbitrary value inherited via the pass pipeline.

It's a bit more complicated than the recent patch I started copying from
(D143980) because InstCombine already has an option for MaxIterations
(added with D71145).

I debated just deleting that option, but it was used by a pair of existing
tests, so I put it into a struct (code largely copied from SimplifyCFG's
implementation) to make the code more flexible for future options
enhancements.

I didn't alter the pass manager invocations of InstCombine in this patch
because the patch was already getting big, but that will be a small
follow-up as noted with the TODO comment.

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

17 months ago[SLP]Do not reduce repeated values, use scalar red ops instead.
Alexey Bataev [Fri, 17 Jun 2022 17:15:23 +0000 (10:15 -0700)]
[SLP]Do not reduce repeated values, use scalar red ops instead.

Metric: size..text

                                                     size..text                 results     results0    diff
SingleSource/Regression/C/gcc-c-torture/execute/GCC-C-execute-980605-1.test      445.00      461.00  3.6%
SingleSource/Benchmarks/Adobe-C++/loop_unroll.test                               428477.00   428445.00 -0.0%
External/SPEC/CFP2006/447.dealII/447.dealII.test                                 618849.00   618785.00 -0.0%

For all tests some extra code was optimized, GCC-C-execute has some more
inlining after

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

17 months agoNew SetOperations and unittesting for all SetOperations
Teresa Johnson [Thu, 16 Feb 2023 22:37:07 +0000 (14:37 -0800)]
New SetOperations and unittesting for all SetOperations

New set operations split out of D140908 as suggested, and I have added
unit testing for all set operations.

This adds a set_intersection, which returns the intersection instead of
updating the first set like set_intersect (using a different name
analogous to set_difference vs set_subtract).

Also adds a variant of set_subtract that updates two additional set
arguments to note which members of the subtrahend were removed from
the minuend and which were not.

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

17 months agoTighten up a modules test
Paul Robinson [Thu, 16 Feb 2023 15:20:42 +0000 (07:20 -0800)]
Tighten up a modules test

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

17 months ago[mlir][llvm] Fuse access_group & loop export (NFC)
Christian Ulmann [Fri, 17 Feb 2023 14:31:06 +0000 (15:31 +0100)]
[mlir][llvm] Fuse access_group & loop export (NFC)

This commit moves the access group translation into the
LoopAnnotationTranslation class as these two metadata kinds only appear
together.

Drops the access group cleanup from `ModuleTranslation::forgetMapping`
as this is only used on function regions. Access groups only appear in the
region of a global metadata operation and will thus not be cleaned here.

Analogous to https://reviews.llvm.org/D143577

Reviewed By: gysit

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

17 months ago[SVE] Add intrinsics for floating-point operations that explicitly undefine the resul...
Paul Walker [Fri, 10 Feb 2023 12:25:26 +0000 (12:25 +0000)]
[SVE] Add intrinsics for floating-point operations that explicitly undefine the result for inactive lanes.

This patch is the floating-point equivalent of D141937.

Depends on D143764.

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

17 months ago[mlir][standalone] Extend sample with custom type
Marius Brehler [Fri, 17 Feb 2023 13:51:04 +0000 (14:51 +0100)]
[mlir][standalone] Extend sample with custom type

This extends the standalone example to illustrate how to structure the
files needed to create own types.

Reviewed By: jpienaar

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

17 months ago[clang][CodeGen] Use base subobject type layout for potentially-overlapping fields
Vladislav Dzhidzhoev [Fri, 13 Jan 2023 23:38:10 +0000 (02:38 +0300)]
[clang][CodeGen] Use base subobject type layout for potentially-overlapping fields

RecordLayoutBuilder assumes the size of a potentially-overlapping
class/struct field with non-zero size as the size of the base subobject
type corresponding to the field type.
Make CGRecordLayoutBuilder to acknowledge that in order to avoid incorrect
padding insertion.

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

17 months agoGH60642: Fix ICE when checking a lambda defined in a concept definition
Erich Keane [Thu, 16 Feb 2023 15:50:56 +0000 (07:50 -0800)]
GH60642: Fix ICE when checking a lambda defined in a concept definition

As reported in GH60642, we asserted when there was a lambda defined in a
template arguments inside of a concept, which caused us to not properly
set up the list of instantiation args.  This patch ensures that the
'lambda context decl' correctly falls-through the template argument
instantiation, so that it is available when instantiating the lambda,
and thus, when setting up the lambda instantiation args list.

17 months ago[Clang] Convert some tests to opaque pointers (NFC)
Nikita Popov [Fri, 17 Feb 2023 13:34:05 +0000 (14:34 +0100)]
[Clang] Convert some tests to opaque pointers (NFC)

17 months ago[Clang] Convert some tests to opaque pointers (NFC)
Nikita Popov [Fri, 17 Feb 2023 11:12:07 +0000 (12:12 +0100)]
[Clang] Convert some tests to opaque pointers (NFC)

17 months agoFix Clang sphinx build
Aaron Ballman [Fri, 17 Feb 2023 12:56:52 +0000 (07:56 -0500)]
Fix Clang sphinx build

This addresses issues found in:
https://lab.llvm.org/buildbot/#/builders/92/builds/40269

17 months ago[RISCV][NFC] Add missing immediate operand types.
Dmitry Bushev [Fri, 17 Feb 2023 12:03:40 +0000 (15:03 +0300)]
[RISCV][NFC] Add missing immediate operand types.

Some immediate types in RISCV target description lack operand type field.
This leads them being listed as OPERAND_UNKNOWN in MCOperandInfo. This patch adds this fields.
This is NFC because it does not affect flow of any current tools implementation.

Reviewed By: craig.topper

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

17 months ago[mlir][llvm] Add DINamespace attribute
Christian Ulmann [Fri, 17 Feb 2023 12:09:17 +0000 (13:09 +0100)]
[mlir][llvm] Add DINamespace attribute

This commit introduces the DINamespaceAttr to model LLVM's DINamespace metadata.

Reviewed By: gysit

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

17 months ago[mlir][llvm] Make DI param optional to match LLVM
Christian Ulmann [Fri, 17 Feb 2023 12:04:51 +0000 (13:04 +0100)]
[mlir][llvm] Make DI param optional to match LLVM

This commit makes DIDerivedTypeAttr's baseType parameter optional to ensure imported IR
doesn't break the printer.

Reviewed By: gysit

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

17 months ago[gn build] Port 46db8d822ecd
LLVM GN Syncbot [Fri, 17 Feb 2023 11:44:43 +0000 (11:44 +0000)]
[gn build] Port 46db8d822ecd

17 months ago[libc++] Granularize <atomic>
Nikolas Klauser [Sat, 14 Jan 2023 01:53:52 +0000 (02:53 +0100)]
[libc++] Granularize <atomic>

Reviewed By: Mordante, #libc

Spies: arichardson, libcxx-commits, krytarowski

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

17 months ago[AMDGPU] Simplify widenScalar condition for BigTy for G_(UN)MERGE_VALUES
Jay Foad [Fri, 17 Feb 2023 10:18:38 +0000 (10:18 +0000)]
[AMDGPU] Simplify widenScalar condition for BigTy for G_(UN)MERGE_VALUES

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

17 months ago[Clang] Convert some tests to opaque pointers (NFC)
Nikita Popov [Fri, 17 Feb 2023 10:27:36 +0000 (11:27 +0100)]
[Clang] Convert some tests to opaque pointers (NFC)

17 months ago[analyzer] Remove unjustified assert from EquivalenceClass::simplify
Balazs Benics [Fri, 17 Feb 2023 10:37:02 +0000 (11:37 +0100)]
[analyzer] Remove unjustified assert from EquivalenceClass::simplify

One might think that by merging the equivalence classes (eqclasses) of
`Sym1` and `Sym2` symbols we would end up with a `State` in which the
eqclass of `Sym1` and `Sym2` should now be the same. Surprisingly, it's
not //always// true.

Such an example triggered the assertion enforcing this _unjustified_
invariant in https://github.com/llvm/llvm-project/issues/58677.
```lang=C++
unsigned a, b;
#define assert(cond) if (!(cond)) return

void f(unsigned c) {
    /*(1)*/ assert(c == b);
    /*(2)*/ assert((c | a) != a);
    /*(3)*/ assert(a);
    // a = 0  =>  c | 0 != 0  =>  c != 0  =>  b != 0
}
```

I believe, that this assertion hold for reasonable cases - where both
`MemberSym` and `SimplifiedMemberSym` refer to live symbols.
It can only fail if `SimplifiedMemberSym` refers to an already dead
symbol. See the reasoning at the very end.
In this context, I don't know any way of determining if a symbol is
alive/dead, so I cannot refine the assertion in that way.
So, I'm proposing to drop this unjustified assertion.

---

Let me elaborate on why I think the assertion is wrong in its current
shape.

Here is a quick reminder about equivalence classes in CSA.
We have 4 mappings:
1) `ClassMap`: map, associating `Symbols` with an `EquivalenceClass`.
2) `ClassMembers`: map, associating `EquivalenceClasses` with its
   members - basically an enumeration of the `Symbols` which are known
   to be equal.
3) `ConstraintRange`: map, associating `EquivalenceClasses` with the
   range constraint which should hold for all the members of the
   eqclass.
4) `DisequalityMap`: I'm omitting this, as it's irrelevant for our
   purposes now.

Whenever we encounter/assume that two `SymbolRefs` are equal, we update
the `ClassMap` so that now both `SymbolRefs` are referring to the same
eqclass. This operation is known as `merge` or `union`.
Each eqclass is uniquely identified by the `representative` symbol, but
it could have been just a unique number or anything else - the point
is that an eqclass is identified by something unique.
Initially, all Symbols form - by itself - a trivial eqclass, as there
are no other Symbols to which it is assumed to be equal. A trivial
eqclass has //notionally// exactly one member, the representative symbol.
I'm emphasizing that //notionally// because for such cases we don't store
an entry in the `ClassMap` nor in the `ClassMembers` map, because it
could be deduced.

By `merging` two eqclasses, we essentially do what you would think it
does. An important thing to highlight is that the representative symbol
of the resulting eqclass will be the same as one of the two eqclasses.
This operation should be commutative, so that `merge(eq1,eq2)` and
`merge(eq2,eq1)` should result in the same eqclass - except for the
representative symbol, which is just a unique identifier of the class,
a name if you will. Using the representative symbol of `eq1` or `eq2`
should have no visible effect on the analysis overall.

When merging `eq1` into `eq2`, we take each of the `ClassMembers` of
`eq1` and add them to the `ClassMembers` of `eq2` while we also redirect
all the `Symbol` members of `eq1` to map to the `eq2` eqclass in the
`ClassMap`. This way all members of `eq1` will refer to the correct
eqclass. After these, `eq1` key is unreachable in the `ClassMembers`,
hence we can drop it.

---

Let's get back to the example.
Note that when I refer to symbols `a`, `b`, `c`, I'm referring to the
`SymbolRegionValue{VarRegion{.}}` - the value of that variable.

After `(1)`, we will have a constraint `c == b : [1,1]` and an eqclass
`c,b` with the `c` representative symbol.
After `(2)`, we will have an additional constraint `c|b != a : [1,1]`
with the same eqclass. We will also have disequality info about that
`c|a` is disequal to `a` - and the other way around.
However, after the full-expression, `c` will become dead. This kicks in
the garbage collection, which transforms the state into this:
 - We no longer have any constraints, because only `a` is alive, for
   which we don't have any constraints.
 - We have a single (non-trivial) eqclass with a single element `b` and
   representative symbol `c`. (Dead symbols can be representative
   symbols.)
 - We have the same disequality info as before.

At `(3)` within the false branch, `a` get perfectly constrained to zero.
This kicks in the simplification, so we try to substitute (simplify) the
variable in each SymExpr-tree. In our case, it means that the
`c|a != a : [1,1]` constraint gets re-evaluated as `c|0 != 0 : [1,1]`,
which is `c != 0 : [1,1]`.
Under the hood, it means that we will call `merge(c|a, c)`. where `c` is
the result of `simplifyToSVal(State, MemberSym).getAsSymbol()` inside
`EquivalenceClass::simplify()`.
Note that the result of `simplifyToSVal()` was a dead symbol. We
shouldn't have acquired an already dead symbol. AFAIK, this is the only
way we can get one at this point.
Since `c` is dead, we no longer have a mapping in `ClassMap` for it;
hence when we try to `find()` the eqclass of `c`, it will report that
it's a trivial eqclass with the representative symbol `c`.

After `merge(c|a, c)`, we will have a single (non-trivial) eqclass of
`b, c|a` with the representative symbol `c|a` - because we merged the
eqclass of `c` into the eqclass of `c|a`.

This means that `find(c|a)` will result in the eqclass with the
representative symbol `c|a`. So, we ended up having different eqclasses
for `find(c|a)` and `find(c)` after `merge(c|a, c)`, firing the
assertion.

I believe, that this assertion hold for reasonable cases - where both
`MemberSym` and `SimplifiedMemberSym` refer to live symbols.
`MemberSym` should be live in all cases here, because it is from
`ClassMembers` which is pruned in `removeDeadBindings()` so these must
be alive. In this context, I don't know any way of determining if a
symbol is alive/dead, so I cannot refine the assertion in that way.
So, I'm proposing to drop this unjustified assertion.

I'd like to thank @martong for helping me to conclude the investigation.
It was really difficult to track down.

PS: I mentioned that `merge(eq1, eq2)` should be commutative. We
actually exploit this for merging the smaller eqclass into the bigger
one within `EquivalenceClass::merge()`.
Yea, for some reason, if you swap the operands, 3 tests break (only
failures, no crashes) aside from the test which checks the state dumps.
But I believe, that is a different bug and orthogonal to this one. I
just wanted to mention that.
- `Analysis/solver-sym-simplification-adjustment.c`
- `Analysis/symbol-simplification-fixpoint-iteration-unreachable-code.cpp`
- `Analysis/symbol-simplification-reassume.cpp`

Fixes #58677

Reviewed By: vabridgers

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

17 months ago[libc++] Granularize <bit> includes
Nikolas Klauser [Sun, 8 Jan 2023 14:26:32 +0000 (15:26 +0100)]
[libc++] Granularize <bit> includes

Reviewed By: ldionne, #libc

Spies: libcxx-commits

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

17 months ago[MachineCombiner] Support local strategy for traces
Anton Sidorenko [Tue, 14 Feb 2023 10:32:10 +0000 (13:32 +0300)]
[MachineCombiner] Support local strategy for traces

For in-order cores MachineCombiner makes better decisions when the critical path
is calculated only for the current basic block and does not take into account
other blocks from the trace.

This patch adds a virtual method to TargetInstrInfo to allow each target decide
which strategy to use.

Depends on D140541

Reviewed By: spatel

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

17 months ago[Clang] Convert some tests to opaque pointers (NFC)
Nikita Popov [Fri, 17 Feb 2023 09:01:18 +0000 (10:01 +0100)]
[Clang] Convert some tests to opaque pointers (NFC)

17 months ago[mlir] Add a folder for lbs, ubs, steps of scf.forall.
Alexander Belyaev [Fri, 17 Feb 2023 09:57:44 +0000 (10:57 +0100)]
[mlir] Add a folder for lbs, ubs, steps of scf.forall.

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

17 months agoRevert "[LLD] [COFF] Don't try to detect MSVC installations in mingw mode"
Martin Storsjö [Fri, 17 Feb 2023 09:25:12 +0000 (11:25 +0200)]
Revert "[LLD] [COFF] Don't try to detect MSVC installations in mingw mode"

This reverts commit 389bfbd66d6f78b5fc60e51e620e7f767fc867f0.

This commit broke the compiler-rt/test/profile/Windows/coverage-weak-lld.cpp
testcase. This testcase builds and links in an MSVC environment,
but explicitly passes -lldmingw to the linker, to opt in to
certain mingw-style behaviours regarding weak symbols, since
effb87dfa810a28e763f914fe3e6e984782cc846. This patch broke that
test, which now errored out with these errors:

    lld-link: error: could not open 'libuuid.a': no such file or directory
    lld-link: error: could not open 'libLIBCMT.a': no such file or directory
    lld-link: error: could not open 'libOLDNAMES.a': no such file or directory

17 months ago[mlir][llvm] Verify LLVM module before import
Christian Ulmann [Fri, 17 Feb 2023 08:47:37 +0000 (09:47 +0100)]
[mlir][llvm] Verify LLVM module before import

This commit ensures that the importing of LLVM modules first verifies
that the module is even valid. As many tests did not work with valid
LLVM IR, they were fixed as part of this commit.

Some error messages were only reachable with invalid input IR, thus they
were replaced with a failures.

Reviewed By: gysit

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

17 months ago[JT] Always create BPI/BFI when running in legacy PM
Benjamin Kramer [Fri, 17 Feb 2023 09:09:34 +0000 (10:09 +0100)]
[JT] Always create BPI/BFI when running in legacy PM

This is wasteful, but only affects the legacy pass manager. Otherwise
a1b78fb929fccf96acaa0212cf68fee82298e747 would crash JT when running
with that PM. There are still a few users of the legacy PM out there
that are reluctant to migrate, numba in this case.

No test as we don't test legacy PM anymore.

17 months ago[clang-repl] Support compound statement as a top-level statement.
Vassil Vassilev [Sun, 11 Dec 2022 21:08:30 +0000 (21:08 +0000)]
[clang-repl] Support compound statement as a top-level statement.

This patch teaches our incremental compilation infrastructure to push and pop a
fake function scope making the Parser happy when parsing compound statements as
part of a top-leve statement declaration.

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

17 months ago[mlir][scf] Rename ForeachThreadOp->ForallOp, PerformConcurrentlyOp->InParallelOp.
Alexander Belyaev [Fri, 17 Feb 2023 08:24:33 +0000 (09:24 +0100)]
[mlir][scf] Rename ForeachThreadOp->ForallOp, PerformConcurrentlyOp->InParallelOp.

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

17 months ago[ConstantRange] Handle `Intrinsic::ctlz`
Antonio Frighetto [Fri, 17 Feb 2023 08:50:49 +0000 (09:50 +0100)]
[ConstantRange] Handle `Intrinsic::ctlz`

Introduce ConstantRange support for ctlz intrinsic, including
exhaustive testing. Among other things, LVI may now be able to
propagate information about cltz constant ranges lattice values.

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

17 months ago[Support] [Windows] Don't check file access time in equivalent(file_status, file_status)
R. Voggenauer [Tue, 14 Feb 2023 14:21:06 +0000 (15:21 +0100)]
[Support] [Windows] Don't check file access time in equivalent(file_status, file_status)

The sys::fs::equivalent(file_status, file_status) function is meant to
judge whether two file_status structs denote the same individual file.
On Unix, this is implemented by only comparing the st_dev and st_ino
numbers (from stat), ignoring all other fields.

On Windows, lacking reliable fields corresponding to st_dev and st_ino,
equivalent(file_status, file_status) compares essentially all fields.
However, since 1e39ef331b2b78baec84fdb577d497511cc46bd5
(https://reviews.llvm.org/D18456), file_status also contains the file
access time.

Including the file access time in equivalent(file_status, file_status)
makes it possible to spuriously break. In particular, when invoking
equivalent(Twine, Twine), with two paths, there's a race condition - the
function calls status() on both input paths. Even if the two paths
are the same, the comparison can fail, if the file was accessed
between the two status() calls.

Thus, it seems like the inclusion of the access time in
equivalent(file_status, file_status) was a mistake.

This race condition can cause spurious failures when linking with
LLD/ELF, where LLD uses equivalent() to check whether a file
exists within a specific sysroot, and that sysroot is accessed by other
processes concurrently.

This fixes downstream issue
https://github.com/msys2/MINGW-packages/issues/15695.

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

17 months ago[LLD] [COFF] Don't try to detect MSVC installations in mingw mode
Martin Storsjö [Wed, 15 Feb 2023 10:06:45 +0000 (12:06 +0200)]
[LLD] [COFF] Don't try to detect MSVC installations in mingw mode

In mingw mode, all linker paths are passed explicitly to the linker
by the compiler driver. Don't try to implicitly add linker paths
from the LIB environment variable or by detecting an MSVC
installation directory.

If the /winsysroot command line parameter is explicitly passed to
lld-link while /lldmingw is specified, it could be considered reasonable
to actually include those paths. However, modifying the code to
handle only the /winsysroot case but not the other ones, when the
mingw mode has been enabled, seems like much more code complexity
for a mostly hypothetical case.

Add a test for this when case when using LIB. (The code paths for
trying to detect an MSVC installation aren't really regression tested.)

Also fix an issue in the existing test for "Check that when /winsysroot
is specified, %LIB% is ignored.", where the LIB variable pointed
to a nonexistent directory, so the test would pass even if /winsysroot
wouldn't be specified.

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

17 months ago[Clang] Convert some tests to opaque pointers (NFC)
Nikita Popov [Fri, 17 Feb 2023 08:29:41 +0000 (09:29 +0100)]
[Clang] Convert some tests to opaque pointers (NFC)

17 months ago[mlir][llvm] Add atomic support to the LoadOp.
Tobias Gysi [Fri, 17 Feb 2023 08:20:08 +0000 (09:20 +0100)]
[mlir][llvm] Add atomic support to the LoadOp.

This revision adds atomic support to the LoadOp. It chooses
to print the atomic keywords together with the syncscope and
ordering arguments, which simplifies parsing and printing compared
to the LLVM IR printer that puts the atomic keyword at the beginning.
It uses the ordering attribute to check if the load is atomic.

The revision also implements verifiers to ensure the constraints
that apply to atomic load operations are checked.

Reviewed By: Dinistro

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

17 months ago[Clang] Convert some tests to opaque pointers (NFC)
Nikita Popov [Thu, 16 Feb 2023 16:06:50 +0000 (17:06 +0100)]
[Clang] Convert some tests to opaque pointers (NFC)

17 months ago[AMDGPU] Add cross-project-tests for WMMA builtins
Diana Picus [Thu, 16 Feb 2023 10:10:54 +0000 (11:10 +0100)]
[AMDGPU] Add cross-project-tests for WMMA builtins

Add a few tests to make sure we get the expected instruction for the
WMMA builtins (and generally that our builtins and intrinsics are on the
same page and won't blow up).

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