platform/upstream/llvm.git
20 months ago[Support] Use std::is_convertible_v (NFC)
Kazu Hirata [Sun, 20 Nov 2022 19:52:04 +0000 (11:52 -0800)]
[Support] Use std::is_convertible_v (NFC)

20 months ago[ADT] Use std::is_copy_constructible_v (NFC)
Kazu Hirata [Sun, 20 Nov 2022 19:32:31 +0000 (11:32 -0800)]
[ADT] Use std::is_copy_constructible_v (NFC)

20 months ago[X86] IceLakeServer - PACKS instructions take latency 3cy
Simon Pilgrim [Sun, 20 Nov 2022 19:28:27 +0000 (19:28 +0000)]
[X86] IceLakeServer - PACKS instructions take latency 3cy

This appears to be a slow down vs Skylake (which the model was copied off) - confirmed with uops.info / instlatx64

Noticed as D138359 was reporting that many of the PACKS overrides were redundant, but were in fact incorrect

20 months ago[LLDB] Recognize `std::noop_coroutine()` in `std::coroutine_handle` pretty printer
Adrian Vogelsgesang [Thu, 25 Aug 2022 01:12:08 +0000 (18:12 -0700)]
[LLDB] Recognize `std::noop_coroutine()` in `std::coroutine_handle` pretty printer

With this commit, the `std::coroutine_handle` pretty printer now
recognizes `std::noop_coroutine()` handles. For noop coroutine handles,
we identify use the summary string `noop_coroutine` and we don't print
children

Instead of
```
(std::coroutine_handle<void>) $3 = coro frame = 0x555555559058 {
  resume = 0x00005555555564f0 (a.out`std::__1::coroutine_handle<std::__1::noop_coroutine_promise>::__noop_coroutine_frame_ty_::__dummy_resume_destroy_func() at noop_coroutine_handle.h:79)
  destroy = 0x00005555555564f0 (a.out`std::__1::coroutine_handle<std::__1::noop_coroutine_promise>::__noop_coroutine_frame_ty_::__dummy_resume_destroy_func() at noop_coroutine_handle.h:79)
}
```

we now print

```
(std::coroutine_handle<void>) $3 = noop_coroutine
```

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

20 months ago[libc++][NFC] Refactor run-buildbot to make it closer to our buildkite pipeline
Louis Dionne [Fri, 18 Nov 2022 21:17:10 +0000 (16:17 -0500)]
[libc++][NFC] Refactor run-buildbot to make it closer to our buildkite pipeline

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

20 months ago[ADT] Remove deprecated `llvm::array_lengthof`
Joe Loser [Sun, 20 Nov 2022 05:01:29 +0000 (22:01 -0700)]
[ADT] Remove deprecated `llvm::array_lengthof`

`llvm::array_lengthof` was marked deprecated a bit over two months ago in
5758c824dab4851fd061201483987b338c051417.  Now, finally remove it.  Since this
function was the only one in `STLArrayExtras.h`, get rid of the whole header.

D118342 (2022-01) moved the function to `STLArrayExtras.h`. This function should
have very few users now (MaskRay made some downstream inspection in
https://reviews.llvm.org/D133502#3777981). D133502 deprecated the function.

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

20 months ago[ADT] Simplify determining size for joining items
Joe Loser [Sun, 20 Nov 2022 05:11:18 +0000 (22:11 -0700)]
[ADT] Simplify determining size for joining items

`join_items_size` uses recursive function templates for determining the total
items size.  Instead, use fold expressions since we have C++17 available now.

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

20 months ago[lldb] Fix test expectation in `TestCoroutineHandle.py` for 32-bit systems
Adrian Vogelsgesang [Sun, 20 Nov 2022 14:52:15 +0000 (06:52 -0800)]
[lldb] Fix test expectation in `TestCoroutineHandle.py` for 32-bit systems

20 months ago[llvm] Remove unused forward declarations (NFC)
Kazu Hirata [Sun, 20 Nov 2022 17:59:36 +0000 (09:59 -0800)]
[llvm] Remove unused forward declarations (NFC)

20 months ago[Clang] Add papers approved in Kona by WG21 to the C++ status page
Corentin Jabot [Sun, 20 Nov 2022 17:51:52 +0000 (18:51 +0100)]
[Clang] Add papers approved in Kona by WG21 to the C++ status page

Approved core issues will be updated separately through an update
of the defect report list when a new core issue list is
published.

20 months ago[MCA][X86] Add missing test coverage for BWI instructions
Simon Pilgrim [Sun, 20 Nov 2022 17:19:50 +0000 (17:19 +0000)]
[MCA][X86] Add missing test coverage for BWI instructions

20 months ago[MCA][X86] Add test coverage for IFMA instructions
Simon Pilgrim [Sun, 20 Nov 2022 16:00:26 +0000 (16:00 +0000)]
[MCA][X86] Add test coverage for IFMA instructions

20 months ago[gn build] port af8c49dc1ec4
Nico Weber [Sun, 20 Nov 2022 17:02:33 +0000 (12:02 -0500)]
[gn build] port af8c49dc1ec4

20 months ago[libc++] Introduce a setting to remove fstream from the library
Louis Dionne [Fri, 18 Nov 2022 20:01:33 +0000 (15:01 -0500)]
[libc++] Introduce a setting to remove fstream from the library

This allows porting the library to platforms that are able to support
<iostream> but that do not have a notion of a filesystem, and where it
hence doesn't make sense to support std::fstream (and never will).

Also, remove reliance on <fstream> in various tests that didn't
actually need it.

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

20 months ago[LLD][COFF] Survive empty and invalid PCH signature
Alexandre Ganea [Sun, 20 Nov 2022 15:24:02 +0000 (10:24 -0500)]
[LLD][COFF] Survive empty and invalid PCH signature

Solve two issues that showed up when using LLD with Unreal Engine & FASTBuild:
1. It seems the S_OBJNAME record doesn't always record the "precomp signature". We were relying on that to match the PCH.OBJ with their dependent-OBJ.
2. MSVC link.exe is able to link a PCH.OBJ when the "precomp signatureƈ doesn't match, but LLD was failing. This was occuring since the Unreal Engine Build Tool was compiling the PCH.OBJ, but the dependent-OBJ were compiled & cached through FASTBuild. Upon a clean rebuild, the PCH.OBJs were recompiled by the Unreal Build Tool, thus the "precomp signatures" were changing; however the OBJs were already cached by FASTBuild, thus having an old "precomp signatures".

We now ignore "precomp signatures" and properly fallback to cmd-line name lookup, like MSVC link.exe does, and only fail if the PCH.OBJ type stream doesn't match the count expected by the dependent-OBJ.

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

20 months ago[X86] Fix atomic rmw intrinsic expansion for non-opaque pointers
Benjamin Kramer [Sun, 20 Nov 2022 14:24:14 +0000 (15:24 +0100)]
[X86] Fix atomic rmw intrinsic expansion for non-opaque pointers

This is a bit annoying, but there are still users out there that got
broken by this (this time it was numba). We need to keep some barebones
support around until non-opaque pointers are completely gone.

20 months agoReapply "[LLDB] Devirtualize coroutine promise types for `std::coroutine_handle`"
Adrian Vogelsgesang [Wed, 24 Aug 2022 03:53:00 +0000 (20:53 -0700)]
Reapply "[LLDB] Devirtualize coroutine promise types for `std::coroutine_handle`"

The original commit was missing a `ClangASTImporter::CopyType` call.
Original commit message:

This commit teaches the `std::coroutine_handle` pretty-printer to
devirtualize type-erased promise types. This is particularly useful to
resonstruct call stacks, either of asynchronous control flow or of
recursive invocations of `std::generator`. For the example recently
introduced by https://reviews.llvm.org/D132451, printing the `__promise`
variable now shows

```
(std::__coroutine_traits_sfinae<task, void>::promise_type) __promise = {
  continuation = coro frame = 0x555555562430 {
    resume = 0x0000555555556310 (a.out`task detail::chain_fn<1>() at llvm-nested-example.cpp:66)
    destroy = 0x0000555555556700 (a.out`task detail::chain_fn<1>() at llvm-nested-example.cpp:66)
    promise = {
      continuation = coro frame = 0x5555555623e0 {
        resume = 0x0000555555557070 (a.out`task detail::chain_fn<2>() at llvm-nested-example.cpp:66)
        destroy = 0x0000555555557460 (a.out`task detail::chain_fn<2>() at llvm-nested-example.cpp:66)
        promise = {
          ...
        }
      }
      result = 0
    }
  }
  result = 0
}
```

(shortened to keep the commit message readable) instead of

```
(std::__coroutine_traits_sfinae<task, void>::promise_type) __promise = {
  continuation = coro frame = 0x555555562430 {
    resume = 0x0000555555556310 (a.out`task detail::chain_fn<1>() at llvm-nested-example.cpp:66)
    destroy = 0x0000555555556700 (a.out`task detail::chain_fn<1>() at llvm-nested-example.cpp:66)
  }
  result = 0
}
```

Note how the new debug output reveals the complete asynchronous call
stack: our own function resumes `chain_fn<1>` which in turn will resume
`chain_fn<2>` and so on. Thereby this change allows users of lldb to
inspect the logical coroutine call stack without using any custom debug
scripts (although the display is still a bit clumsy. It would be nicer
to also integrate this into lldb's backtrace feature, but I don't know
how to do so)

The devirtualization currently works by introspecting the function
pointed to by the `destroy` pointer. (The `resume` pointer is not worth
much, given that for the final suspend point `resume` is set to a
nullptr. We have to use the `destroy` pointer instead.) We then look
for a `__promise` variable inside the `destroy` function. This
`__promise` variable is synthetically generated by LLVM, and looking at
its type reveals the type-erased promise_type.

This approach only works for clang-generated code, though. While gcc
also adds a `_Coro_promise` variable to the `resume` function, it does
not do so for the `destroy` function. However, we can't use the `resume`
function, as it will be reset to a nullptr at the final suspension
point. For the time being, I am happy with de-virtualization only working
for clang. A follow-up commit will further improve devirtualization and
also expose the variables spilled to the coroutine frame. As part of
this, I will also revisit gcc support.

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

20 months ago[X86] Remove unnecessary SHLD32rri8/SHRD16rri8 instruction override from bdver2 model
Simon Pilgrim [Sun, 20 Nov 2022 14:17:44 +0000 (14:17 +0000)]
[X86] Remove unnecessary SHLD32rri8/SHRD16rri8 instruction override from bdver2 model

Reported by D138359 - the override matches the WriteSHDrri base sched def

20 months ago[X86] Remove unnecessary XGETBV instruction overrides from znver1/znver2 models
Simon Pilgrim [Sun, 20 Nov 2022 14:05:05 +0000 (14:05 +0000)]
[X86] Remove unnecessary XGETBV instruction overrides from znver1/znver2 models

Reported by D138359 - znver models already treats all WriteSystem sched instructions as microcoded

20 months ago[MCA][X86] Add test coverage for XSAVE instructions
Simon Pilgrim [Sun, 20 Nov 2022 13:56:04 +0000 (13:56 +0000)]
[MCA][X86] Add test coverage for XSAVE instructions

20 months ago[X86] Remove unnecessary RDPMC/RDTSC instruction overrides from znver1/znver2 models
Simon Pilgrim [Sun, 20 Nov 2022 13:19:49 +0000 (13:19 +0000)]
[X86] Remove unnecessary RDPMC/RDTSC instruction overrides from znver1/znver2 models

Reported by D138359

20 months ago[X86] Remove unnecessary string instruction overrides from znver1/znver2 models
Simon Pilgrim [Sun, 20 Nov 2022 12:57:44 +0000 (12:57 +0000)]
[X86] Remove unnecessary string instruction overrides from znver1/znver2 models

Reported by D138359 - they were being overridden as WriteMicrocoded despite already being declared WriteMicrocoded

It also fixes a rather funny instregex mismatch that was matching the movsldup shuffle by mistake

20 months ago[X86] Remove unnecessary bit test instruction overrides from znver2 model
Simon Pilgrim [Sun, 20 Nov 2022 12:22:11 +0000 (12:22 +0000)]
[X86] Remove unnecessary bit test instruction overrides from znver2 model

Reported by D138359 and confirmed with AMD SoG - matches znver1 model

20 months ago[X86] Improve LOOP/LOOPE/LOOPNE schedule on SandyBridge model
Simon Pilgrim [Sun, 20 Nov 2022 12:13:02 +0000 (12:13 +0000)]
[X86] Improve LOOP/LOOPE/LOOPNE schedule on SandyBridge model

D138359 was reporting that this override was superfluous, but it had never been setup - I took the numbers from uops.info (I couldn't find an estimate in Intel docs).

20 months ago[MCA][X86] Add test coverage for LOOP/LOOPE/LOOPNE instructions
Simon Pilgrim [Sun, 20 Nov 2022 11:35:21 +0000 (11:35 +0000)]
[MCA][X86] Add test coverage for LOOP/LOOPE/LOOPNE instructions

These were missed for some reason - only noticed this while investigating a FIXME in the SandyBridge model

Also sync the znver2/znver3 tests which had been missed when LOCK test coverage was added

20 months ago[X86] Remove unnecessary zmm shuffle instruction overrides from IceLake model
Simon Pilgrim [Sun, 20 Nov 2022 10:48:27 +0000 (10:48 +0000)]
[X86] Remove unnecessary zmm shuffle instruction overrides from IceLake model

Reported by D138359 and confirmed with Intel AoM, Agner + uops.info

20 months ago[X86] znver2 - (V)EXTRACTPSrr takes 2 uops
Simon Pilgrim [Sat, 19 Nov 2022 18:53:02 +0000 (18:53 +0000)]
[X86] znver2 - (V)EXTRACTPSrr takes 2 uops

D138359 was reporting that the EXTRACTPSrr override was unnecessary, however the AMD SoG and Agner both confirm that both the rr and rm versions take 2uops (matching znver1)

20 months ago[ADT] Remove None=1 MSVC workaround
Fangrui Song [Sun, 20 Nov 2022 09:07:03 +0000 (09:07 +0000)]
[ADT] Remove None=1 MSVC workaround

This workaround from 0cd22f9540c0591132ec991c51103cf800cf4e24 (2017-01) is very
likely unneeded.

20 months agoUse None consistently (NFC)
Kazu Hirata [Sun, 20 Nov 2022 08:24:40 +0000 (00:24 -0800)]
Use None consistently (NFC)

This patch replaces NoneType() and NoneType::None with None in
preparation for migration from llvm::Optional to std::optional.

In the std::optional world, we are not guranteed to be able to
default-construct std::nullopt_t or peek what's inside it, so neither
NoneType() nor NoneType::None has a corresponding expression in the
std::optional world.

Once we consistently use None, we should even be able to replace the
contents of llvm/include/llvm/ADT/None.h with something like:

  using NoneType = std::nullopt_t;
  inline constexpr std::nullopt_t None = std::nullopt;

to ease the migration from llvm::Optional to std::optional.

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

20 months ago[clang-format] Don't use PPIndentWidth inside multi-line macros
Noah Goldstein [Sat, 19 Nov 2022 09:06:37 +0000 (01:06 -0800)]
[clang-format] Don't use PPIndentWidth inside multi-line macros

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

20 months ago[lldb] Use Optional::has_value instead of Optional::hasValue (NFC)
Kazu Hirata [Sun, 20 Nov 2022 07:22:48 +0000 (23:22 -0800)]
[lldb] Use Optional::has_value instead of Optional::hasValue (NFC)

20 months ago[Analysis] Use llvm::Optional::value_or (NFC)
Kazu Hirata [Sun, 20 Nov 2022 05:11:10 +0000 (21:11 -0800)]
[Analysis] Use llvm::Optional::value_or (NFC)

20 months ago[X86] Use lock or/and/xor for cases that we only care about the EFLAGS
Phoebe Wang [Sun, 20 Nov 2022 02:42:26 +0000 (10:42 +0800)]
[X86] Use lock or/and/xor for cases that we only care about the EFLAGS

This is a follow up of D137711 to fix the reset of #58685.

Reviewed By: RKSimon

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

20 months ago[test][asan] Rename variables for less confusion
Vitaly Buka [Sun, 20 Nov 2022 01:12:32 +0000 (17:12 -0800)]
[test][asan] Rename variables for less confusion

20 months ago[Analysis] Teach getOptionalIntLoopAttribute to return std::optional (NFC)
Kazu Hirata [Sat, 19 Nov 2022 23:36:50 +0000 (15:36 -0800)]
[Analysis] Teach getOptionalIntLoopAttribute to return std::optional (NFC)

This is part of an effort to migrate from llvm::Optional to
std::optional:

https://discourse.llvm.org/t/deprecating-llvm-optional-x-hasvalue-getvalue-getvalueor/63716

20 months ago[SelectionDAG] Teach getRegistersForValue to return std::optional (NFC)
Kazu Hirata [Sat, 19 Nov 2022 23:00:19 +0000 (15:00 -0800)]
[SelectionDAG] Teach getRegistersForValue to return std::optional (NFC)

This is part of an effort to migrate from llvm::Optional to
std::optional:

https://discourse.llvm.org/t/deprecating-llvm-optional-x-hasvalue-getvalue-getvalueor/63716/11

20 months agoRemove unused llvm/IRPrinter/IRPrintingPasses.h or reorder #include after D137768
Fangrui Song [Sat, 19 Nov 2022 22:09:05 +0000 (22:09 +0000)]
Remove unused llvm/IRPrinter/IRPrintingPasses.h or reorder #include after D137768

20 months ago[MCA][X86] Add test coverage for BF16 instructions
Simon Pilgrim [Sat, 19 Nov 2022 21:46:14 +0000 (21:46 +0000)]
[MCA][X86] Add test coverage for BF16 instructions

20 months ago[MCA][X86] Add test coverage for VP2INTERSECT instructions
Simon Pilgrim [Sat, 19 Nov 2022 21:20:31 +0000 (21:20 +0000)]
[MCA][X86] Add test coverage for VP2INTERSECT instructions

NOTE: For IceLakeServer we actually test TigerLake as that's the only target that supports it (we do something similar for F16C on IvyBridge in the SandyBridge tests).

20 months ago[ADT] Remove deprecated Any::hasValue
Kazu Hirata [Sat, 19 Nov 2022 21:45:27 +0000 (13:45 -0800)]
[ADT] Remove deprecated Any::hasValue

Note that I deprecated Any::hasValue on August 20, 2022 in commit
abb6271d809b37d3c3318894d697d5820032bec8.

20 months ago[AArch64] Disable aarch64-enable-gep-opt
David Green [Sat, 19 Nov 2022 21:25:18 +0000 (21:25 +0000)]
[AArch64] Disable aarch64-enable-gep-opt

This option was enabled in D128582, and whilst it seems to be a net
improvement in many cases, at least a couple of issues have been
reported from D135957 and from the CSE added to the backend causing more
instructions in executed blocks. Revert for the time being, until we can
improve the precision.

20 months ago[lldb/Plugins] Fix build failure with GCC in ScriptedPythonInterface::Dispatch
Med Ismail Bennani [Sat, 19 Nov 2022 21:20:11 +0000 (13:20 -0800)]
[lldb/Plugins] Fix build failure with GCC in ScriptedPythonInterface::Dispatch

This patch should fix the build failures following 7e01924 when building
with GCC. These failures were mostly caused by GCC's poor support of C++
templates (namely, partial template specialization).

To work around that problem, this patch makes use of overloading and get
rid of the templated structs and specialized structs.

Signed-off-by: Med Ismail Bennani <medismail.bennani@gmail.com>
20 months ago[ADT] Remove deperecated methods in OptionalStorage
Kazu Hirata [Sat, 19 Nov 2022 21:21:27 +0000 (13:21 -0800)]
[ADT] Remove deperecated methods in OptionalStorage

Note that I deprecated these methods on August 7, 2022 in commit
commit b5f8d42efe3e246d582d4a1a328fac915e4ce8dc.

20 months ago[libc][math] Remove UInt<128>::operation* specialization.
Tue Ly [Thu, 17 Nov 2022 22:49:16 +0000 (17:49 -0500)]
[libc][math] Remove UInt<128>::operation* specialization.

Remove UInt<128>::operation* specialization since the generic implementation
works well enough:
https://quick-bench.com/q/Bz_J5HgAsz5m5V5Ze-X1fI77hPo

Reviewed By: michaelrj, sivachandra

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

20 months ago[libc] Add sub_with_borrow to builtin_wrapper.h
Tue Ly [Thu, 17 Nov 2022 05:56:56 +0000 (00:56 -0500)]
[libc] Add sub_with_borrow to builtin_wrapper.h

Add sub_with_borrow to builtin_wrapper.h to be used in UInt.

Reviewed By: sivachandra

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

20 months ago[MCA][X86] Add test coverage for VAES instructions
Simon Pilgrim [Sat, 19 Nov 2022 21:02:10 +0000 (21:02 +0000)]
[MCA][X86] Add test coverage for VAES instructions

20 months ago[mlir] Remove deprecated methods in OptionalParseResult
Kazu Hirata [Sat, 19 Nov 2022 20:54:05 +0000 (12:54 -0800)]
[mlir] Remove deprecated methods in OptionalParseResult

Note that I deprecated these methods on August 12, 2022 in commit
commit 5c4674d67b06c5b4a845f26a614fc453a6bfb1f6.

20 months ago[Basic] Remove deprecated methods in MapEntryOptionalStorage
Kazu Hirata [Sat, 19 Nov 2022 20:33:31 +0000 (12:33 -0800)]
[Basic] Remove deprecated methods in MapEntryOptionalStorage

Note that I deprecated these methods on August 8, 2022 in commit
commit 8e207e4c096e89fa5410b519715aba8c20701061.

20 months ago[CodeView] Replace GHASH hasher by BLAKE3
Alexandre Ganea [Sat, 19 Nov 2022 17:34:58 +0000 (12:34 -0500)]
[CodeView] Replace GHASH hasher by BLAKE3

Previously, we used SHA-1 for hashing the CodeView type records.
SHA-1 in `GloballyHashedType::hashType()` is coming top in the profiles. By simply replacing with BLAKE3, the link time is reduced in our case from 15 sec to 13 sec. I am only using MSVC .OBJs in this case. As a reference, the resulting .PDB is approx 2.1GiB and .EXE is approx 250MiB.

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

20 months ago[ConstraintElim] Add add nsw tests with negative constant.
Florian Hahn [Sat, 19 Nov 2022 19:17:42 +0000 (19:17 +0000)]
[ConstraintElim] Add add nsw tests with negative constant.

20 months ago[ELF][test] Clean up PT_OPENBSD tests
Fangrui Song [Sat, 19 Nov 2022 18:51:35 +0000 (18:51 +0000)]
[ELF][test] Clean up PT_OPENBSD tests

20 months ago[X86] Remove unnecessary STC instruction overrides
Simon Pilgrim [Sat, 19 Nov 2022 18:15:32 +0000 (18:15 +0000)]
[X86] Remove unnecessary STC instruction overrides

Reported by D138359

20 months ago[X86] Remove unnecessary STD + CLD instruction overrides
Simon Pilgrim [Sat, 19 Nov 2022 18:15:08 +0000 (18:15 +0000)]
[X86] Remove unnecessary STD + CLD instruction overrides

Reported by D138359

20 months agoRevert "[XCOFF] llvvm-readobj support display symbol table of loader section of xcoff...
Vitaly Buka [Sat, 19 Nov 2022 17:58:14 +0000 (09:58 -0800)]
Revert "[XCOFF] llvvm-readobj support display symbol table of loader section of xcoff object file."

Use of uninitialized value.

This reverts commit 037f5c283a2278ef156189be48db0738323206bd.

20 months ago[gn build] Reformat all build files
Nico Weber [Sat, 19 Nov 2022 16:54:34 +0000 (11:54 -0500)]
[gn build] Reformat all build files

Ran:

    git ls-files '*.gn' '*.gni' | xargs llvm/utils/gn/gn.py format

20 months ago[ConstraintElim] Split up large gep-arithmetic.ll test.
Florian Hahn [Sat, 19 Nov 2022 16:53:39 +0000 (16:53 +0000)]
[ConstraintElim] Split up large gep-arithmetic.ll test.

This should help avoid getting a single test file too large with future
additions.

20 months ago[TableGen] SubtargetEmitter.cpp - clang-format includes sorting. NFC.
Simon Pilgrim [Sat, 19 Nov 2022 16:49:06 +0000 (16:49 +0000)]
[TableGen] SubtargetEmitter.cpp - clang-format includes sorting. NFC.

20 months ago[ConstraintElim] Rename test file to match contents.
Florian Hahn [Sat, 19 Nov 2022 16:15:48 +0000 (16:15 +0000)]
[ConstraintElim] Rename test file to match contents.

The test file contains tests with chained/nested GEPs. Reflect that in
the name.

20 months ago[X86] Remove some unnecessary cvt overrides
Simon Pilgrim [Sat, 19 Nov 2022 15:37:52 +0000 (15:37 +0000)]
[X86] Remove some unnecessary cvt overrides

All of these match the default WriteCvtI2PS class defs

20 months ago[X86] Ensure we're testing the misched-matrix.ll tests with the generic cpu
Simon Pilgrim [Sat, 19 Nov 2022 14:38:53 +0000 (14:38 +0000)]
[X86] Ensure we're testing the misched-matrix.ll tests with the generic cpu

Noticed when experimenting with using tuning parameters to control ILP mode

20 months ago[X86] Regenerate memcpy-2.ll test checks
Simon Pilgrim [Sat, 19 Nov 2022 14:30:00 +0000 (14:30 +0000)]
[X86] Regenerate memcpy-2.ll test checks

20 months ago[MCA][X86] Add test coverage for BITALG instructions
Simon Pilgrim [Sat, 19 Nov 2022 11:35:31 +0000 (11:35 +0000)]
[MCA][X86] Add test coverage for BITALG instructions

20 months agoFix incorrect cast in VisitSYCLUniqueStableNameExpr
Alex Richardson [Fri, 18 Nov 2022 21:15:01 +0000 (21:15 +0000)]
Fix incorrect cast in VisitSYCLUniqueStableNameExpr

Clang language-level address spaces and LLVM pointer address spaces are
not the same thing (even though they will both have a numeric value of
zero in many cases). LangAS is a enum class to avoid implicit conversions,
but eba69b59d1a30dead07da2c279c8ecfd2b62ba9f avoided the compiler error by
adding a `static_cast<>`. While touching this code, simplify it by using
CreatePointerBitCastOrAddrSpaceCast() which is already a no-op if the types
match.

This changes the code generation for spir64 to place the globals in
the sycl_global addreds space, which maps to `addrspace(1)`.

Reviewed By: bader

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

20 months ago[flang] Support lowering of intrinsic GET_COMMAND
Peixin Qiao [Sat, 19 Nov 2022 11:26:17 +0000 (19:26 +0800)]
[flang] Support lowering of intrinsic GET_COMMAND

As Fortran 2018 16.9.82, all the arguments of GET_COMMAND are optional.
When they are all absent, do nothing so to be consistent with gfortran
and ifort. The semantic analysis and runtime have been supported.

This intrinsic was introduced from F2003, and this supports the lowering
of it.

Reviewed By: PeteSteinfeld, jeanPerier

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

20 months ago[test][asan] Simplify __sanitizer_verify_contiguous_container test
Vitaly Buka [Sat, 19 Nov 2022 09:51:52 +0000 (01:51 -0800)]
[test][asan] Simplify __sanitizer_verify_contiguous_container test

20 months ago[llvm-objdump] Left justify display of OpenBSD headers
Brad Smith [Sat, 19 Nov 2022 09:34:25 +0000 (04:34 -0500)]
[llvm-objdump] Left justify display of OpenBSD headers

This looks the same as OpenBSD's GNU objdump.

20 months ago[LoongArch] Add support for tail call optimization
wanglei [Sat, 19 Nov 2022 06:55:25 +0000 (14:55 +0800)]
[LoongArch] Add support for tail call optimization

This patch adds tail call support to the LoongArch backend.  When
appropriate, use the `b` or `jr` instruction for tail calls (the
`pcalau12i+jirl` instruction pair when use medium codemodel).

This patch also modifies the inappropriate operand name:
simm26_bl -> simm26_symbol

This has been modeled after RISCV's tail call opt.

Reviewed By: SixWeining

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

20 months ago[test][asan] Simplify loops in test
Vitaly Buka [Sat, 19 Nov 2022 08:35:27 +0000 (00:35 -0800)]
[test][asan] Simplify loops in test

20 months ago[test][asan] Simplify test
Vitaly Buka [Sat, 19 Nov 2022 08:23:08 +0000 (00:23 -0800)]
[test][asan] Simplify test

We don't need to iterate off_end, just need to check a granule after the
end.

20 months ago[CodeGen][ARM] Fix ARMABIInfo::EmitVAAarg crash with empty record type variadic arg
yronglin [Thu, 17 Nov 2022 15:06:21 +0000 (23:06 +0800)]
[CodeGen][ARM] Fix ARMABIInfo::EmitVAAarg crash with empty record type variadic arg

Fix ARMABIInfo::EmitVAAarg crash with empty record type variadic arg

Open issue: https://github.com/llvm/llvm-project/issues/58794

Reviewed By: rjmccall

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

20 months ago[MLIR] Fix incorrect assertion in memref replacement utility
Uday Bondhugula [Thu, 17 Nov 2022 10:18:25 +0000 (15:48 +0530)]
[MLIR] Fix incorrect assertion in memref replacement utility

The assertion had an unchecked use of getDefiningOp. The condition
itself is stale and not needed. This is a trivial/obvious fix - the
buggy path wasn't exercised since the current passes/users of this
utility always passed the result of an op as an "extra index".

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

20 months ago[LoongArch] Add emergency spill slot for CFR spill/reload
wanglei [Sat, 19 Nov 2022 06:35:14 +0000 (14:35 +0800)]
[LoongArch] Add emergency spill slot for CFR spill/reload

When all registers have been allocated and CFR needs to be saved on the
stack, an emergency spill slot is required. Because CFR's spill and
reload require a general purpose register to transfer.

The attached test case was bugpoint-reduced down from
`MultiSource/Benchmarks/mafft/Lalignmm.c` in the test-suite.
Without this patch, llc will crash and report the following errors:

```
LLVM ERROR: Error while trying to spill R4 from class GPR: Cannot scavenge register without an emergency spill slot!
```

Reviewed By: SixWeining

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

20 months agoRevert "[flang] Use proper attributes for runtime calls with 'i1' arguments/returns."
Slava Zakharin [Sat, 19 Nov 2022 04:12:33 +0000 (20:12 -0800)]
Revert "[flang] Use proper attributes for runtime calls with 'i1' arguments/returns."

Buildbot might be failing because of this:
https://lab.llvm.org/buildbot/#/builders/65/builds/7283

This reverts commit 396ead93e3cead59727947afdea1fc2b49f0fc34.

20 months agoRevert "[flang] Support lowering of intrinsic GET_COMMAND"
Peixin Qiao [Sat, 19 Nov 2022 03:51:25 +0000 (11:51 +0800)]
Revert "[flang] Support lowering of intrinsic GET_COMMAND"

This reverts commit 86ea67ed4e89cc042818bd8e53066fdd96ff96e4.

20 months ago[MLIR] Add FieldParser implementation for Optional<> integer types.
Nick Kreeger [Sat, 19 Nov 2022 03:22:27 +0000 (21:22 -0600)]
[MLIR] Add FieldParser implementation for Optional<> integer types.

This patch introduces a templated FieldParser to handle optional signed and unsigned integer types - NFC. Additionally, I've added an extra test to ensure that both signed and unsigned integers are properly tested in the templated integer types for FieldParser as well.

20 months ago[flang] Support lowering of intrinsic GET_COMMAND
Peixin Qiao [Sat, 19 Nov 2022 03:03:52 +0000 (11:03 +0800)]
[flang] Support lowering of intrinsic GET_COMMAND

As Fortran 2018 16.9.82, all the arguments of GET_COMMAND are optional.
When they are all absent, do nothing so to be consistent with gfortran
and ifort. The semantic analysis and runtime have been supported.

This intrinsic was introduced from F2003, and this supports the lowering
of it.

Reviewed By: PeteSteinfeld, jeanPerier

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

20 months ago[OPENMP5.1] Initial support for message clause.
Jennifer Yu [Fri, 18 Nov 2022 06:03:00 +0000 (22:03 -0800)]
[OPENMP5.1] Initial support for message clause.

20 months ago[llvm] - Recognizing 'PT_OPENBSD_MUTABLE' segment type.
Brad Smith [Fri, 18 Nov 2022 09:44:33 +0000 (04:44 -0500)]
[llvm] - Recognizing 'PT_OPENBSD_MUTABLE' segment type.

Recognizing 'PT_OPENBSD_MUTABLE' segment type.

https://github.com/openbsd/src/commit/bd249b5664da50f0178adea78250a7a0d8ea6566

Reviewed By: jhenderson, MaskRay

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

20 months ago[GlobalISel] Fix crash in applyShiftOfShiftedLogic caused by CSEMIRBuilder reuse...
chenglin.bi [Sat, 19 Nov 2022 01:11:47 +0000 (09:11 +0800)]
[GlobalISel] Fix crash in applyShiftOfShiftedLogic caused by CSEMIRBuilder reuse instruction

If LogicNonShiftReg is the same to Shift1Base, and shift1 const is the same to MatchInfo.Shift2 const, CSEMIRBuilder will reuse the old shift1 when build shift2.
So, if we erase MatchInfo.Shift2 at the end, actually we remove old shift1. And it will cause crash later.

Solution for this issue is just erase it earlier to avoid the crash.

Fix #58423

Reviewed By: arsenm

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

20 months ago[asan] Keep Itanium mangled names in global metadata
Fangrui Song [Sat, 19 Nov 2022 01:06:26 +0000 (01:06 +0000)]
[asan] Keep Itanium mangled names in global metadata

The runtime calls `MaybeDemangleGlobalName` for error reporting and
`__cxxabiv1::__cxa_demangle` is called if available, so demanging Itanium
mangled names in global metadata is unnecessary and wastes data size.

Add `MaybeDemangleGlobalName` in ODR violation detection to support demangled
names in a suppressions file. `MaybeDemangleGlobalName` may call
`DemangleCXXABI` and leak memory. Use an internal allocation to prevent lsan
leak (in case there is no fatal asan error).

The debug feature `report_globals=2` prints information for all instrumented
global variables. `MaybeDemangleGlobalName` would be slow, so don't do that.
The output looks like `Added Global[0x56448f092d60]: beg=0x56448fa66d60 size=4/32 name=_ZL13test_global_2`
and I think the mangled name is fine.

Other mangled schemes e.g. Windows (see win-string-literal.ll) remain the
current behavior.

Reviewed By: hctim

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

20 months agoGlobalISel: Try to fold G_SEXT_INREG to G_AND with mask
Matt Arsenault [Tue, 15 Nov 2022 22:07:07 +0000 (14:07 -0800)]
GlobalISel: Try to fold G_SEXT_INREG to G_AND with mask

Copies the same transform from the DAG. Helps eliminate some codegen
diffs to allowed shared checks in a future change.

Not sure if apply supports anything better than C++ fragments for
the result. It's also not really reasonable that every combine has
to set the default insertion point.

20 months ago[OpenMP] Initial parsing/sema for 'strict' modifier with 'num_tasks' clause
Fazlay Rabbi [Fri, 18 Nov 2022 23:21:49 +0000 (15:21 -0800)]
[OpenMP] Initial parsing/sema for 'strict' modifier with 'num_tasks' clause

This patch gives basic parsing and semantic analysis support for 'strict'
modifier with 'num_tasks' clause of 'taskloop' construct introduced in
OpenMP 5.1 (section 2.12.2)

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

20 months agoAMDGPU/GlobalISel: Add some end-to-end g_sext_inreg tests
Matt Arsenault [Mon, 14 Nov 2022 23:22:45 +0000 (15:22 -0800)]
AMDGPU/GlobalISel: Add some end-to-end g_sext_inreg tests

20 months agoAMDGPU/GlobalISel: Insert freeze when splitting vector G_SEXT_INREG
Matt Arsenault [Mon, 14 Nov 2022 23:44:22 +0000 (15:44 -0800)]
AMDGPU/GlobalISel: Insert freeze when splitting vector G_SEXT_INREG

This transform is broken for undef or poison inputs without a freeze.
This is also broken in lots of other places where shifts are split
into 32-bit pieces.

Amt < 32 case:
; Broken: https://alive2.llvm.org/ce/z/7bb4vc
; Freezing the low half of the bits makes it correct
; Fixed: https://alive2.llvm.org/ce/z/zJAZFr
define i64 @src(i64 %val) {
  %shl = shl i64 %val, 55
  %shr = ashr i64 %shl, 55
  ret i64 %shr
}

define i64 @tgt(i64 %val) {
  %lo32 = trunc i64 %val to i32
  %shr.half = lshr i64 %val, 32
  %hi32 = trunc i64 %shr.half to i32
  %inreg.0 = shl i32 %lo32, 23
  %new.lo = ashr i32 %inreg.0, 23
  %new.hi = ashr i32 %new.lo, 31
  %zext.lo = zext i32 %new.lo to i64
  %zext.hi = zext i32 %new.hi to i64
  %hi.ins = shl i64 %zext.hi, 32
  %or = or i64 %hi.ins, %zext.lo
  ret i64 %or
}

Amt == 32 case:
Broken: https://alive2.llvm.org/ce/z/5f4qwQ
Fixed: https://alive2.llvm.org/ce/z/A2hWWF
This one times out alive; works if argument is made noundef or
scaled down to a smaller bitwidth.

define i64 @src(i64 %val) {
  %shl = shl i64 %val, 32
  %shr = ashr i64 %shl, 32
  ret i64 %shr
}

define i64 @tgt(i64 %val) {
  %lo32 = trunc i64 %val to i32
  %shr.half = lshr i64 %val, 32
  %hi32 = trunc i64 %shr.half to i32
  %new.hi = ashr i32 %lo32, 31
  %zext.lo = zext i32 %lo32 to i64
  %zext.hi = zext i32 %new.hi to i64
  %hi.ins = shl i64 %zext.hi, 32
  %or = or i64 %hi.ins, %zext.lo
  ret i64 %or
}

Amt > 32 case:
; Correct: https://alive2.llvm.org/ce/z/tvrhPf
define i64 @src(i64 %val) {
  %shl = shl i64 %val, 9
  %shr = ashr i64 %shl, 9
  ret i64 %shr
}

define i64 @tgt(i64 %val) {
  %lo32 = trunc i64 %val to i32
  %lshr = lshr i64 %val, 32
  %hi32 = trunc i64 %lshr to i32
  %inreg.0 = shl i32 %hi32, 9
  %new.hi = ashr i32 %inreg.0, 9
  %zext.lo = zext i32 %lo32 to i64
  %zext.hi = zext i32 %new.hi to i64
  %hi.ins = shl i64 %zext.hi, 32
  %or = or i64 %hi.ins, %zext.lo
  ret i64 %or
}

20 months ago[FuzzMutate] Update InstModifierStrategy
Peter Rong [Thu, 17 Nov 2022 23:12:48 +0000 (15:12 -0800)]
[FuzzMutate] Update InstModifierStrategy

We can randomly switch two operands of an instruction now

Signed-off-by: Peter Rong <PeterRong96@gmail.com>
20 months ago[RISCV] Optimize scalable frame setup when VLEN is precisely known
Philip Reames [Fri, 18 Nov 2022 23:30:39 +0000 (15:30 -0800)]
[RISCV] Optimize scalable frame setup when VLEN is precisely known

If we know the exact value of VLEN, the frame offset adjustment for scalable stack slots becomes a fixed constant. This avoids the need to read vlenb, and may allow the offset to be folded into the immediate field of an add/sub.

We could go further here, and fold the offset into a single larger frame adjustment - instead of having a separate scalable adjustment step - but that requires a bit more code reorganization. I may (or may not) return to that in a future patch.

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

20 months agoRevert "[SDAG] Allow scalable vectors in ComputeKnownBits"
Philip Reames [Fri, 18 Nov 2022 23:29:14 +0000 (15:29 -0800)]
Revert "[SDAG] Allow scalable vectors in ComputeKnownBits"

This reverts commit bc0fea0d551b5182c541c43070830bfdcaa33ef2.

There was a "timeout for a Halide Hexagon test" reported.  Revert until investigation complete.

20 months agoRevert "[SDAG] Allow scalable vectors in ComputeNumSignBits" and follow up
Philip Reames [Fri, 18 Nov 2022 23:14:18 +0000 (15:14 -0800)]
Revert "[SDAG] Allow scalable vectors in ComputeNumSignBits" and follow up

This reverts commits 3fb08d14a63f5f745d3fec2b5f6ffef4cf0a398c and f8c63a7fbf50fb5883bd566c7539d0ac18c7700f.

There was a "timeout for a Halide Hexagon test" reported.  Revert until investigation complete.

20 months agoGlobalISel: Legalize strict_fsub
Matt Arsenault [Fri, 18 Nov 2022 07:03:23 +0000 (23:03 -0800)]
GlobalISel: Legalize strict_fsub

In the future should probably have a more convenient
way to switch between building strict and non-strict ops.

20 months ago[MemProf] Defer profile file setup until dump time
Teresa Johnson [Thu, 17 Nov 2022 02:07:07 +0000 (18:07 -0800)]
[MemProf] Defer profile file setup until dump time

With all of the writing of the memprof profile consolidated into one
place, there is no need to set up the profile file (which creates the
file and also redirects all printing from the runtime to it) until we
are ready to dump the profile.

This allows errors and other messages to be dumped to stderr instead of
the profile file, which by default is in a binary format. Additionally,
reset the output file to stderr after dumping the profile so that any
requested memprof allocator statistics are printed to stderr.

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

20 months ago[libc][reland] Fix builtin definition for memory functions
Michael Jones [Fri, 11 Nov 2022 22:08:58 +0000 (14:08 -0800)]
[libc][reland] Fix builtin definition for memory functions

The memory functions are highly performance sensitive and use builtins
where possible, but also need to define those functions names when they
don't exist to avoid compilation errors. Previously all those
redefinitions were behind the SSE2 flag for x86, which caused errors on
CPUs that supported SSE2 but not AVX512. This patch splits the various
CPU extensions out to avoid errors on such CPUs.

Reviewed By: gchatelet

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

20 months ago[Clang][OpenMP] Add support for default to/from map types on target enter/exit data
Doru Bercea [Thu, 17 Nov 2022 21:30:53 +0000 (15:30 -0600)]
[Clang][OpenMP] Add support for default to/from map types on target enter/exit data

20 months ago[lldb/Python] Unify PythonFormat & GetPythonValueFormatString (NFC)
Med Ismail Bennani [Fri, 18 Nov 2022 21:56:19 +0000 (13:56 -0800)]
[lldb/Python] Unify PythonFormat & GetPythonValueFormatString (NFC)

This patch removes all occurences to GetPythonValueFormatString and
use the template specialization of PythonFormat structs instead.

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

Signed-off-by: Med Ismail Bennani <medismail.bennani@gmail.com>
20 months ago[lldb/Plugins] Improve error reporting with reading memory in Scripted Process
Med Ismail Bennani [Fri, 18 Nov 2022 21:53:57 +0000 (13:53 -0800)]
[lldb/Plugins] Improve error reporting with reading memory in Scripted Process

This patch improves the ScriptedPythonInterface::Dispatch method to
support passing lldb_private types to the python implementation.

This will allow, for instance, the Scripted Process python implementation
to report errors when reading memory back to lldb.

To do so, the Dispatch method will transform the private types in the
parameter pack into `PythonObject`s to be able to pass them down to the
python methods.

Then, if the call succeeded, the transformed arguments will be converted
back to their original type and re-assigned in the parameter pack, to
ensure pointers and references behaviours are preserved.

This patch also updates various scripted process python class and tests
to reflect this change.

rdar://100030995

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

Signed-off-by: Med Ismail Bennani <medismail.bennani@gmail.com>
20 months ago[lldb/Python] Make use of PythonObject and PythonFormat in callbacks (NFC)
Med Ismail Bennani [Fri, 18 Nov 2022 07:55:52 +0000 (23:55 -0800)]
[lldb/Python] Make use of PythonObject and PythonFormat in callbacks (NFC)

This patch extends the template specialization of PythonFormat structs
and makes use of the pre-existing PythonObject class to format arguments
and pass them to the right method, before calling it.

This is a preparatory patch to merge PythonFormat with SWIGPythonBridge's
GetPythonValueFormatString methods.

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

Signed-off-by: Med Ismail Bennani <medismail.bennani@gmail.com>
20 months ago[X86][KCFI] Don't fold loads into indirect calls that need a KCFI check
Sami Tolvanen [Fri, 18 Nov 2022 21:23:04 +0000 (21:23 +0000)]
[X86][KCFI] Don't fold loads into indirect calls that need a KCFI check

Avoid unnecessary folding as X86KCFIPass would have to unfold these
anyway when emitting the KCFI_CHECK.

20 months ago[Hexagon] Remove non-existent instructions
Krzysztof Parzyszek [Fri, 18 Nov 2022 21:45:07 +0000 (13:45 -0800)]
[Hexagon] Remove non-existent instructions

Some instructions that don't actually exist in hardware were emitted
by the generator script in error. Delete them from the .td files.

20 months ago[Bye] Remove legacy pipeline registration
Arthur Eubanks [Fri, 18 Nov 2022 21:35:51 +0000 (13:35 -0800)]
[Bye] Remove legacy pipeline registration

D137915 has somehow caused a flang bot to fail: https://lab.llvm.org/buildbot/#/builders/191/builds/11279.

Given that the issue is with the legacy pipeline registration code and the legacy pipeline registration infrastructure is to be removed soon, remove this part of Bye.

20 months ago[mlir][sparse] refactoring: move genAffine to loopEmitter
Peiming Liu [Wed, 16 Nov 2022 23:18:16 +0000 (23:18 +0000)]
[mlir][sparse] refactoring: move genAffine to loopEmitter

This is the beginning patch of a sequence of dependent patches that in together provide the affine expression on matched indexing mapping for sparse tensors.

This patch itself simply move `genAffine` into loop emitter to be prepared for upcoming patches.

D138169 provides support for affine expression on dense dimensions only (except for constant affine expression)
D138170 provides support for constant affine expressions on dense dimensions
D138171 provides **merger** support for affine expression on sparse dimension (without codegen)
D138172 provides **codegen** support (by generating a "filter" loop) for affine expression on sparse dimensions.
D138173 fixes a crash on resolveCycle when dealing with affine expressions.

Reviewed By: aartbik

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

20 months ago[MCA][X86] Add test coverage for VPCLMULQDQ instructions
Simon Pilgrim [Fri, 18 Nov 2022 21:10:46 +0000 (21:10 +0000)]
[MCA][X86] Add test coverage for VPCLMULQDQ instructions