platform/upstream/llvm.git
2 years ago[bazel] Port 216575e58102
Benjamin Kramer [Tue, 8 Feb 2022 22:01:04 +0000 (23:01 +0100)]
[bazel] Port 216575e58102

2 years ago[libc][Obvious] Fix typo in mkdir and mkdirat implementations.
Siva Chandra Reddy [Tue, 8 Feb 2022 17:09:12 +0000 (17:09 +0000)]
[libc][Obvious] Fix typo in mkdir and mkdirat implementations.

Reviewed By: lntue

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

2 years agoREADME: Point to the discourse & discord forums
Sylvestre Ledru [Tue, 8 Feb 2022 20:54:32 +0000 (21:54 +0100)]
README: Point to the discourse & discord forums

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

2 years agoRevert "Revert "[ProfileData] Read and symbolize raw memprof profiles.""
Snehasish Kumar [Fri, 4 Feb 2022 19:11:47 +0000 (11:11 -0800)]
Revert "Revert "[ProfileData] Read and symbolize raw memprof profiles.""

This reverts commit dbf47d227d080e4eb7239b589660f51d7b08afa9.

Reapply https://reviews.llvm.org/D116784 now that
https://reviews.llvm.org/D118413 has landed with a couple of fixes:
* fix raw profile reader unaligned access identified by ubsan
* fix windows build by using MOCK_CONST_METHOD3 instead of MOCK_METHOD.

2 years ago[test] Remove -fno-experimental-new-pass-manager -O1 from sanitize-address-field...
Arthur Eubanks [Thu, 3 Feb 2022 19:56:20 +0000 (11:56 -0800)]
[test] Remove -fno-experimental-new-pass-manager -O1 from sanitize-address-field-padding.cpp

-O1 doesn't seem necessary here.

Reviewed By: vitalybuka

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

2 years ago[clang] Properly cache member pointer LLVM types
Arthur Eubanks [Tue, 8 Feb 2022 05:56:28 +0000 (21:56 -0800)]
[clang] Properly cache member pointer LLVM types

When not going through the main Clang->LLVM type cache, we'd
accidentally create multiple different opaque types for a member pointer
type.

This allows us to remove the -verify-type-cache flag now that
check-clang passes with it on. We can do the verification in expensive
builds. Previously microsoft-abi-member-pointers.cpp was failing with
-verify-type-cache.

I suspect that there may be more issues when we have multiple member
pointer types and we clear the cache, but we can leave that for later.

Followup to D118744.

Reviewed By: rnk

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

2 years ago[LV] Move buildScalarSteps out of ILV (NFC).
Florian Hahn [Tue, 8 Feb 2022 21:18:40 +0000 (21:18 +0000)]
[LV] Move buildScalarSteps out of ILV (NFC).

This makes the function independent of shared state in ILV (ensures no
new dependencies on things like the cost model are introduced) and allows
for use directly in recipe's ::execute functions.

2 years ago[mlir][ods] NFC fix tblgen crash with empty assembly format
Mogball [Tue, 8 Feb 2022 21:13:58 +0000 (21:13 +0000)]
[mlir][ods] NFC fix tblgen crash with empty assembly format

2 years ago[AArch64] ACLE feature macro for Armv8.8-A MOPS
tyb0807 [Tue, 25 Jan 2022 22:51:49 +0000 (22:51 +0000)]
[AArch64] ACLE feature macro for Armv8.8-A MOPS

This introduces the new __ARM_FEATURE_MOPS ACLE feature test macro,
which signals the availability of the new Armv8.8-A/Armv9.3-A
instructions for standardising memcpy, memset and memmove operations.

This patch supersedes the one from https://reviews.llvm.org/D116160.

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

2 years ago[Hexagon] Fix crash with shuffle_vector of v128f16
Krzysztof Parzyszek [Sat, 5 Feb 2022 00:14:13 +0000 (16:14 -0800)]
[Hexagon] Fix crash with shuffle_vector of v128f16

2 years ago[Debuginfod][Symbolizer] Cut dependency cycle after 4a6553f4c2be
Benjamin Kramer [Tue, 8 Feb 2022 20:53:30 +0000 (21:53 +0100)]
[Debuginfod][Symbolizer] Cut dependency cycle after 4a6553f4c2be

2 years ago[sanitizer] Use _thread_db_sizeof_pthread to obtain struct pthread size
Florian Weimer [Tue, 8 Feb 2022 20:46:41 +0000 (12:46 -0800)]
[sanitizer] Use _thread_db_sizeof_pthread to obtain struct pthread size

This symbol has been exported (as an internal GLIBC_PRIVATE symbol) from libc.so.6 starting with glibc 2.34. glibc uses it internally for its libthread_db implementation to enable thread debugging on GDB, so it is unlikely to go away for now.

Fixes #52989.

Reviewed By: #sanitizers, MaskRay, vitalybuka

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

2 years ago[libc] Replace type punning with bit_cast
Guillaume Chatelet [Mon, 7 Feb 2022 15:40:28 +0000 (15:40 +0000)]
[libc] Replace type punning with bit_cast

Although type punning is defined for union in C, it is UB in C++.
This patch introduces a bit_cast function to convert between types in a safe way.

This is necessary to get llvm-libc compile with GCC.
This patch is extracted from D119002.

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

2 years ago[BOLT][TEST] Add .so instrumentation test
Amir Ayupov [Tue, 8 Feb 2022 05:14:32 +0000 (21:14 -0800)]
[BOLT][TEST] Add .so instrumentation test

Summary: Shared object instrumentation test

Test Plan: bin/llvm-lit -a bolt/test/X86/internal-call-instrument-so.s

Reviewers: rafauler

FBD34064557

2 years agoFix a typo (occured => occurred)
Sylvestre Ledru [Tue, 8 Feb 2022 20:33:01 +0000 (21:33 +0100)]
Fix a typo (occured => occurred)

Reported:
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1005195

2 years ago[flang][codegen] Keep primitive type for extractvalue and insertvalue
Valentin Clement [Tue, 8 Feb 2022 20:26:16 +0000 (21:26 +0100)]
[flang][codegen] Keep primitive type for extractvalue and insertvalue

llvm.insertvalue and llvm.extractvalue need LLVM primitive type
for the indexing operands. While upstreaming the TargetRewrite pass the change
was made from i32 to index without knowing this restriction. This patch reverts
back the types used for indexing in the two ops created in this pass.

the error you will receive when lowering to LLVM IR with the current code
is the following:

```
 'llvm.insertvalue' op operand #1 must be primitive LLVM type, but got 'index'
```

Reviewed By: jeanPerier, schweitz

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

2 years ago[libc++] Remove _LIBCPP_ABI_UNSTABLE
Louis Dionne [Mon, 7 Feb 2022 19:52:17 +0000 (14:52 -0500)]
[libc++] Remove _LIBCPP_ABI_UNSTABLE

Previously, _LIBCPP_ABI_UNSTABLE would be used interchangeably with
_LIBCPP_ABI_VERSION >= 2. This was confusing and creating unnecessary
complexity.

This patch removes _LIBCPP_ABI_UNSTABLE -- instead, the LIBCXX_ABI_UNSTABLE
CMake option will result in the LIBCXX_ABI_VERSION being set to '2', the
current unstable ABI. As a result, in the code, we only have _LIBCPP_ABI_VERSION
to check in order to query the current ABI version.

As a fly-by, this also defines the ABI namespace during CMake configuration
to reduce complexity in __config. I believe it was previously done this
way because we used to try to use __config_site as seldom as possible.
Now that we always ship a __config_site, it doesn't really matter and
I think being explicit about how the library is configured in the __config_site
is actually a feature.

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

2 years ago[libc++] Fix modules and benchmarks CI builds when incomplete features are disabled
Louis Dionne [Fri, 4 Feb 2022 20:37:01 +0000 (15:37 -0500)]
[libc++] Fix modules and benchmarks CI builds when incomplete features are disabled

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

2 years ago[mlir][ods] Optional Attribute or Type Parameters
Mogball [Tue, 8 Feb 2022 16:59:57 +0000 (16:59 +0000)]
[mlir][ods] Optional Attribute or Type Parameters

Implements optional attribute or type parameters, including support for such parameters in the assembly format `struct` directive. Also implements optional groups.

Depends on D117971

Reviewed By: rriddle

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

2 years agoAdd case to handle 0-D vectors in FlattenContiguousRowMajorTransferWritePattern and...
harsh [Tue, 8 Feb 2022 19:50:00 +0000 (19:50 +0000)]
Add case to handle 0-D vectors in FlattenContiguousRowMajorTransferWritePattern and FlattenContiguousRowMajorTransferReadPattern.

For 0-D as well as 1-D vectors, both these patterns should
return a failure as there is no need to collapse the shape
of the source. Currently, only 1-D vectors were handled. This
patch handles the 0-D case as well.

Reviewed By: Benoit, ThomasRaoux

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

2 years ago[clang] [MinGW] Recognize -lcrtdll as a library replacing -lmsvcrt
Martin Storsjö [Tue, 8 Feb 2022 08:48:32 +0000 (10:48 +0200)]
[clang] [MinGW] Recognize -lcrtdll as a library replacing -lmsvcrt

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

2 years agoRevert "[Clang] Propagate guaranteed alignment for malloc and others"
James Y Knight [Mon, 7 Feb 2022 16:31:22 +0000 (11:31 -0500)]
Revert "[Clang] Propagate guaranteed alignment for malloc and others"

The above change assumed that malloc (and friends) would always
allocate memory to getNewAlign(), even for allocations which have a
smaller size. This is not actually required by spec (a 1-byte
allocation may validly have 1-byte alignment).

Some real-world malloc implementations do not provide this guarantee,
and thus this optimization is breaking programs.

Fixes #53540

This reverts commit c2297544c04764237cedc523083c7be2fb3833d4.

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

2 years ago[gn build] Port 4a6553f4c2be
LLVM GN Syncbot [Tue, 8 Feb 2022 19:21:13 +0000 (19:21 +0000)]
[gn build] Port 4a6553f4c2be

2 years ago[Debuginfod] [Symbolizer] Break debuginfod out of libLLVM.
Daniel Thornburgh [Tue, 25 Jan 2022 22:23:38 +0000 (22:23 +0000)]
[Debuginfod] [Symbolizer] Break debuginfod out of libLLVM.

Debuginfod can pull in libcurl as a dependency, which isn't appropriate
for libLLVM. (See
https://gitlab.freedesktop.org/mesa/mesa/-/issues/5732).

This change breaks out debuginfod into a separate non-component library
that can be used directly in llvm-symbolizer. The tool can inject
debuginfod into the Symbolizer library via an abstract DebugInfoFetcher
interface, breaking the dependency of Symbolizer on debuinfod.

See https://github.com/llvm/llvm-project/issues/52731

Reviewed By: phosek

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

2 years ago[clang][ARM] Re-word PACBTI warning.
Amilendra Kodithuwakku [Tue, 8 Feb 2022 19:11:49 +0000 (19:11 +0000)]
[clang][ARM] Re-word PACBTI warning.

The original warning added in D115501 when pacbti is used with an
incompatible architecture was not exactly correct because it was
not really ignored and can affect codegen.

Therefore reword to say that the pacbti option is incompatible with
the given architecture.

Reviewed By: chill

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

2 years ago[clang][Fuchsia] Ensure static sanitizer libs are only linked in after the -nostdlib...
Leonard Chan [Tue, 8 Feb 2022 18:51:53 +0000 (10:51 -0800)]
[clang][Fuchsia] Ensure static sanitizer libs are only linked in after the -nostdlib check

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

2 years agoAllow parameter pack expansions and initializer lists in annotate attribute
Steffen Larsen [Tue, 8 Feb 2022 18:27:52 +0000 (13:27 -0500)]
Allow parameter pack expansions and initializer lists in annotate attribute

These changes make the Clang parser recognize expression parameter pack
expansion and initializer lists in attribute arguments. Because
expression parameter pack expansion requires additional handling while
creating and instantiating templates, the support for them must be
explicitly supported through the AcceptsExprPack flag.

Handling expression pack expansions may require a delay to when the
arguments of an attribute are correctly populated. To this end,
attributes that are set to accept these - through setting the
AcceptsExprPack flag - will automatically have an additional variadic
expression argument member named DelayedArgs. This member is not
exposed the same way other arguments are but is set through the new
CreateWithDelayedArgs creator function generated for applicable
attributes.

To illustrate how to implement support for expression pack expansion
support, clang::annotate is made to support pack expansions. This is
done by making handleAnnotationAttr delay setting the actual attribute
arguments until after template instantiation if it was unable to
populate the arguments due to dependencies in the parsed expressions.

2 years ago[libc][NFC] Remove all Linux specific code to respective linux/ directories
Alex Brachet [Tue, 8 Feb 2022 18:32:18 +0000 (18:32 +0000)]
[libc][NFC] Remove all Linux specific code to respective linux/ directories

These were all the non OS agnostic implementations I could find in general directories.

Currently none of these functions are actually enabled, but for when they do it makes sense that they be in linux/ specific directories.

Reviewed By: sivachandra

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

2 years ago[SimplifyCFG] 'merge compatible invokes': fully support indirect invokes
Roman Lebedev [Tue, 8 Feb 2022 18:17:23 +0000 (21:17 +0300)]
[SimplifyCFG] 'merge compatible invokes': fully support indirect invokes

As long as *all* the invokes in the set are indirect,
we can merge them, but don't merge direct invokes into the set,
even though it would be legal to do.

2 years ago[SimplifyCFG] 'merge compatible invokes': don't create trivial PHI's with all-identic...
Roman Lebedev [Tue, 8 Feb 2022 18:16:39 +0000 (21:16 +0300)]
[SimplifyCFG] 'merge compatible invokes': don't create trivial PHI's with all-identical incoming values

2 years ago[NFC][SimplifyCFG] 'merge compatible invokes': tests for indirect invokes.
Roman Lebedev [Tue, 8 Feb 2022 17:43:26 +0000 (20:43 +0300)]
[NFC][SimplifyCFG] 'merge compatible invokes': tests for indirect invokes.

2 years ago[AMDGPU] Select VGPR versions of MFMA if possible
Stanislav Mekhanoshin [Thu, 13 Jan 2022 00:03:16 +0000 (16:03 -0800)]
[AMDGPU] Select VGPR versions of MFMA if possible

We can select _vgprcd versions of MAI instructions and have no
AGPRs with the whole budget left for VGPRs if:

1. This is a kernel;
2. It has no calls;
3. It runs at least on 2 waves thus having not more that 256 VGPRs.
4. There is no inline asm requesting AGPRs.

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

2 years ago[mlir][Linalg] NFC: Combine elementwise fusion test passes.
Mahesh Ravishankar [Mon, 7 Feb 2022 17:45:28 +0000 (17:45 +0000)]
[mlir][Linalg] NFC: Combine elementwise fusion test passes.

There are a few different test passes that check elementwise fusion in
Linalg. Consolidate them to a single pass controlled by different pass
options (in keeping with how `TestLinalgTransforms` exists).

2 years ago[flang] Upstream partial lowering of GET_ENVIRONMENT_VARIABLE intrinsic
Josh Mottley [Thu, 3 Feb 2022 21:54:56 +0000 (21:54 +0000)]
[flang] Upstream partial lowering of GET_ENVIRONMENT_VARIABLE intrinsic

This patch adds partial lowering of the "GET_ENVIRONMENT_VARIABLE" intrinsic
to the backend runtime hook implemented in patches D111394 and D112698.
It also renames the `isPresent` lambda to `isAbsent` and moves it out to
its own function in `Command.cpp`. Corresponding comment fixes for this
are also modified. Lastly it adds the i1 type to
`RuntimeCallTestBash.h`.

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

2 years ago[X86] Update register RCL/RCR by 1 and immediate scheduling for Intel CPUs
Craig Topper [Tue, 8 Feb 2022 17:20:19 +0000 (09:20 -0800)]
[X86] Update register RCL/RCR by 1 and immediate scheduling for Intel CPUs

Most Intel CPU scheduler files lumped the immediate and 1 instructions
together, but uops.info shows they are quite different.

For the most part the by 1 instructions were pretty accurate to the uops.info
data except the latency was 3 instead of 2 as uops.info indicates.

The by immediate instructions need 7 or 8 uops and have higher latency.

It looks like the 8-bit by immediate instructions may need even more
uops, but I just lumped them with the 16/32/64.

Noticed while checking out PR53648. So mostly I cared about the by 1
instructions.

Reviewed By: RKSimon, pengfei

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

2 years ago[C++2b] Implement multidimentional subscript operator
Corentin Jabot [Tue, 8 Feb 2022 17:09:03 +0000 (12:09 -0500)]
[C++2b] Implement multidimentional subscript operator

Implement P2128R6 in C++23 mode.

Unlike GCC's implementation, this doesn't try to recover when a user
meant to use a comma expression.

Because the syntax changes meaning in C++23, the patch is *NOT*
implemented as an extension. Instead, declaring an array with not
exactly 1 parameter is an error in older languages modes. There is an
off-by-default extension warning in C++23 mode.

Unlike the standard, we supports default arguments;

Ie, we assume, based on conversations in WG21, that the proposed
resolution to CWG2507 will be accepted.

We allow arrays OpenMP sections and C++23 multidimensional array to
coexist:

[a , b] multi dimensional array
[a : b] open mp section
[a, b: c] // error

The rest of the patch is relatively straight forward: we take care to
support an arbitrary number of arguments everywhere.

2 years ago[Attributor] Emit fixed-point remark on function list
Joseph Huber [Tue, 8 Feb 2022 15:43:22 +0000 (10:43 -0500)]
[Attributor] Emit fixed-point remark on function list

This patch replaces the function we emit the remark on when we run into
the fix-point limit. Previously we got a function to emit a remark on
from the worklist's associated function. However, the worklist may not
always have an associated function in the case of global variables.
Replace this with the function set, and if there are no functions don't
emit the remark.

Reviewed By: jdoerfert

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

2 years ago[Libomptarget] Add header files as a dependency to CMake target
Joseph Huber [Tue, 8 Feb 2022 16:35:57 +0000 (11:35 -0500)]
[Libomptarget] Add header files as a dependency to CMake target

This patch manually adds the runtime include files to the list of
dependencies when we build the bitcode runtime library. Previously if
only the header was changed we would not recompile the source files.
The solution used here isn't optimal because every source file not has a
dependency on each header file regardless of if it was actually used by
that file.

Reviewed By: tianshilei1992

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

2 years ago[Hexagon] Alter meaning of versionless -mhvx
Krzysztof Parzyszek [Tue, 8 Feb 2022 16:45:40 +0000 (08:45 -0800)]
[Hexagon] Alter meaning of versionless -mhvx

The documentation for the official (downstream) Qualcomm Hexagon Clang
states that -mhvx sets the HVX version to be the same as the CPU version.
The current implementation upstream would use the most recent versioned
-mhvx= flag first (if present), then the CPU version. Change the upstream
behavior to match the documented behavior of the downstream compiler.

2 years ago[NFC] Increase initial size of FoldingSets used in ASTContext and CodeGenTypes
Dawid Jurczak [Tue, 8 Feb 2022 16:23:53 +0000 (17:23 +0100)]
[NFC] Increase initial size of FoldingSets used in ASTContext and CodeGenTypes

Among many FoldingSet users most notable seem to be ASTContext and CodeGenTypes.
The reasons that we spend not-so-tiny amount of time in FoldingSet calls from there, are following:

  1. Default FoldingSet capacity for 2^6 items very often is not enough.
     For PointerTypes/ElaboratedTypes/ParenTypes it's not unlikely to observe growing it to 256 or 512 items.
     FunctionProtoTypes can easily exceed 1k items capacity growing up to 4k or even 8k size.

  2. FoldingSetBase::GrowBucketCount cost itself is not very bad (pure reallocations are rather cheap thanks to BumpPtrAllocator).
     What matters is high collision rate when lot of items end up in same bucket slowing down FoldingSetBase::FindNodeOrInsertPos and trashing CPU cache
     (as items with same hash are organized in intrusive linked list which need to be traversed).

This change address both issues by increasing initial size of FoldingSets used in ASTContext and CodeGenTypes.

Extracted from: https://reviews.llvm.org/D118385

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

2 years ago[MLIR][Presburger] Fix linkage of functions in header
Benjamin Kramer [Tue, 8 Feb 2022 16:50:45 +0000 (17:50 +0100)]
[MLIR][Presburger] Fix linkage of functions in header

Static functions in a header cause spurious unused function warnings.

2 years ago[mlir][bazel] Update post 24a1
Jacques Pienaar [Tue, 8 Feb 2022 16:48:10 +0000 (08:48 -0800)]
[mlir][bazel] Update post 24a1

2 years ago[mlir][taco] Use sparse_tensor.out to write sparse tensors to files.
Bixia Zheng [Fri, 4 Feb 2022 22:21:43 +0000 (14:21 -0800)]
[mlir][taco] Use sparse_tensor.out to write sparse tensors to files.

Add a Python method, output_sparse_tensor, to use sparse_tensor.out to write
a sparse tensor value to a file.

Modify the method that evaluates a tensor expression to return a pointer of the
MLIR sparse tensor for the result to delay the extraction of the coordinates and
non-zero values.

Implement the Tensor to_file method to evaluate the tensor assignment and write
the result to a file.

Add unit tests. Modify test golden files to reflect the change that TNS outputs
now have a comment line and two meta data lines.

Reviewed By: aartbik

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

2 years agoRevert "[analyzer] Prevent misuses of -analyze-function"
Balazs Benics [Tue, 8 Feb 2022 16:42:46 +0000 (17:42 +0100)]
Revert "[analyzer] Prevent misuses of -analyze-function"

This reverts commit 841817b1ed26c1fbb709957d54c0e2751624fbf8.

Ah, it still fails on build bots for some reason.
Pinning the target triple was not enough.

2 years ago[libc++][nfc] Use TEST_SAFE_STATIC.
Mark de Wever [Wed, 2 Feb 2022 18:28:03 +0000 (19:28 +0100)]
[libc++][nfc] Use TEST_SAFE_STATIC.

This avoids using an libc++ internal macro in our tests.

Reviewed By: #libc, philnik, ldionne

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

2 years ago[libc++] Removes cpp17_output_iterator's default constructor.
Mark de Wever [Fri, 4 Feb 2022 07:03:50 +0000 (08:03 +0100)]
[libc++] Removes cpp17_output_iterator's default constructor.

This has been suggested in D117950.

Reviewed By: ldionne, #libc, philnik

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

2 years ago[Support] Don't print stacktrace if DbgHelp.dll hasn't been loaded yet
Andy Yankovsky [Mon, 7 Feb 2022 20:37:38 +0000 (20:37 +0000)]
[Support] Don't print stacktrace if DbgHelp.dll hasn't been loaded yet

On Windows certain function from `Signals.h` require that `DbgHelp.dll` is loaded. This typically happens when the main program calls `llvm::InitLLVM`, however in some cases main program doesn't do that (e.g. when the application is using LLDB via `liblldb.dll`). This patch adds a safe guard to prevent crashes. More discussion in
https://reviews.llvm.org/D119009.

Reviewed By: aganea

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

2 years ago[nfc][mlgo][regalloc] Stop warnings about unused function
Mircea Trofin [Tue, 8 Feb 2022 15:27:11 +0000 (07:27 -0800)]
[nfc][mlgo][regalloc] Stop warnings about unused function

Added a `NoopSavedModelImpl` type which can be used as a mock AOT-ed
saved model, and further minimize conditional compilation cases. This
also removes unused function warnings on gcc.

2 years ago[MLIR][GPU] Update GPUToROCDL to account for ControlFlow dialect
Krzysztof Drewniak [Mon, 7 Feb 2022 21:45:40 +0000 (21:45 +0000)]
[MLIR][GPU] Update GPUToROCDL to account for ControlFlow dialect

The conversion to the new ControlFlow dialect didn't change the
GPUToROCDL pass - this commit fixes this issue.

Reviewed By: rriddle

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

2 years ago[llvm-profgen] On-demand track optimized-away inlinees for preinliner.
Hongtao Yu [Fri, 28 Jan 2022 23:53:37 +0000 (15:53 -0800)]
[llvm-profgen] On-demand track optimized-away inlinees for preinliner.

Tracking optimized-away inlinees based on all probes in a binary is expansive in terms of memory usage I'm making the tracking on-demand based on profiled functions only. This saves about 10%  memory overall for a medium-sized benchmark.

Before:

   note: After parsePerfTraces
   note: Thu Jan 27 18:42:09 2022
   note: VM: 8.68 GB   RSS: 8.39 GB
   note: After computeSizeForProfiledFunctions
   note: Thu Jan 27 18:42:41 2022
   note: **VM: 10.63 GB   RSS: 10.20 GB**
   note: After generateProbeBasedProfile
   note: Thu Jan 27 18:45:49 2022
   note: VM: 25.00 GB   RSS: 24.95 GB
   note: After postProcessProfiles
   note: Thu Jan 27 18:49:29 2022
   note: VM: 26.34 GB   RSS: 26.27 GB

After:
   note: After parsePerfTraces
   note: Fri Jan 28 12:04:49 2022
   note: VM: 8.68 GB   RSS: 7.65 GB
   note: After computeSizeForProfiledFunctions
   note: Fri Jan 28 12:05:26 2022
   note: **VM: 8.68 GB   RSS: 8.42 GB**
   note: After generateProbeBasedProfile
   note: Fri Jan 28 12:08:03 2022
   note: VM: 22.93 GB   RSS: 22.89 GB
   note: After postProcessProfiles
   note: Fri Jan 28 12:11:30 2022
   note: VM: 24.27 GB   RSS: 24.22 GB

This should be a no-diff change in terms of profile quality.

Reviewed By: wenlei

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

2 years ago[libc++][format[[nfc] Use string_view in tests.
Mark de Wever [Sat, 29 Jan 2022 13:52:41 +0000 (14:52 +0100)]
[libc++][format[[nfc] Use string_view in tests.

This change is a preparation for adapting the tests for
  P2216 std::format improvements

Reviewed By: #libc, Quuxplusone, ldionne

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

2 years ago[analyzer] Prevent misuses of -analyze-function
Balazs Benics [Tue, 8 Feb 2022 16:27:57 +0000 (17:27 +0100)]
[analyzer] Prevent misuses of -analyze-function

Sometimes when I pass the mentioned option I forget about passing the
parameter list for c++ sources.
It would be also useful newcomers to learn about this.

This patch introduces some logic checking common misuses involving
`-analyze-function`.

Reviewed-By: martong
Differential Revision: https://reviews.llvm.org/D118690

2 years agoAMDGPU: Use reserved VGPR for AGPR spills to memory
Matt Arsenault [Fri, 4 Feb 2022 19:29:12 +0000 (14:29 -0500)]
AMDGPU: Use reserved VGPR for AGPR spills to memory

Previously would reuse the VGPR used for large frame offsets with the
one needed for copying from the AGPR. Fix this by reusing the register
we already reserved for handling AGPR to AGPR copies.

2 years ago[SCEV] Generalize SCEVEqualsPredicate to any compare [NFC]
Philip Reames [Tue, 8 Feb 2022 14:56:05 +0000 (06:56 -0800)]
[SCEV] Generalize SCEVEqualsPredicate to any compare [NFC]

PredicatedScalarEvolution has a predicate type for representing A == B.  This change generalizes it into something which can represent a A <pred> B.

This generality is currently unused, but is motivated by a couple of recent cases which have come up.  In particular, I'm currently playing around with using this to simplify the runtime checking code in LoopVectorizer. Regardless of the outcome of that prototyping, generalizing the compare node seemed useful.

2 years ago[Mem2Reg] Check that load type matches alloca type
Nikita Popov [Tue, 8 Feb 2022 16:14:41 +0000 (17:14 +0100)]
[Mem2Reg] Check that load type matches alloca type

Alloca promotion can only deal with cases where the load/store
types match the alloca type (it explicitly does not support
bitcasted load/stores).

With opaque pointers this is no longer enforced through the pointer
type, so add an explicit check.

2 years agoAMDGPU: Reserve v32 if we may need to copy between AGPRs on gfx908
Matt Arsenault [Wed, 15 Dec 2021 02:56:48 +0000 (21:56 -0500)]
AMDGPU: Reserve v32 if we may need to copy between AGPRs on gfx908

We need to guarantee cheap copies between AGPRs, and unfortunately
gfx908 cannot directly do this. Theoretically we could set the
scavenger up with an emergency spill slot, but it also feels
unreasonable to pay that cost for what was assumed to be a simple and
cheap copy. Pick a register that doesn't conflict with any ABI
registers.

This does not address the same issue when copying from SGPR to AGPR
for gfx90a (this coincidentally fixes it for gfx908), but that's less
interesting since the register allocator shouldn't be proactively
introducing such copies.

One edge case I'm worried about is respecting the VGPR budget implied
by amdgpu-waves-per-eu. If the theoretical upper bound of a function
is 32 VGPRs, this will force the actual count to be 33.

This is also broken if inline assembly uses/defs something in v32. The
coalescer will eliminate the intermediate vreg between the def and
use, and the introduced copy will clobber the user value.

(cherry picked from commit 3335784ac2d587ff4eac04586e189532ae8b2607)

2 years agoAMDGPU: Regenerate mir test checks to include -NEXT
Matt Arsenault [Fri, 4 Feb 2022 19:56:03 +0000 (14:56 -0500)]
AMDGPU: Regenerate mir test checks to include -NEXT

2 years ago[libc++] Add a Lit configuration for running back-deployment tests
Louis Dionne [Mon, 7 Feb 2022 22:25:41 +0000 (17:25 -0500)]
[libc++] Add a Lit configuration for running back-deployment tests

This testing configuration links tests against one libc++ shared library,
but runs them against another libc++ shared library. This makes sure that
we can build applications against the libc++ provided in a recent SDK and
back-deploy them to platforms containing older libc++ dylibs.

It also switches the Apple CI script to using that new configuration
instead of the legacy one.

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

2 years ago[NFC] Refactor llvm-nm symbol comparing and split sorting
zhijian [Tue, 8 Feb 2022 15:57:04 +0000 (10:57 -0500)]
[NFC] Refactor llvm-nm symbol comparing and split sorting
Summary:
1.added a helper function isSymbolDefined().
2.Split out sorting code
3.refactor symbol comparing function

Reviewers: James Henderson,Fangrui Song
Differential Revision: https://reviews.llvm.org/D119028

2 years ago[SDAG] enable binop identity constant folds for fmul/fdiv
Sanjay Patel [Tue, 8 Feb 2022 15:41:34 +0000 (10:41 -0500)]
[SDAG] enable binop identity constant folds for fmul/fdiv

The test diffs are identical to D119111.

This only affects x86 currently because no other target
has an override for the TLI hook that controls this transform.

2 years ago[AutoUpgrade] Handle remangling upgrade for ptr.annotation
Nikita Popov [Tue, 8 Feb 2022 15:50:11 +0000 (16:50 +0100)]
[AutoUpgrade] Handle remangling upgrade for ptr.annotation

The code assumed that the upgrade would happen due to the argument
count changing from 4 to 5. However, a remangling upgrade is also
possible here.

2 years ago[AArch64][CodeGen] Always use SVE (when enabled) to lower 64-bit vector multiplies
David Sherwood [Wed, 2 Feb 2022 09:02:16 +0000 (09:02 +0000)]
[AArch64][CodeGen] Always use SVE (when enabled) to lower 64-bit vector multiplies

This patch adds custom lowering support for ISD::MUL with v1i64 and v2i64
types when SVE is enabled, regardless of the minimum SVE vector length. We
do this because NEON simply does not have 64-bit vector multiplies, so we
want to take advantage of these instructions in SVE.

I've updated the 128-bit min SVE vector bits tests here:

  CodeGen/AArch64/sve-fixed-length-int-arith.ll
  CodeGen/AArch64/sve-fixed-length-int-mulh.ll
  CodeGen/AArch64/sve-fixed-length-int-rem.ll

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

2 years ago[MLIR][Presburger] Support computing volumes via hyperrectangular overapproximation
Arjun P [Tue, 8 Feb 2022 15:36:24 +0000 (21:06 +0530)]
[MLIR][Presburger] Support computing volumes via hyperrectangular overapproximation

Add support for computing an overapproximation of the number of integer points
in a polyhedron. The returned result is actually the number of integer points
one gets by computing the "rational shadow" obtained by projecting out the
local IDs, finding the minimal axis-parallel hyperrectangular approximation
of the shadow, and returning the number of integer points in that. This does
not currently support symbols.

Reviewed By: Groverkss

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

2 years ago[ValueTracking] Only check for non-undef/poison if already known to be a self-multiply
Roman Lebedev [Tue, 8 Feb 2022 15:35:22 +0000 (18:35 +0300)]
[ValueTracking] Only check for non-undef/poison if already known to be a self-multiply

https://godbolt.org/z/js9fTTG9h
^ we don't care what `isGuaranteedNotToBeUndefOrPoison()` says
unless we already knew that the operands were equal.

2 years ago[NFC][clang] Autogenerate checklines in CodeGenCXX/nrvo.cpp
Roman Lebedev [Tue, 8 Feb 2022 15:27:29 +0000 (18:27 +0300)]
[NFC][clang] Autogenerate checklines in CodeGenCXX/nrvo.cpp

It checks IR after optimizations, which is inherently fragile,
and the results are now different after the recent patch.

2 years ago[MLIR][Presburger] Simplex::computeIntegerBounds: support unbounded directions by...
Arjun P [Tue, 8 Feb 2022 15:23:43 +0000 (20:53 +0530)]
[MLIR][Presburger] Simplex::computeIntegerBounds: support unbounded directions by returning Optionals

2 years ago[demangler][NFC] Utility header cleanups
Nathan Sidwell [Mon, 7 Feb 2022 18:08:18 +0000 (10:08 -0800)]
[demangler][NFC] Utility header cleanups

a) Using a do...while loop in the number formatter means we do not
have to special case zero.

b) Let's use 'if (auto size = ...) {}' for appending to the output
buffer.

c) We should also be using memcpy there, not memmove -- the string
being appended is never part of the current buffer.

d) Let's put all the operator<< functions together.

e) I find 'if (cond) frob(..., true) ; elseOD frob(..., false)'
somewhat confusing.  Let's just use std::abs in the signed integer
printer and let CSE decide about the duplicate < 0 testing.

f) Let's have as many as possible return *this.  That's both more
consistent, and allows tailcalls in some cases (the actual number
formatter has a local array though).

These changes removed around 100 bytes from the demangler's
instructions on x86_64.

Reviewed By: ChuanqiXu

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

2 years ago[OpenCL] Mark kernel arguments as ABI aligned
Nikita Popov [Thu, 3 Feb 2022 13:46:57 +0000 (14:46 +0100)]
[OpenCL] Mark kernel arguments as ABI aligned

Following the discussion on D118229, this marks all pointer-typed
kernel arguments as having ABI alignment, per section 6.3.5 of
the OpenCL spec:

> For arguments to a __kernel function declared to be a pointer to
> a data type, the OpenCL compiler can assume that the pointee is
> always appropriately aligned as required by the data type.

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

2 years ago[AMDGPURewriteOutArguments] Don't use pointer element type
Nikita Popov [Tue, 8 Feb 2022 12:52:02 +0000 (13:52 +0100)]
[AMDGPURewriteOutArguments] Don't use pointer element type

Instead of using the pointer element type, look at how the pointer
is actually being used in store instructions, while looking through
bitcasts. This makes the transform compatible with opaque pointers
and a bit more general.

It's worth noting that I have dropped the 3-vector to 4-vector
shufflevector special case, because this is now handled in a
different way: If the value is actually used as a 4-vector, then
we're directly going to use that type, instead of shuffling to a
3-vector in between.

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

2 years ago[X86] selectLEAAddr - relax heuristic to only require one operand to be a MathWithFla...
Simon Pilgrim [Tue, 8 Feb 2022 15:09:12 +0000 (15:09 +0000)]
[X86] selectLEAAddr - relax heuristic to only require one operand to be a MathWithFlags op (PR46809)

As suggested by @craig.topper, relaxing LEA matching to only require the ADD to be fed from a single op with EFLAGS helps avoid duplication when the EFLAGS are consumed in a later, dependent instruction.

There was some concern about whether the heuristic is too simple, not taking into account lost loads that can't fold by using a LEA, but some basic tests (included in select-lea.ll) don't suggest that's really a problem.

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

2 years agoCleanup LLVMDebugInfoCodeView headers
serge-sans-paille [Fri, 4 Feb 2022 11:14:43 +0000 (12:14 +0100)]
Cleanup LLVMDebugInfoCodeView headers

Major user-facing changes:

Many headers in llvm/DebugInfo/CodeView no longer include
llvm/Support/BinaryStreamReader.h or llvm/Support/BinaryStreamWriter.h,
those headers may need to be included manually.

Several headers in llvm/DebugInfo/CodeView no longer include
llvm/DebugInfo/CodeView/EnumTables.h or llvm/DebugInfo/CodeView/CodeView.h,
those headers may need to be included manually.

Some statistics:
$ clang++ -E  -Iinclude -I../llvm/include ../llvm/lib/DebugInfo/CodeView/*.cpp -std=c++14 -fno-rtti -fno-exceptions | wc -l
after:  2794466
before: 2832765

Discourse thread on the topic: https://discourse.llvm.org/t/include-what-you-use-include-cleanup/

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

2 years ago[X86] Remove __builtin_ia32_padd/psub saturated intrinsics and use generic __builtin_...
Simon Pilgrim [Tue, 8 Feb 2022 14:59:59 +0000 (14:59 +0000)]
[X86] Remove __builtin_ia32_padd/psub saturated intrinsics and use generic __builtin_elementwise_add/sub_sat

D117898 added the generic __builtin_elementwise_add_sat and __builtin_elementwise_sub_sat with the same integer behaviour as the SSE/AVX instructions

This patch removes the __builtin_ia32_padd/psub saturated intrinsics and just uses the generics - the existing tests see no changes:

__m256i test_mm256_adds_epi8(__m256i a, __m256i b) {
  // CHECK-LABEL: test_mm256_adds_epi8
  // CHECK: call <32 x i8> @llvm.sadd.sat.v32i8(<32 x i8> %{{.*}}, <32 x i8> %{{.*}})
  return _mm256_adds_epi8(a, b);
}

2 years ago[AutoUpgrade] Also upgrade intrinsics in invokes
Nikita Popov [Tue, 8 Feb 2022 14:57:48 +0000 (15:57 +0100)]
[AutoUpgrade] Also upgrade intrinsics in invokes

We currently don't have any specialized upgrades for intrinsics
that can be used in invokes, but they can still be subject to
a generic remangling upgrade. In particular, this happens when
upgrading statepoint intrinsics under -opaque-pointers.

This patch just changes the upgrade code to work on CallBase
instead of CallInst in particular.

2 years ago[OpenMP] Enable new driver tests for AMDGPU
Joseph Huber [Tue, 8 Feb 2022 14:38:33 +0000 (09:38 -0500)]
[OpenMP] Enable new driver tests for AMDGPU

This patch enables running the new driver tests for AMDGPU. Previously
this was disabled because some tests failed. This was only because the
new driver tests hadn't been listed as unsupported or expected to fail.

Reviewed By: JonChesterfield

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

2 years ago[SDAG] move x86 select-with-identity-constant fold behind a target hook; NFC
Sanjay Patel [Tue, 8 Feb 2022 13:32:14 +0000 (08:32 -0500)]
[SDAG] move x86 select-with-identity-constant fold behind a target hook; NFC

This is no-functional-change-intended because only the
x86 target enables the TLI hook currently.

We can add fmul/fdiv opcodes to the switch similar to the
proposal D119111, but we don't need to make other changes
like enabling target-specific combines.

We can also add integer opcodes (add, or, shl, etc.) to
the switch because this function is called from all of the
generic binary opcodes.

The goal is to incrementally enable the profitable diffs
from D90113 while avoiding regressions.

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

2 years ago[SimplifyCFG] 'merge compatible invokes': support normal destination w/ uses
Roman Lebedev [Tue, 8 Feb 2022 13:54:03 +0000 (16:54 +0300)]
[SimplifyCFG] 'merge compatible invokes': support normal destination w/ uses

If the original invokes had uses, the uses must have been in PHI's,
but that immediately results in the incoming values being incompatible.
But we'll replace uses of the original invokes with the use of the
merged invoke, so as long as the incoming values become compatible
after that, we can merge.

2 years ago[SimplifyCFG] 'merge compatible invokes': support normal destination w/ PHIs but...
Roman Lebedev [Tue, 8 Feb 2022 13:34:34 +0000 (16:34 +0300)]
[SimplifyCFG] 'merge compatible invokes': support normal destination w/ PHIs but no uses

As long as the incoming values for all the invokes in the set
are identical, we can merge the invokes.

2 years ago[SimplifyCFG] 'merge compatible invokes': support normal destination w/ no uses,...
Roman Lebedev [Tue, 8 Feb 2022 12:42:03 +0000 (15:42 +0300)]
[SimplifyCFG] 'merge compatible invokes': support normal destination w/ no uses, no PHI's

Even if the invokes have normal destination, iff it's the same block,
we can merge them. For now, require that there are no PHI nodes,
and the returned values of invokes aren't used.

2 years ago[NFC][SimplifyCFG] 'merge compatible invokes': more tests for various edge-cases
Roman Lebedev [Tue, 8 Feb 2022 12:13:16 +0000 (15:13 +0300)]
[NFC][SimplifyCFG] 'merge compatible invokes': more tests for various edge-cases

2 years agoRevert rG6c174ab2ad0676b295f11f6c3913eff9289fa6b9 "[X86] Remove __builtin_ia32_padd...
Simon Pilgrim [Tue, 8 Feb 2022 14:45:28 +0000 (14:45 +0000)]
Revert rG6c174ab2ad0676b295f11f6c3913eff9289fa6b9 "[X86] Remove __builtin_ia32_padd/psub saturated intrinsics and use generic __builtin_elementwise_add/sub_sat"

Missed some legacy builtin tests that need cleaning up first

2 years ago[GlobalISel] Add big endian support in CallLowering
Sheng [Tue, 8 Feb 2022 14:32:48 +0000 (14:32 +0000)]
[GlobalISel] Add big endian support in CallLowering

When splitting values, CallLowering assumes Lo part goes first. But in big endian ISA such as M68k, Hi part goes first.

This patch fixes this.

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

2 years ago[demangler] Improve ->* & .* demangling
Nathan Sidwell [Fri, 28 Jan 2022 17:27:28 +0000 (09:27 -0800)]
[demangler] Improve ->* & .* demangling

The demangler treats ->* as a BinaryExpr, but .* as a MemberExpr.
That's inconsistent.  This makes the former a MemberExpr too.
However, in order to not regress the paren output, MemberExpr::print
is modified to parenthesize the MemberExpr if the operator ends with
'*'.  Printing is affected thusly:

Before:
    obj.member
    obj->member
    obj.*member
    (obj) ->* (member)

After:
   obj.member   # Unchanged
   obj->member  # Unchanged
   obj.*(member)  # Added paren member operand
   obj->*(member) # Removed paren on object operand, less whitespace

The right solution to the paren problem is to add some notion of
precedence (and associativity) to Nodes, but that's a larger change
that would become simpler once the refactoring I'm doing is completed.

FWIW, binutils' demangler's paren algorithm has a small idea of
precedence, and will generally not emit parens when the operand is
unary.

Reviewed By: bruno

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

2 years ago[X86] Remove __builtin_ia32_padd/psub saturated intrinsics and use generic __builtin_...
Simon Pilgrim [Tue, 8 Feb 2022 14:21:11 +0000 (14:21 +0000)]
[X86] Remove __builtin_ia32_padd/psub saturated intrinsics and use generic __builtin_elementwise_add/sub_sat

D117898 added the generic __builtin_elementwise_add_sat and __builtin_elementwise_sub_sat with the same integer behaviour as the SSE/AVX instructions

This patch removes the __builtin_ia32_padd/psub saturated intrinsics and just uses the generics - the existing tests see no changes:

__m256i test_mm256_adds_epi8(__m256i a, __m256i b) {
  // CHECK-LABEL: test_mm256_adds_epi8
  // CHECK: call <32 x i8> @llvm.sadd.sat.v32i8(<32 x i8> %{{.*}}, <32 x i8> %{{.*}})
  return _mm256_adds_epi8(a, b);
}

2 years ago[AArch64TargetTransformInfo] Avoid pointer element type access
Nikita Popov [Tue, 8 Feb 2022 14:16:16 +0000 (15:16 +0100)]
[AArch64TargetTransformInfo] Avoid pointer element type access

Use the element type of the gathered/scattered vector instead.

2 years agoFix signed/unsigned comparison warnings on ppc buildbots
Simon Pilgrim [Tue, 8 Feb 2022 14:13:36 +0000 (14:13 +0000)]
Fix signed/unsigned comparison warnings on ppc buildbots

2 years agoAdd core papers adopted at the february plenary.
Corentin Jabot [Tue, 8 Feb 2022 14:13:04 +0000 (09:13 -0500)]
Add core papers adopted at the february plenary.

2 papers are added to the status page, one targeting
C++23, the other added to the batch of C++20 concept papers.

2 years ago[AsmPrinter] Avoid pointer element type access
Nikita Popov [Tue, 8 Feb 2022 14:04:23 +0000 (15:04 +0100)]
[AsmPrinter] Avoid pointer element type access

Instead of checking for a bitcast from a function type, check
whether the aliasee is a function after stripping bitcasts. This
is not strictly equivalent, but serves the same purpose.

2 years agoFix signed/unsigned comparison warnings on ppc buildbots
Simon Pilgrim [Tue, 8 Feb 2022 13:55:01 +0000 (13:55 +0000)]
Fix signed/unsigned comparison warnings on ppc buildbots

2 years ago[OpenCL] opencl-c.h: remove arg names from arm_dot; NFC
Sven van Haastregt [Tue, 8 Feb 2022 13:42:24 +0000 (13:42 +0000)]
[OpenCL] opencl-c.h: remove arg names from arm_dot; NFC

This simplifies completeness comparisons against OpenCLBuiltins.td.

2 years agoEnable inoutset dependency-type in depend clause.
David Pagan [Tue, 8 Feb 2022 13:33:52 +0000 (08:33 -0500)]
Enable inoutset dependency-type in depend clause.

Done in manner similar to mutexinoutset
(see https://reviews.llvm.org/D57576)

Runtime support already exists in LLVM OpenMP runtime (see
https://reviews.llvm.org/D97085).

The value used to identify an inoutset dependency type in the LLVM
OpenMP runtime is 8.

Some tests updated due to change in dependency type error messages that
now include new dependency type. Also updated
test/OpenMP/task_codegen.cpp to verify we emit the right code.

2 years ago[MLIR][Presburger] factor out duplicated function `parsePoly` into a Utils.h
Arjun P [Tue, 8 Feb 2022 12:25:40 +0000 (17:55 +0530)]
[MLIR][Presburger] factor out duplicated function `parsePoly` into a Utils.h

Reviewed By: Groverkss

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

2 years ago[ValueTracking] Add support for X*X self-multiplication
Simon Pilgrim [Tue, 8 Feb 2022 13:33:18 +0000 (13:33 +0000)]
[ValueTracking] Add support for X*X self-multiplication

D108992 added KnownBits handling for 'Quadratic Reciprocity' self-multiplication patterns (bit[1] == 0), which can be used for non-undef values (poison is OK).

This patch adds noundef selfmultiply handling to value tracking so demanded bits patterns can make use of it.

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

2 years ago[ValueTracking] Replace dyn_cast with dyn_cast_or_null to account for getTerminator...
Simon Pilgrim [Tue, 8 Feb 2022 13:29:49 +0000 (13:29 +0000)]
[ValueTracking] Replace dyn_cast with dyn_cast_or_null to account for getTerminator returning null

Noticed while running checks on D117995 - a hexagon regression test was managing to return a block without a terminator

2 years agoMake run-clang-tidy.py print the configured checks correctly
Jesko Appelfeller [Tue, 8 Feb 2022 13:30:59 +0000 (08:30 -0500)]
Make run-clang-tidy.py print the configured checks correctly

The test invocation at the start of run-clang-tidy.py (line 257) prints
all enabled checks - meaning either the default set or anything
configured via the -checks option. If any checks were (un-)configured
via the -config option, these are not printed. This is confusing to the
user, since the list of checks that are printed may be different from
the list of checks that are used by the non-testing calls to clang-tidy,
where the -config option is passed correctly.

This patch adds the -config option to the test invocation of clang-tidy
at the start of the script. This means that checks (un-)configured via
the -config option (rather than the -checks option) are applied
correctly, when printing the list of enabled checks.

2 years ago[AMDGPU] Regenerate test checks (NFC)
Nikita Popov [Tue, 8 Feb 2022 13:21:40 +0000 (14:21 +0100)]
[AMDGPU] Regenerate test checks (NFC)

Use --include-generated-funcs checks. Unfortunately this places
all the functions at the end of the file rather than interleaving
them, but at least makes it feasible to update these tests.

2 years ago[VE] v256.32|64 setcc isel and tests
Simon Moll [Tue, 8 Feb 2022 12:20:45 +0000 (13:20 +0100)]
[VE] v256.32|64 setcc isel and tests

Reviewed By: kaz7

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

2 years ago[ADT] Add APInt/MathExtras isShiftedMask variant returning mask offset/length
Simon Pilgrim [Tue, 8 Feb 2022 11:57:05 +0000 (11:57 +0000)]
[ADT] Add APInt/MathExtras isShiftedMask variant returning mask offset/length

In many cases, calls to isShiftedMask are immediately followed with checks to determine the size and position of the bitmask.

This patch adds variants of APInt::isShiftedMask, isShiftedMask_32 and isShiftedMask_64 that return these values as additional arguments.

I've updated a number of cases that were either performing seperate size/position calculations or had created their own local wrapper versions of these.

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

2 years ago[libc] Optimized version of memmove
Guillaume Chatelet [Fri, 26 Nov 2021 14:00:17 +0000 (14:00 +0000)]
[libc] Optimized version of memmove

This implementation relies on storing data in registers for sizes up to 128B.
Then depending on whether `dst` is less (resp. greater) than `src` we move data forward (resp. backward) by chunks of 32B.
We first make sure one of the pointers is aligned to increase performance on large move sizes.

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

2 years agoAttempt to fix sphinx 'Malformed table' warning.
Simon Pilgrim [Tue, 8 Feb 2022 11:47:50 +0000 (11:47 +0000)]
Attempt to fix sphinx 'Malformed table' warning.

2 years ago[AArch64] Attempt to emitConjunction from brcond
David Green [Tue, 8 Feb 2022 11:27:10 +0000 (11:27 +0000)]
[AArch64] Attempt to emitConjunction from brcond

We currently use emitConjunction to create CCMP conjunctions from the
conditions of selects, helping turning and/ors into more optimal ccmp
sequences that don't need to go through csels. This extends that to also
be used whilst lowering brcond, giving more opportunity for better
condition generation.

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