platform/upstream/llvm.git
2 years ago[libc++] Remove std::function in C++03
Nikolas Klauser [Mon, 20 Jun 2022 14:48:31 +0000 (16:48 +0200)]
[libc++] Remove std::function in C++03

`std::function` has been deprecated for a few releases now. Remove it with an option to opt-back-in with a note that this option will be removed in LLVM 16.

Reviewed By: ldionne, #libc

Spies: #libc_vendors, EricWF, jloser, libcxx-commits

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

2 years ago[flang] Cleanup code and add test from fir-dev
Valentin Clement [Wed, 22 Jun 2022 07:38:32 +0000 (09:38 +0200)]
[flang] Cleanup code and add test from fir-dev

This patch clean up some code for upstreaming and add couple of
missing tests that were left in fir-dev.

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

Reviewed By: jeanPerier, PeteSteinfeld

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

Co-authored-by: Jean Perier <jperier@nvidia.com>
Co-authored-by: Eric Schweitz <eschweitz@nvidia.com>
2 years ago[ConstraintElimination] Update addFact to take Predicate and ops (NFC).
Florian Hahn [Wed, 22 Jun 2022 06:36:40 +0000 (08:36 +0200)]
[ConstraintElimination] Update addFact to take Predicate and ops (NFC).

This allows adding facts without necessarily having a corresponding
CmpInst.

2 years ago[CMake] Don't pass CMAKE_C(XX)_COMPILER to the nested NATIVE build when cross compiling
Martin Storsjö [Tue, 24 May 2022 12:18:36 +0000 (15:18 +0300)]
[CMake] Don't pass CMAKE_C(XX)_COMPILER to the nested NATIVE build when cross compiling

Originally, the nested build was set up with the CMake command
`execute_process` which implicitly passes CC/CXX variables for
the configured compiler, which then was picked up by the nested
CMake. (This CMake behaviour, to implicitly pass such variables
is up for discussion and might change in the future; see
https://gitlab.kitware.com/cmake/cmake/-/issues/21378.)

How the nested cmake build is set up was changed in
aa7d6db5c8fc449b2908c6d629d6d9a067f49896 / D40229 - the old behaviour
was brought along by manually passing
-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} to the nested cmake
configuration. This was then later made optional in
f5f0fffea5ace079cc208fafa65150d23935a4d9 / D40947. But still,
the default if the user doesn't pass
CROSS_TOOLCHAIN_FLAGS_${target_name} (e.g. CROSS_TOOLCHAIN_FLAGS_NATIVE)
is to pass in the surrounding build's compiler - which usually
doesn't work, and is quite non-obvious to figure out.

Just drop the default passing of the outer compiler, when cross
compiling. This should avoid surprising cases of using the cross
compiler for the native build for essentially all new users trying
to cross compile, until they've discovered CROSS_TOOLCHAIN_FLAGS_NATIVE.

Keep passing these when not cross compiling, e.g. if building with
optimized tablegen.

This was already suggested at the end in D40229, but apparently never
acted upon.

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

2 years ago[DeadArgElim] Reformat the pass in accordance with the code style
Pavel Samolysov [Fri, 17 Jun 2022 16:25:18 +0000 (19:25 +0300)]
[DeadArgElim] Reformat the pass in accordance with the code style

The code has been reformatted in accordance with the code style. Some
function comments were extended to the Doxygen ones and reworded a bit
to eliminate the duplication of the function's/class' name in the
comment.

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

2 years ago[gn build] Port 77ad77c0710f
LLVM GN Syncbot [Wed, 22 Jun 2022 05:44:50 +0000 (05:44 +0000)]
[gn build] Port 77ad77c0710f

2 years ago[libc] Fix bug in UInt comparison operators.
Siva Chandra Reddy [Tue, 21 Jun 2022 20:46:59 +0000 (20:46 +0000)]
[libc] Fix bug in UInt comparison operators.

Reviewed By: lntue

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

2 years ago[libc++][format] Improve string formatters
Mark de Wever [Tue, 28 Dec 2021 17:48:04 +0000 (18:48 +0100)]
[libc++][format] Improve string formatters

This changes the implementation of the formatter. Instead of inheriting
from a specialized parser all formatters will use the same generic
parser. This reduces the binary size.

The new parser contains some additional fields only used in the chrono
formatting. Since this doesn't change the size of the parser the fields
are in the generic parser. The parser is designed to fit in 128-bit,
making it cheap to pass by value.

The new format function is a const member function. This isn't required
by the Standard yet, but it will be after LWG-3636 is accepted.
Additionally P2286 adds a formattable concept which requires the member
function to be const qualified in C++23. This paper is likely to be
accepted in the 2022 July plenary.

Depends on D121530

NOTE parts of the code now contains duplicates for the current and new parser.
The intention is to remove the duplication in followup patches. A general
overview of the final code is available in D124620. That review however lacks a
bit of polish.

Most of the new code is based on the same algorithms used in the current code.

The final version of this code reduces the binary size by 17 KB for this example
code
```

int main() {
  {
    std::string_view sv{"hello world"};
    std::format("{}{}|{}{}{}{}{}{}|{}{}{}{}{}{}|{}{}{}|{}{}|{}", true, '*',
                (signed char)(42), (short)(42), (int)(42), (long)(42), (long long)(42), (__int128_t)(42),
                (unsigned char)(42), (unsigned short)(42), (unsigned int)(42), (unsigned long)(42),
                (unsigned long long)(42), (__uint128_t)(42),
                (float)(42), (double)(42), (long double)(42),
                "hello world", sv,
                nullptr);
  }
  {
    std::wstring_view sv{L"hello world"};
    std::format(L"{}{}|{}{}{}{}{}{}|{}{}{}{}{}{}|{}{}{}|{}{}|{}", true, L'*',
                (signed char)(42), (short)(42), (int)(42), (long)(42), (long long)(42), (__int128_t)(42),
                (unsigned char)(42), (unsigned short)(42), (unsigned int)(42), (unsigned long)(42),
                (unsigned long long)(42), (__uint128_t)(42),
                (float)(42), (double)(42), (long double)(42),
                L"hello world", sv,
                nullptr);
  }
}

```

Reviewed By: #libc, ldionne

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

2 years agoHowToReleaseLLVM: Add description of the bug triage process
Tom Stellard [Wed, 22 Jun 2022 05:16:02 +0000 (22:16 -0700)]
HowToReleaseLLVM: Add description of the bug triage process

Reviewed By: andreil99

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

2 years agoAMDGPU: Skip unexpected CFG in SIOptimizeVGPRLiveRange
Ruiling Song [Fri, 17 Jun 2022 13:55:41 +0000 (21:55 +0800)]
AMDGPU: Skip unexpected CFG in SIOptimizeVGPRLiveRange

There are some cases that we use si_if/si_else in unatural way.
Just skip them.

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

Reviewed by: critson

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

2 years ago[NewGVN] add context instruction for SimplifyQuery
chenglin.bi [Wed, 22 Jun 2022 04:24:48 +0000 (12:24 +0800)]
[NewGVN] add context instruction for SimplifyQuery

NewGVN will find operator from other context. ValueTracking currently doesn't have a way to run completely without context instruction.
So it will use operator itself as conext instruction.
If the operator in another branch will never be executed but it has an assume, it may caused value tracking use the assume to do wrong simpilfy.

It would be better to make these simplification queries not use context at all, but that would require some API changes.
For now we just use the orignial instruction as context instruction to fix the issue.

Fix #56039

Reviewed By: nikic

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

2 years ago[LoopVectorize] Uninitialized phi node leads to a crash in SSAUpdater.
Serguei Katkov [Fri, 17 Jun 2022 06:10:57 +0000 (13:10 +0700)]
[LoopVectorize] Uninitialized phi node leads to a crash in SSAUpdater.

createInductionResumeValues creates a phi node placeholder
without filling incoming values. Then it generates the incoming values.

It includes triggering of SCEV expander which may invoke SSAUpdater.
SSAUpdater has an optimization to detect number of predecessors
basing on incoming values if there is phi node.
In case phi node is not filled with incoming values - the number of predecessors
is detected as 0 and this leads to segmentation fault.

In other words SSAUpdater expects that phi is in good shape while
LoopVectorizer breaks this requirement.

The fix is just prepare all incoming values first and then build a phi node.

Reviewed By: fhahn
Subscribers: llvm-commits
Differential Revision: https://reviews.llvm.org/D128033

2 years ago[lldb] [test] Mark TestNonStop as LLGS-specific
Michał Górny [Wed, 22 Jun 2022 03:36:15 +0000 (05:36 +0200)]
[lldb] [test] Mark TestNonStop as LLGS-specific

Thanks for Med Ismail Bennani for reporting the debugserver failures.

2 years ago[Libomptarget] Remove duplicate data environment exit
Joseph Huber [Wed, 22 Jun 2022 02:30:25 +0000 (22:30 -0400)]
[Libomptarget] Remove duplicate data environment exit

Summary:
This patch removes a duplicated exit from the OpenMP data envrionment.
We already have an RAII method that guards this environment so it is
unnecessary.

2 years ago[Attributor][FIX] Avoid empty bin in AAPointerInfo
Johannes Doerfert [Tue, 21 Jun 2022 19:52:37 +0000 (14:52 -0500)]
[Attributor][FIX] Avoid empty bin in AAPointerInfo

This avoid creating empty bins in AAPointerInfo which can lead to
segfaults. Also ensure we do not try to translate from callee to caller
except if we really take the argument state and move it to the call site
argument state.

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

2 years ago[Attributor] Ensure to use the proper liveness AA
Johannes Doerfert [Thu, 19 May 2022 18:35:58 +0000 (13:35 -0500)]
[Attributor] Ensure to use the proper liveness AA

When determining liveness via Attributor::isAssumedDead(...) we might
end up without a liveness AA or with one pointing into another function.
Neither is helpful and we will avoid both from now on.

Reapplied after fixing the ASAN error which caused the revert:
https://github.com/llvm/llvm-project/commit/db68a25ca90e0da46c9c33b027fa83260073bd28

2 years ago[lld-macho] Work around odr-use of const non-inline static data member to fix -O0...
Fangrui Song [Wed, 22 Jun 2022 02:22:28 +0000 (19:22 -0700)]
[lld-macho] Work around odr-use of const non-inline static data member to fix -O0 build after D128298

```
ld.lld: error: undefined symbol: lld::macho::CodeSignatureSection::blockSize
>>> referenced by SyntheticSections.cpp:1253 (/home/maskray/llvm/lld/MachO/SyntheticSections.cpp:1253)
>>>               tools/lld/MachO/CMakeFiles/lldMachO.dir/SyntheticSections.cpp.o:(lld::macho::CodeSignatureSection::writeHashes(unsigned char*) const::$_7::operator()(unsigned long) const)
```

2 years ago[lldb] Add a setting to specify the preferred dynamic class info extractor o
Jonas Devlieghere [Wed, 22 Jun 2022 00:45:48 +0000 (17:45 -0700)]
[lldb] Add a setting to specify the preferred dynamic class info extractor o

Add a setting to configure how LLDB parses dynamic Objective-C class
metadata. By default LLDB will choose the most appropriate method for
the target OS.

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

2 years ago[lldb] Instantiate lazily named classes on macOS Ventura.
Jonas Devlieghere [Wed, 22 Jun 2022 00:45:30 +0000 (17:45 -0700)]
[lldb] Instantiate lazily named classes on macOS Ventura.

Recent revisions of the Objective-C runtime changed
objc_debug_class_getNameRaw() in a way that no longer triggers lazy
names to be instantiated. This has the unintended side-effect of making
generic bridged Swift classes, such as _SwiftDeferredNSDictionary<U,V>
to become invisible to the Objective-C runtime.

This patch detects this situation and forces the names to be
instantiated by calling class_getName() and discarding the result before
calling objc_debug_class_getNameRaw() again.

Many thanks to Mike Ash for outlining the solution and Adrian for
authoring the downstream patch.

rdar://95245318

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

2 years agoRecommit "[SLP][X86] Improve reordering to consider alternate instruction bundles"
Vasileios Porpodas [Wed, 22 Jun 2022 00:10:23 +0000 (17:10 -0700)]
Recommit "[SLP][X86] Improve reordering to consider alternate instruction bundles"

This reverts commit 6d6268dcbf0f48e43f6f9fe46b3a28c29ba63c7d.

Review: https://reviews.llvm.org/D125712

2 years ago[mlir][math] Support vector type by erf and round libm lowering
lewuathe [Tue, 21 Jun 2022 23:58:20 +0000 (08:58 +0900)]
[mlir][math] Support vector type by erf and round libm lowering

erf and round op are able to lowered to libm supporting vector type as other math operations.

Reviewed By: ftynse

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

2 years ago[lld/mac] Parallelize code signature computation
Nico Weber [Tue, 21 Jun 2022 19:21:46 +0000 (15:21 -0400)]
[lld/mac] Parallelize code signature computation

According to ministat, this is a small but measurable speedup
(using the repro in PR56121):

    N           Min           Max        Median           Avg        Stddev
x  10     3.7439518     3.7783802     3.7730219     3.7655502   0.012375226
+  10     3.6149218      3.692198     3.6519327     3.6502951   0.025905601
Difference at 95.0% confidence
-0.115255 +/- 0.0190746
-3.06078% +/- 0.506554%
(Student's t, pooled s = 0.0203008)

(Without 858e8b17f7365, this change here to use parallelFor is an 18% speedup,
and doing 858e8b17f7365 on top of this change is just a 2.55% +/- 0.58% win.
Doing both results in a total speedup of 20.85% +/- 0.44%.)

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

2 years agoRevert "[SLP][X86] Improve reordering to consider alternate instruction bundles"
Vasileios Porpodas [Wed, 22 Jun 2022 00:07:21 +0000 (17:07 -0700)]
Revert "[SLP][X86] Improve reordering to consider alternate instruction bundles"

This reverts commit 6f88acf410b48f3e6c1526df2dc32ed86f249685.

2 years ago[SLP][X86] Improve reordering to consider alternate instruction bundles
Vasileios Porpodas [Fri, 13 May 2022 15:52:17 +0000 (08:52 -0700)]
[SLP][X86] Improve reordering to consider alternate instruction bundles

During the reordering transformation we should try to avoid reordering bundles
like fadd,fsub because this may block them being matched into a single vector
instruction in x86.
We do this by checking if a TreeEntry is such a pattern and adding it to the
list of TreeEntries with orders that need to be considered.

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

2 years ago[SVE] Add isel patterns that match "FpImm - A" to the immediate form of FSUBR.
Paul Walker [Sat, 18 Jun 2022 13:34:37 +0000 (14:34 +0100)]
[SVE] Add isel patterns that match "FpImm - A" to the immediate form of FSUBR.

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

2 years ago[NFC][SVE] Simplify SUBR_ZI isel patterns.
Paul Walker [Sat, 18 Jun 2022 13:55:31 +0000 (14:55 +0100)]
[NFC][SVE] Simplify SUBR_ZI isel patterns.

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

2 years ago[SVE] Lower "unpredicated" sabd/uabd intrinsics to ISD::ABDS/U.
Paul Walker [Sat, 18 Jun 2022 12:36:22 +0000 (13:36 +0100)]
[SVE] Lower "unpredicated" sabd/uabd intrinsics to ISD::ABDS/U.

This enables an existing transformation that when combined with an
add will emit saba/uaba instructions.

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

2 years agoReland "[lld-macho] Show source information for undefined references"
Daniel Bertalan [Tue, 21 Jun 2022 20:40:27 +0000 (16:40 -0400)]
Reland "[lld-macho] Show source information for undefined references"

The error used to look like this:

  ld64.lld: error: undefined symbol: _foo
  >>> referenced by /path/to/bar.o:(symbol _baz+0x4)

If DWARF line information is available, we now show where in the source
the references are coming from:

  ld64.lld: error: unreferenced symbol: _foo
  >>> referenced by: bar.cpp:42 (/path/to/bar.cpp:42)
  >>>                /path/to/bar.o:(symbol _baz+0x4)

The reland is identical to the first time this landed. The fix was in D128294.
This reverts commit 0cc7ad417585b3185c32e395cc5e6cf082a347af.

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

2 years ago[mlir][sparse] refine bufferization allocation lowering
Aart Bik [Tue, 21 Jun 2022 21:13:14 +0000 (14:13 -0700)]
[mlir][sparse] refine bufferization allocation lowering

Marking bufferization allocation operation as invalid
during sparse lowering is too strict, since dense and
sparse allocation can co-exist. This revision refines
the lowering with a dynamic type check.

Reviewed By: bixia

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

2 years ago[gn build] Port 79fbee3cc562
LLVM GN Syncbot [Tue, 21 Jun 2022 21:53:32 +0000 (21:53 +0000)]
[gn build] Port 79fbee3cc562

2 years agoRe-apply "[JITLink][Orc] Add MemoryMapper interface with InProcess implementation"
Anubhab Ghosh [Tue, 21 Jun 2022 21:31:40 +0000 (23:31 +0200)]
Re-apply "[JITLink][Orc] Add MemoryMapper interface with InProcess implementation"

[JITLink][Orc] Add MemoryMapper interface with InProcess implementation

MemoryMapper class takes care of cross-process and in-process address space
reservation, mapping, transferring content and applying protections.

Implementations of this class can support different ways to do this such
as using shared memory, transferring memory contents over EPC or just
mapping memory in the same process (InProcessMemoryMapper).

The original patch landed with commit 6ede65205073d3cf6b1ed4d101e66eae3e0fc8e6
It was reverted temporarily in commit 6a4056ab2ada0046ff97a55a5fb34c2c59504fd1

Reviewed By: sgraenitz, lhames

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

2 years ago[RISCV] Add cost model test coverage for loads and stores (both fixed and scalable)
Philip Reames [Tue, 21 Jun 2022 21:42:50 +0000 (14:42 -0700)]
[RISCV] Add cost model test coverage for loads and stores (both fixed and scalable)

2 years ago[SLP][NFC] Precommit test for a followup patch that improves reordering for addsubs
Vasileios Porpodas [Thu, 12 May 2022 23:25:34 +0000 (16:25 -0700)]
[SLP][NFC] Precommit test for a followup patch that improves reordering for addsubs

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

2 years ago[ConstraintElimination] Add tests for transferring info between systems.
Florian Hahn [Tue, 21 Jun 2022 21:34:03 +0000 (23:34 +0200)]
[ConstraintElimination] Add tests for transferring info between systems.

2 years ago[Clang] Fix compile time regression caused by D126061.
Martin Boehme [Fri, 17 Jun 2022 20:41:53 +0000 (22:41 +0200)]
[Clang] Fix compile time regression caused by D126061.

As noted by @nikic, D126061 causes a compile time regression of about
0.5% on -O0 builds:

http://llvm-compile-time-tracker.com/compare.php?from=7acc88be0312c721bc082ed9934e381d297f4707&to=8c7b64b5ae2a09027c38db969a04fc9ddd0cd6bb&stat=instructions

This happens because, in a number of places, D126061 creates an
additional local variable of type `ParsedAttributes`. In the large
majority of cases, no attributes are added to this `ParsedAttributes`,
but it turns out that creating an empty `ParsedAttributes`, then
destroying it is a relatively expensive operation.

The reason for this is because `AttributePool` uses a `TinyPtrVector` as
its underlying vector class, and the technique that `TinyPtrVector`
employs to achieve its extreme memory frugality makes the `begin()` and
`end()` member functions relatively slow. The `ParsedAttributes`
destructor iterates over the attributes in its `AttributePool`, and this
is a relatively expensive operation because `TinyPtrVector`'s `begin()` and
`end()` are relatively slow.

The fix for this is to replace `TinyPtrVector` in `ParsedAttributes` and
`AttributePool` with `SmallVector`. `ParsedAttributes` and
`AttributePool` objects are only ever allocated on the stack (they're
not part of the AST), and only a small number of these objects are live
at any given time, so they don't need the extreme memory frugality of
`TinyPtrVector`.

I've confirmed with valgrind that this patch does not increase heap
memory usage, and it actually makes compiles slightly faster than they
were before D126061.

Here are instruction count measurements (obtained with callgrind)
running `clang -c MultiSource/Applications/JM/lencod/parsetcommon.c`
(a file from llvm-test-suite that exhibited a particularly large
compile-time regression):

7acc88be0312c721bc082ed9934e381d297f4707
(baseline one commit before D126061 landed)
102,280,068 instructions

8c7b64b5ae2a09027c38db969a04fc9ddd0cd6bb
(the patch that landed D126061)
103,289,454 instructions
(+0.99% relative to baseline)

This patch applied onto
8c7b64b5ae2a09027c38db969a04fc9ddd0cd6bb
101,117,584 instructions
(-1.14% relative to baseline)

Reviewed By: aaron.ballman

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

2 years ago[DAG] visitTRUNCATE - move TRUNCATE(ADDE/ADDCARRY) folds to switch statement handling...
Simon Pilgrim [Tue, 21 Jun 2022 21:07:28 +0000 (22:07 +0100)]
[DAG] visitTRUNCATE - move TRUNCATE(ADDE/ADDCARRY) folds to switch statement handling the other binops. NFC.

2 years ago[RISCV] Move the passthru operand for RISCVISD::VRGATHER*_VL nodes. NFC
Craig Topper [Tue, 21 Jun 2022 20:48:12 +0000 (13:48 -0700)]
[RISCV] Move the passthru operand for RISCVISD::VRGATHER*_VL nodes. NFC

Put it before the VL instead of as the first operand. I want to add
passthru to more operands, but the commutable ones like VADD_VL
require the commutable operands to be operand 0 and 1. So we can't
have the passthru as operand 0 for those.

2 years agoLoopVect, tests] Add some basic coverage for scalable costing of scatter/gather patte...
Philip Reames [Tue, 21 Jun 2022 20:54:53 +0000 (13:54 -0700)]
LoopVect, tests] Add some basic coverage for scalable costing of scatter/gather patterns on RISCV

This just adds some very basic vectorizer testing with both fixed and scalable vectorization enabled.

2 years ago[LoopVect, tests] Add some basic coverage for scalable costing on RISCV
Philip Reames [Tue, 21 Jun 2022 20:22:13 +0000 (13:22 -0700)]
[LoopVect, tests] Add some basic coverage for scalable costing on RISCV

This just adds some very basic vectorizer testing with both fixed and scalable vectorization enabled.  For context, I just yesterday fixed a crash in costing of the splat_ptr example - see bbf3fd.

2 years ago[polly] #include <algorithm>
Arthur Eubanks [Tue, 21 Jun 2022 20:26:40 +0000 (13:26 -0700)]
[polly] #include <algorithm>

For the usage of std::max in the header.

Speculative fix for
https://ci.chromium.org/ui/p/fuchsia/builders/toolchain.ci/clang-windows-x64/b8810806780048763729/overview
reported in https://reviews.llvm.org/D125263.

2 years ago[DAG] Remove SelectionDAG::GetDemandedBits DemandedElts variant. NFC.
Simon Pilgrim [Tue, 21 Jun 2022 20:23:04 +0000 (21:23 +0100)]
[DAG] Remove SelectionDAG::GetDemandedBits DemandedElts variant. NFC.

We're slowly removing SelectionDAG::GetDemandedBits and replacing it with SimplifyMultipleUseDemandedBits, we no longer have any uses for the vector demanded elt variant.

2 years ago[libc++abi][AIX] Use _LIBCXXABI_FUNC_VIS for exported routines
Xing Xue [Tue, 21 Jun 2022 20:18:17 +0000 (16:18 -0400)]
[libc++abi][AIX] Use _LIBCXXABI_FUNC_VIS for exported routines

Summary:
This patch adds _LIBCXXABI_FUNC_VIS to the definitions of the personality and helper routines for the state table based EH, now that the support of the visibility attribute is being added to AIX Clang. Currently an export list is generated in the absence of the visibility attribute support downstream.

Reviewed by: MaskRay, daltenty

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

2 years agoRevert "Revert "[CMake] Enable LLVM_ENABLE_PER_TARGET_RUNTIME_DIR by default on Linux""
Fangrui Song [Tue, 21 Jun 2022 20:13:31 +0000 (13:13 -0700)]
Revert "Revert "[CMake] Enable LLVM_ENABLE_PER_TARGET_RUNTIME_DIR by default on Linux""

This reverts commit 90c9d41c8acc34fb68958f373eb23f53c1b1c840.

Keeping arm* LLVM_ENABLE_PER_TARGET_RUNTIME_DIR=on is sufficient to work around
LLVM_ENABLE_RUNTIMES not working well with arm. It is more important for
LLVM_ENABLE_PROJECTS and LLVM_ENABLE_RUNTIMES to match in the file hierarchy.

2 years agoRoll back Michał's changes to debugserver, not meant for there
Jason Molenda [Tue, 21 Jun 2022 19:57:42 +0000 (12:57 -0700)]
Roll back Michał's changes to debugserver, not meant for there

Michał's change in https://reviews.llvm.org/D127193 did a search &
replace for a pattern that also appears in debugserver, but it
shouldn't be done there.

2 years ago[LV] Add new block to place recurrence splice, if needed.
Florian Hahn [Tue, 21 Jun 2022 19:54:37 +0000 (21:54 +0200)]
[LV] Add new block to place recurrence splice, if needed.

In some cases, a recurrence splice instructions needs to be inserted
between to regions, for example if the regions get re-arranged during
sinking.

Fixes #56146.

2 years ago[ADT] [lld-macho] Check for end iterator deref in filter_iterator_base
Daniel Bertalan [Tue, 21 Jun 2022 19:47:45 +0000 (15:47 -0400)]
[ADT] [lld-macho] Check for end iterator deref in filter_iterator_base

If ld64.lld was supplied an object file that had a `__debug_abbrev` or
`__debug_str` section, but didn't have any compile unit DIEs in
`__debug_info`, it would dereference an iterator pointing to the empty
array of DIEs. This underlying issue started causing segmentation faults
when parsing for `__debug_info` was addded in D128184. That commit was
reverted, and this one fixes the invalid dereference to allow relanding
it.

This commit adds an assertion to `filter_iterator_base`'s dereference
operators to catch bugs like this one.

Ran check-llvm, check-clang and check-lld.

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

2 years ago[lld/mac] Replace while loop with for loop
Nico Weber [Tue, 21 Jun 2022 19:12:02 +0000 (15:12 -0400)]
[lld/mac] Replace while loop with for loop

No behavior change. In preparation for using a parallelFor() here.

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

2 years agoAMDGPU: Regenerate test checks
Matt Arsenault [Wed, 15 Jun 2022 17:56:15 +0000 (13:56 -0400)]
AMDGPU: Regenerate test checks

2 years agoAMDGPU: Don't use branches to entry block in test
Matt Arsenault [Sat, 11 Jun 2022 15:12:36 +0000 (11:12 -0400)]
AMDGPU: Don't use branches to entry block in test

This created a weird loop making the tested registers live out of the
block, which I don't think is relevant to the purpose of the
tests. This caused regressions when the validity queries are changed
to use tests based whether the use instruction was a kill. If the
register was live out for the loop, it was still live.

I guess we could still do this in a narrow case where the value loops
back, but that's most a pointlessly complex case to handle.

2 years ago[AMDGPU] gfx11 Remove SDWA from shuffle_vector ISel
Joe Nash [Mon, 20 Jun 2022 13:50:17 +0000 (09:50 -0400)]
[AMDGPU] gfx11 Remove SDWA from shuffle_vector ISel

gfx11 does not have SDWA

Reviewed By: #amdgpu, rampitec

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

2 years ago[RISCV] Remove true_mask patterns for VRGATHERE16..
Craig Topper [Tue, 21 Jun 2022 18:54:56 +0000 (11:54 -0700)]
[RISCV] Remove true_mask patterns for VRGATHERE16..

After adding it to the table so the post-isel peephole can handle it.

2 years ago[RISCV] Remove true_mask patterns for VRGATHER.
Craig Topper [Tue, 21 Jun 2022 18:40:53 +0000 (11:40 -0700)]
[RISCV] Remove true_mask patterns for VRGATHER.

These can be handled by the post-isel peephole.

2 years ago[lld/mac] On Apple systems, call CC_SHA256 from libSystem
Nico Weber [Tue, 21 Jun 2022 17:49:26 +0000 (13:49 -0400)]
[lld/mac] On Apple systems, call CC_SHA256 from libSystem

It's in libSystem, so it doesn't bring in any new deps, and it's
currently much faster than LLVM's current SHA256 implementation.

Makes linking (arm64) Chromium Framework with ld64.lld 17% faster.
See also PR56121.

No behavior change.

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

2 years ago[DSE] Don't remove nounwind invokes
Heejin Ahn [Mon, 20 Jun 2022 05:48:48 +0000 (22:48 -0700)]
[DSE] Don't remove nounwind invokes

For non-mem-intrinsic and non-lifetime `CallBase`s, the current
`isRemovable` function only checks if the `CallBase` 1. has no uses 2.
will return 3. does not throw:
https://github.com/llvm/llvm-project/blob/80fb7823367c1d105fcbc8f21b69205a0d68c859/llvm/lib/Transforms/Scalar/DeadStoreElimination.cpp#L1017

But we should also exclude invokes even in case they don't throw,
because they are terminators and thus cannot be removed. While it
doesn't seem to make much sense for `invoke`s to have an `nounwind`
target, this kind of code can be generated and is also valid bitcode.

Reviewed By: nikic

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

2 years agoFix an unused-variable warning in release build, NFC.
Haojian Wu [Tue, 21 Jun 2022 18:52:07 +0000 (20:52 +0200)]
Fix an unused-variable warning in release build, NFC.

2 years ago[flang] Add more diagnostics to fir.coordinate_of
Valentin Clement [Tue, 21 Jun 2022 18:42:43 +0000 (20:42 +0200)]
[flang] Add more diagnostics to fir.coordinate_of

Add more diagnostics to fir.coordinate_of to provide better checking
that the IR is sane.

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

Reviewed By: PeteSteinfeld

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

Co-authored-by: Eric Schweitz <eschweitz@nvidia.com>
2 years ago[libc++] Pass -fno-modules to clang-tidy instead of disabling it for the modules...
Nikolas Klauser [Tue, 21 Jun 2022 18:26:43 +0000 (20:26 +0200)]
[libc++] Pass -fno-modules to clang-tidy instead of disabling it for the modules build

Reviewed By: ldionne, #libc

Spies: libcxx-commits

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

2 years ago[libc++][clang-tidy] Enable bugprone-use-after-move and explicitly list all used...
Nikolas Klauser [Wed, 15 Jun 2022 08:21:19 +0000 (10:21 +0200)]
[libc++][clang-tidy] Enable bugprone-use-after-move and explicitly list all used checks

Reviewed By: #libc, ldionne

Spies: aheejin, libcxx-commits, xazax.hun

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

2 years ago[lldb] [llgs] Attempt to fix LLGS tests on Windows
Michał Górny [Tue, 21 Jun 2022 18:08:06 +0000 (20:08 +0200)]
[lldb] [llgs] Attempt to fix LLGS tests on Windows

Sponsored by: The FreeBSD Foundation

2 years ago[lld/mac] Extract a sha256() function
Nico Weber [Tue, 21 Jun 2022 17:46:40 +0000 (13:46 -0400)]
[lld/mac] Extract a sha256() function

No behavior change.

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

2 years ago[InstCombine] handle subobjects of constant aggregates
Martin Sebor [Tue, 21 Jun 2022 17:31:58 +0000 (11:31 -0600)]
[InstCombine] handle subobjects of constant aggregates

Remove the known limitation of the library function call folders to only
work with top-level arrays of characters (as per the TODO comment in
the code) and allows them to also fold calls involving subobjects of
constant aggregates such as member arrays.

2 years ago[lldb] [llgs] Add a test for detach-all packet
Michał Górny [Wed, 8 Jun 2022 11:09:08 +0000 (13:09 +0200)]
[lldb] [llgs] Add a test for detach-all packet

Add a test verifying that plain 'D' packet correctly detaches all
processes.

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

2 years ago[lldb] [llgs] Refactor fork/vfork tests, verify state
Michał Górny [Wed, 8 Jun 2022 10:52:52 +0000 (12:52 +0200)]
[lldb] [llgs] Refactor fork/vfork tests, verify state

Refactor the fork and vfork tests to reuse the code better, avoid
unnecessary regexps and avoid unnecessary conversions between
hex-strings and integers.

Verify the server state after detaching.  In particular, verify that
the detached process' PID/TID pair is no longer valid,
and that the correct process remains running.

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

2 years ago[lldb] [llgs] Fix signo sent with fork/vfork/vforkdone events
Michał Górny [Mon, 20 Jun 2022 14:50:21 +0000 (16:50 +0200)]
[lldb] [llgs] Fix signo sent with fork/vfork/vforkdone events

Fix ThreadStopInfo struct to include the signal number for all events.
Since signo was not included in the details for fork, vfork
and vforkdone stops, the code incidentally referenced the wrong union
member, resulting in wrong signo being sent.

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

2 years ago[lldb] [MainLoop] Support "pending callbacks", to be called once
Michał Górny [Tue, 21 Jun 2022 09:55:48 +0000 (11:55 +0200)]
[lldb] [MainLoop] Support "pending callbacks", to be called once

Support adding a "pending callback" to the main loop, that will be
called once after all the pending events are processed.  This can be
e.g. to defer destroying the process instance until its exit is fully
processed, as suggested in D127500.

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

2 years ago[HLSL] Support HLSL vector initializers
Chris Bieneman [Tue, 14 Jun 2022 21:48:30 +0000 (16:48 -0500)]
[HLSL] Support HLSL vector initializers

In HLSL vectors are ext_vectors in all respects except that they
support a constructor style syntax for initializing vectors. This
change adds a translation of vector constructor arguments into
initializer lists.

This supports two oddities of HLSL syntax:
(1) HLSL vectors support constructor syntax
(2) HLSL vectors are expanded to constituate components in constructors

Reviewed By: aaron.ballman

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

2 years ago[mlir][TilingInterface] Enable tile and fuse using TilingInterface.
Mahesh Ravishankar [Tue, 21 Jun 2022 16:59:26 +0000 (16:59 +0000)]
[mlir][TilingInterface] Enable tile and fuse using TilingInterface.

This patch implements tile and fuse transformation for ops that
implement the tiling interface. To do so,
- `TilingInterface` needs a new method that generates a tiled
  implementation of the operation based on the tile of the result
  needed.
- A pattern is added that replaces a `tensor.extract_slice` whose
  source is defined by an operation that implements the
  `TilingInterface` with a tiled implementation that produces the
  extracted slice in-place (using the method added to
  `TilingInterface`).
- A pattern is added that takes a sequence of operations that
  implement the `TilingInterface` (for now `LinalgOp`s), tiles the
  consumer, and greedily fuses its producers iteratively.

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

2 years ago[SLP][NFC]Fix a warning in a comparison, NFC.
Alexey Bataev [Tue, 21 Jun 2022 17:04:39 +0000 (10:04 -0700)]
[SLP][NFC]Fix a warning in a comparison, NFC.

Fixed signedness warning.

2 years ago[lldb] [llgs] Implement non-stop style stop notification packets
Michał Górny [Tue, 12 Apr 2022 14:21:09 +0000 (16:21 +0200)]
[lldb] [llgs] Implement non-stop style stop notification packets

Implement the support for %Stop asynchronous notification packet format
in LLGS.  This does not implement full support for non-stop mode for
threaded programs -- process plugins continue stopping all threads
on every event.  However, it will be used to implement asynchronous
events in multiprocess debugging.

The non-stop protocol is enabled using QNonStop packet.  When it is
enabled, the server uses notification protocol instead of regular stop
replies.  Since all threads are always stopped, notifications are always
generated for all active threads and copied into stop notification
queue.

If the queue was empty, the initial asynchronous %Stop notification
is sent to the client immediately.  The client needs to (eventually)
acknowledge the notification by sending the vStopped packet, in which
case it is popped from the queue and the stop reason for the next thread
is reported.  This continues until notification queue is empty again,
in which case an OK reply is sent.

Asychronous notifications are also used for vAttach results and program
exits.  The `?` packet uses a hybrid approach -- it returns the first
stop reason synchronously, and exposes the stop reasons for remaining
threads via vStopped queue.

The change includes a test case for a program generating a segfault
on 3 threads.  The server is expected to generate a stop notification
for the segfaulting thread, along with the notifications for the other
running threads (with "no stop reason").  This verifies that the stop
reasons are correctly reported for all threads, and that notification
queue works.

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

2 years ago[libc++][CI] Updates GCC to version 12.
Mark de Wever [Mon, 30 May 2022 16:38:27 +0000 (18:38 +0200)]
[libc++][CI] Updates GCC to version 12.

Reviewed By: ldionne, philnik, #libc, #libc_abi

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

2 years agoRevert "[mlir][TilingInterface] Enable tile and fuse using TilingInterface."
Mahesh Ravishankar [Tue, 21 Jun 2022 16:56:10 +0000 (16:56 +0000)]
Revert "[mlir][TilingInterface] Enable tile and fuse using TilingInterface."

This reverts commit ea75511319d9dff8c38c8794c3949c40b63a38d7 due to build failures.

2 years ago[Support/BLAKE3] CMake: Check for `IS_X64` or `CMAKE_OSX_ARCHITECTURES` before adding...
Argyrios Kyrtzidis [Tue, 21 Jun 2022 16:46:06 +0000 (09:46 -0700)]
[Support/BLAKE3] CMake: Check for `IS_X64` or `CMAKE_OSX_ARCHITECTURES` before adding the assembly files

This should fix `clang-ppc64-aix` builder (https://lab.llvm.org/buildbot/#/builders/214)

2 years agoin the absense of the -max-pass-iterations command line options, make
John Regehr [Tue, 21 Jun 2022 15:01:42 +0000 (09:01 -0600)]
in the absense of the -max-pass-iterations command line options, make
llvm-reduce run its full pass sequence up to 5 times, instead of just
once

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

2 years ago[mlir][TilingInterface] Enable tile and fuse using TilingInterface.
Mahesh Ravishankar [Mon, 13 Jun 2022 23:24:31 +0000 (23:24 +0000)]
[mlir][TilingInterface] Enable tile and fuse using TilingInterface.

This patch implements tile and fuse transformation for ops that
implement the tiling interface. To do so,
- `TilingInterface` needs a new method that generates a tiled
  implementation of the operation based on the tile of the result
  needed.
- A pattern is added that replaces a `tensor.extract_slice` whose
  source is defined by an operation that implements the
  `TilingInterface` with a tiled implementation that produces the
  extracted slice in-place (using the method added to
  `TilingInterface`).
- A pattern is added that takes a sequence of operations that
  implement the `TilingInterface` (for now `LinalgOp`s), tiles the
  consumer, and greedily fuses its producers iteratively.

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

2 years ago[Scalarizer] No need to gather a scattered extracted element
serge-sans-paille [Thu, 19 May 2022 12:27:16 +0000 (14:27 +0200)]
[Scalarizer] No need to gather a scattered extracted element

ExtractElement does not produce a vector out of a vector, so there's no need to
call a gather once done.

Fix #54469

Credits to npopov@redhat.com for the original approach.

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

2 years ago[NFC] clang: Implement tests for PR56099
Matheus Izvekov [Sat, 18 Jun 2022 02:05:45 +0000 (04:05 +0200)]
[NFC] clang: Implement tests for PR56099

Signed-off-by: Matheus Izvekov <mizvekov@gmail.com>
Differential Revision: https://reviews.llvm.org/D128112

2 years agoReland [GlobalOpt] Preserve CFG analyses
Arthur Eubanks [Sun, 19 Jun 2022 19:20:11 +0000 (12:20 -0700)]
Reland [GlobalOpt] Preserve CFG analyses

The only place we modify the CFG is when calling
removeUnreachableBlocks(), so insert a callback there which invalidates
analyses for that function (or recomputes DT in the legacy PM).

We may delete functions, make sure to clear analyses for those
functions. (this was missed in the original revision)

Small compile time wins across the board:
https://llvm-compile-time-tracker.com/compare.php?from=f444ea8ce0aaaa5ec1a4129809389da15cc41396&to=698f41f4fc26cbf1006ed5d88e9d658edfc5b749&stat=instructions

Reviewed By: nikic

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

2 years ago[gdb-scripts] Add to_string methods to printer implementations
Krzysztof Drewniak [Thu, 16 Jun 2022 14:38:56 +0000 (14:38 +0000)]
[gdb-scripts] Add to_string methods to printer implementations

Some GDB versions require all prettyprinter classes to define to_string.
This commit adds these definitions.

Reviewed By: csigg

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

2 years ago[mlir][sparse][taco] Support f16.
bixia1 [Fri, 17 Jun 2022 23:14:36 +0000 (16:14 -0700)]
[mlir][sparse][taco] Support f16.

Reviewed By: aartbik

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

2 years ago[libc++] Improve charconv base10 algorithm.
Mark de Wever [Mon, 16 May 2022 05:42:40 +0000 (07:42 +0200)]
[libc++] Improve charconv base10 algorithm.

This change is a preparation to add the 128-bit integral output.

Before
```
--------------------------------------------------------------
Benchmark                    Time             CPU   Iterations
--------------------------------------------------------------
BM_to_chars_good/2        20.1 ns         20.1 ns     35045000
BM_to_chars_good/3         117 ns          117 ns      5916000
BM_to_chars_good/4        83.7 ns         83.7 ns      8401000
BM_to_chars_good/5        70.6 ns         70.6 ns      9915000
BM_to_chars_good/6        59.9 ns         59.9 ns     11678000
BM_to_chars_good/7        53.9 ns         53.8 ns     12995000
BM_to_chars_good/8        19.0 ns         19.0 ns     37110000
BM_to_chars_good/9        45.9 ns         45.8 ns     15278000
BM_to_chars_good/10       9.24 ns         9.24 ns     75343000
BM_to_chars_good/11       42.6 ns         42.6 ns     16449000
BM_to_chars_good/12       38.8 ns         38.8 ns     18101000
BM_to_chars_good/13       38.8 ns         38.8 ns     17999000
BM_to_chars_good/14       37.7 ns         37.6 ns     18571000
BM_to_chars_good/15       35.8 ns         35.8 ns     19660000
BM_to_chars_good/16       15.4 ns         15.4 ns     46129000
BM_to_chars_good/17       32.3 ns         32.3 ns     21763000
BM_to_chars_good/18       32.8 ns         32.8 ns     21396000
BM_to_chars_good/19       33.4 ns         33.4 ns     21078000
BM_to_chars_good/20       33.3 ns         33.3 ns     21020000
BM_to_chars_good/21       32.3 ns         32.3 ns     21807000
BM_to_chars_good/22       31.6 ns         31.6 ns     22057000
BM_to_chars_good/23       30.7 ns         30.7 ns     22938000
BM_to_chars_good/24       28.3 ns         28.3 ns     24659000
BM_to_chars_good/25       28.2 ns         28.2 ns     24790000
BM_to_chars_good/26       28.4 ns         28.4 ns     24410000
BM_to_chars_good/27       28.7 ns         28.7 ns     24423000
BM_to_chars_good/28       28.9 ns         28.9 ns     24139000
BM_to_chars_good/29       28.9 ns         28.9 ns     24347000
BM_to_chars_good/30       29.2 ns         29.2 ns     24141000
BM_to_chars_good/31       29.6 ns         29.6 ns     23699000
BM_to_chars_good/32       29.5 ns         29.5 ns     23933000
BM_to_chars_good/33       28.9 ns         28.9 ns     24042000
BM_to_chars_good/34       28.7 ns         28.7 ns     24361000
BM_to_chars_good/35       28.3 ns         28.3 ns     24703000
BM_to_chars_good/36       28.1 ns         28.1 ns     24924000
BM_to_chars_bad/2         6.16 ns         6.15 ns    114101000
BM_to_chars_bad/3         14.5 ns         14.5 ns     48244000
BM_to_chars_bad/4         16.9 ns         16.9 ns     41974000
BM_to_chars_bad/5         12.5 ns         12.5 ns     56080000
BM_to_chars_bad/6         10.9 ns         10.9 ns     64036000
BM_to_chars_bad/7         14.5 ns         14.5 ns     47294000
BM_to_chars_bad/8         6.36 ns         6.35 ns    110430000
BM_to_chars_bad/9         12.4 ns         12.4 ns     56448000
BM_to_chars_bad/10        5.13 ns         5.13 ns    137596000
BM_to_chars_bad/11        9.88 ns         9.88 ns     69015000
BM_to_chars_bad/12        10.8 ns         10.8 ns     63990000
BM_to_chars_bad/13        10.7 ns         10.7 ns     65066000
BM_to_chars_bad/14        9.71 ns         9.71 ns     71775000
BM_to_chars_bad/15        9.18 ns         9.18 ns     75267000
BM_to_chars_bad/16        6.12 ns         6.12 ns    115000000
BM_to_chars_bad/17        10.7 ns         10.7 ns     65504000
BM_to_chars_bad/18        10.6 ns         10.6 ns     65685000
BM_to_chars_bad/19        9.98 ns         9.98 ns     69894000
BM_to_chars_bad/20        9.74 ns         9.74 ns     72098000
BM_to_chars_bad/21        9.25 ns         9.25 ns     75184000
BM_to_chars_bad/22        9.10 ns         9.10 ns     75602000
BM_to_chars_bad/23        9.48 ns         9.48 ns     72824000
BM_to_chars_bad/24        9.27 ns         9.27 ns     75112000
BM_to_chars_bad/25        9.61 ns         9.61 ns     72080000
BM_to_chars_bad/26        9.72 ns         9.72 ns     72178000
BM_to_chars_bad/27        10.0 ns         10.0 ns     69733000
BM_to_chars_bad/28        10.3 ns         10.3 ns     67409000
BM_to_chars_bad/29        9.97 ns         9.97 ns     69193000
BM_to_chars_bad/30        10.1 ns         10.1 ns     69007000
BM_to_chars_bad/31        9.68 ns         9.68 ns     72232000
BM_to_chars_bad/32        8.99 ns         8.99 ns     76825000
BM_to_chars_bad/33        8.82 ns         8.82 ns     79293000
BM_to_chars_bad/34        8.64 ns         8.64 ns     80441000
BM_to_chars_bad/35        8.96 ns         8.96 ns     75320000
BM_to_chars_bad/36        8.87 ns         8.87 ns     77293000

```

After
```
--------------------------------------------------------------
Benchmark                    Time             CPU   Iterations
--------------------------------------------------------------
BM_to_chars_good/2        14.7 ns         14.7 ns     47583000
BM_to_chars_good/3         101 ns          101 ns      6901000
BM_to_chars_good/4        68.4 ns         68.4 ns     10088000
BM_to_chars_good/5        58.2 ns         58.2 ns     12007000
BM_to_chars_good/6        51.1 ns         51.1 ns     13687000
BM_to_chars_good/7        45.6 ns         45.6 ns     15323000
BM_to_chars_good/8        14.6 ns         14.6 ns     47795000
BM_to_chars_good/9        40.7 ns         40.7 ns     17371000
BM_to_chars_good/10       7.48 ns         7.48 ns     90931000
BM_to_chars_good/11       37.6 ns         37.6 ns     18542000
BM_to_chars_good/12       35.2 ns         35.2 ns     19922000
BM_to_chars_good/13       34.9 ns         34.9 ns     20105000
BM_to_chars_good/14       33.5 ns         33.5 ns     20863000
BM_to_chars_good/15       31.9 ns         31.9 ns     22014000
BM_to_chars_good/16       11.7 ns         11.7 ns     60012000
BM_to_chars_good/17       28.9 ns         28.9 ns     24148000
BM_to_chars_good/18       29.0 ns         29.0 ns     24317000
BM_to_chars_good/19       28.7 ns         28.7 ns     24363000
BM_to_chars_good/20       28.1 ns         28.1 ns     24899000
BM_to_chars_good/21       27.5 ns         27.5 ns     25499000
BM_to_chars_good/22       26.9 ns         26.9 ns     25929000
BM_to_chars_good/23       26.2 ns         26.2 ns     26828000
BM_to_chars_good/24       25.1 ns         25.1 ns     27742000
BM_to_chars_good/25       25.3 ns         25.3 ns     27720000
BM_to_chars_good/26       25.2 ns         25.2 ns     27789000
BM_to_chars_good/27       25.3 ns         25.3 ns     27777000
BM_to_chars_good/28       25.3 ns         25.3 ns     27643000
BM_to_chars_good/29       25.3 ns         25.3 ns     27750000
BM_to_chars_good/30       25.4 ns         25.4 ns     27566000
BM_to_chars_good/31       25.4 ns         25.4 ns     27611000
BM_to_chars_good/32       25.8 ns         25.8 ns     27218000
BM_to_chars_good/33       25.7 ns         25.7 ns     27070000
BM_to_chars_good/34       26.1 ns         26.1 ns     26693000
BM_to_chars_good/35       26.4 ns         26.4 ns     26486000
BM_to_chars_good/36       26.3 ns         26.3 ns     26619000
BM_to_chars_bad/2         5.99 ns         5.99 ns    118787000
BM_to_chars_bad/3         14.3 ns         14.3 ns     48567000
BM_to_chars_bad/4         16.0 ns         16.0 ns     43239000
BM_to_chars_bad/5         12.6 ns         12.6 ns     55354000
BM_to_chars_bad/6         10.7 ns         10.7 ns     65491000
BM_to_chars_bad/7         14.4 ns         14.4 ns     48723000
BM_to_chars_bad/8         6.50 ns         6.50 ns    104967000
BM_to_chars_bad/9         12.0 ns         12.0 ns     56552000
BM_to_chars_bad/10        5.16 ns         5.16 ns    136380000
BM_to_chars_bad/11        10.5 ns         10.5 ns     66764000
BM_to_chars_bad/12        10.7 ns         10.7 ns     65534000
BM_to_chars_bad/13        11.0 ns         11.0 ns     63426000
BM_to_chars_bad/14        9.90 ns         9.90 ns     68575000
BM_to_chars_bad/15        9.52 ns         9.52 ns     70932000
BM_to_chars_bad/16        6.14 ns         6.14 ns    111762000
BM_to_chars_bad/17        10.6 ns         10.6 ns     65883000
BM_to_chars_bad/18        10.5 ns         10.5 ns     67606000
BM_to_chars_bad/19        9.96 ns         9.96 ns     68898000
BM_to_chars_bad/20        9.40 ns         9.41 ns     73116000
BM_to_chars_bad/21        9.12 ns         9.12 ns     78647000
BM_to_chars_bad/22        8.95 ns         8.95 ns     80211000
BM_to_chars_bad/23        9.50 ns         9.49 ns     73571000
BM_to_chars_bad/24        9.29 ns         9.29 ns     74690000
BM_to_chars_bad/25        9.65 ns         9.65 ns     72877000
BM_to_chars_bad/26        9.78 ns         9.78 ns     70171000
BM_to_chars_bad/27        10.1 ns         10.1 ns     69543000
BM_to_chars_bad/28        10.4 ns         10.4 ns     67582000
BM_to_chars_bad/29       10.00 ns        10.00 ns     70806000
BM_to_chars_bad/30        9.99 ns         9.99 ns     70340000
BM_to_chars_bad/31        9.56 ns         9.56 ns     74159000
BM_to_chars_bad/32        8.97 ns         8.97 ns     78052000
BM_to_chars_bad/33        8.86 ns         8.86 ns     78586000
BM_to_chars_bad/34        8.81 ns         8.81 ns     78562000
BM_to_chars_bad/35        8.90 ns         8.90 ns     77384000
BM_to_chars_bad/36        9.04 ns         9.04 ns     77263000

```

Reviewed By: #libc, ldionne

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

2 years ago[libc++][format] Improves the handle test.
Mark de Wever [Tue, 14 Jun 2022 17:25:42 +0000 (19:25 +0200)]
[libc++][format] Improves the handle test.

A formatter using a handle only needs to satisfy the BasicFormatter
requirements. The current test allowed more than that minimum. Changed
it to the minimum to make sure it works.

This was due to a post-commit review comment of @vitaut in D121530.

Reviewed By: ldionne, vitaut, #libc

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

2 years ago[FunctionPropertiesAnalysis] Generalize support for unreachable
Mircea Trofin [Wed, 15 Jun 2022 23:59:47 +0000 (16:59 -0700)]
[FunctionPropertiesAnalysis] Generalize support for unreachable

Generalized support for subgraphs that get rendered unreachable, for
both `call` and `invoke` cases.

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

2 years ago[AArch64] Move add_and_or_is_add pattern. NFC
David Green [Tue, 21 Jun 2022 15:07:01 +0000 (16:07 +0100)]
[AArch64] Move add_and_or_is_add pattern. NFC

This just moves the add_and_or_is_add further up in the file, so that it
can be shared with SVE as in D128159.

2 years agoRevert rGe6ccb57bb3f6b761f2310e97fd6ca99eff42f73e "[SLP] Add cost model for `llvm...
Nabeel Omer [Tue, 21 Jun 2022 15:05:21 +0000 (15:05 +0000)]
Revert rGe6ccb57bb3f6b761f2310e97fd6ca99eff42f73e "[SLP] Add cost model for `llvm.powi.*` intrinsics"

This reverts commit e6ccb57bb3f6b761f2310e97fd6ca99eff42f73e.

2 years ago[lldb] Skip Recognizer/assert.test on linux
Pavel Labath [Tue, 21 Jun 2022 14:47:08 +0000 (16:47 +0200)]
[lldb] Skip Recognizer/assert.test on linux

-> PR56144

2 years ago[SystemZ] Fix the cost function for vector zero extend.
Jonas Paulsson [Mon, 31 Aug 2020 14:35:39 +0000 (16:35 +0200)]
[SystemZ] Fix the cost function for vector zero extend.

Zero extend of a vector is done with either a single unpack or a vector
permute, and the TTI cost function should reflect this.

Review: Ulrich Weigand

2 years ago[SLP] Add cost model for `llvm.powi.*` intrinsics
Nabeel Omer [Mon, 20 Jun 2022 12:49:25 +0000 (12:49 +0000)]
[SLP] Add cost model for `llvm.powi.*` intrinsics

This patch adds handling for the llvm.powi.* intrinsics in
BasicTTIImplBase::getIntrinsicInstrCost() and improves vectorization.
Closes #53887.

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

2 years ago[llvm][vfs] Implement in-memory symlinks
Jan Svoboda [Tue, 21 Jun 2022 08:20:24 +0000 (10:20 +0200)]
[llvm][vfs] Implement in-memory symlinks

This patch implements symlinks for the in-memory VFS. Original author: @erik.pilkington.

Depends on D117648 & D117649.

Reviewed By: sammccall

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

2 years ago[llvm][vfs] NFC: Promote `InMemoryDirIterator` to nested class
Jan Svoboda [Tue, 21 Jun 2022 14:20:53 +0000 (16:20 +0200)]
[llvm][vfs] NFC: Promote `InMemoryDirIterator` to nested class

2 years ago[llvm][vfs] NFC: Promote `lookupInMemoryNode()` to member function
Jan Svoboda [Tue, 21 Jun 2022 14:16:32 +0000 (16:16 +0200)]
[llvm][vfs] NFC: Promote `lookupInMemoryNode()` to member function

2 years ago[llvm][vfs] NFC: Rename `InMemoryFileSystem::addHardLink()` arguments
Jan Svoboda [Tue, 21 Jun 2022 14:12:09 +0000 (16:12 +0200)]
[llvm][vfs] NFC: Rename `InMemoryFileSystem::addHardLink()` arguments

2 years ago[SLP]Fix a crash when insert subvector is out of range.
Alexey Bataev [Fri, 17 Jun 2022 17:23:12 +0000 (10:23 -0700)]
[SLP]Fix a crash when insert subvector is out of range.

If the OffsetBeg + InsertVecSz is greater than VecSz, need to estimate
the cost as shuffle of 2 vector, not as insert of subvector. Otherwise,
the inserted subvector is out of range and compiler may crash.

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

2 years ago[X86] fold (and (mul x, c1), c2) -> (mul x, (and c1, c2)) iff c2 is all/no bits mask
Simon Pilgrim [Tue, 21 Jun 2022 14:08:39 +0000 (15:08 +0100)]
[X86] fold (and (mul x, c1), c2) -> (mul x, (and c1, c2)) iff c2 is all/no bits mask

Noticed on D128216 - if we're zeroing out vector elements of a mul/mulh result then see if we can merge the and-mask into the mul by just multiplying by zero.

Ideally we'd make this generic (similar to the existing foldSelectWithIdentityConstant?), but these cases are appearing very late, after the constants have been lowered to constant-pool loads.

2 years ago[gn build] Port 6a4056ab2ada
LLVM GN Syncbot [Tue, 21 Jun 2022 14:01:32 +0000 (14:01 +0000)]
[gn build] Port 6a4056ab2ada

2 years ago[ConstraintElimination] Remove unneeded StackEntry::Condition (NFC).
Florian Hahn [Tue, 21 Jun 2022 13:55:30 +0000 (15:55 +0200)]
[ConstraintElimination] Remove unneeded StackEntry::Condition (NFC).

The field was only used for debug printing. Print constraint from the
system instead.

2 years agoRevert "[JITLink][Orc] Add MemoryMapper interface with InProcess implementation"
Nico Weber [Tue, 21 Jun 2022 13:56:49 +0000 (09:56 -0400)]
Revert "[JITLink][Orc] Add MemoryMapper interface with InProcess implementation"

This reverts commit 6ede65205073d3cf6b1ed4d101e66eae3e0fc8e6.
Doesn't build on Windows, see https://reviews.llvm.org/D127491#3598773

2 years ago[AMDGPU] Update SPI_SHADER_PGM_RSRC2_PS.EXTRA_LDS_SIZE for GFX11
Jay Foad [Wed, 6 Apr 2022 09:49:43 +0000 (10:49 +0100)]
[AMDGPU] Update SPI_SHADER_PGM_RSRC2_PS.EXTRA_LDS_SIZE for GFX11

The granularity of SPI_SHADER_PGM_RSRC2_PS.EXTRA_LDS_SIZE changed
in GFX11. It is now in units of 256 dwords instead of 128 dwords.

COMPUTE_PGM_RSRC2.LDS_SIZE is unaffected. It is still in units of
128 dwords.

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

2 years ago[mlir][sparse] Preserve NaNs when converting float to bfloat
Benjamin Kramer [Tue, 21 Jun 2022 13:22:35 +0000 (15:22 +0200)]
[mlir][sparse] Preserve NaNs when converting float to bfloat

2 years agoRevert "[CMake] Enable LLVM_ENABLE_PER_TARGET_RUNTIME_DIR by default on Linux"
David Spickett [Tue, 21 Jun 2022 13:12:38 +0000 (13:12 +0000)]
Revert "[CMake] Enable LLVM_ENABLE_PER_TARGET_RUNTIME_DIR by default on Linux"

This reverts commit 311f7839602344ca347816146edb68c0ffaaa060.

Due to not working for Arm where arm and armhf configs are built.

2 years agoSupport expressions in the context of a reference
Emre Kultursay [Tue, 21 Jun 2022 12:28:53 +0000 (14:28 +0200)]
Support expressions in the context of a reference

...type variable by dereferencing the variable before
evaluating the expression.

Reviewed By: labath

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