platform/upstream/llvm.git
18 months ago[ORC] Fix fallout from switch to _objc_map/load_images-based registration.
Lang Hames [Tue, 11 Apr 2023 04:17:37 +0000 (21:17 -0700)]
[ORC] Fix fallout from switch to _objc_map/load_images-based registration.

In f448d44663a we switched to calling _objc_map_images and _objc_load_images
for MachO language metadata registration. This patch fixes some bugs arising
from that change:

(1) __objc_imageinfo processing was moved to a post-allocation pass, but this
    prevents us from discarding the redundant copies. This commit moves
    processing back to a pre-prune pass and inserts a symbol for the uniqued
    __objc_image section. Runtime objects use an edge pointing to this symbol
    to access the address.

(2) We were assuming that _objc_map_images & _objc_load_images were available
    in the Objective-C runtime on 10.15, but these functions didn't become
    available until later. This commit bumps the macOS version requirement to
    13.1 where the functions should be available.

(3) The ORC-RT trivial-swift-types-section.S test was missing an
    __objc_unwindinfo section, which triggered an assert that should have
    been an error. The assert has been turned into an error, and the testcase
    has been updated to include an __objc_imageinfo.

rdar://107846455

18 months ago[scudo] Temporariy dispatch region from `RegionBeg`
Chia-hung Duan [Tue, 11 Apr 2023 22:42:02 +0000 (22:42 +0000)]
[scudo] Temporariy dispatch region from `RegionBeg`

In general, a region is located from region base and has size
`RegionSize`. However, some platforms may not support mapping from
region base. Before we have each platform implements their specific
MemMap to handle the offset. Temporarily dispatch the region from
`RegionBeg` instead.

Reviewed By: cferris, fabio-d

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

18 months ago[test][lsan] Reset pointer to leak memory
Vitaly Buka [Tue, 11 Apr 2023 22:36:55 +0000 (15:36 -0700)]
[test][lsan] Reset pointer to leak memory

18 months ago[mlir][sparse][gpu] put sparse compiler GPU end-to-end tests back
Aart Bik [Tue, 11 Apr 2023 18:42:29 +0000 (11:42 -0700)]
[mlir][sparse][gpu] put sparse compiler GPU end-to-end tests back

SM80 flag guards the test for targets that do not support A100 GPUs

Reviewed By: mehdi_amini

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

18 months ago[lsan] Regression test for 7d328668691a
Vitaly Buka [Tue, 11 Apr 2023 22:32:22 +0000 (15:32 -0700)]
[lsan] Regression test for 7d328668691a

18 months ago[libc] Fix typo in gnu_ext.td
Caslyn Tonelli [Tue, 11 Apr 2023 21:18:29 +0000 (21:18 +0000)]
[libc] Fix typo in gnu_ext.td

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

18 months ago[-Wunsafe-buffer-usage] Match unsafe pointers being casted to bool or participating...
Ziqing Luo [Tue, 11 Apr 2023 22:01:59 +0000 (15:01 -0700)]
[-Wunsafe-buffer-usage] Match unsafe pointers being casted to bool or participating in pointer subtractions

Add two new unique cases to the Unspecified Pointer Context (UPC),
under which we match unsafe operation patterns:
- A pointer being casted to a boolean value is in a UPC;
- A pointer participating in pointer subtraction is in a UPC.

Reviewed by: NoQ (Artem Dergachev), malavikasamak (Malavika Samak)

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

18 months ago[lldb] Parse image high address from JSON crashlogs
Jonas Devlieghere [Tue, 11 Apr 2023 21:45:34 +0000 (14:45 -0700)]
[lldb] Parse image high address from JSON crashlogs

Use the base + size to correctly populate the image high address when
parsing JSON crashlogs.

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

18 months ago[bazel] Disable layering_check for llvm/unittests:mi_tests after D145707
Fangrui Song [Tue, 11 Apr 2023 21:44:43 +0000 (14:44 -0700)]
[bazel] Disable layering_check for llvm/unittests:mi_tests after D145707

18 months ago[clang-format] Don't modify template arguments on the LHS of assignment
Emilia Dreamer [Tue, 11 Apr 2023 21:33:12 +0000 (00:33 +0300)]
[clang-format] Don't modify template arguments on the LHS of assignment

After clang-format has determined that an equals sign starts an
expression, it will also go backwards and modify any star/amp/ampamp
binary operators on the left side of the assignment to be
pointers/references instead.

There already exists logic to skip over contents of parentheses and
square brackets, but this patch also expands that logic to apply to
angle brackets. This is so that binary operators inside of template
arguments would not be touched, primary arguments to non-type template
parameters.

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

Reviewed By: owenpan, MyDeveloperDay, HazardyKnusperkeks

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

18 months agoRevert (4) "[Assignment Tracking] Enable by default"
OCHyams [Tue, 11 Apr 2023 21:25:16 +0000 (22:25 +0100)]
Revert (4) "[Assignment Tracking] Enable by default"

This reverts commit a0525f09ac1eda3fbb74e8708b3aa5b7379df0c2 which
lands D146987.

Buildbot: https://lab.llvm.org/buildbot/#/builders/70/builds/36214

18 months ago[mlir][matchers] Add m_Op(StringRef) and m_Attr matchers
Devajith V S [Tue, 11 Apr 2023 20:55:59 +0000 (13:55 -0700)]
[mlir][matchers] Add m_Op(StringRef) and m_Attr matchers

This patch introduces support for m_Op with a StringRef argument and m_Attr matchers. These matchers will be very useful for mlir-query that is being developed currently.

Submitting this patch separately to reduce the final patch size and make it easier to upstream mlir-query.

Reviewed By: rriddle

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

18 months ago[libc] Add memmem implementation
Caslyn Tonelli [Fri, 7 Apr 2023 22:16:01 +0000 (22:16 +0000)]
[libc] Add memmem implementation

Introduce the `memmem` libc string function.

`memmem_implementation` performs shared logic for `strstr`,
`strcasestr`, and `memmem`; essentially reconfiguring what was the
`strstr_implementation` to support length parameters.

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

18 months ago[PATCH][lldb] Fix dereference of null pointer.
Caroline Tice [Mon, 10 Apr 2023 21:45:59 +0000 (14:45 -0700)]
[PATCH][lldb] Fix dereference of null pointer.

The function DWARFASTParserClang::ParsePointerToMemberType attempts to make
two pointers and then immediately tries to dereference them, without
verifying that the pointesr were successfully created. Sometimes the pointer
creation fails, and the dereference then causes a segfault. This add a check
that the pointers are non-null before attempting to dereference them.

18 months agoReapply (3) "[Assignment Tracking] Enable by default"
OCHyams [Tue, 11 Apr 2023 19:41:52 +0000 (20:41 +0100)]
Reapply (3) "[Assignment Tracking] Enable by default"

Re-land D146987.

This reverts commit 4f1954ed67c12aca3fd3e67151185c64dc941768 which
reverts D146987.

18 months ago[mlgo] Fix the help message for interactive mode default advice
Mircea Trofin [Tue, 11 Apr 2023 19:52:06 +0000 (12:52 -0700)]
[mlgo] Fix the help message for interactive mode default advice

This avoids the use-after-free introduced by D147794 and fixed
in 437dfa5b0365.

18 months ago[SLP][NFC]Introduce ShuffleCostEstimator and adjustExtracts member function.
Alexey Bataev [Fri, 7 Apr 2023 13:14:36 +0000 (06:14 -0700)]
[SLP][NFC]Introduce ShuffleCostEstimator and adjustExtracts member function.

Added ShuffleCostEstimator class and the first adjustExtracts member,
which is just a copy of previous AdjustExtractCost lambda.

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

18 months ago[clang-tidy] support nested inline namespace in c++20 for modernize-concat-nested...
Congcong Cai [Tue, 11 Apr 2023 18:45:49 +0000 (20:45 +0200)]
[clang-tidy] support nested inline namespace in c++20 for modernize-concat-nested-namespaces

Fixed https://github.com/llvm/llvm-project/issues/56022
c++20 support namespace like `namespace a::inline b {}`.
If an inline namespace is not the first, it can be concatened.

Reviewed By: PiotrZSL

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

18 months ago[clang] Add test for CWG1837
Vlad Serebrennikov [Tue, 11 Apr 2023 19:14:29 +0000 (22:14 +0300)]
[clang] Add test for CWG1837

[[https://wg21.link/p1787 | P1787]]: CWG1837 is resolved by restricting `this` to referring to the innermost enclosing class.
Wording: see changes to [expr.prim.this] and [expr.prim.lambda].

Reviewed By: #clang-language-wg, erichkeane

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

18 months ago[clang] Add test for CWG2007
Vlad Serebrennikov [Tue, 11 Apr 2023 19:12:57 +0000 (22:12 +0300)]
[clang] Add test for CWG2007

[[https://wg21.link/p1787 | P1787]]: CWG2007 is resolved by skipping unqualified lookup for operators that must be member functions.
Wording: For the operators =, [], or ->, the set of non-member candidates is empty; otherwise, it includes the result of the unqualified lookup for operator@... ([over.match.oper]/3)

Reviewed By: #clang-language-wg, shafik

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

18 months ago[clang] Add test for CWG2370
Vlad Serebrennikov [Tue, 11 Apr 2023 19:03:13 +0000 (22:03 +0300)]
[clang] Add test for CWG2370

[[https://wg21.link/p1787 | P1787]]: CWG2370 is resolved by performing a search in (only) the immediate scope of any friend, per the [[ http://wiki.edg.com/bin/view/Wg21sandiego2018/CoreWorkingGroup#Core_issue_2370_friend_declarati | CWG opinion from San Diego ]].
Wording: In a friend declaration declarator whose declarator-id is a qualified-id whose lookup context is a class or namespace S, lookup for an unqualified name that appears after the declarator-id performs a search in the scope associated with S. If that lookup finds nothing, it undergoes unqualified name lookup. ([basic.lookup.unqual]/6).

Clarification for P1787 description: when applied to the test in this patch, "immediate scope" refers to `N`, and "(only)" refers to the fact that `type` is not searched in parent scope of `N`. See example after the wording if additional clarification is needed. The most relevant line there is `friend void A::f(F);  // OK`.

Reviewed By: #clang-language-wg, shafik

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

18 months ago[RISCV] Add segment load/store to getTgtMemIntrinsic.
Craig Topper [Tue, 11 Apr 2023 18:30:15 +0000 (11:30 -0700)]
[RISCV] Add segment load/store to getTgtMemIntrinsic.

18 months ago[hwasan] Don't require untagged pointer in __hwasan_tag_memory
Vitaly Buka [Wed, 5 Apr 2023 23:46:42 +0000 (16:46 -0700)]
[hwasan] Don't require untagged pointer in __hwasan_tag_memory

Use likely have tagged pointer. I see no value making user to untag it.

Reviewed By: fmayer

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

18 months ago[libc] Fix swab placement
Caslyn Tonelli [Tue, 11 Apr 2023 02:57:38 +0000 (02:57 +0000)]
[libc] Fix swab placement

Per https://reviews.llvm.org/D147970#4256889, swab.cpp is moved out of
the /linux subdirectory and cmake specifications are amended to reflect
that swab is not OS-specific.

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

18 months ago[RISCV][Tablegen] Make VLXSched and VSXSched classes aware of data and index lmul
Nitin John Raj [Fri, 7 Apr 2023 19:51:46 +0000 (12:51 -0700)]
[RISCV][Tablegen] Make VLXSched and VSXSched classes aware of data and index lmul

The LMUL for data and index are not guaranteed the same so we need different LMULs appended to the sched classes for them.

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

18 months ago[RISCV][Tablegen] Remove LMUL from ReadVLDX, ReadVSTX, ReadVLDSX, ReadVSTSX scheduler...
Nitin John Raj [Fri, 7 Apr 2023 17:51:55 +0000 (10:51 -0700)]
[RISCV][Tablegen] Remove LMUL from ReadVLDX, ReadVSTX, ReadVLDSX, ReadVSTSX scheduler classes

This read is for a gpr pointer, and doesn't need to be LMUL aware.

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

18 months ago[lldb] Change return type of EventData::GetFlavor
Alex Langford [Sat, 8 Apr 2023 01:39:24 +0000 (18:39 -0700)]
[lldb] Change return type of EventData::GetFlavor

There's no reason these strings need to be in the ConstString
StringPool, they're already string literals with static lifetime.

I plan on addressing other similar functions in follow up commits.

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

18 months ago[mlir][openacc] Relax the single block constraint on acc.loop
Valentin Clement [Tue, 11 Apr 2023 17:42:44 +0000 (10:42 -0700)]
[mlir][openacc] Relax the single block constraint on acc.loop

The acc.loop operation was constrained by the SingleBlockImplicitTerminator.
This patch relax this constraint to allow multiple block in the loop.

Reviewed By: razvanlupusoru

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

18 months ago[RISCV] Print a better error message when a rv32 CPU is used on rv64 and vice versa.
Craig Topper [Tue, 11 Apr 2023 17:41:50 +0000 (10:41 -0700)]
[RISCV] Print a better error message when a rv32 CPU is used on rv64 and vice versa.

Instead of rejecting the CPU outright with no information, try
to diagnose that it doesn't match the triple.

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

18 months ago[RISCV] Remove getCPUFeaturesExceptStdExt.
Craig Topper [Tue, 11 Apr 2023 17:41:46 +0000 (10:41 -0700)]
[RISCV] Remove getCPUFeaturesExceptStdExt.

This function was used to force +64bit or -64bit into the feature
string basd on -mcpu.

It's not entirely clear to me why this was needed.  This informationo
is redundant with the triple. RISCVTargetInfo::initFeatureMap
independently recomputes it from the triple for the feature map.

It is ultimately needed in the backend, but that should be handled
by RISCVSubtarget processing the CPU name.

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

18 months ago[PS4][clang] Pass -flto-jobs argument to orbis-ld
Matthew Voss [Tue, 11 Apr 2023 17:13:58 +0000 (10:13 -0700)]
[PS4][clang] Pass -flto-jobs argument to orbis-ld

Pass -flto-jobs to orbis-ld correctly.

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

18 months ago[Assignment Tracking] Trunc fragments for stores to vars smaller than the alloca
OCHyams [Tue, 11 Apr 2023 17:03:51 +0000 (18:03 +0100)]
[Assignment Tracking] Trunc fragments for stores to vars smaller than the alloca

In D147777 emitDbgAssign was fixed to discard assignments which touched any
bits outside the bounds of a variable. This patch changes emitDbgAssign to
discard assignments which touch bits only outside the variable bounds, and
creates a truncated fragment expression for stores partially overlapping the
variable. This is necessary because the alloca is interpreted as a store (of
undef), meaning without this patch emitDbgAssign would discard the inital
dbg.assign for a variable that is smaller than the alloca.

Reviewed By: jmorse

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

18 months ago[Assignment Tracking][SROA] Don't un-poison dbg.assigns using multiple loc ops
OCHyams [Tue, 11 Apr 2023 16:36:39 +0000 (17:36 +0100)]
[Assignment Tracking][SROA] Don't un-poison dbg.assigns using multiple loc ops

Some dbg.assigns using poison become un-poisoned in SROA. The reason this
happens at all is because dbg.assigns linked to memory intrinsics use poison to
indicate they can't describe the stored value, but the value becomes available
after some optimisations. This needs reworking eventually, but for now we need
to ensure that when it does occur we don't create invalid expressions.

D147312 prevented this occuring when the dbg.assign uses DIArgLists, but that
wasn't a complete fix. We also need to ensure we avoid un-poisoning when the
existing expression uses more than one location operand (DW_OP_arg, n).

Reviewed By: jmorse

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

18 months ago[X86] widen-load-of-small-alloca tests - use X86 check prefix for i686 triples
Simon Pilgrim [Tue, 11 Apr 2023 17:01:32 +0000 (18:01 +0100)]
[X86] widen-load-of-small-alloca tests - use X86 check prefix for i686 triples

We try to use X32 just for gnux32 triples

18 months ago[LV] Use std::make_optional to fix build failure after 082a0046.
Florian Hahn [Tue, 11 Apr 2023 16:51:10 +0000 (17:51 +0100)]
[LV] Use std::make_optional to fix build failure after 082a0046.

Some compilers require std::make_optional(std::move()) to force construction
of the std::optional return value. This should fix the build failure in
  https://lab.llvm.org/buildbot#builders/67/builds/10991

18 months ago[libc++][format] Mark range formaters as complete.
Mark de Wever [Sun, 9 Apr 2023 11:24:21 +0000 (13:24 +0200)]
[libc++][format] Mark range formaters as complete.

The __cpp_lib_format_ranges feature-test macro only depends on P2286R8
and P2585R0. Note since LWG3750 only affects these two C++23 papers
there is nothing to do for older language versions.

(The __cpp_lib_format feature-test macro depends on the incomplete
formatting for chrono. So this part can't be marked as complete yet.)

This completes
- P2286R8 Formatting ranges
- P2585R0 Improving default container formatting

This partly implements
- LWG3750 Too many papers bump __cpp_lib_format

Reviewed By: #libc, ldionne

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

18 months ago[libc++][NFC] Update precondition comments when testing subspan assertions
Louis Dionne [Tue, 11 Apr 2023 16:44:58 +0000 (17:44 +0100)]
[libc++][NFC] Update precondition comments when testing subspan assertions

18 months ago[libc++][format] Improves tests.
Mark de Wever [Sun, 9 Apr 2023 15:19:17 +0000 (17:19 +0200)]
[libc++][format] Improves tests.

This is based on the last open review comment in D144331 and is applied
to all occurrences.

Reviewed By: ldionne, #libc

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

18 months ago[libc++][CI] Prepares building C++ modules.
Mark de Wever [Wed, 15 Mar 2023 07:07:05 +0000 (08:07 +0100)]
[libc++][CI] Prepares building C++ modules.

D144994 adds modules to libc++. In order to test them some newer and
additional tools are required.

CMake 3.26
This is in combination with Clang 16 or newer makes it possible to
conveniently build modules with CMake. Unfortunately CMake 3.26 in our
setup has an issue with unused linker flags. This causes libunwind not
to compile at all. D145596 contains a quick-fix which is in the module
patch. The patch D142957 and followups will contain a proper fix.
Therefore install CMake 3.26 in a separate location, allowing to test
the module patch in the CI.

Ninja 1.11
Building modules requires dynamic rules, which requires this version.
This is a CMake 3.26 requirement to use modules. Note that without using
modules CMake still accepts older Ninja versions.

clang-scan-deps (in the tools package)
This tool is used by CMake to get the module dependencies. Note
strictly this currently will only be used for Clang 16 and Clang 17.
Clang 15 and Clang 14 are not needed. They are installed to keep
updating to Clang 18 and later easier.
(In the future we might not test modular build with all Clang versions,
however at the moment the feature is still in development in both Clang
and libc++ so it would be good to detect regressions.)

Reviewed By: #libc, ldionne

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

18 months ago[libc++] Formats the sytem_error headers.
Mark de Wever [Sun, 9 Apr 2023 16:00:01 +0000 (18:00 +0200)]
[libc++] Formats the sytem_error headers.

Reviewed By: #libc, Mordante

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

18 months ago[Assignment Tracking] Fix replaceVariableLocationOp for dbg.assign with DIArgList
OCHyams [Tue, 11 Apr 2023 15:56:05 +0000 (16:56 +0100)]
[Assignment Tracking] Fix replaceVariableLocationOp for dbg.assign with DIArgList

The last time this function was updated DIArgLists were not supported for
dbg.assigns. Without this patch it's possible to now dereference an invalid
(the end) iterator. This occurs when the Address component gets replaced and
there's a DIArgList for the Value component (the contained values are
irrelevant).

The added unittest crashes without the code change in this patch.

Reviewed By: jmorse

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

18 months ago[mlir][linalg] Enable propagation of pack/unpack ops through non-elementwise
Quinn Dawkins [Sat, 1 Apr 2023 19:17:45 +0000 (15:17 -0400)]
[mlir][linalg] Enable propagation of pack/unpack ops through non-elementwise

Allows pack propagation through non-elementwise generics as long as all
tiled dimensions have parallel iterator types and are only indexed with
affine dim expressions by any of the operands.

This enables unpack propagation cases where the result type is different
from the current unpack destination tensor and thus motivates a similar
helper as the for pack for creating a destination tensor based on
pack information.

Outer dim permutations are allowed to permute reduction dims, however
remains unsupported for non-affine dim indexing map results.
Additionally ops with gather semantics now explicitly prohibit propagation.

Pack/unpack propagation through reductions may not always be beneficial
so user control over propagation decisions is made available through
a control function similar to the one for fusion.

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

18 months ago[InstCombine] Teach alloca replacement to handle `addrspacecast`
Michael Liao [Thu, 23 Mar 2023 20:29:14 +0000 (16:29 -0400)]
[InstCombine] Teach alloca replacement to handle `addrspacecast`

- As the address space cast may not be valid on a specific target,
  `addrspacecast` is not handled when an `alloca` is able to be replaced
  with the source of memcpy/memmove. This patch addresses that by
  querying a target hook on whether that address space cast is valid.
  For example, on most GPU targets, the cast from a global pointer to a
  generic pointer is valid.
- If that cast is allowedd (by querying `isValidAddrSpaceCast`), the
  replacement is enhanced to handle that `addrspacecast` as well.

Reviewed By: yaxunl

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

18 months ago[mlir][MemRef] fix error message in ReinterpretCastOp::verify
Felix Schneider [Tue, 11 Apr 2023 15:36:41 +0000 (17:36 +0200)]
[mlir][MemRef] fix error message in ReinterpretCastOp::verify

The error message that is displayed when the offset in the MemRefType of
the Op's result is unexpected was the wrong way around, mixing up
expected and actual offset.

Reviewed By: ftynse

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

18 months ago[MLIR][OpenMP] Add conversion support from FIR to LLVM Dialect for OMP Target
Akash Banerjee [Tue, 11 Apr 2023 15:36:57 +0000 (16:36 +0100)]
[MLIR][OpenMP] Add conversion support from FIR to LLVM Dialect for OMP Target

This enables conversion of OpenMP Target op with region from FIR Dialect to LLVM IR Dialect.

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

18 months ago[mlir] fix a crash in linalg.generic parser
Alex Zinenko [Tue, 11 Apr 2023 13:23:13 +0000 (13:23 +0000)]
[mlir] fix a crash in linalg.generic parser

Report an error when the `iterator_types` attribute is missing.

Reviewed By: nicolasvasilache

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

18 months ago[Flang][OpenMP] Add Fortran lowering support for Target directive
Akash Banerjee [Tue, 11 Apr 2023 15:34:56 +0000 (16:34 +0100)]
[Flang][OpenMP] Add Fortran lowering support for Target directive

This patch adds Fortran lowering support for OMP Target directive along with tests.

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

18 months ago[mlir] make transform interpreter debug spew less verbose
Alex Zinenko [Tue, 11 Apr 2023 13:25:37 +0000 (13:25 +0000)]
[mlir] make transform interpreter debug spew less verbose

In particular, move the printing of the top-level payload after each
transform under the "full output" debug flag, it is rarely useful and
excessively long. Also don't print the regions of the transform
operation being applied as each individual operation in the region is
likely going to be applied later by itself and therefore printed.

Reviewed By: nicolasvasilache

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

18 months ago[MLIR][OpenMP] Added map clause support for Target
Akash Banerjee [Tue, 11 Apr 2023 12:49:19 +0000 (13:49 +0100)]
[MLIR][OpenMP] Added map clause support for Target

Added map clause support for the OMP Target directive with test.

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

18 months ago[InstrProf] Temporal Profiling
Ellis Hoag [Tue, 11 Apr 2023 14:58:47 +0000 (07:58 -0700)]
[InstrProf] Temporal Profiling

As described in [0], this extends IRPGO to support //Temporal Profiling//.

When `-pgo-temporal-instrumentation` is used we add the `llvm.instrprof.timestamp()` intrinsic to the entry of functions which in turn gets lowered to a call to the compiler-rt function `INSTR_PROF_PROFILE_SET_TIMESTAMP()`. A new field in the `llvm_prf_cnts` section stores each function's timestamp. Then in `llvm-profdata merge` we convert these function timestamps into a //trace// and add it to the indexed profile.

Since these traces could significantly increase the profile size, we've added `-max-temporal-profile-trace-length` and `-temporal-profile-trace-reservoir-size` to limit the length of a trace and the number of traces in a profile, respectively.

In a future diff we plan to use these traces to construct an optimized function order to reduce the number of page faults during startup.

Special thanks to Julian Mestre for helping with reservoir sampling.

[0] https://discourse.llvm.org/t/rfc-temporal-profiling-extension-for-irpgo/68068

Reviewed By: snehasish

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

18 months ago[Attributor] Name instructions in tests (NFC)
Nikita Popov [Tue, 11 Apr 2023 15:16:10 +0000 (17:16 +0200)]
[Attributor] Name instructions in tests (NFC)

18 months ago[GuardUtils] Add asserts about loop varying widenable conditions
Anna Thomas [Thu, 6 Apr 2023 21:04:52 +0000 (17:04 -0400)]
[GuardUtils] Add asserts about loop varying widenable conditions

We have now seen two miscompiles because of widening widenable
conditions at incorrect IR points and thereby changing a branch's loop
invariant condition to a loop-varying one (see PR60234 and PR61963).

This patch adds asserts in common guard utilities that we use for
widening to proactively catch these bugs in future.
Note that these asserts will not fire if we were to sink a widenable
condition from out of a loop into a loop (that's also incorrect for the
same reason as above).

Tested this without the fix for PR60234 (guard widening miscompile) and
confirmed the assert fires.

WARNING: Sometimes, the assert can fire if we failed to hoist the
invariant condition out of the loop. This is a pass-ordering issue or a
limitation in LICM, which would need an investigation. See details in
review.

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

18 months ago[Transforms] Convert some tests to opaque pointers (NFC)
Nikita Popov [Tue, 11 Apr 2023 14:41:33 +0000 (16:41 +0200)]
[Transforms] Convert some tests to opaque pointers (NFC)

18 months ago[VPlan] Allow building a VPlan to may fail.
Florian Hahn [Tue, 11 Apr 2023 14:41:17 +0000 (15:41 +0100)]
[VPlan] Allow building a VPlan to may fail.

Update the planning code constructing VPlan to allow building VPlans to
fail. This allows us to gradually shift some legality checks to VPlan
construction. The first candidate is checking if all users of
first-order recurrence phis can be sunk past the recipe computing the
previous value.

The new functionality will be used by D142886 which is approved and will
be landed shortly.

Reviewed By: Ayal

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

18 months ago[FunctionAttrs] Add cleanuppad test (NFC)
Nikita Popov [Tue, 11 Apr 2023 14:30:09 +0000 (16:30 +0200)]
[FunctionAttrs] Add cleanuppad test (NFC)

18 months ago[AMDGPU] NFC. Clean up check prefixes in fcmp test
Joe Nash [Mon, 10 Apr 2023 18:23:42 +0000 (14:23 -0400)]
[AMDGPU] NFC. Clean up check prefixes in fcmp test

Fix the test introduced in D136592 which appeared to have a few check lines
containing an un-checked prefix "GISEL-GFX".
Also canonicalize the other prefixes to minimize churn if SDag and GISel
diverge.

Reviewed By: arsenm

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

18 months ago[mlir][math] Expand math.ceilf to truncate, compares and increments
Balaji V. Iyer [Tue, 11 Apr 2023 13:43:15 +0000 (13:43 +0000)]
[mlir][math] Expand math.ceilf to truncate, compares and increments

Ceilf are pushed directly to libm. This is problematic for
situations where libm is not available. This patch will break down
a ceilf function to truncate followed by an increment if the
truncated value is smaller than the input value.

Reviewed By: rsuderman

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

18 months ago[ARM] Increase the Scalarized cost of masked gather/scatter operations
David Green [Tue, 11 Apr 2023 13:49:46 +0000 (14:49 +0100)]
[ARM] Increase the Scalarized cost of masked gather/scatter operations

If a gather/scatter is masked and will need to be scalarized then the cost
should be higher than we currently produce. An additional cost for scalarizing
the mask, extracting i1s and branching on the result needs to be added, which
this patch gives a cost of 5.

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

18 months ago[DAG] Peek through zext/trunc when matching (or (and X, (not Y)), Y).
Amaury Séchet [Fri, 7 Apr 2023 23:31:13 +0000 (23:31 +0000)]
[DAG] Peek through zext/trunc when matching (or (and X, (not Y)), Y).

This shows up in the wild, notably as a regression in D127115 .

Depends on D147821

Reviewed By: RKSimon

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

18 months ago[libc][math] Update range reduction step for log2f and improve its performance.
Tue Ly [Fri, 7 Apr 2023 02:38:04 +0000 (22:38 -0400)]
[libc][math] Update range reduction step for log2f and improve its performance.

Simplify the range reduction steps by choosing the reduction constants
carefully so that the reduced arguments v = r*m_x - 1 and v^2 are exact in double
precision, even without FMA instructions, and -2^-8 <= v < 2^-7.

Reviewed By: zimmermann6

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

18 months ago[NFC] format llvm/lib/Target/WebAssembly/AsmParser
Congcong Cai [Tue, 11 Apr 2023 13:41:28 +0000 (15:41 +0200)]
[NFC] format llvm/lib/Target/WebAssembly/AsmParser

Reviewed By: aheejin

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

18 months ago[mlir][Linalg] NFC - Improve debug messages around padding
Nicolas Vasilache [Tue, 11 Apr 2023 12:52:48 +0000 (05:52 -0700)]
[mlir][Linalg] NFC - Improve debug messages around padding

18 months ago[X86] Remove unnecessary OneUse limit from combineToExtendBoolVectorInReg (vXi1 bitca...
Simon Pilgrim [Tue, 11 Apr 2023 13:18:35 +0000 (14:18 +0100)]
[X86] Remove unnecessary OneUse limit from combineToExtendBoolVectorInReg (vXi1 bitcast(iX Cond)) select expansion

We already allow multiple uses when calling from combineSext/combineZext - adding hasOneUse seems to have been a copy+paste from some of the similar AVX512 vselect folds.

Fixes #62014

18 months ago[NFC] Add test cases for D147827
Amaury Séchet [Tue, 11 Apr 2023 12:51:08 +0000 (12:51 +0000)]
[NFC] Add test cases for D147827

18 months ago[NFC] Autogenerate CodeGen/X86/and-or-fold.ll .
Amaury Séchet [Tue, 11 Apr 2023 13:13:17 +0000 (13:13 +0000)]
[NFC] Autogenerate CodeGen/X86/and-or-fold.ll .

18 months ago[DbgHistoryCalculator] Improve debug messages
Felipe de Azevedo Piovezan [Thu, 16 Mar 2023 20:35:24 +0000 (16:35 -0400)]
[DbgHistoryCalculator] Improve debug messages

I've found that a frequent source of debug information loss in optimized
code is due to DEBUG_VALUE intrinsics in a position of the instruction
stream that is outside the scope of the variable it describes.

Tracking these is pretty difficult with the existing debug messages of
the history calculator; this patch addresses the issue by making it
obvious when this event happens.

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

18 months ago[AMDGPU][NFC] Regenerate test checks for sub.ll
skc7 [Tue, 11 Apr 2023 12:24:22 +0000 (17:54 +0530)]
[AMDGPU][NFC] Regenerate test checks for sub.ll

18 months ago[libc] remove unsupported GCC attribute
Guillaume Chatelet [Tue, 11 Apr 2023 12:21:11 +0000 (12:21 +0000)]
[libc] remove unsupported GCC attribute

This is ok as we build the libraries with `-ffreestanding` which implies `-fno-builtin` on all functions.

18 months agoRevert "[X86][mem-fold] Speed up test by not re-generating the .inc file"
Nico Weber [Tue, 11 Apr 2023 12:17:32 +0000 (08:17 -0400)]
Revert "[X86][mem-fold] Speed up test by not re-generating the .inc file"

This reverts commit 070233dab0fdc6098a8b645774003fb0511e5962.

It also reverts follow-ups 2588e831af4a2240825215670c53717f07a95b3a and
027f60a6e9fa0b2ddf9eecc65aab8fde0b527f51.

18 months ago[libc][NFC] Use new approach based on types to code memmove
Guillaume Chatelet [Tue, 11 Apr 2023 11:53:11 +0000 (11:53 +0000)]
[libc][NFC] Use new approach based on types to code memmove

18 months agoRecommit "[AArch64][TTI] Cost model FADD/FSUB/FNEG""
Sjoerd Meijer [Tue, 11 Apr 2023 11:40:14 +0000 (12:40 +0100)]
Recommit "[AArch64][TTI] Cost model FADD/FSUB/FNEG""

Fixed two test cases that relied on Asserts, and added a fallthrough
annotation to the switch case.

18 months ago[CodeGen] Add Pre-commit tests for D146988
Igor Kirillov [Wed, 5 Apr 2023 20:43:36 +0000 (20:43 +0000)]
[CodeGen] Add Pre-commit tests for D146988

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

18 months ago[DAG] Peek through zext/trunc in haveNoCommonBitsSet.
Amaury Séchet [Fri, 7 Apr 2023 21:32:31 +0000 (21:32 +0000)]
[DAG] Peek through zext/trunc in haveNoCommonBitsSet.

This limitation was discovered thanks to some regression in D127115 .

Reviewed By: RKSimon

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

18 months ago[X86] Improve test coverage for Issue #62014
Simon Pilgrim [Tue, 11 Apr 2023 11:18:56 +0000 (12:18 +0100)]
[X86] Improve test coverage for Issue #62014

Ensure we test different vector element sizes

18 months ago[X86] Split off test coverage for Issue #62014
Simon Pilgrim [Tue, 11 Apr 2023 10:57:23 +0000 (11:57 +0100)]
[X86] Split off test coverage for Issue #62014

vector-bo-select.ll should only be used for binop identity select tests

18 months ago[Pipelines] Drop outdated comments about O0 (NFC)
Nikita Popov [Tue, 11 Apr 2023 11:34:20 +0000 (13:34 +0200)]
[Pipelines] Drop outdated comments about O0 (NFC)

These methods can be called with an O0 level nowadays.

18 months ago[libc][NFC] Use new approach based on types to code memset
Guillaume Chatelet [Tue, 11 Apr 2023 11:31:38 +0000 (11:31 +0000)]
[libc][NFC] Use new approach based on types to code memset

18 months ago[clang][dataflow][NFC] Remove unused parameter from `insertIfGlobal()`.
Martin Braenne [Tue, 11 Apr 2023 10:21:25 +0000 (10:21 +0000)]
[clang][dataflow][NFC] Remove unused parameter from `insertIfGlobal()`.

Reviewed By: gribozavr2

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

18 months ago[Pipelines] Move AddDescriminators to consistent position
Nikita Popov [Tue, 11 Apr 2023 11:19:06 +0000 (13:19 +0200)]
[Pipelines] Move AddDescriminators to consistent position

In the non-ThinLTO pipeline this was directly before PipelineStartEP,
in the ThinLTO pipeline it was directly after. I don't think the
specific position matters here, just make sure it's the same for
both pipelines.

18 months ago[Pipelines] Use isLTOPreLink() helper in more places (NFC)
Nikita Popov [Tue, 11 Apr 2023 11:08:00 +0000 (13:08 +0200)]
[Pipelines] Use isLTOPreLink() helper in more places (NFC)

18 months ago[Pipelines] Remove redundant O0 check (NFC)
Nikita Popov [Tue, 11 Apr 2023 11:05:56 +0000 (13:05 +0200)]
[Pipelines] Remove redundant O0 check (NFC)

buildModuleSimplificationPipeline() is not used for O0.

18 months agoAMDGPU: Fold fneg into bitcast of build_vector
Matt Arsenault [Thu, 26 Jan 2023 19:46:00 +0000 (15:46 -0400)]
AMDGPU: Fold fneg into bitcast of build_vector

The math libraries have a lot of code that performs
manual sign bit operations by bitcasting doubles to int2
and doing bithacking on them. This is a bad canonical form
we should rewrite to use high level sign operations directly
on double. To avoid codegen regressions, we need to do a better
job moving fnegs to operate only on the high 32-bits.

This is only halfway to fixing the real case.

18 months ago[X86] Add test coverage for Issue #62014
Simon Pilgrim [Tue, 11 Apr 2023 10:36:03 +0000 (11:36 +0100)]
[X86] Add test coverage for Issue #62014

Added multiuse checks for v8i16 and v8f32 cases

18 months ago[mlir] rename Math/dependent-dialect.mlir to depends-on-arith.mlir
Alex Zinenko [Tue, 11 Apr 2023 10:35:46 +0000 (12:35 +0200)]
[mlir] rename Math/dependent-dialect.mlir to depends-on-arith.mlir

18 months ago[mlir] make Math dialect depend on Arith dialect
Alex Zinenko [Tue, 11 Apr 2023 08:41:29 +0000 (10:41 +0200)]
[mlir] make Math dialect depend on Arith dialect

Ops from the Math dialect use fastmath attributes defined in Arith.
Therefore Math dialect must declare a dependency on Arith for proper
construction and parsing.

Reviewed By: tpopp

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

18 months ago[X86] vector-bo-select.ll - add SSE test coverage
Simon Pilgrim [Tue, 11 Apr 2023 10:26:00 +0000 (11:26 +0100)]
[X86] vector-bo-select.ll - add SSE test coverage

18 months ago[LICM][NFC] Unify arithmetic statistics collection
Max Kazantsev [Tue, 11 Apr 2023 10:18:57 +0000 (17:18 +0700)]
[LICM][NFC] Unify arithmetic statistics collection

Avoid divergence b/w different kinds of hoisting with reassociation.
Make them all collect general stat NumHoisted and also specific stats
for each particular transform.

18 months ago[LiveInterval] Fix live range overlap check
Momchil Velikov [Tue, 11 Apr 2023 08:45:15 +0000 (09:45 +0100)]
[LiveInterval] Fix live range overlap check

Reviewed By: MatzeB

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

18 months ago[LICM][NFC] Do not forward declaration of hoistMinMax
Max Kazantsev [Tue, 11 Apr 2023 10:06:20 +0000 (17:06 +0700)]
[LICM][NFC] Do not forward declaration of hoistMinMax

They all are now handled by hoistArithmetics, and only it should be
forwarded.

18 months ago[Test] Precommit negative test on add/sub hoisting
Max Kazantsev [Tue, 11 Apr 2023 10:03:00 +0000 (17:03 +0700)]
[Test] Precommit negative test on add/sub hoisting

Should not optimize here because no-overflow is not proved.

18 months ago[LICM] Fix assert failure in no-allowspeculation mode
Nikita Popov [Tue, 11 Apr 2023 09:54:42 +0000 (11:54 +0200)]
[LICM] Fix assert failure in no-allowspeculation mode

In this case the source GEP might not be hoisted even though it
has invariant operands. For now just bail out, but we might need
additional checks for AllowSpeculation in these special-case
reassociation folds.

18 months ago[X86][MC] Emit instructions into SmallVector
Alexis Engelke [Fri, 10 Mar 2023 14:23:22 +0000 (15:23 +0100)]
[X86][MC] Emit instructions into SmallVector

Depends on D145791

Storing instruction bytes directly in a SmallVector instead of a
raw_ostream yields better encoding performance (in some applications,
the improvment is ~1% of the complete back-end time).

Reviewed By: MaskRay, Amir

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

18 months ago[FastISel] Correctly report prototype on miss
Alexis Engelke [Thu, 9 Mar 2023 18:15:24 +0000 (19:15 +0100)]
[FastISel] Correctly report prototype on miss

The type of a function is nowadays just an opaque pointer, which is not
helpful when analyzing FastISel misses. Instead print the actual
function type of the function.

Reviewed By: efriedma

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

18 months ago[amdgpu][nfc] Update comments on LDS lowering
Jon Chesterfield [Tue, 11 Apr 2023 09:47:53 +0000 (10:47 +0100)]
[amdgpu][nfc] Update comments on LDS lowering

18 months ago[llvm][clang] Correct example in -mcpu-help text
David Spickett [Tue, 11 Apr 2023 09:34:01 +0000 (09:34 +0000)]
[llvm][clang] Correct example in -mcpu-help text

This used to say:
For example, clang --target=aarch64-unknown-linux-gui -mcpu=cortex-a35

Which works but I think it was meant to be `-gnu` not `-gui`. From my
AArch64 Linux build:
```
$ ./bin/clang --version
clang version 17.0.0 <...>
Target: aarch64-unknown-linux-gnu
```

Originally added in af857b93df36a983a27a82455c0dea39f53da5b1.

18 months agoRevert "[AArch64][TTI] Cost model FADD/FSUB/FNEG"
Sjoerd Meijer [Tue, 11 Apr 2023 09:04:38 +0000 (10:04 +0100)]
Revert "[AArch64][TTI] Cost model FADD/FSUB/FNEG"

This reverts commit d0027e0be990df60f6f826123f035286a168f288.

Need to look at 2 test failures.

18 months ago[AMDGPU] Add MMOs for GFX11 Streamout Instructions
Diana Picus [Mon, 13 Mar 2023 15:37:44 +0000 (16:37 +0100)]
[AMDGPU] Add MMOs for GFX11 Streamout Instructions

The GFX11 NGG Streamout Instructions perform atomic operations on
dedicated registers. At the moment, they lack machine memory operands,
which causes the si-memory-legalizer pass to treat them conservatively
and introduce several unnecessary waits and cache invalidations.

This patch introduces a new address space to represent these special
registers and teaches instruction selection to add memory operands with
this new address space to DS_ADD/SUB_GS_REG_RTN.

Since this address space is meant to be compiler-internal, we move it
up a bit from the other address spaces and give it the number 128.
According to the LLVM Language Reference, address space numbers can go
all the way up to 2^24, but I'm not sure how well this is supported in
practice [1], so using a smaller number seems safer.

[1] https://github.com/llvm/llvm-project/blob/0107513fe79da7670e37c29c0862794a2213a89c/llvm/utils/TableGen/IntrinsicEmitter.cpp#L401

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

18 months agoclang-format file I'm about to touch. NFCI
Diana Picus [Tue, 11 Apr 2023 08:23:51 +0000 (10:23 +0200)]
clang-format file I'm about to touch. NFCI

18 months ago[WebAssembly] Correctly check end_if/end_try with else/catch
Heejin Ahn [Sun, 9 Apr 2023 10:28:15 +0000 (03:28 -0700)]
[WebAssembly] Correctly check end_if/end_try with else/catch

When we encounter an `else`, `catch`, or `catch_all`, we currently just
push the structure `NestingType` and don't preserve the original `if`
and `try`'s signature. So after we pass `else`/`catch`/`catch_all`, we
can't check if the values on stack have the correct types when we
encounter `end_if` or `end_try`. This CL fixes the issue, and modifies
the existing test to be correct (some of them had `try` without
`catch`).

Reviewed By: dschuff

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

18 months ago[WebAssembly] Handle block-like structures consistently in type checker
Heejin Ahn [Sat, 8 Apr 2023 14:11:43 +0000 (07:11 -0700)]
[WebAssembly] Handle block-like structures consistently in type checker

We disable type check in unreachable code, but when the unreachable code
is enclosed within a block-like structure, the block as a whole has a
valid type and we should continue type checking after the block. But it
looks we currently only do that for blocks and not other block-like
structures (`loop`s, `try`s, and `if`s). Also unreachable code within
`if`'s true body shouldn't disable type checking in `else` body, and
that in `try` body shouldn't disable type checking in `catch/catch_all`
body.

This also causes the values/types on the stack to be correctly checked
when encounterint `catch`, `catch_all`, and `delegate`.

Reviewed By: dschuff

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