platform/upstream/llvm.git
3 years ago[mlir][Shape] Allow shape.split_at to return extent tensors and lower it to std.subtensor
Benjamin Kramer [Mon, 8 Mar 2021 14:23:28 +0000 (15:23 +0100)]
[mlir][Shape] Allow shape.split_at to return extent tensors and lower it to std.subtensor

split_at can return an error if the split index is out of bounds. If the
user knows that the index can never be out of bounds it's safe to use
extent tensors. This has a straight-forward lowering to std.subtensor.

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

3 years agoAArch64/MacOS: switch default CPU to apple-a13.
Tim Northover [Mon, 8 Mar 2021 15:00:28 +0000 (15:00 +0000)]
AArch64/MacOS: switch default CPU to apple-a13.

The DevKits had A12 processors, but they're all gone now and real hardware has
an A13.

3 years ago[lldb] Fix error message in IRInterpreter
Andy Yankovsky [Mon, 8 Mar 2021 12:41:33 +0000 (13:41 +0100)]
[lldb] Fix error message in IRInterpreter

`memory_read_error` -> `memory_write_error`

Reviewed By: teemperor

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

3 years agoFix 2: [DebugInfo] Support DIArgList in DbgVariableIntrinsic
Stephen Tozer [Mon, 8 Mar 2021 15:42:41 +0000 (15:42 +0000)]
Fix 2: [DebugInfo] Support DIArgList in DbgVariableIntrinsic

Changes to function calls in LocalTest resulted in comparisons between
unsigned values and signed literals; the latter have been updated to be
unsigned to prevent this warning.

3 years ago[OpenMP] Fix potential integer overflow in dynamic schedule code
Peyton, Jonathan L [Mon, 1 Feb 2021 20:08:51 +0000 (14:08 -0600)]
[OpenMP] Fix potential integer overflow in dynamic schedule code

Restrict the chunk_size * chunk_num to only occur for valid
chunk_nums and reimplement calculating the limit to avoid overflow.

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

3 years ago[AIX][TLS] Generate 32-bit general-dynamic access code sequence
Nemanja Ivanovic [Thu, 4 Mar 2021 14:07:22 +0000 (08:07 -0600)]
[AIX][TLS] Generate 32-bit general-dynamic access code sequence

Adds support for the TLS general dynamic access model to
assembly files on AIX 32-bit.

To generate the correct code sequence when accessing a TLS variable
`v`, we first create two TOC entry nodes, one for the variable offset, one
for the region handle. These nodes are followed by a `PPCISD::TLSGD_AIX`
node (new node introduced by this patch).
The `PPCISD::TLSGD_AIX` node (`TLSGDAIX` pseudo instruction) is
expanded to 2 copies (to put the variable offset and region handle in
the right registers) and a call to `__tls_get_addr`.

This patch also changes the way TC entries are generated in asm files.
If the generated TC entry is for the region handle of a TLS variable,
we add the `@m` relocation and the `.` prefix to the entry name.
For example:

```
L..C0:
  .tc .v[TC],v[TL]@m -> region handle
L..C1:
  .tc v[TC],v[TL] -> variable offset
```

Reviewed By: nemanjai, sfertile

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

3 years agoRun non-filechecked commands in update_cc_test_checks.py
Giorgis Georgakoudis [Fri, 19 Feb 2021 18:45:40 +0000 (10:45 -0800)]
Run non-filechecked commands in update_cc_test_checks.py

Some tests in clang require running non-filechecked commands to generate the actual filecheck input. For example, tests for openmp offloading require generating the host bc without any checking, before running the clang command to actually generate the filechecked IR of the target device. This patch enables `update_cc_test_checks.py` to run non-filechecked run lines in-place.

Reviewed By: jdoerfert

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

3 years agoAdd Semantic check for Flang OpenMP 4.5 - 2.7.1 Do Loop restrictions for Threadprivate.
Yashaswini [Mon, 8 Mar 2021 14:41:17 +0000 (20:11 +0530)]
Add Semantic check for Flang OpenMP 4.5 - 2.7.1 Do Loop restrictions for Threadprivate.
Implementation of Do loop threadprivate check.

Files:

resolve-directives.cpp

Testcases:

omp-do04-positivecase.f90
omp-do04.f90

Reviewed by: Kiran Chandramohan @kiranchandramohan

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

3 years agoFix: [DebugInfo] Support DIArgList in DbgVariableIntrinsic
Stephen Tozer [Mon, 8 Mar 2021 14:55:41 +0000 (14:55 +0000)]
Fix: [DebugInfo] Support DIArgList in DbgVariableIntrinsic

This patch removed the only use of a lambda capture, triggering an error
on `-Werror -Wunused-lambda-capture` builds.

3 years ago[SystemZ][z/OS] Add support to validate a HLASM Label.
Anirudh Prasad [Mon, 8 Mar 2021 14:52:07 +0000 (09:52 -0500)]
[SystemZ][z/OS] Add support to validate a HLASM Label.

- This patch adds in support to determine whether a particular label
  is valid for the hlasm variant
- The label syntax being checked is that of an ordinary HLASM symbol
  (Reference, Chapter 2 (Coding and Structure) - Terms, Literals and
  Expressions - Terms - Symbols - Ordinary Symbol)
- To achieve this, the virtual function isLabel defined in
  MCTargetAsmParser.h is made use of
- The isLabel function is overridden in SystemZAsmParser for the
  hlasm variant, and the syntax is checked appropriately
- Things remain unchanged for the att variant
- Further patches will add in support to emit the label. These future
  patches will make use of this isLabel function

Reviewed By: uweigand, Kai

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

3 years ago[DebugInfo] Support DIArgList in DbgVariableIntrinsic
gbtozers [Wed, 30 Sep 2020 15:30:14 +0000 (16:30 +0100)]
[DebugInfo] Support DIArgList in DbgVariableIntrinsic

This patch updates DbgVariableIntrinsics to support use of a DIArgList for the
location operand, resulting in a significant change to its interface. This patch
does not update all IR passes to support multiple location operands in a
dbg.value; the only change is to update the DbgVariableIntrinsic interface and
its uses. All code outside of the intrinsic classes assumes that an intrinsic
will always have exactly one location operand; they will still support
DIArgLists, but only if they contain exactly one Value.

Among other changes, the setOperand and setArgOperand functions in
DbgVariableIntrinsic have been made private. This is to prevent code from
setting the operands of these intrinsics directly, which could easily result in
incorrect/invalid operands being set. This does not prevent these functions from
being called on a debug intrinsic at all, as they can still be called on any
CallInst pointer; it is assumed that any code directly setting the operands on a
generic call instruction is doing so safely. The intention for making these
functions private is to prevent DIArgLists from being overwritten by code that's
naively trying to replace one of the Values it points to, and also to fail fast
if a DbgVariableIntrinsic is updated to use a DIArgList without a valid
corresponding DIExpression.

3 years ago[NFC] Avoid useless BitVector move
serge-sans-paille [Mon, 8 Mar 2021 14:15:22 +0000 (15:15 +0100)]
[NFC] Avoid useless BitVector move

3 years ago[PowerPC] Change target data layout for 16-byte stack alignment
Ahsan Saghir [Mon, 8 Feb 2021 14:36:20 +0000 (08:36 -0600)]
[PowerPC] Change target data layout for 16-byte stack alignment

This changes the target data layout to make stack align to 16 bytes
on Power10. Before this change, stack was being aligned to 32 bytes.

Reviewed By: #powerpc, nemanjai

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

3 years ago[clang/mac] Accept -why_load and make -whyload an alias for it
Nico Weber [Sun, 7 Mar 2021 21:58:18 +0000 (16:58 -0500)]
[clang/mac] Accept -why_load and make -whyload an alias for it

From `man ld`:

     -why_load   Log why each object file in a static library is loaded.
                 That is, what symbol was needed.
                 Also called -whyload for compatibility.

`-why_load` is the spelling preferred by the linker and `-whyload` an old
compatibility setting. clang should accept the preferred form, and map both
forms to the preferred form.

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

3 years ago[ConstantFold] allow folding icmp of null and constexpr
Sanjay Patel [Mon, 8 Mar 2021 13:52:12 +0000 (08:52 -0500)]
[ConstantFold] allow folding icmp of null and constexpr

I noticed that we were not folding expressions like this:
icmp ult (constexpr), null
in https://llvm.org/PR49355, so we end up with extremely large
icmp instructions as the constant expressions pile up on each other.

There is no potential to mis-fold an unsigned boundary condition
with a zero/null, so this is just falling through a crack in the
pattern matching.

The more general case of comparisons of non-zero constants and
constexpr are more tricky and may require the datalayout to know
how to cast to different types, etc. Negative tests verify that
we are only changing a subset of potential patterns.

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

3 years ago[ConstProp][JumpThreading] add more test coverage for potential nullptr folds; NFC
Sanjay Patel [Mon, 8 Mar 2021 13:39:56 +0000 (08:39 -0500)]
[ConstProp][JumpThreading] add more test coverage for potential nullptr folds; NFC

See D98150.

3 years ago[libcxx] Document windows specifics regarding file_type and perms. NFC.
Martin Storsjö [Sun, 7 Mar 2021 21:49:56 +0000 (23:49 +0200)]
[libcxx] Document windows specifics regarding file_type and perms. NFC.

This was requested in the review of D98138.

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

3 years ago[JumpThreading] auto-generate complete test checks; NFC
Sanjay Patel [Mon, 8 Mar 2021 13:23:20 +0000 (08:23 -0500)]
[JumpThreading] auto-generate complete test checks; NFC

3 years agoAdd "assert require" for the test added in df9158c9a45a6902c2b0394f9bd6512e3e441f31
Haojian Wu [Mon, 8 Mar 2021 13:15:39 +0000 (14:15 +0100)]
Add "assert require" for the test added in df9158c9a45a6902c2b0394f9bd6512e3e441f31

The test is using "debug-only", it was failing in opt built mode.

3 years ago[lldb][NFC] std::set -> DenseSet in ClangModulesDeclVendor
Raphael Isemann [Mon, 8 Mar 2021 10:10:50 +0000 (11:10 +0100)]
[lldb][NFC] std::set -> DenseSet in ClangModulesDeclVendor

ModuleID is just an integer so let's use a DenseSet.

3 years ago[KnownBits] Add min/max shift amount handling to shl/lshr/ashr KnownBits helpers
Simon Pilgrim [Mon, 8 Mar 2021 11:44:15 +0000 (11:44 +0000)]
[KnownBits] Add min/max shift amount handling to shl/lshr/ashr KnownBits helpers

Pulled out of the original D90479 patch - also includes the "impossible shift amount" filtering from computeKnownBitsFromShiftOperator.

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

3 years ago[X86] Break if-else chain. NFCI.
Simon Pilgrim [Fri, 5 Mar 2021 16:21:34 +0000 (16:21 +0000)]
[X86] Break if-else chain. NFCI.

Both if blocks affect control flow - we don't need the else.

Fixes clang-tidy warning.

3 years ago[sanitizers] Fix interception of GLibc regexec
Alex Richardson [Mon, 8 Mar 2021 10:09:42 +0000 (10:09 +0000)]
[sanitizers] Fix interception of GLibc regexec

Previously, on GLibc systems, the interceptor was calling __compat_regexec
(regexec@GLIBC_2.2.5) insead of the newer __regexec (regexec@GLIBC_2.3.4).
The __compat_regexec strips the REG_STARTEND flag but does not report an
error if other flags are present. This can result in infinite loops for
programs that use REG_STARTEND to find all matches inside a buffer (since
ignoring REG_STARTEND means that the search always starts from the first
character).

The underlying issue is that GLibc's dlsym(RTLD_NEXT, ...) appears to
always return the oldest versioned symbol instead of the default. This
means it does not match the behaviour of dlsym(RTLD_DEFAULT, ...) or the
behaviour documented in the manpage.

It appears a similar issue was encountered with realpath and worked around
in 77ef78a0a5dbaa364529bd05ed7a7bd9a71dd8d4.

See also https://sourceware.org/bugzilla/show_bug.cgi?id=14932 and
https://sourceware.org/bugzilla/show_bug.cgi?id=1319.

Fixes https://github.com/google/sanitizers/issues/1371

Reviewed By: #sanitizers, vitalybuka, marxin

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

3 years ago[NFC] Use ranged loop iteration instead of explicit looping
serge-sans-paille [Fri, 5 Mar 2021 09:23:28 +0000 (10:23 +0100)]
[NFC] Use ranged loop iteration instead of explicit looping

3 years agoRevert "[tsan] Use large address space mapping on Apple Silicon Macs"
Jeremy Morse [Mon, 8 Mar 2021 09:48:11 +0000 (09:48 +0000)]
Revert "[tsan] Use large address space mapping on Apple Silicon Macs"

This reverts commit bde2e5607167f3e9fd8c6b51275fc8ac654230a2.

This patch produces a compile failure on linux amd64 environments, when
running:

  ninja GotsanRuntimeCheck

I get various build errors:

  ../rtl/tsan_platform.h:608: error: use of undeclared identifier 'Mapping'
    return MappingImpl<Mapping, Type>();

Here's a buildbot with the same failure during stage "check-tsan in gcc
build", there are other unrelated failures in there.

  http://lab.llvm.org:8011/#/builders/37/builds/2831

3 years agoClarify documentation for `Elementwise`, `Scalarizable`, `Vectorizable`, and
Frederik Gossen [Wed, 3 Mar 2021 09:18:33 +0000 (10:18 +0100)]
Clarify documentation for `Elementwise`, `Scalarizable`, `Vectorizable`, and
`Tensorizable` traits.

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

3 years ago[RISCV] Add new entry points to getContainerForFixedLengthVector
Fraser Cormack [Thu, 4 Mar 2021 09:55:14 +0000 (09:55 +0000)]
[RISCV] Add new entry points to getContainerForFixedLengthVector

While working on adding fixed-length vectors to the calling convention,
it was necessary to be able to query for a fixed-length vector container
type without access to an instance of SelectionDAG.

This patch modifies the "main" getContainerForFixedLengthVector function
to use an instance of TargetLowering rather than SelectionDAG, and
preserves the SelectionDAG overload as a wrapper.

An additional non-static version of the function was also added to
simplify the common case in RISCVTargetLowering.

Reviewed By: craig.topper

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

3 years ago[Matrix] Implement += and -= for MatrixType.
Saurabh Jha [Mon, 8 Mar 2021 09:25:22 +0000 (09:25 +0000)]
[Matrix] Implement += and -= for MatrixType.

Make sure CompLHSTy is set correctly for += and -= and matrix type
operands.

Bugzilla ticket is here https://bugs.llvm.org/show_bug.cgi?id=46164

Patch by Saurabh Jha <saurabh.jhaa@gmail.com>

Reviewed By: fhahn

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

3 years ago[LoopVectorize][SVE] Add tests for vectorising conditional loads of invariant addresses
David Sherwood [Fri, 5 Mar 2021 13:49:50 +0000 (13:49 +0000)]
[LoopVectorize][SVE] Add tests for vectorising conditional loads of invariant addresses

For loops of the form:

 void foo(int *a, int *cond, short *inv, long long n) {
   for (long long i=0; i<n; ++i) {
     if (cond[i])
       a[i] = *inv;
   }
 }

we can vectorise for SVE using masked gather loads where the array
of pointers is simply a vector splat of 'inv' and the mask comes
from the condition 'cond[i] != 0'.

This patch simply adds tests upstream to defend this capability.

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

3 years ago[CMake][compiler-rt] Use copying instead of symlinking for LSE builtins on non-Unix...
Raul Tambre [Sat, 6 Mar 2021 09:45:57 +0000 (11:45 +0200)]
[CMake][compiler-rt] Use copying instead of symlinking for LSE builtins on non-Unix-likes

As reported in D93278 post-review symlinking requires privilege escalation on Windows.
Copying is functionally same, so fallback to it for systems that aren't Unix-like.
This is similar to the solution in AddLLVM.cmake.

Reviewed By: ikudrin

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

3 years ago[X86] Refine "Support -march=alderlake"
Freddy Ye [Wed, 3 Mar 2021 08:17:37 +0000 (16:17 +0800)]
[X86] Refine "Support -march=alderlake"

Refine "Support -march=alderlake"
Compare with tremont, it includes 25 more new features. They are
adx, aes, avx, avx2, avxvnni, bmi, bmi2, cldemote, f16c, fma, hreset, invpcid,
kl, lzcnt, movdir64b, movdiri, pclmulqdq, pconfig, pku, serialize, shstk, vaes,
vpclmulqdq, waitpkg, widekl.

Reviewed By: pengfei

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

3 years agoForward the `LLVM_ENABLE_LIBCXX` CMake parameter to the mlir standalone test
Mehdi Amini [Mon, 8 Mar 2021 05:06:33 +0000 (05:06 +0000)]
Forward the `LLVM_ENABLE_LIBCXX` CMake parameter to the mlir standalone test

This allows to build and test MLIR with `-DLLVM_ENABLE_LIBCXX=ON`.

3 years ago[LoopInterchange] Replace tightly-nesting-ness check with the one from `LoopNest`
Ta-Wei Tu [Mon, 8 Mar 2021 03:35:35 +0000 (11:35 +0800)]
[LoopInterchange] Replace tightly-nesting-ness check with the one from `LoopNest`

The check `tightlyNested()` in `LoopInterchange` is similar to the one in `LoopNest`.
In fact, the former misses some cases where loop-interchange is not feasible and results in incorrect behaviour.
Replacing it with the much robust version provided by `LoopNest` reduces code duplications and fixes https://bugs.llvm.org/show_bug.cgi?id=48113.

`LoopInterchange` has a weaker definition of tightly or perfectly nesting-ness than the one implemented in `LoopNest::arePerfectlyNested()`.
Therefore, `tightlyNested()` is instead implemented with `LoopNest::checkLoopsStructure` and additional checks for unsafe instructions.

Reviewed By: Whitney

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

3 years ago[Driver] Pass --unwindlib=platform to tests that check unwinder
Petr Hosek [Sun, 7 Mar 2021 23:08:11 +0000 (15:08 -0800)]
[Driver] Pass --unwindlib=platform to tests that check unwinder

There are two additional cases that were missed in D98131.

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

3 years ago[libc++] Fix typos in the synopsis of bit_xor, bit_not, etc. NFC.
Arthur O'Dwyer [Mon, 8 Mar 2021 01:22:03 +0000 (20:22 -0500)]
[libc++] Fix typos in the synopsis of bit_xor, bit_not, etc. NFC.

3 years agoFix build post-revert in 8d5a981a135a
Mehdi Amini [Mon, 8 Mar 2021 00:57:36 +0000 (00:57 +0000)]
Fix build post-revert in 8d5a981a135a

One commit introduced after the reverted change was using an API
introduced there, this is reintroducing the API, but not the original
broken change.

3 years agollvm-nm: add flag to suppress no symbols warning
Keith Smiley [Tue, 9 Feb 2021 16:35:25 +0000 (08:35 -0800)]
llvm-nm: add flag to suppress no symbols warning

This spelling matches binutils https://sourceware.org/bugzilla/show_bug.cgi?id=27408

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

3 years agoRevert "[SimplifyCFG] Update FoldBranchToCommonDest to be poison-safe"
Mehdi Amini [Mon, 8 Mar 2021 00:13:26 +0000 (00:13 +0000)]
Revert "[SimplifyCFG] Update FoldBranchToCommonDest to be poison-safe"

This reverts commit 99108c791de0285ee726a10e8274772b18cee73c.
Clang is miscompiling LLVM with this change, a stage-2 build hits
multiple failures.

As a repro, I built clang in a stage1 directory and used it this way:

cmake -G Ninja ../llvm \
  -DCMAKE_CXX_COMPILER=`pwd`/../build-stage1/bin/clang++ \
  -DCMAKE_C_COMPILER=`pwd`/../build-stage1/bin/clang \
  -DLLVM_TARGETS_TO_BUILD="X86;NVPTX;AMDGPU" \
  -DLLVM_ENABLE_PROJECTS=mlir \
  -DLLVM_BUILD_EXAMPLES=ON \
  -DCMAKE_BUILD_TYPE=Release \
  -DLLVM_ENABLE_ASSERTIONS=On
ninja check-mlir

3 years ago[NFC][LoopUnroll] Add `-unroll-runtime-other-exit-predictable=false` in
Whitney Tsang [Sun, 7 Mar 2021 23:51:09 +0000 (23:51 +0000)]
[NFC][LoopUnroll] Add `-unroll-runtime-other-exit-predictable=false` in
`runtime-multiexit-heuristic.ll`

Added -unroll-runtime-other-exit-predictable=false in
runtime-multiexit-heuristic.ll to make it more robust.
runtime-multiexit-heuristic.ll intention is to test
-unroll-runtime-multi-exit=false, so the default value of
-unroll-runtime-other-exit-predictable should not impact the result.

Reviewed By: Meinersbur

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

3 years ago[LoopUnrollRuntime] Add option to assume the non latch exit block to be
Whitney Tsang [Sun, 7 Mar 2021 23:48:00 +0000 (23:48 +0000)]
[LoopUnrollRuntime] Add option to assume the non latch exit block to be
predictable. (Add LIT)

Reviewed By: Meinersbur, bmahjour

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

3 years ago[libcxx] [test] Don't test CharFile (/dev/null) on windows
Martin Storsjö [Fri, 26 Feb 2021 13:12:37 +0000 (15:12 +0200)]
[libcxx] [test] Don't test CharFile (/dev/null) on windows

Also clarify a nearby comment regarding block devices.

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

3 years ago[libcxx] [test] Fix building create_directory in MSVC configurations
Martin Storsjö [Fri, 26 Feb 2021 14:29:16 +0000 (16:29 +0200)]
[libcxx] [test] Fix building create_directory in MSVC configurations

Don't use the mode_t type - the official windows sdk doesn't have that type.
(Mingw headers does have such a typedef though.) The umask function returns
int on windows, in both header variants.

Thus just use auto to deduce the umask return type automatically.

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

3 years ago[libcxx] [test] Clarify and improve consistency in lexically_relative_and_proximate...
Martin Storsjö [Sat, 6 Mar 2021 17:40:51 +0000 (19:40 +0200)]
[libcxx] [test] Clarify and improve consistency in lexically_relative_and_proximate.pass.cpp. NFC.

Use "expect" instead of "output" for generating "proximate_expected",
pass the arguments to PathEq in the same order as above, rename the
"proximate_expected" variable to be consistent with the naming of the
earlier "expect", use .empty() instead of .native().empty().

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

3 years ago[tsan] Use large address space mapping on Apple Silicon Macs
Kuba Mracek [Sun, 7 Mar 2021 20:45:30 +0000 (12:45 -0800)]
[tsan] Use large address space mapping on Apple Silicon Macs

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

3 years ago[ConstProp] add tests for cmp with null and constexpr; NFC
Sanjay Patel [Sun, 7 Mar 2021 19:02:10 +0000 (14:02 -0500)]
[ConstProp] add tests for cmp with null and constexpr; NFC

3 years ago[NFC][AMDGPU] DWARF Extensions For Heterogeneous Debugging clarifications
Tony [Sun, 7 Mar 2021 08:49:18 +0000 (08:49 +0000)]
[NFC][AMDGPU] DWARF Extensions For Heterogeneous Debugging clarifications

Clarify that the base type endianity is used when creating implicit
location storage.

Remove duplicate definition of the generic type.

Reviewed By: scott.linder

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

3 years agoOpaquePtr: Record byref types in bitcode writer
Matt Arsenault [Sun, 7 Mar 2021 14:56:45 +0000 (09:56 -0500)]
OpaquePtr: Record byref types in bitcode writer

I missed this case when adding byref. I believe this is NFC until
pointee types are really removed.

3 years agoIR: Fix assert string message referring to the wrong attribute
Matt Arsenault [Sun, 7 Mar 2021 14:59:11 +0000 (09:59 -0500)]
IR: Fix assert string message referring to the wrong attribute

3 years ago[SelectionDAG] Add computeKnownBits support for ISD::USUBSAT.
Craig Topper [Sun, 7 Mar 2021 17:48:40 +0000 (09:48 -0800)]
[SelectionDAG] Add computeKnownBits support for ISD::USUBSAT.

The result of ISD::USUBSAT will never be larger than the LHS. We
can use this to put a bound on the number of leading zeros.

Reviewed By: RKSimon

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

3 years ago[RISCV] Fold (select_cc (setlt X, Y), 0, ne, trueV, falseV) -> (select_cc X, Y, lt...
Craig Topper [Sun, 7 Mar 2021 17:36:53 +0000 (09:36 -0800)]
[RISCV] Fold (select_cc (setlt X, Y), 0, ne, trueV, falseV) -> (select_cc X, Y, lt, trueV, falseV)

A setcc can be created during LegalizeDAG after select_cc has been
created. This combine will enable us to fold these late setccs.

Reviewed By: luismarques

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

3 years ago[NFCI] Fix polly tests after b46c085d2b6d15873fb53718f0a70b3848e19e4a
Roman Lebedev [Sun, 7 Mar 2021 17:41:57 +0000 (20:41 +0300)]
[NFCI] Fix polly tests after b46c085d2b6d15873fb53718f0a70b3848e19e4a

That commit changed SCEVExpander to emit intrinsics instead of icmp+select,
but i forgot about polly, and i'm not sure if any bots complained.

3 years ago[InstCombine] Add simplification of two logical and/ors
Juneyoung Lee [Sun, 7 Mar 2021 11:27:44 +0000 (20:27 +0900)]
[InstCombine] Add simplification of two logical and/ors

This is a patch that adds folding of two logical and/ors that share one variable:

a && (a && b) -> a && b
a && (a & b)  -> a && b
...

This is towards removing the poison-unsafe select optimization (D93065 has more context).

Reviewed By: nikic

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

3 years ago[RISCV] Fold (select_cc (xor X, Y), 0, eq/ne, trueV, falseV) -> (select_cc X, Y,...
Craig Topper [Sun, 7 Mar 2021 17:29:54 +0000 (09:29 -0800)]
[RISCV] Fold (select_cc (xor X, Y), 0, eq/ne, trueV, falseV) -> (select_cc X, Y, eq/ne, trueV, falseV)

This pattern occurs when lowering for overflow operations
introduce an xor after select_cc has already been formed.

I had to rework another combine that looked for select_cc of an xor
with 1. That xor will now get combined away so we just need to
look for the RHS of the select_cc being 1.

Reviewed By: luismarques

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

3 years ago[InstCombine] use safe transformation by default
Juneyoung Lee [Sun, 7 Mar 2021 17:25:27 +0000 (02:25 +0900)]
[InstCombine] use safe transformation by default

.. since it will be folded into and/or anyway

3 years ago[CVP] Remove -cvp-dont-add-nowrap-flags option
Nikita Popov [Sun, 7 Mar 2021 17:19:31 +0000 (18:19 +0100)]
[CVP] Remove -cvp-dont-add-nowrap-flags option

This option was originally added to work around a bug in LFTR.
The bug has long since been fixed.

3 years ago[DSE] Remove MemDep-based implementation
Nikita Popov [Wed, 3 Mar 2021 19:38:50 +0000 (20:38 +0100)]
[DSE] Remove MemDep-based implementation

The MemorySSA-based implementation has been enabled without issue
for a while now, so keeping the old implementation around doesn't
seem useful anymore. This drops the MemDep-based implementation.

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

3 years ago[InstCombine] fix another poison-unsafe select transformation
Juneyoung Lee [Sun, 7 Mar 2021 17:11:01 +0000 (02:11 +0900)]
[InstCombine] fix another poison-unsafe select transformation

This fixes another unsafe select folding by disabling it if
EnableUnsafeSelectTransform is set to false.

EnableUnsafeSelectTransform's default value is true, hence it won't
affect generated code (unless the flag is explicitly set to false).

3 years ago[SimplifyCFG] Update FoldBranchToCommonDest to be poison-safe
Juneyoung Lee [Sun, 7 Mar 2021 16:23:04 +0000 (01:23 +0900)]
[SimplifyCFG] Update FoldBranchToCommonDest to be poison-safe

This patch makes FoldBranchToCommonDest merge branch conditions into `select i1` rather than `and/or i1` when it is called by SimplifyCFG.
It is known that merging conditions into and/or is poison-unsafe, and this is towards making things *more* correct by removing possible miscompilations.
Currently, InstCombine simply consumes these selects into and/or of i1 (which is also unsafe), so the visible effect would be very small. The unsafe select -> and/or transformation will be removed in the future.
There has been efforts for updating optimizations to support the select form as well, and they are linked to D93065.

The safe transformation is fired when it is called by SimplifyCFG only. This is done by setting the new `PoisonSafe` argument as true.
Another place that calls FoldBranchToCommonDest is LoopSimplify. `PoisonSafe` flag is set to false in this case because enabling it has a nontrivial impact in performance because SCEV is more conservative with select form and InductiveRangeCheckElimination isn't aware of select form of and/or i1.

Reviewed By: nikic

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

3 years ago[LoopUnswitch] unswitch if cond is in select form of and/or as well
Juneyoung Lee [Sun, 7 Mar 2021 16:05:31 +0000 (01:05 +0900)]
[LoopUnswitch] unswitch if cond is in select form of and/or as well

Hello all,
I'm trying to fix unsafe propagation of poison values in and/or conditions by using
equivalent select forms (`select i1 A, i1 B, i1 false` and `select i1 A, i1 true, i1 false`)
instead.
D93065 has links to patches for this.

This patch allows unswitch to happen if the condition is in this form as well.
`collectHomogenousInstGraphLoopInvariants` is updated to keep traversal if
Root and the visiting I matches both m_LogicalOr()/m_LogicalAnd().
Other than this, the remaining changes are almost straightforward and simply replaces
Instruction::And/Or check with match(m_LogicalOr()/m_LogicalAnd()).

Reviewed By: nikic

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

3 years ago[InstCombine] enrich select-safe-bool-transforms.ll test (NFC)
Juneyoung Lee [Sun, 7 Mar 2021 15:01:05 +0000 (00:01 +0900)]
[InstCombine] enrich select-safe-bool-transforms.ll test (NFC)

for https://reviews.llvm.org/D96945

3 years ago[ValueTracking] update directlyImpliesPoison to look into select's condition
Juneyoung Lee [Sun, 7 Mar 2021 14:16:39 +0000 (23:16 +0900)]
[ValueTracking] update directlyImpliesPoison to look into select's condition

This is a minor update in directlyImpliesPoison and makes it look into select's
condition.
Splitted from https://reviews.llvm.org/D96945

3 years ago[X86] canonicalizeShuffleWithBinOps - add X86ISD::PSHUFB handling.
Simon Pilgrim [Sun, 7 Mar 2021 12:56:35 +0000 (12:56 +0000)]
[X86] canonicalizeShuffleWithBinOps - add X86ISD::PSHUFB handling.

3 years ago[X86] canonicalizeShuffleWithBinOps - shuffle oneuse constants.
Simon Pilgrim [Sun, 7 Mar 2021 11:17:03 +0000 (11:17 +0000)]
[X86] canonicalizeShuffleWithBinOps - shuffle oneuse constants.

We can freely shuffle all ones/zeros constants but we can also freely shuffle other constants as long as they only have one use.

3 years ago[libcxx] [test] Fix path.modifiers remove_filename and replace_filename for windows
Martin Storsjö [Thu, 15 Oct 2020 10:47:36 +0000 (13:47 +0300)]
[libcxx] [test] Fix path.modifiers remove_filename and replace_filename for windows

Also fix the synopsis in the replace_filename test, while touching
that file.

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

3 years ago[libunwind] Install the DLL when doing "ninja install"
Martin Storsjö [Thu, 4 Mar 2021 20:48:41 +0000 (22:48 +0200)]
[libunwind] Install the DLL when doing "ninja install"

This matches how install(... RUNTIME) is used in e.g. libcxx.

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

3 years ago[Driver] Pass --unwindlib=platform to tests that check unwinder
Petr Hosek [Sun, 7 Mar 2021 01:42:36 +0000 (17:42 -0800)]
[Driver] Pass --unwindlib=platform to tests that check unwinder

This addresses an issue which was revealed by D98022.

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

3 years ago[NFC][AMDGPU]DWARF Extensions For Heterogeneous Debugging generic type endianity
Tony [Sat, 6 Mar 2021 20:12:22 +0000 (20:12 +0000)]
[NFC][AMDGPU]DWARF Extensions For Heterogeneous Debugging generic type endianity

In "DWARF Extensions For Heterogeneous Debugging" document that the
DWARF generic type has a target architecture defined endianity.

Reviewed By: scott.linder

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

3 years ago[MC] Migrate some parseToken(AsmToken::EndOfStatement, ...) to parseEOL()
Fangrui Song [Sun, 7 Mar 2021 03:25:22 +0000 (19:25 -0800)]
[MC] Migrate some parseToken(AsmToken::EndOfStatement, ...) to parseEOL()

3 years ago[MC] Add parseEOL() overload and migrate some parseToken(AsmToken::EndOfStatement...
Fangrui Song [Sun, 7 Mar 2021 01:45:23 +0000 (17:45 -0800)]
[MC] Add parseEOL() overload and migrate some parseToken(AsmToken::EndOfStatement) to parseEOL()

For many directives, the following diagnostics

* `error: unexpected token`
* `error: unexpected token in '.abort' directive"`

are replaced with `error: expected newline`.

`unexpected token` may make the user think a different token is needed.
`expected newline` is clearer about the expected token.

For `in '...' directive`, the directive name is not useful because the next line
replicates the error line which includes the directive.

3 years ago[MC] Parse end-of-line for .addrsig & .addrsig_sym
Fangrui Song [Sun, 7 Mar 2021 00:26:27 +0000 (16:26 -0800)]
[MC] Parse end-of-line for .addrsig & .addrsig_sym

3 years ago[MC] Parse end-of-line for .cfi_* directives
Fangrui Song [Sun, 7 Mar 2021 00:20:55 +0000 (16:20 -0800)]
[MC] Parse end-of-line for .cfi_* directives

Otherwise MCAsmStreamer will emit duplicate newlines.

3 years ago[TableGen] Use range-based for loops (NFC)
Kazu Hirata [Sat, 6 Mar 2021 23:52:55 +0000 (15:52 -0800)]
[TableGen] Use range-based for loops (NFC)

3 years ago[objdump] Use ListSeparator (NFC)
Kazu Hirata [Sat, 6 Mar 2021 23:52:54 +0000 (15:52 -0800)]
[objdump] Use ListSeparator (NFC)

3 years ago[clang] Fix typos in documentation (NFC)
Kazu Hirata [Sat, 6 Mar 2021 23:52:52 +0000 (15:52 -0800)]
[clang] Fix typos in documentation (NFC)

3 years ago[MC] Support .symver *, *, remove
Fangrui Song [Sat, 6 Mar 2021 23:23:02 +0000 (15:23 -0800)]
[MC] Support .symver *, *, remove

As a resolution to https://sourceware.org/bugzilla/show_bug.cgi?id=25295 , GNU as
from binutils 2.35 supports the optional third argument for the .symver directive.

'remove' for a non-default version is useful:
`.symver def_v1, def@v1, remove` => def_v1 is not retained in the symbol table.
Previously the user has to strip the original symbol or specify a `local:`
version node in a version script to localize the symbol.

`.symver def, def@@v1, remove` and `.symver def, def@@@v1, remove` are supported
as well, though they are identical to `.symver def, def@@@v1`.

local/hidden are not useful so this patch does not implement them.

3 years ago[GVN] Don't explicitly materialize undefs from dead blocks
Nikita Popov [Sat, 6 Mar 2021 22:28:38 +0000 (23:28 +0100)]
[GVN] Don't explicitly materialize undefs from dead blocks

When materializing an available load value, do not explicitly
materialize the undef values from dead blocks. Doing so will
will force creation of a phi with an undef operand, even if there
is a dominating definition. The phi will be folded away on
subsequent GVN iterations, but by then we may have already
poisoned MDA cache slots.

Simply don't register these values in the first place, and let
SSAUpdater do its thing.

3 years ago[GVN] Add test for load GVN with dead block (NFC)
Nikita Popov [Sat, 6 Mar 2021 22:17:28 +0000 (23:17 +0100)]
[GVN] Add test for load GVN with dead block (NFC)

What this test illustrates is that GVN inserts an unnecessary
phi node initially, which prevents alias analysis from establishing
NoAlias, and MDA caches that result. We would be able to fully fold
this after another -gvn run with clean MDA.

3 years ago[ModuleSummaryAnalysis] Avoid duplicate elements in Worklist. NFC
Fangrui Song [Sat, 6 Mar 2021 22:19:22 +0000 (14:19 -0800)]
[ModuleSummaryAnalysis] Avoid duplicate elements in Worklist. NFC

3 years ago[FunctionImport] Delete unneeded setLive. NFC
Fangrui Song [Sat, 6 Mar 2021 22:09:54 +0000 (14:09 -0800)]
[FunctionImport] Delete unneeded setLive. NFC

ValueInfo's in Worklist are guaranteed to be live.

3 years ago[VPlan] Support to widen call intructions in VPlan native path
Mauri Mustonen [Sat, 6 Mar 2021 21:45:50 +0000 (21:45 +0000)]
[VPlan] Support to widen call intructions in VPlan native path

Add support to widen call instructions in VPlan native path by using a correct recipe when such instructions are encountered. This is already used by inner loop vectorizer.

Previously call instructions got handled by wrong recipes and resulted in unreachable instruction errors like this one: https://bugs.llvm.org/show_bug.cgi?id=48139.

Patch by Mauri Mustonen <mauri.mustonen@tuni.fi>

Reviewed By: fhahn

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

3 years ago[libcxx] [test] Fix lexically_normal and lexically_relative_and_proximate for windows
Martin Storsjö [Thu, 15 Oct 2020 10:58:32 +0000 (13:58 +0300)]
[libcxx] [test] Fix lexically_normal and lexically_relative_and_proximate for windows

Convert the expected result path to preferred separators, add exceptions
to the test results where needed (due to some cases being interpreted
as a root name).

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

3 years ago[InstCombine] Don't canonicalize (gep i8* X, -(ptrtoint Y)) as (inttoptr (sub...
Roman Lebedev [Sat, 6 Mar 2021 19:58:53 +0000 (22:58 +0300)]
[InstCombine] Don't canonicalize  (gep i8* X, -(ptrtoint Y))  as  (inttoptr (sub (ptrtoint X), (ptrtoint Y)))

It's just a wrong thing to do.

We introduce inttoptr where there were none, which results in
loosing all provenance information because we no longer have a GEP{i,},
and pessimize all future optimizations,
because we are basically not allowed to look past `inttoptr`.

(gep i8* X, -(ptrtoint Y))  *is* the canonical form.
So just drop this fold.

Noticed while reviewing D98120.

3 years ago[NFC][InstCombine] Add plain GEP test for (gep i8* X, -(ptrtoint Y)) --> (inttoptr...
Roman Lebedev [Sat, 6 Mar 2021 19:53:30 +0000 (22:53 +0300)]
[NFC][InstCombine] Add plain GEP test for  (gep i8* X, -(ptrtoint Y))  -->  (inttoptr (sub (ptrtoint X), (ptrtoint Y)))  fold

3 years ago[rs4gc] Fix -Wunused-variable in -DLLVM_ENABLE_ASSERTIONS=off builds
Fangrui Song [Sat, 6 Mar 2021 19:42:27 +0000 (11:42 -0800)]
[rs4gc] Fix -Wunused-variable in -DLLVM_ENABLE_ASSERTIONS=off builds

3 years ago[NFCI] SCEVExpander: emit intrinsics for integral {u,s}{min,max} SCEV expressions
Roman Lebedev [Fri, 26 Feb 2021 13:48:58 +0000 (16:48 +0300)]
[NFCI] SCEVExpander: emit intrinsics for integral {u,s}{min,max} SCEV expressions

These intrinsics, not the icmp+select are the canonical form nowadays,
so we might as well directly emit them.

This should not cause any regressions, but if it does,
then then they would needed to be fixed regardless.

Note that this doesn't deal with `SCEVExpander::isHighCostExpansion()`,
but that is a pessimization, not a correctness issue.

Additionally, the non-intrinsic form has issues with undef,
see https://reviews.llvm.org/D88287#2587863

3 years ago[PowePC][AIX] Handle variadic vector call operands.
Sean Fertile [Sat, 6 Mar 2021 16:33:35 +0000 (11:33 -0500)]
[PowePC][AIX] Handle variadic vector call operands.

Patch adds support for passing vector call operands to variadic
functions. Arguments which are fixed shadow GPRs and stack space even
when they are passed in vector registers, while arguments passed through
ellipses are passed in properly aligned GPRs if available and on the
stack once all GPR arguments registers are consumed.

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

3 years ago[NPM] Add -enable-loopinterchange option to NPM
Ta-Wei Tu [Sat, 6 Mar 2021 18:37:54 +0000 (02:37 +0800)]
[NPM] Add -enable-loopinterchange option to NPM

We have the `enable-loopinterchange` option in legacy pass manager but not in NPM.
Add `LoopInterchange` pass to the optimization pipeline (at the same position as before)
when `enable-loopinterchange` is turned on.

Reviewed By: aeubanks, fhahn

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

3 years ago[XRay][compiler-rt][x86_64] Fix CFI directives in assembly trampolines
Elia Geretto [Sat, 6 Mar 2021 18:38:27 +0000 (10:38 -0800)]
[XRay][compiler-rt][x86_64] Fix CFI directives in assembly trampolines

This patch modifies the x86_64 XRay trampolines to fix the CFI information
generated by the assembler. One of the main issues in correcting the CFI
directives is the `ALIGNED_CALL_RAX` macro, which makes the CFA dependent on
the alignment of the stack. However, this macro is not really necessary because
some additional assumptions can be made on the alignment of the stack when the
trampolines are called. The code has been written as if the stack is guaranteed
to be 8-bytes aligned; however, it is instead guaranteed to be misaligned by 8
bytes with respect to a 16-bytes alignment. For this reason, always moving the
stack pointer by 8 bytes is sufficient to restore the appropriate alignment.

Trampolines that are called from within a function as a result of the builtins
`__xray_typedevent` and `__xray_customevent` are necessarely called with the
stack properly aligned so, in this case too, `ALIGNED_CALL_RAX` can be
eliminated.

Fixes https://bugs.llvm.org/show_bug.cgi?id=49060

Reviewed By: MaskRay

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

3 years ago[sanitizer] Restrict clock_gettime workaround to glibc
Fangrui Song [Sat, 6 Mar 2021 18:32:27 +0000 (10:32 -0800)]
[sanitizer] Restrict clock_gettime workaround to glibc

The hackery is due to glibc clock_gettime crashing from preinit_array (D40679).
32-bit musl architectures do not define `__NR_clock_gettime` so the code causes a compile error.

Tested on Alpine Linux x86-64 (musl) and FreeBSD x86-64.

Reviewed By: vitalybuka

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

3 years ago[Attributor] Enable heap-to-stack of any size
William S. Moses [Tue, 2 Mar 2021 19:41:43 +0000 (14:41 -0500)]
[Attributor] Enable heap-to-stack of any size

Enable Attributor's heap-to-stack to lower unbounded allocations given a max size of -1

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

3 years ago[tests] Update an autogen test for format change
Philip Reames [Sat, 6 Mar 2021 17:49:27 +0000 (09:49 -0800)]
[tests] Update an autogen test for format change

3 years ago[gvn] Handle simply phi equivalence cases
Philip Reames [Sat, 6 Mar 2021 17:27:19 +0000 (09:27 -0800)]
[gvn] Handle simply phi equivalence cases

GVN basically doesn't handle phi nodes at all. This is for a reason - we can't value number their inputs since the predecessor blocks have probably not been visited yet.

However, it also creates a significant pass ordering problem. As it stands, instcombine and simplifycfg ends up implementing CSE of phi nodes. This means that for any series of CSE opportunities intermixed with phi nodes, we end up having to alternate instcombine/simplifycfg and gvn to make progress.

This patch handles the simplest case by simply preprocessing the phi instructions in a block, and CSEing them if they are syntactically identical. This turns out to be powerful enough to handle many cases in a single invocation of GVN since blocks which use the cse'd phi results are visited after the block containing the phi. If there's a CSE opportunity in one the phi predecessors required to recognize the phi CSE opportunity, that will require a second iteration on the function. (Still within a single run of gvn though.)

Compile time wise, this could go either way. On one hand, we're potentially causing GVN to iterate over the function more. On the other, we're cutting down on iterations between two passes and potentially shrinking the IR aggressively. So, a bit unclear what to expect.

Note that this does still rely on instcombine to canonicalize block order of the phis, but that's a one time transformation independent of the values incoming to the phi.

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

3 years ago[libcxx] [test] Fix path.itr/iterator.pass.cpp for windows
Martin Storsjö [Wed, 4 Nov 2020 09:06:45 +0000 (11:06 +0200)]
[libcxx] [test] Fix path.itr/iterator.pass.cpp for windows

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

3 years ago[rs4gc/tests] Remove use of internal debug flags
Philip Reames [Sat, 6 Mar 2021 17:20:02 +0000 (09:20 -0800)]
[rs4gc/tests] Remove use of internal debug flags

As a pragmatic tradeoff, the ease of updating the tests outweighs the slightly easier to understand test conditions.  Where revevant, debug output was converted to comments to help human understanding.

3 years ago[rs4gc] autogen a bunch of tests for ease of update
Philip Reames [Sat, 6 Mar 2021 17:04:00 +0000 (09:04 -0800)]
[rs4gc] autogen a bunch of tests for ease of update

3 years ago[rs4gc] track the original value in the state use for base pointer rewriting
Philip Reames [Sat, 6 Mar 2021 02:05:21 +0000 (18:05 -0800)]
[rs4gc] track the original value in the state use for base pointer rewriting

I'd originally intended to build on this for another purpose and have decided not to, but at a minimum, the stronger asserts are useful.

3 years ago[rs4gc] minor code style improvement
Philip Reames [Sat, 6 Mar 2021 00:51:53 +0000 (16:51 -0800)]
[rs4gc] minor code style improvement

3 years ago[lld-macho][NFC] Replace config param with a global in hasCompatVersion() helper.
Vy Nguyen [Sat, 6 Mar 2021 16:31:16 +0000 (11:31 -0500)]
[lld-macho][NFC] Replace config param with a global in hasCompatVersion() helper.

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

3 years ago[Loads] Restructure getAvailableLoadStore implementation (NFC)
Nikita Popov [Sat, 6 Mar 2021 14:58:18 +0000 (15:58 +0100)]
[Loads] Restructure getAvailableLoadStore implementation (NFC)

Separate out some conditions with early exits, to make it easier to
support additional cases.

3 years ago[InstCombine] Add tests for non-trivial store to load forward (NFC)
Nikita Popov [Sat, 6 Mar 2021 15:49:25 +0000 (16:49 +0100)]
[InstCombine] Add tests for non-trivial store to load forward (NFC)

Examples of things we mostly don't handle.