platform/upstream/llvm.git
2 years agollvm-reduce: Check shouldKeep before trying to reduce operands
Matt Arsenault [Thu, 9 Jun 2022 15:17:09 +0000 (11:17 -0400)]
llvm-reduce: Check shouldKeep before trying to reduce operands

No point doing the more complicated check first.

2 years ago[lldb] Add a log dump command
Jonas Devlieghere [Mon, 27 Jun 2022 17:00:05 +0000 (10:00 -0700)]
[lldb] Add a log dump command

Add a log dump command to dump logs to a file. This only works for
channels that have a log handler associated that supports dumping. For
now that's limited to the circular log handler, but more could be added
in the future.

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

2 years agoRound up zero-sized symbols to 1 byte in `.debug_aranges` (without breaking other...
Patrick Walton [Mon, 27 Jun 2022 17:00:43 +0000 (10:00 -0700)]
Round up zero-sized symbols to 1 byte in `.debug_aranges` (without breaking other logic).

This commit modifies the AsmPrinter to avoid emitting any zero-sized symbols to
the .debug_aranges table, by rounding their size up to 1. Entries with zero
length violate the DWARF 5 spec, which states:

> Each descriptor is a triple consisting of a segment selector, the beginning
> address within that segment of a range of text or data covered by some entry
> owned by the corresponding compilation unit, followed by the non-zero length
> of that range.

In practice, these zero-sized entries produce annoying warnings in lld and
cause GNU binutils to truncate the table when parsing it.

Other parts of LLVM, such as DWARFDebugARanges in the DebugInfo module
(specifically the appendRange method), already avoid emitting zero-sized
symbols to .debug_aranges, but not comprehensively in the AsmPrinter. In fact,
the AsmPrinter does try to avoid emitting such zero-sized symbols when labels
aren't involved, but doesn't when the symbol to emitted is a difference of two
labels; this patch extends that logic to handle the case in which the symbol is
defined via labels.

Furthermore, this patch fixes a bug in which `available_externally` symbols
would cause unpredictable values to be emitted into the `.debug_aranges` table
under certain circumstances. In practice I don't believe that this caused
issues up until now, but the root cause of this bug--an invalid DenseMap
lookup--triggered failures in Chromium when combined with an earlier version of
this patch. Therefore, this patch fixes that bug too.

This is a revised version of diff D126257, which was reverted due to breaking
tests. The now-reverted version of this patch didn't distinguish between
symbols that didn't have their size reported to the DwarfDebug handler and
those that had their size reported to be zero. This new version of the patch
instead restricts the special handling only to the symbols whose size is
definitively known to be zero.

Reviewed By: dblaikie

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

2 years ago[libc++] Add a few missing min/max macro push/pop
Louis Dionne [Mon, 27 Jun 2022 15:37:01 +0000 (11:37 -0400)]
[libc++] Add a few missing min/max macro push/pop

Also, improve the test for nasty macros to define min and max, so this
will be caught in the future.

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

2 years ago[mlir][LLVMIR] Memorize compatible LLVM types
Min-Yih Hsu [Tue, 24 May 2022 22:24:23 +0000 (15:24 -0700)]
[mlir][LLVMIR] Memorize compatible LLVM types

This patch memorize compatible LLVM types in `LLVM::isCompatibleType` in
order to avoid redundant works.

This is especially useful when the size of program is big and there are
multiple occurrences of some deeply nested LLVM struct types, in which
case we can gain quite some speedups with this patch.

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

2 years ago[mlir][LLVMIR] Add support for va_start/copy/end intrinsics
Min-Yih Hsu [Mon, 23 May 2022 20:52:38 +0000 (13:52 -0700)]
[mlir][LLVMIR] Add support for va_start/copy/end intrinsics

This patch adds three new LLVM intrinsic operations: llvm.intr.vastart/copy/end.
And its translation from LLVM IR.

This effectively removes a restriction, imposed by 0126dcf1f0a1, where
non-external functions in LLVM dialect cannot be variadic. At that time
it was not clear how LLVM intrinsics are going to be modeled, which
indirectly affects va_start/copy/end, the core intrinsics used in
variadic functions. But since we have LLVM intrinsics as normal
MLIR operations, it's not a problem anymore.

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

2 years ago[memprof] Return an error for unsupported symbolization.
Snehasish Kumar [Fri, 24 Jun 2022 23:34:18 +0000 (16:34 -0700)]
[memprof] Return an error for unsupported symbolization.

Add a check to detect that the profiled binary was build with position
independent code. Add a test with a pie binary to which can be reused
later when support is added. Also clean up the error messages with
trailing colons.

Reviewed By: tejohnson

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

2 years ago[lldb] [llgs] Skip new vCont test on Windows
Michał Górny [Mon, 27 Jun 2022 16:22:15 +0000 (18:22 +0200)]
[lldb] [llgs] Skip new vCont test on Windows

Sponsored by: The FreeBSD Foundation

2 years ago[llvm-ar] Fix MRI ADDLIB command when used with thin archives
gbreynoo [Mon, 27 Jun 2022 16:10:11 +0000 (17:10 +0100)]
[llvm-ar] Fix MRI ADDLIB command when used with thin archives

We did not properly handle using CREATETHIN in an MRI script and
attempting to use ADDLIB to add the contents of a regular archive. This
fix outputs a meaningful error message in this case and provides some
more testing.

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

2 years agoSilence an "illegal conversion" diagnostic
Aaron Ballman [Mon, 27 Jun 2022 16:02:34 +0000 (12:02 -0400)]
Silence an "illegal conversion" diagnostic

MSVC was issuing "illegal conversion; more than one user-defined
conversion has been implicitly applied" as a warning on this code.
Explicitly calling .str() causes a StringRef to be materialized so
that a second user-defined conversion is not required.

2 years ago[Clang][OpenMP] Claim nowait clause on taskwait
Chi Chun Chen [Mon, 27 Jun 2022 16:02:39 +0000 (11:02 -0500)]
[Clang][OpenMP] Claim nowait clause on taskwait

2 years agoSilence some format specifier warnings
Aaron Ballman [Mon, 27 Jun 2022 15:52:41 +0000 (11:52 -0400)]
Silence some format specifier warnings

This solves a format specifier warning for char32_t being converted to
an unsigned integer type, and multiple format specifier warnings for
size_t being converted to long.

2 years ago[libc++][doc] Fixes a broken table entry.
Mark de Wever [Mon, 27 Jun 2022 15:42:37 +0000 (17:42 +0200)]
[libc++][doc] Fixes a broken table entry.

2 years ago[AMDGPU] Cluster stores as well as loads for GFX11
Jay Foad [Fri, 24 Jun 2022 12:26:50 +0000 (13:26 +0100)]
[AMDGPU] Cluster stores as well as loads for GFX11

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

2 years ago[Driver][test] Add libclang_rt.profile{{.*}}.a tests for NetBSD
Frederic Cambus [Sun, 26 Jun 2022 22:26:22 +0000 (00:26 +0200)]
[Driver][test] Add libclang_rt.profile{{.*}}.a tests for NetBSD

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

2 years agoAdding support for target in_reduction
Ritanya B Bharadwaj [Mon, 27 Jun 2022 15:35:30 +0000 (10:35 -0500)]
Adding support for target in_reduction

Implementing target in_reduction by wrapping target task with host task with in_reduction and if clause. This is in compliance with OpenMP 5.0 section: 2.19.5.6.
So, this

```
  for (int i=0; i<N; i++) {
    res = res+i
  }
```

will become

```

   #pragma omp task in_reduction(+:res) if(0)
   #pragma omp target map(res)
   for (int i=0; i<N; i++) {
     res = res+i
   }
```

Reviewed By: ABataev

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

2 years ago[lldb] [llgs] Support "t" vCont action
Michał Górny [Fri, 3 Jun 2022 18:21:26 +0000 (20:21 +0200)]
[lldb] [llgs] Support "t" vCont action

Implement support for the "t" action that is used to stop a thread.
Normally this action is used only in non-stop mode.  However, there's
no technical reason why it couldn't be also used in all-stop mode,
e.g. to express "resume all threads except ..." (`t:...;c`).

While at it, add a more complete test for vCont correctly resuming
a subset of program's threads.

Sponsored by: The FreeBSD Foundation
Differential Revision: https://reviews.llvm.org/D126983

2 years ago[flang][driver] Use `-O{0|1|2|3}` to define LLVM backend pass pipeline
Andrzej Warzynski [Fri, 17 Jun 2022 13:08:42 +0000 (13:08 +0000)]
[flang][driver] Use `-O{0|1|2|3}` to define LLVM backend pass pipeline

Support for optimisation flags in LLVM Flang was originally added in
https://reviews.llvm.org/D128043. That patch focused on LLVM
middle-end/optimisation pipelines. With this patch, Flang will
additionally configure LLVM backend pass pipelines accordingly. This
behavior is consistent with Clang.

New hook is added to translate compiler optimisation flags (e.g. `-O3`)
into backend optimisation level: `getCGOptLevel`. Identical hooks are
available in Clang and LLVM. In other words, the meaning of these
optimisation flags remains consistent with other sub-projects that use
LLVM backends.

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

2 years ago[mlir][SCF][bufferize] Small simplification and more comments
Matthias Springer [Mon, 27 Jun 2022 15:02:45 +0000 (17:02 +0200)]
[mlir][SCF][bufferize] Small simplification and more comments

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

2 years ago[GlobalOpt] Fix memset handling in global ctor evaluation (PR55859)
Nikita Popov [Fri, 24 Jun 2022 14:02:28 +0000 (16:02 +0200)]
[GlobalOpt] Fix memset handling in global ctor evaluation (PR55859)

The global ctor evaluator currently handles by checking whether the
memset memory is already zero, and skips it in that case. However,
it only actually checks the first byte of the memory being set.

This patch extends the code to check all bytes being set. This is
done byte-by-byte to avoid converting undef values to zeros in
larger reads. However, the handling is still not completely correct,
because there might still be padding bytes (though probably this
doesn't matter much in practice, as I'd expect global variable
padding to be zero-initialized in practice).

Mostly fixes https://github.com/llvm/llvm-project/issues/55859.

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

2 years ago[mlir][complex] complex.arg op to calculate the angle of complex number
Lewuathe [Mon, 27 Jun 2022 12:29:15 +0000 (14:29 +0200)]
[mlir][complex] complex.arg op to calculate the angle of complex number

Add complex.arg op which calculates the angle of complex number. The op name is inspired by the function carg in libm.

See: https://sourceware.org/newlib/libm.html#carg

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

2 years ago[GlobalOpt] Add tests for memset with non-zero value (NFC)
Nikita Popov [Mon, 27 Jun 2022 14:36:10 +0000 (16:36 +0200)]
[GlobalOpt] Add tests for memset with non-zero value (NFC)

2 years ago[mlir][bufferize] Infer memory space in all bufferization patterns
Matthias Springer [Mon, 27 Jun 2022 14:28:38 +0000 (16:28 +0200)]
[mlir][bufferize] Infer memory space in all bufferization patterns

This change updates all remaining bufferization patterns (except for scf.while) and the remaining bufferization infrastructure to infer the memory space whenever possible instead of falling back to "0". (If a default memory space is set in the bufferization options, we still fall back to that value if the memory space could not be inferred.)

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

2 years agotsan: add missing guard for DumpProcessMap call
Than McIntosh [Mon, 27 Jun 2022 13:28:18 +0000 (09:28 -0400)]
tsan: add missing guard for DumpProcessMap call

Add a missing "#if !SANITIZER_GO" guard for a call to DumpProcessMap
in the Finalize hook (needed to build an updated Go race detector syso
image).

Reviewed By: dvyukov

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

2 years ago[mlir][bufferize][NFC] Change signature of allocateTensorForShapedValue
Matthias Springer [Mon, 27 Jun 2022 13:59:00 +0000 (15:59 +0200)]
[mlir][bufferize][NFC] Change signature of allocateTensorForShapedValue

Add a failure return value and bufferization options argument. This is to keep a subsequent change smaller.

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

2 years ago[X86] Support `_Float16` on SSE2 and up
Phoebe Wang [Mon, 27 Jun 2022 13:02:57 +0000 (21:02 +0800)]
[X86] Support `_Float16` on SSE2 and up

This is split from D113107 to address #56204 and https://discourse.llvm.org/t/how-to-build-compiler-rt-for-new-x86-half-float-abi/63366

Reviewed By: zahiraam, rjmccall, bkramer

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

2 years ago[libc++][NFC] Remove trailing whitespace
Louis Dionne [Mon, 27 Jun 2022 13:36:52 +0000 (09:36 -0400)]
[libc++][NFC] Remove trailing whitespace

2 years ago[Clang] Remove unused function declaration after 77475ffd22418ca72.
Florian Hahn [Mon, 27 Jun 2022 13:17:53 +0000 (14:17 +0100)]
[Clang] Remove unused function declaration after 77475ffd22418ca72.

2 years ago[libc++] Remove dummy command in Dockerfile
Louis Dionne [Mon, 27 Jun 2022 13:15:28 +0000 (09:15 -0400)]
[libc++] Remove dummy command in Dockerfile

It turns out that the Docker images on CI instances are not updated
based on what's in this file, but instead when a new image is pushed
to ldionne/libcxx-builder on DockerHub. So this is effectively useless.

2 years ago[mlir][llvm] Add vector insert/extract intrinsics
Javier Setoain [Mon, 6 Jun 2022 10:55:04 +0000 (11:55 +0100)]
[mlir][llvm] Add vector insert/extract intrinsics

These intrinsics will be needed to convert between fixed-length vectors
and scalable vectors.

This operation will be needed for VLS (vector-length specific)
vectorization, when interfacing with vector functions or intrinsics that
take scalable vectors as operands in a context where the length of our
vectors is known or assumed at compile time, but we still want to
generate scalable vector instructions.

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

2 years ago[SPARC] Don't do leaf optimization on procedures with inline assembly
Koakuma [Mon, 27 Jun 2022 12:52:10 +0000 (14:52 +0200)]
[SPARC] Don't do leaf optimization on procedures with inline assembly

On SPARC, leaf function optimization omits the register window sliding (and the associated register name changes). This might result in miscompilation of procedures containing inline assembly, as some of the register constraints used may interfere with the register usage of optimized functions, so we disable leaf procedure optimization on those procedures to prevent it from happening.

This is a continuation of patch D102342 by @LemonBoy, the original comment is reproduced below:

> Leaf functions allow the compiler to omit the setup and teardown of a frame pointer, therefore avoiding the exchange of the in/out register. According to the SPARC architecture manual every reference to %i0-%i5 should be replaced with %o0-o5, if the target register is already in use a further remapping step to %g1-%g7 is required to free the output register.
>
> Add a simple check to make sure not to stomp on any output register that's already in use.

Reviewed By: dcederman

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

2 years ago[ARM][Thumb] Command-line option to ensure AAPCS compliant Frame Records
Lucas Prates [Fri, 6 May 2022 09:31:11 +0000 (10:31 +0100)]
[ARM][Thumb] Command-line option to ensure AAPCS compliant Frame Records

Currently the a AAPCS compliant frame record is not always created for
functions when it should. Although a consistent frame record might not
be required in some cases, there are still scenarios where applications
may want to make use of the call hierarchy made available trough it.

In order to enable the use of AAPCS compliant frame records whilst keep
backwards compatibility, this patch introduces a new command-line option
(`-mframe-chain=[none|aapcs|aapcs+leaf]`) for Aarch32 and Thumb backends.
The option allows users to explicitly select when to use it, and is also
useful to ensure the extra overhead introduced by the frame records is
only introduced when necessary, in particular for Thumb targets.

Reviewed By: efriedma

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

2 years ago[flang][NFC] Add IO lowering tests
Valentin Clement [Mon, 27 Jun 2022 13:00:07 +0000 (15:00 +0200)]
[flang][NFC] Add IO lowering tests

These tests were left behind or only partially upstreamed during
the lower code upstreaming.

This patch is part of the upstreaming effort from fir-dev branch.

Reviewed By: PeteSteinfeld

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

Co-authored-by: Kiran Chandramohan <kiran.chandramohan@arm.com>
Co-authored-by: Jean Perier <jperier@nvidia.com>
2 years agoARM: don't try to load function pointer before long call.
Tim Northover [Mon, 27 Jun 2022 12:59:35 +0000 (13:59 +0100)]
ARM: don't try to load function pointer before long call.

Deciding to load an arbitrary global based on whether the entire module is
being built for long calls is pretty clearly spurious, and in fact the existing
indirect logic is sufficient.

2 years ago[IndVars] Add test for PR56242 (NFC)
Nikita Popov [Mon, 27 Jun 2022 12:54:03 +0000 (14:54 +0200)]
[IndVars] Add test for PR56242 (NFC)

2 years agoMIR: Fix parse error on empty CustomRegMask
Matt Arsenault [Wed, 22 Jun 2022 23:04:07 +0000 (19:04 -0400)]
MIR: Fix parse error on empty CustomRegMask

2 years ago[gn build] Port 633d1d0df766
LLVM GN Syncbot [Mon, 27 Jun 2022 12:35:34 +0000 (12:35 +0000)]
[gn build] Port 633d1d0df766

2 years ago[libc++] Use bounded iterators in std::span when the debug mode is enabled
Louis Dionne [Mon, 6 Jun 2022 18:01:38 +0000 (14:01 -0400)]
[libc++] Use bounded iterators in std::span when the debug mode is enabled

Previously, we'd use raw pointers when the debug mode was enabled,
which means we wouldn't get out-of-range checking with std::span's
iterators.

This patch introduces a new class called __bounded_iter which can
be used to wrap iterators and make them carry around bounds-related
information. This allows iterators to assert when they are dereferenced
outside of their bounds.

As a fly-by change, this commit removes the _LIBCPP_ABI_SPAN_POINTER_ITERATORS
knob. Indeed, not using a raw pointer as the iterator type is useful to
avoid users depending on properties of raw pointers in their code.

This is an alternative to D127401.

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

2 years ago[libc++] Improve Lit's buildhost=XXXX feature on a few platforms
Louis Dionne [Thu, 23 Jun 2022 19:09:52 +0000 (15:09 -0400)]
[libc++] Improve Lit's buildhost=XXXX feature on a few platforms

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

2 years ago[flang][NFC] Add array lowering tests
Valentin Clement [Mon, 27 Jun 2022 12:19:23 +0000 (14:19 +0200)]
[flang][NFC] Add array lowering tests

These tests were left behind during the upstreaming of parts lowering.

This patch is part of the upstreaming effort from fir-dev branch.

Reviewed By: jeanPerier

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

Co-authored-by: V Donaldson <vdonaldson@nvidia.com>
Co-authored-by: Jean Perier <jperier@nvidia.com>
Co-authored-by: Eric Schweitz <eschweitz@nvidia.com>
2 years ago[clang][dataflow] Singleton pointer values for null pointers.
Wei Yi Tee [Mon, 27 Jun 2022 12:14:01 +0000 (14:14 +0200)]
[clang][dataflow] Singleton pointer values for null pointers.

When a `nullptr` is assigned to a pointer variable, it is wrapped in a `ImplicitCastExpr` with cast kind `CK_NullTo(Member)Pointer`. This patch assigns singleton pointer values representing null to these expressions.

For each pointee type, a singleton null `PointerValue` is created and stored in the `NullPointerVals` map of the `DataflowAnalysisContext` class. The pointee type is retrieved from the implicit cast expression, and used to initialise the `PointeeLoc` field of the `PointerValue`. The `PointeeLoc` created is not mapped to any `Value`, reflecting the absence of value indicated by null pointers.

Reviewed By: gribozavr2, sgatev, xazax.hun

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

2 years ago[SCF] Add thread_dim_mapping attribute to scf.foreach_thread
Nicolas Vasilache [Fri, 24 Jun 2022 09:26:22 +0000 (02:26 -0700)]
[SCF] Add thread_dim_mapping attribute to scf.foreach_thread

An optional thread_dim_mapping index array attribute specifies for each
virtual thread dimension, how it remaps 1-1 to a set of concrete processing
element resources (e.g. a CUDA grid dimension or a level of concrete nested
async parallelism). At this time, the specification is backend-dependent and
is not verified by the op, beyond being an index array attribute.
It is the reponsibility of the lowering to interpret the index array in the
context of the concrete target the op is lowered to, or to ignore it when
the specification is ill-formed or unsupported for a particular target.

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

2 years ago[mlir][bufferization][NFC] Add error handling to getBuffer
Matthias Springer [Mon, 27 Jun 2022 11:46:37 +0000 (13:46 +0200)]
[mlir][bufferization][NFC] Add error handling to getBuffer

This is in preparation of adding memory space support.

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

2 years ago[mlir][bufferization][NFC] Fix typo in AllocTensorOp builders
Matthias Springer [Mon, 27 Jun 2022 11:41:18 +0000 (13:41 +0200)]
[mlir][bufferization][NFC] Fix typo in AllocTensorOp builders

2 years ago[mlir][SCF][bufferize][NFC] Bufferize scf.for terminator separately
Matthias Springer [Mon, 27 Jun 2022 11:25:52 +0000 (13:25 +0200)]
[mlir][SCF][bufferize][NFC] Bufferize scf.for terminator separately

This allows for better type inference during bufferization and is in preparation of supporting memory spaces.

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

2 years ago[mlir][SCF][bufferize] Bufferize scf.if/execute_region terminators separately
Matthias Springer [Mon, 27 Jun 2022 11:17:45 +0000 (13:17 +0200)]
[mlir][SCF][bufferize] Bufferize scf.if/execute_region terminators separately

This allows for better type inference during bufferization and is in preparation of supporting memory spaces.

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

2 years ago[mlir][SCF][bufferize][NFC] Bufferize parallel_insert_slice separately
Matthias Springer [Mon, 27 Jun 2022 11:10:00 +0000 (13:10 +0200)]
[mlir][SCF][bufferize][NFC] Bufferize parallel_insert_slice separately

This allows for better type inference during bufferization and is in preparation of supporting memory spaces.

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

2 years ago[AMDGPU] Regenerate MIR checks. NFC.
Jay Foad [Mon, 27 Jun 2022 11:15:25 +0000 (12:15 +0100)]
[AMDGPU] Regenerate MIR checks. NFC.

2 years agoFix clang docs build; NFC
Aaron Ballman [Mon, 27 Jun 2022 11:12:36 +0000 (07:12 -0400)]
Fix clang docs build; NFC

This should address the break from:
https://lab.llvm.org/buildbot/#/builders/92/builds/28769

2 years ago[mlir][shape][bufferize][NFC] Bufferize block terminators separately
Matthias Springer [Mon, 27 Jun 2022 10:52:59 +0000 (12:52 +0200)]
[mlir][shape][bufferize][NFC] Bufferize block terminators separately

This allows for better type inference during bufferization and is in preparation of supporting memory spaces.

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

2 years ago[AMDGPU][GFX9][DOC][NFC] Update assembler syntax description
Dmitry Preobrazhensky [Mon, 27 Jun 2022 11:01:09 +0000 (14:01 +0300)]
[AMDGPU][GFX9][DOC][NFC] Update assembler syntax description

Summary of changes:
- Updated MUBUF lds syntax (see https://reviews.llvm.org/D124485).
- Updated SMEM syntax (see https://reviews.llvm.org/D127314).
- Enabled src0=literal for v_madak*, v_madmk* (see https://reviews.llvm.org/D111067).
- Removed SYSMSG_OP_HOST_TRAP_ACK message.
- Minor bug fixing and improvements.

2 years ago[STACKMAPS] Document+test UINT64_MAX stack size.
Edd Barrett [Mon, 27 Jun 2022 10:53:38 +0000 (11:53 +0100)]
[STACKMAPS] Document+test UINT64_MAX stack size.

When a function does a dynamic stack allocation, the function's stack
size (in the stack map) is reported as UINT64_MAX.

This change tests and documents this property.

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

2 years ago[IR] Move vector.insert/vector.extract out of experimental namespace
Bradley Smith [Thu, 16 Jun 2022 14:45:28 +0000 (14:45 +0000)]
[IR] Move vector.insert/vector.extract out of experimental namespace

These intrinsics are now fundemental for SVE code generation and have been
present for a year and a half, hence move them out of the experimental
namespace.

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

2 years ago[X86] combineConcatVectorOps - IsConcatFree must check extraction index
Simon Pilgrim [Mon, 27 Jun 2022 10:46:42 +0000 (11:46 +0100)]
[X86] combineConcatVectorOps - IsConcatFree must check extraction index

Identified in the regression reported by @alexfh on rGb5d7beeb9792 - IsConcatFree wasn't ensuring the subvector extraction index matched the position it would be concatenated back into.

2 years ago[mlir][bufferization][NFC] Bufferize with PostOrder traversal
Matthias Springer [Mon, 27 Jun 2022 10:42:07 +0000 (12:42 +0200)]
[mlir][bufferization][NFC] Bufferize with PostOrder traversal

This is useful because the result type of an op can sometimes be inferred from its body (e.g., `scf.if`). This will be utilized in subsequent changes.

Also introduces a new `getBufferType` interface method on BufferizableOpInterface. This method is useful for computing a bufferized block argument type with respect to OpOperand types of the parent op.

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

2 years ago[AArch64] Define __FP_FAST_FMA[F]
Jolanta Jensen [Mon, 13 Jun 2022 13:37:19 +0000 (14:37 +0100)]
[AArch64] Define __FP_FAST_FMA[F]

Libraries use this flag to decide whether to use the fma builtin.
Author: Paul Walker

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

2 years ago[mlir][bufferization] Add `memory_space` op attribute
Matthias Springer [Mon, 27 Jun 2022 10:31:55 +0000 (12:31 +0200)]
[mlir][bufferization] Add `memory_space` op attribute

This attribute is currently supported on AllocTensorOp only. Future changes will add support to other ops. Furthermore, the memory space is not propagated properly in all bufferization patterns and some of the core bufferization infrastructure. This will be addressed in a subsequent change.

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

2 years ago[llvm-ar] Improve MRI script CREATE command handling
gbreynoo [Mon, 27 Jun 2022 10:08:36 +0000 (11:08 +0100)]
[llvm-ar] Improve MRI script CREATE command handling

I discovered that when compared to GNU the llvm-ar MRI script parsing of
CREATE could lead to some strange behaviour. This fix improves the error
message in the case when no archive name is given and will not allow the
adding of members until CREATE is called. Along with this change I added
more testing of the CREATE command.

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

2 years ago[flang][driver] Add support for `-O{0|1|2|3}`
Andrzej Warzynski [Mon, 6 Jun 2022 09:44:21 +0000 (09:44 +0000)]
[flang][driver] Add support for `-O{0|1|2|3}`

This patch adds support for most common optimisation compiler flags:
`-O{0|1|2|3}`. This is implemented in both the compiler and frontend
drivers. At this point, these options are only used to configure the
LLVM optimisation pipelines (aka middle-end). LLVM backend or MLIR/FIR
optimisations are not supported yet.

Previously, the middle-end pass manager was only required when
generating LLVM bitcode (i.e. for `flang-new -c -emit-llvm <file>` or
`flang-new -fc1 -emit-llvm-bc <file>`). With this change, it becomes
required for all frontend actions that are represented as
`CodeGenAction` and `CodeGenAction::executeAction` is refactored
accordingly (in the spirit of better code re-use).

Additionally, the `-fdebug-pass-manager` option is enabled to facilitate
testing. This flag can be used to configure the pass manager to print
the middle-end passes that are being run. Similar option exists in Clang
and the semantics in Flang are identical. This option translates to
extra configuration when setting up the pass manager. This is
implemented in `CodeGenAction::runOptimizationPipeline`.

This patch also adds some bolier plate code to manage code-gen options
("code-gen" refers to generating machine code in LLVM in this context).
This was extracted from Clang. In Clang, it simplifies defining code-gen
options and enables option marshalling. In Flang, option marshalling is
not yet supported (we might do at some point), but being able to
auto-generate some code with macros is beneficial. This will become
particularly apparent when we start adding more options (at least in
Clang, the list of code-gen options is rather long).

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

2 years ago[clang][dataflow] Implement functionality for flow condition variable substitution.
Wei Yi Tee [Mon, 27 Jun 2022 09:18:01 +0000 (11:18 +0200)]
[clang][dataflow] Implement functionality for flow condition variable substitution.

This patch introduces `buildAndSubstituteFlowCondition` - given a flow condition token, this function returns the expression of constraints defining the flow condition, with values substituted where specified.

As an example:
Say we have tokens `FC1`, `FC2`, `FC3`:
```
FlowConditionConstraints: {
 FC1: C1,
 FC2: C2,
 FC3: (FC1 v FC2) ^ C3,
}
```
`buildAndSubstituteFlowCondition(FC3, /*Substitutions:*/{{C1 -> C1'}})`
returns a value corresponding to `(C1' v C2) ^ C3`.

Note:
This function returns the flow condition expressed directly as its constraints, which differs to how we currently represent the flow condition as a token bound to a set of constraints and dependencies. Making the representation consistent may be an option to consider in the future.

Depends On D128357

Reviewed By: gribozavr2, xazax.hun

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

2 years ago[flang] Update the release notes
Andrzej Warzynski [Thu, 23 Jun 2022 09:29:12 +0000 (09:29 +0000)]
[flang] Update the release notes

Document changes introduced in https://reviews.llvm.org/D126164.

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

2 years ago[clang][dataflow] Move logic for `createStorageLocation` from `DataflowEnvironment...
Wei Yi Tee [Mon, 27 Jun 2022 09:12:37 +0000 (11:12 +0200)]
[clang][dataflow] Move logic for `createStorageLocation` from `DataflowEnvironment` to `DataflowAnalysisContext`.

`createStorageLocation` in `DataflowEnvironment` is now a trivial wrapper around the logic in `DataflowAnalysisContext`.
Additionally, `getObjectFields` and `getFieldsFromClassHierarchy` (required for the implementation of `createStorageLocation`) are also moved to `DataflowAnalysisContext`.

Reviewed By: gribozavr2, sgatev

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

2 years ago[libc] Add a simple arm32 config.
Siva Chandra Reddy [Fri, 24 Jun 2022 17:45:02 +0000 (17:45 +0000)]
[libc] Add a simple arm32 config.

This will be expanded in future as more functions are brought up on arm32.

2 years ago[OpenCL] Reduce emitting candidate notes for builtins
Sven van Haastregt [Mon, 27 Jun 2022 08:55:44 +0000 (09:55 +0100)]
[OpenCL] Reduce emitting candidate notes for builtins

When overload resolution fails, clang emits a note diagnostic for each
candidate.  For OpenCL builtins this often leads to many repeated note
diagnostics with no new information.  Stop emitting such notes.

Update a test that was relying on counting those notes to check how
many builtins are available for certain extension configurations.

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

2 years ago[SCEV] Assert that GEP source element type is sized (NFC)
Nikita Popov [Mon, 27 Jun 2022 08:50:33 +0000 (10:50 +0200)]
[SCEV] Assert that GEP source element type is sized (NFC)

This is checked by the IR verifier, so replace the condition with
an assert.

2 years ago[AMDGPU] Fix assertion failure on mad with negative immediate addend
Jay Foad [Thu, 23 Jun 2022 12:35:02 +0000 (13:35 +0100)]
[AMDGPU] Fix assertion failure on mad with negative immediate addend

Without this, the new test case would fail with:

AMDGPUInstPrinter.cpp:545: void llvm::AMDGPUInstPrinter::printImmediate64(uint64_t, const llvm::MCSubtargetInfo &, llvm::raw_ostream &): Assertion `isUInt<32>(Imm) || Imm == 0x3fc45f306dc9c882' failed.

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

2 years ago[libc][NFC] Make the support thread library an object library.
Siva Chandra Reddy [Sat, 25 Jun 2022 08:28:57 +0000 (08:28 +0000)]
[libc][NFC] Make the support thread library an object library.

It was previously a header library. Making it an object library will
allow us to declare thread local variables which can used to setup a
thread's self object.

2 years ago[mlir][bufferization][NFC] Change signature of getMemRefType
Matthias Springer [Mon, 27 Jun 2022 08:01:58 +0000 (10:01 +0200)]
[mlir][bufferization][NFC] Change signature of getMemRefType

These functions now accep unsigned attributes for address spaces instead of Attributes.

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

2 years ago[libunwind,EHABI,ARM] Fix get/set of RA_AUTH_CODE.
Simon Tatham [Mon, 27 Jun 2022 08:36:20 +0000 (09:36 +0100)]
[libunwind,EHABI,ARM] Fix get/set of RA_AUTH_CODE.

According to EHABI32 §8.5.2, the PAC for the return address of a
function described in an exception table is supposed to be addressed
in the _Unwind_VRS_{Get,Set} API by setting regclass=_UVRSC_PSEUDO and
regno=0. (The space of 'regno' values is independent for each
regclass, and for _UVRSC_PSEUDO, there is only one valid regno so far.)

That is indeed what libunwind's _Unwind_VRS_{Get,Set} functions expect
to receive. But at two call sites, the wrong values are passed in:
regno is being set to UNW_ARM_RA_AUTH_CODE (0x8F) instead of 0, and in
one case, regclass is _UVRSC_CORE instead of _UVRSC_PSEUDO.

As a result, those calls to _Unwind_VRS_{Get,Set} return
_UVRSR_FAILED, which their callers ignore. So if you compile in the
AUTG instruction that actually validates the PAC, it will try to
validate what's effectively an uninitialised register as an
authentication code, and trigger a CPU fault even on correct exception
unwinding.

Reviewed By: danielkiss

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

2 years ago[SCEV] Use SCEVUnknown(poison) instead of SCEVUnknown(undef).
Florian Hahn [Mon, 27 Jun 2022 08:33:04 +0000 (09:33 +0100)]
[SCEV] Use SCEVUnknown(poison) instead of SCEVUnknown(undef).

Use poison instead of undef for SCEVUnkown of unreachable values.
This should be in line with the movement to replace undef with poison
when possible.

Suggested in D114650.

Reviewed By: nikic

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

2 years agoRevert "[lldb] Fix thread step until to not set breakpoint(s) on incorrect line numbers"
Mikhail Goncharov [Mon, 27 Jun 2022 08:18:39 +0000 (10:18 +0200)]
Revert "[lldb] Fix thread step until to not set breakpoint(s) on incorrect line numbers"

This reverts commit a57b62deef37c7f2ec31bca3bf9173a6206bfb9b.

lldb-aarch64-ubuntu buildbot test fails since https://lab.llvm.org/buildbot/#/builders/96/builds/25128

2 years ago[FunctionAttrs] Add missing pass dependency
Nikita Popov [Mon, 27 Jun 2022 08:15:06 +0000 (10:15 +0200)]
[FunctionAttrs] Add missing pass dependency

This pass depends on AAResults. This fixes the ocaml IPO binding
tests.

2 years ago[ArgPromotion] Remove legacy PM support
Nikita Popov [Fri, 24 Jun 2022 15:06:07 +0000 (17:06 +0200)]
[ArgPromotion] Remove legacy PM support

Support for the legacy pass manager in ArgPromotion causes
complications in D125485. As the legacy pass manager for middle-end
optimizations is unsupported, drop ArgPromotion from the legacy
pipeline, rather than introducing additional complexity to deal
with it.

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

2 years ago[mlir] Fix ClangTidyPerformance finding (NFC)
Adrian Kuegel [Mon, 27 Jun 2022 07:15:39 +0000 (09:15 +0200)]
[mlir] Fix ClangTidyPerformance finding (NFC)

2 years ago[NFC] Add parentheses around && within || to avoid warning
Chuanqi Xu [Mon, 27 Jun 2022 06:44:10 +0000 (14:44 +0800)]
[NFC] Add parentheses around && within || to avoid warning

2 years ago[mlir] Flip MemRef dialect to _Both (NFC)
Jacques Pienaar [Mon, 27 Jun 2022 03:45:25 +0000 (20:45 -0700)]
[mlir] Flip MemRef dialect to _Both (NFC)

2 years agoRevert "[Coroutines] Only do symmetric transfer if optimization is on"
Chuanqi Xu [Mon, 27 Jun 2022 02:38:29 +0000 (10:38 +0800)]
Revert "[Coroutines] Only do symmetric transfer if optimization is on"

This reverts commit 7782e080e80a90f7bb32049beb3787e2118c2251. According
to the discussion of WG21, symmetric transfer is a desired feature.

2 years agoDon't use Optional::hasValue (NFC)
Kazu Hirata [Mon, 27 Jun 2022 02:54:41 +0000 (19:54 -0700)]
Don't use Optional::hasValue (NFC)

This patch replaces x.hasValue() with x where x is contextually
convertible to bool.

2 years ago[lld] Don't use Optional::hasValue (NFC)
Kazu Hirata [Mon, 27 Jun 2022 02:37:14 +0000 (19:37 -0700)]
[lld] Don't use Optional::hasValue (NFC)

This patch replaces x.hasValue() with x where x is contextually
convertible to bool.

2 years ago[lld] Don't use Optional::hasValue (NFC)
Kazu Hirata [Mon, 27 Jun 2022 02:29:40 +0000 (19:29 -0700)]
[lld] Don't use Optional::hasValue (NFC)

This patch replaces x.hasValue() with x where x is contextually
convertible to bool.

2 years ago[mlir] Flip more uses to prefixed accessor form (NFC).
Jacques Pienaar [Mon, 27 Jun 2022 02:12:38 +0000 (19:12 -0700)]
[mlir] Flip more uses to prefixed accessor form (NFC).

Try to keep the final flip small. Need to flip MemRef as there are many
templated cases with it and Tensor.

2 years ago[clang] Don't use Optional::hasValue (NFC)
Kazu Hirata [Mon, 27 Jun 2022 01:51:54 +0000 (18:51 -0700)]
[clang] Don't use Optional::hasValue (NFC)

This patch replaces x.hasValue() with x where x is contextually
convertible to bool.

2 years ago[llvm] Don't use Optional::hasValue (NFC)
Kazu Hirata [Mon, 27 Jun 2022 01:31:51 +0000 (18:31 -0700)]
[llvm] Don't use Optional::hasValue (NFC)

This patch replaces Optional::hasValue with the implicit cast to bool
in conditionals only.

2 years ago[RISCV] Remove extra semicolon. NFC
Craig Topper [Mon, 27 Jun 2022 01:19:16 +0000 (18:19 -0700)]
[RISCV] Remove extra semicolon. NFC

2 years ago[ELF] Remove deprecated -dc
Fangrui Song [Mon, 27 Jun 2022 00:26:44 +0000 (17:26 -0700)]
[ELF] Remove deprecated -dc

-dc is deprecated in release/14.x. Remove it for 15.0.
The only usage I know was FreeBSD crungen which was removed by https://reviews.freebsd.org/D34215

glibc just dropped -Wl,-d today. Keep -d for now.

2 years ago[llvm] Use Optional::has_value instead of Optional::hasValue (NFC)
Kazu Hirata [Sun, 26 Jun 2022 23:10:42 +0000 (16:10 -0700)]
[llvm] Use Optional::has_value instead of Optional::hasValue (NFC)

This patch replaces x.hasValue() with x.has_value() where x is not
contextually convertible to bool.

2 years ago[NFC][SVE] Auto-generate CHECK lines for intrinsic codegen tests.
Paul Walker [Sat, 25 Jun 2022 18:04:49 +0000 (19:04 +0100)]
[NFC][SVE] Auto-generate CHECK lines for intrinsic codegen tests.

2 years ago[MLIR] NFC. Fix doc comment for AliasResult::isNo
Uday Bondhugula [Sun, 26 Jun 2022 02:23:31 +0000 (07:53 +0530)]
[MLIR] NFC. Fix doc comment for AliasResult::isNo

Fix doc comment for AliasResult::isNo. NFC.

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

2 years ago[clang-format] Fix uninitialized memory problem
sstwcw [Sun, 26 Jun 2022 22:22:27 +0000 (22:22 +0000)]
[clang-format] Fix uninitialized memory problem

The setLength function checks for the token kind which could be
uninitialized in the previous version.

The problem was introduced in 2e32ff106e.

Reviewed By: MyDeveloperDay, owenpan

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

2 years ago[RISCV] Evaluate ICE operands to builtins using getIntegerConstantExpr.
Craig Topper [Sun, 26 Jun 2022 20:28:57 +0000 (13:28 -0700)]
[RISCV] Evaluate ICE operands to builtins using getIntegerConstantExpr.

Some RISC-V builtins requires ICE operands. We should call
getIntegerConstantExpr instead of EmitScalarExpr to match other
targets.

This was made a little trickier by the vector intrinsics not having
a valid type string, but there are two that have ICE operands so
I specified them manually.

2 years ago[Driver][test] Add libclang_rt.profile{{.*}}.a tests for OpenBSD
Frederic Cambus [Fri, 24 Jun 2022 08:47:30 +0000 (10:47 +0200)]
[Driver][test] Add libclang_rt.profile{{.*}}.a tests for OpenBSD

This was requested in D109244.

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

2 years ago[clang-format] Quit analyzing solution space for large state count
owenca [Sat, 25 Jun 2022 05:09:57 +0000 (22:09 -0700)]
[clang-format] Quit analyzing solution space for large state count

Fixes #56043.

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

2 years ago[Driver] Use Component in OpenBSD::getCompilerRT to find libraries
Greg Steuck [Sun, 26 Jun 2022 19:04:43 +0000 (21:04 +0200)]
[Driver] Use Component in OpenBSD::getCompilerRT to find libraries

Clang uses runtime libraries for some advanced features like
sanitizers. Different systems have different preferences about file
placement. OpenBSD with this change will use this name for ASan:
/usr/lib/clang/15.0.0/lib/libclang_rt.asan.a

Already committed to OpenBSD repository then amended to cover the
case of development tree.

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

2 years ago[RISCV] Refactor SelectAddrRegImm to not depend on SelectBaseAddr.
Craig Topper [Sun, 26 Jun 2022 18:08:44 +0000 (11:08 -0700)]
[RISCV] Refactor SelectAddrRegImm to not depend on SelectBaseAddr.

SelectBaseAddr was a minor convenience to use since it already'
existed for vector load/store. D128187 is going to remove the other
uses of SelectBaseAddr so it has less reason to exist.

This patch removes the dependency on SelectBaseAddr and adds a new
SelectAddrFrameIndex to share some code with SelectFrameAddrRegImm.

2 years ago[mlir] Generalize SCF passes to not have to run on FuncOp.
Stella Laurenzo [Sun, 26 Jun 2022 17:39:20 +0000 (10:39 -0700)]
[mlir] Generalize SCF passes to not have to run on FuncOp.

Seems to have been an accident of history and none of these had any reason to be restricted to FuncOp.

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

2 years agoPHINode::removeIncomingValue: use poison as a placeholder instead of undef when the...
Nuno Lopes [Sun, 26 Jun 2022 17:50:47 +0000 (18:50 +0100)]
PHINode::removeIncomingValue: use poison as a placeholder instead of undef when the PHI is dead [NFC]

2 years ago[CodeGenPrepare] Avoid double map lookup. NFCI
Craig Topper [Sun, 26 Jun 2022 17:45:48 +0000 (10:45 -0700)]
[CodeGenPrepare] Avoid double map lookup. NFCI

2 years ago[LICM] Use poison to replace unreachable values instead of undef [NFC]
Nuno Lopes [Sun, 26 Jun 2022 13:56:35 +0000 (14:56 +0100)]
[LICM] Use poison to replace unreachable values instead of undef [NFC]

2 years agoUpdate LibASTImporter.rst
Shivam [Sun, 26 Jun 2022 13:52:52 +0000 (19:22 +0530)]
Update LibASTImporter.rst

As my last commit changed the name of ImportError to ASTImportError , this section also needs to be updated so changed it.

2 years ago[clang] Add missing Interpreter -> ClangDriverOptions dependency
Vassil Vassilev [Sun, 26 Jun 2022 13:47:50 +0000 (13:47 +0000)]
[clang] Add missing Interpreter -> ClangDriverOptions dependency

Without this, it is possible that Interpreter.cpp is being built before
clang/Driver/Options.inc is generated.

Observed only infrequently, serial builds and ext4 manifest the problem
much more often than parallel builds and btrfs.

https://reviews.llvm.org/rG06487b010d48c36c7714ee083ed38dff65711812
is a very similar case.

Patch by t184256!

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