platform/upstream/llvm.git
3 years agoRestore diagnostic handler after CodeGenAction::ExecuteAction
Marco Antognini [Mon, 8 Feb 2021 18:14:22 +0000 (18:14 +0000)]
Restore diagnostic handler after CodeGenAction::ExecuteAction

Fix dangling pointer to local variable and address some typos.

Reviewed By: xur

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

3 years agoRecommit "[LTO] Use lto::backend for code generation."
Florian Hahn [Sun, 14 Feb 2021 19:33:36 +0000 (19:33 +0000)]
Recommit "[LTO] Use lto::backend for code generation."

This version of the patch includes a fix for the cfi failures.

(undoes the revert commit 7db390cc7738a9ba0ed7d4ca59ab6ea2e69c47e9)

It also undoes reverts of follow-up patches that also needed reverting
originally:

  * [LTO] Add option enable NewPM with LTOCodeGenerator.
    (undoes revert commit 0a17664b47c153aa26a0d31b4835f26375440ec6)

  * [LTOCodeGenerator] Use lto::Config for options (NFC)."
    (undoes revert commit b0a8e41cfff717ff067bf63412d6edb0280608cd)

3 years ago[clangd] Allow modules to bind LSP methods/notifications/commands
Sam McCall [Fri, 12 Feb 2021 20:16:41 +0000 (21:16 +0100)]
[clangd] Allow modules to bind LSP methods/notifications/commands

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

3 years ago[mlir] Add error message on shape.broadcast verification failure
Tres Popp [Mon, 15 Feb 2021 09:58:25 +0000 (10:58 +0100)]
[mlir] Add error message on shape.broadcast verification failure

3 years ago[gn build] Port 5786f64a4ec8
LLVM GN Syncbot [Mon, 15 Feb 2021 09:52:10 +0000 (09:52 +0000)]
[gn build] Port 5786f64a4ec8

3 years ago[clangd] Extract binding of typed->untyped LSP handlers to LSPBinder. NFC
Sam McCall [Thu, 11 Feb 2021 21:47:58 +0000 (22:47 +0100)]
[clangd] Extract binding of typed->untyped LSP handlers to LSPBinder. NFC

The goal is to allow the LSP bindings of features to be defined outside
the ClangdLSPServer class, turning it into less of a monolith.

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

3 years ago[mlir] Support repeated delayed registration of dialect interfaces
Alex Zinenko [Mon, 15 Feb 2021 09:39:13 +0000 (10:39 +0100)]
[mlir] Support repeated delayed registration of dialect interfaces

Dialects themselves do not support repeated addition of interfaces with the
same TypeID. However, in case of delayed registration, the registry may contain
such an interface, or have the same interface registered several times due to,
e.g., dependencies. Make sure we delayed registration does not attempt to add
an interface with the same TypeID more than once.

Reviewed By: mehdi_amini

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

3 years ago[analyzer] Updated comments to reflect D85817
Deep Majumder [Mon, 15 Feb 2021 08:45:48 +0000 (11:45 +0300)]
[analyzer] Updated comments to reflect D85817

Changed DeclaratorDecl in comment to NamedDecl

Reviewed By: vsavchenko

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

3 years ago[analyzer] Fix static_cast on pointer-to-member handling
Deep Majumder [Mon, 15 Feb 2021 08:44:34 +0000 (11:44 +0300)]
[analyzer] Fix static_cast on pointer-to-member handling

This commit fixes bug #48739. The bug was caused by the way static_casts
on pointer-to-member caused the CXXBaseSpecifier list of a
MemberToPointer to grow instead of shrink.
The list is now grown by implicit casts and corresponding entries are
removed by static_casts. No-op static_casts cause no effect.

Reviewed By: vsavchenko

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

3 years agoAdd ehcont section support
Arlo Siemsen [Mon, 15 Feb 2021 01:23:40 +0000 (09:23 +0800)]
Add ehcont section support

In the future Windows will enable Control-flow Enforcement Technology (CET aka shadow stacks). To protect the path where the context is updated during exception handling, the binary is required to enumerate valid unwind entrypoints in a dedicated section which is validated when the context is being set during exception handling.

This change allows llvm to generate the section that contains the appropriate symbol references in the form expected by the msvc linker.

This feature is enabled through a new module flag, ehcontguard, which was modelled on the cfguard flag.

The change includes a test that when the module flag is enabled the section is correctly generated.

The set of exception continuation information includes returns from exceptional control flow (catchret in llvm).

In order to collect catchret we:
1) Includes an additional flag on machine basic blocks to indicate that the given block is the target of a catchret operation,
2) Introduces a new machine function pass to insert and collect symbols at the start of each block, and
3) Combines these targets with the other EHCont targets that were already being collected.

Change originally authored by Daniel Frampton <dframpto@microsoft.com>

For more details, see MSVC documentation for `/guard:ehcont`
  https://docs.microsoft.com/en-us/cpp/build/reference/guard-enable-eh-continuation-metadata

Reviewed By: pengfei

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

3 years ago[RISCV] Add i16 bswap and i8/i16 bitreverse tests to the Zbp tests. NFC
Craig Topper [Sun, 14 Feb 2021 20:53:20 +0000 (12:53 -0800)]
[RISCV] Add i16 bswap and i8/i16 bitreverse tests to the Zbp tests. NFC

Maybe we should use GREVI directly for these rather than
promoting and then shifting right.

3 years ago[Polly] Regenerate isl-noexceptions.h.
Michael Kruse [Mon, 15 Feb 2021 01:08:58 +0000 (19:08 -0600)]
[Polly] Regenerate isl-noexceptions.h.

Regenerate the C++ wrapper header from the current isl version's
headers.

The most notable change is that some dimension sizes are represented by
an isl_size (instead of unsigned), which is a signed int. Additionally,
some function may return -1 in case of an error which already had been
fixed in the past. The C++ may no return -1 instead of UINT_MAX which
caused the problems.

Some types in Polly had been changed from unsigned to isl_size
(that were not already auto) and some loops/comparision had to be
changed to avoid unsigned/signed comparison warnings.

3 years ago[X86] Convert fmin/fmax _mm_reduce_* intrinsics to emit llvm.reduction intrinsics...
Wang, Pengfei [Mon, 15 Feb 2021 00:50:59 +0000 (08:50 +0800)]
[X86] Convert fmin/fmax _mm_reduce_* intrinsics to emit llvm.reduction intrinsics (PR47506)

This is a follow up of D92940.

We have successfully converted fadd/fmul _mm_reduce_* intrinsics to
llvm.reduction + reassoc flag. We can do the same approach for fmin/fmax
too, i.e. llvm.reduction + nnan flag.

Reviewed By: spatel

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

3 years ago[AMDGPU] Add llvm.amdgcn.wqm.demote intrinsic
Carl Ritson [Sun, 14 Feb 2021 00:52:41 +0000 (09:52 +0900)]
[AMDGPU] Add llvm.amdgcn.wqm.demote intrinsic

Add intrinsic which demotes all active lanes to helper lanes.
This is used to implement demote to helper Vulkan extension.

In practice demoting a lane to helper simply means removing it
from the mask of live lanes used for WQM/WWM/Exact mode.
Where the shader does not use WQM, demotes just become kills.

Additionally add llvm.amdgcn.live.mask intrinsic to complement
demote operations. In theory llvm.amdgcn.ps.live can be used
to detect helper lanes; however, ps.live can be moved by LICM.
The movement of ps.live cannot be remedied without changing
its type signature and such a change would require ps.live
users to update as well.

Reviewed By: piotr

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

3 years ago[Polly] Invalidate passes after Scop processing in NewPM.
Michael Kruse [Sun, 14 Feb 2021 22:35:48 +0000 (16:35 -0600)]
[Polly] Invalidate passes after Scop processing in NewPM.

ScopDetection's DetectionContext holds AssertionVH for
RequiredInvariantLoads. An assertion is thrown if the handle's value is
erased and the ScopDetection is not yet invalidated. The ScopDetection
must remain valid durting the ScopPassManager. Enusure that all Scop
analyses are free'd when the ScopPass manager is done.

If IR generation has happened, also invalidate all other passes to avoid
possible issues because, like for the legacy pass manager, Polly does not
yet perfectly preserve them.

3 years ago[GlobalISel] Disable vector types in narrowScalarAddSub
Cassie Jones [Sun, 14 Feb 2021 19:42:46 +0000 (14:42 -0500)]
[GlobalISel] Disable vector types in narrowScalarAddSub

The implementation for vectors is broken and doesn't seem to be used by
anything. Explicitly remove support for them, they can be added again
later when they're properly implemented.

Reviewed By: aemerson

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

3 years ago[GlobalISel] Extract a narrowScalarAddSub method. NFC
Cassie Jones [Sun, 14 Feb 2021 19:37:55 +0000 (14:37 -0500)]
[GlobalISel] Extract a narrowScalarAddSub method. NFC

Reviewed By: aemerson

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

3 years ago[lldb] [Process/FreeBSDRemote] Fix clang-formatting on ppc commit
Michał Górny [Sun, 14 Feb 2021 21:34:25 +0000 (22:34 +0100)]
[lldb] [Process/FreeBSDRemote] Fix clang-formatting on ppc commit

3 years agoReland "[mlir] add support for verification in integration tests"
Tobias Gysi [Sun, 14 Feb 2021 19:21:47 +0000 (20:21 +0100)]
Reland "[mlir] add support for verification in integration tests"

The patch extends the runner utils by verification methods that compare two memrefs. The methods compare the content of the two memrefs and print success if the data is identical up to a small numerical error. The methods are meant to simplify the development of integration tests that compare the results against a reference implementation (cf. the updates to the linalg matmul integration tests).

Originally landed in 5fa893c (https://reviews.llvm.org/D96326) and reverted in dd719fd due to a Windows build failure.

Changes:
- Remove the max function that requires the "algorithm" header on Windows
- Eliminate the truncation warning in the float specialization of verifyElem by using a float constant

Reviewed By: Kayjukh

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

3 years ago[gn build] Port 656ead1fb7db
LLVM GN Syncbot [Sun, 14 Feb 2021 19:23:24 +0000 (19:23 +0000)]
[gn build] Port 656ead1fb7db

3 years ago[llvm/Support] Add SHA256 implementation
cynecx [Sun, 14 Feb 2021 17:31:44 +0000 (17:31 +0000)]
[llvm/Support] Add SHA256 implementation

Adds an *unaudited* SHA-256 implementation to `llvm/Support`. The ongoing lld-macho effort needs this to emit an adhoc code signature for macho files on macOS Big Sur.

Reviewed By: mehdi_amini

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

3 years ago[clang-format] Add possibility to be based on parent directory
Björn Schäpers [Fri, 29 Jan 2021 08:29:00 +0000 (09:29 +0100)]
[clang-format] Add possibility to be based on parent directory

This allows the define BasedOnStyle: InheritParentConfig and then
clang-format looks into the parent directories for their
.clang-format and takes that as a basis.

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

3 years ago[ARM] Move PhaseOrdering test to the correct place. NFC
David Green [Sun, 14 Feb 2021 18:43:39 +0000 (18:43 +0000)]
[ARM] Move PhaseOrdering test to the correct place. NFC

3 years ago[ConstraintElimination] Fix variables used for pattern matching.
Florian Hahn [Sun, 14 Feb 2021 18:06:09 +0000 (18:06 +0000)]
[ConstraintElimination] Fix variables used for pattern matching.

Re-using the matched variable in the pattern does not work as expected.
This patch fixes that by introducing a new variable for the 2nd level
match.

3 years ago[BasicAA] Merge aliasGEP code paths
Nikita Popov [Sun, 14 Feb 2021 17:51:45 +0000 (18:51 +0100)]
[BasicAA] Merge aliasGEP code paths

At this point, we can treat the case of GEP/GEP aliasing and
GEP/non-GEP aliasing in essentially the same way. The only
differences are that we need to do an additional negative GEP base
check, and that we perform a bailout on unknown sizes for the
GEP/non-GEP case (the latter exists only to limit compile-time).

This change is not quite NFC due to the peculiar effect that
the DecomposedGEP for V2 can actually be non-trivial even if V2
is not a GEP. The reason for this is that getUnderlyingObject()
can look through LCSSA phi nodes, while stripPointerCasts() doesn't.
This can lead to slightly better results if single-entry phi nodes
occur inside a loop, where looking through the phi node via aliasPhi()
would subject it to phi cycle equivalence restrictions. It would
probably make sense to adjust pointer cast stripping (for AA) to
handle this case, and ensure consistent results.

3 years ago[BasicAA] Add test for single arg phi in loop (NFC)
Nikita Popov [Sun, 14 Feb 2021 17:44:38 +0000 (18:44 +0100)]
[BasicAA] Add test for single arg phi in loop (NFC)

3 years ago[ARM] A couple of small MVE reduction tests from intrinsics. NFC
David Green [Sun, 14 Feb 2021 18:26:22 +0000 (18:26 +0000)]
[ARM] A couple of small MVE reduction tests from intrinsics. NFC

Also added a PhaseOrdering test, to make sure they are not broken by
VectorCombine cost changes.

3 years ago[AMDGPU] Limit memory scope for scratch, LDS and GDS
Tony Tye [Sat, 13 Feb 2021 08:43:48 +0000 (08:43 +0000)]
[AMDGPU] Limit memory scope for scratch, LDS and GDS

Changes for AMD GPU SIMemoryLegalizer:

- Limit the memory scope to maximum supported by the scratch, LDS and
  GDS address spaces.

- Improve assertion checking.

- Correct toSIAtomicScope argument name.

Reviewed By: rampitec

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

3 years ago[AMDGPU] Fix build breakage
Kazu Hirata [Sun, 14 Feb 2021 17:02:54 +0000 (09:02 -0800)]
[AMDGPU] Fix build breakage

3 years ago[ARM] Add some tests for MVE lane interleaving. NFC
David Green [Sun, 14 Feb 2021 16:51:18 +0000 (16:51 +0000)]
[ARM] Add some tests for MVE lane interleaving. NFC

3 years ago[llvm] Use llvm::is_contained (NFC)
Kazu Hirata [Sun, 14 Feb 2021 16:36:20 +0000 (08:36 -0800)]
[llvm] Use llvm::is_contained (NFC)

3 years ago[llvm] Fix header guards (NFC)
Kazu Hirata [Sun, 14 Feb 2021 16:36:16 +0000 (08:36 -0800)]
[llvm] Fix header guards (NFC)

Identified with llvm-header-guard.

3 years ago[Analysis] Use ListSeparator (NFC)
Kazu Hirata [Sun, 14 Feb 2021 16:36:14 +0000 (08:36 -0800)]
[Analysis] Use ListSeparator (NFC)

3 years ago[BasicAA] Avoid duplicate query for GEPs with identical offsets (NFCI)
Nikita Popov [Sat, 13 Feb 2021 22:43:57 +0000 (23:43 +0100)]
[BasicAA] Avoid duplicate query for GEPs with identical offsets (NFCI)

For two GEPs with identical offsets, we currently first perform
a base address query without size information, and then if it is
MayAlias, perform another with size information. This is pointless,
as the latter query should produce strictly better results.

This was not quite true historically due to the way that NoAlias
assumptions were handled, but that issue has since been resolved.

3 years ago[BasicAA] Use index difference to detect GEPs with identical indexes
Nikita Popov [Sun, 14 Feb 2021 14:55:53 +0000 (15:55 +0100)]
[BasicAA] Use index difference to detect GEPs with identical indexes

We currently detect GEPs that have exactly the same indexes by
comparing the Offsets and VarIndices. However, the latter implicitly
performs equality comparisons between two values, which is not
generally legal inside BasicAA, due to the possibility of comparisons
across phi cycles.

I believe that in this particular instance this actually ends up being
unproblematic, at least I wasn't able to come up with any cases that
could result in an incorrect root query result.

In the interest of being defensive, compute GetIndexDifference earlier
(which knows how to handle phi cycles properly) and use the result of
that to determine whether the offsets are identical.

3 years ago[mlir][Linalg] Fix constant detection in linalg.pad_tensor vectorization.
Nicolas Vasilache [Sun, 14 Feb 2021 15:53:13 +0000 (15:53 +0000)]
[mlir][Linalg] Fix constant detection in linalg.pad_tensor vectorization.

3 years ago[ValueTracking] Dereferenced pointers are noundef
aqjune [Sat, 13 Feb 2021 07:22:25 +0000 (16:22 +0900)]
[ValueTracking] Dereferenced pointers are noundef

This is a follow-up of D95238's LangRef update.
This patch updates `programUndefinedIfUndefOrPoison(V)` to return true if
`V` is used by any memory-accessing instruction.
Interestingly, this affected many tests in Attributors, mainly about adding noundefs.
The tests are updated using llvm/utils/update_test_checks.py. I checked that the diffs
are about updating noundefs.

Reviewed By: nikic

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

3 years ago[ASTMatchers] Clarify example in docs
Stephen Kelly [Sun, 14 Feb 2021 13:45:56 +0000 (13:45 +0000)]
[ASTMatchers] Clarify example in docs

3 years ago[InstCombine] fold fdiv with pow divisor (PR49147)
Sanjay Patel [Sun, 14 Feb 2021 13:06:15 +0000 (08:06 -0500)]
[InstCombine] fold fdiv with pow divisor (PR49147)

This is unusual in the general (non-reciprocal) case because we need
an extra instruction, but that should be better for general FP
reassociation and codegen. We conservatively check for "arcp" FMF
here as we do with existing fdiv folds, but it is not strictly
necessary to have that.

This is part of solving:
https://llvm.org/PR49147
(The powi variant potentially has a different constraint.)

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

3 years ago[InstCombine] Add nonnull(select c, null, p) tests (NFC)
Juneyoung Lee [Sun, 14 Feb 2021 13:03:15 +0000 (22:03 +0900)]
[InstCombine] Add nonnull(select c, null, p) tests (NFC)

3 years ago[LoopVectorize] Fix VPRecipeBuilder::createEdgeMask to correctly generate the mask
Juneyoung Lee [Tue, 9 Feb 2021 05:06:17 +0000 (14:06 +0900)]
[LoopVectorize] Fix VPRecipeBuilder::createEdgeMask to correctly generate the mask

This patch fixes pr48832 by correctly generating the mask when a poison value is involved.

Consider this CFG (which is a part of the input):

```
for.body:                                         ; preds = %for.cond
  br i1 true, label %cond.false, label %land.rhs

land.rhs:                                         ; preds = %for.body
  br i1 poison, label %cond.end, label %cond.false

cond.false:                                       ; preds = %for.body, %land.rhs
  br label %cond.end

cond.end:                                         ; preds = %land.rhs, %cond.false
  %cond = phi i32 [ 0, %cond.false ], [ 1, %land.rhs ]

```

The path for.body -> land.rhs -> cond.end should be taken when 'select i1 false, i1 poison, i1 false' holds (which means it's never taken); but VPRecipeBuilder::createEdgeMask was emitting 'and i1 false, poison' instead.
The former one successfully blocks poison propagation whereas the latter one doesn't, making the condition poison and thus causing the miscompilation.

SimplifyCFG has a similar bug (which didn't expose a real-world bug yet), and a patch for this is also ongoing (see https://reviews.llvm.org/D95026).

Reviewed By: bjope

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

3 years ago[Polly] Test all optimization levels.
Michael Kruse [Sun, 14 Feb 2021 06:31:10 +0000 (00:31 -0600)]
[Polly] Test all optimization levels.

3 years ago[CodeGen] Use range-based for loops (NFC)
Kazu Hirata [Sun, 14 Feb 2021 04:41:39 +0000 (20:41 -0800)]
[CodeGen] Use range-based for loops (NFC)

3 years ago[Analysis] Drop unnecessary const from return types (NFC)
Kazu Hirata [Sun, 14 Feb 2021 04:41:38 +0000 (20:41 -0800)]
[Analysis] Drop unnecessary const from return types (NFC)

Identified with readability-const-return-type.

3 years ago[TableGen] Use ListSeparator (NFC)
Kazu Hirata [Sun, 14 Feb 2021 04:41:36 +0000 (20:41 -0800)]
[TableGen] Use ListSeparator (NFC)

3 years ago[AVR] Fix a bug in 16-bit shifts
Ben Shi [Sun, 14 Feb 2021 03:54:55 +0000 (11:54 +0800)]
[AVR] Fix a bug in 16-bit shifts

Reviewed By: aykevl

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

3 years ago[gold] Add case being tested by equivalent lld test
Teresa Johnson [Sun, 14 Feb 2021 01:09:56 +0000 (17:09 -0800)]
[gold] Add case being tested by equivalent lld test

The new tests added by 1487747e990ce9f8851f3d92c3006a74134d7518 for lld
and gold plugin were largely equivalent, but the gold one was missing
one of the cases added to lld. Add that test to the gold plugin version.

3 years ago[lld] Reorder cases in test to match comments (NFC)
Teresa Johnson [Sun, 14 Feb 2021 00:32:39 +0000 (16:32 -0800)]
[lld] Reorder cases in test to match comments (NFC)

The test added in 1487747e990ce9f8851f3d92c3006a74134d7518 had a few
cases that were out of order compared to the comments. Reordered to
match.

3 years ago[LTT] Address post-review comments (NFC)
Teresa Johnson [Thu, 11 Feb 2021 03:07:51 +0000 (19:07 -0800)]
[LTT] Address post-review comments (NFC)

Implement some post-review cleanup suggestions for D96083.

3 years ago[Clang] Ensure vector predication loop metadata is always emitted when pragma is...
Malhar [Sat, 13 Feb 2021 21:57:21 +0000 (15:57 -0600)]
[Clang] Ensure vector predication loop metadata is always emitted when pragma is specified.

This patch ensures that vector predication and vectorization width
pragmas work together correctly/as expected. Specifically, this patch
fixes the issue that when vectorization_width > 1, the vector
predication behaviour (this would matter if it has NOT been disabled
explicitly by a pragma) was getting ignored, which was incorrect.

The fix here removes the dependence of vector predication on the
vectorization width. The loop metadata corresponding to clang loop
pragma vectorize_predicate is always emitted, if the pragma is
specified, even if vectorization is disabled by vectorize_width(1)
or vectorize(disable) since the option is also used for interleaving
by the LoopVectorize pass.

Reviewed By: dmgreen, Meinersbur

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

3 years agoELFObjectWriter: Simplify
Fangrui Song [Sat, 13 Feb 2021 22:52:30 +0000 (14:52 -0800)]
ELFObjectWriter: Simplify

* Delete unused ELFSymbolData::operator<
* Inline createStringTable
* Fix a comment
* Change align to return uint64_t

3 years ago[CMake][mlir] Fix mlir-linalg-ods-gen/CMakeLists.txt after D96645
Fangrui Song [Sat, 13 Feb 2021 22:16:38 +0000 (14:16 -0800)]
[CMake][mlir] Fix mlir-linalg-ods-gen/CMakeLists.txt after D96645

3 years ago[RISCV] Rename the RVVBaseAddr ComplexPattern to just BaseAddr and use it to merge...
Craig Topper [Sat, 13 Feb 2021 08:42:25 +0000 (00:42 -0800)]
[RISCV] Rename the RVVBaseAddr ComplexPattern to just BaseAddr and use it to merge some scalar load/store patterns too.

3 years agoELFObjectWriter: Delete redundant registerSymbol
Fangrui Song [Sat, 13 Feb 2021 20:01:37 +0000 (12:01 -0800)]
ELFObjectWriter: Delete redundant registerSymbol

MCELFStreamer::changeSection has registered the group signature symbol.

3 years agofix linalg ods gen cross compiling like other gen executables
daquexian [Sat, 13 Feb 2021 17:15:47 +0000 (17:15 +0000)]
fix linalg ods gen cross compiling like other gen executables

Signed-off-by: daquexian <daquexian566@gmail.com>
Reviewed By: vinograd47

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

3 years ago[lldb][test] Fix Shell/SymbolFile/symbol-binding.test
Fangrui Song [Sat, 13 Feb 2021 19:10:29 +0000 (11:10 -0800)]
[lldb][test] Fix Shell/SymbolFile/symbol-binding.test

3 years agoELFObjectWriter: Don't sort non-local symbols
Fangrui Song [Sat, 13 Feb 2021 18:32:27 +0000 (10:32 -0800)]
ELFObjectWriter: Don't sort non-local symbols

As we don't sort local symbols, don't sort non-local symbols.  This makes
non-local symbols appear in their register order, which matches GNU as. The
register order is nice in that you can write tests with interleaved CHECK
prefixes, e.g.

```
// CHECK: something about foo
.globl foo
foo:
// CHECK: something about bar
.globl bar
bar:
```

With the lexicographical order, the user needs to place lexicographical smallest
symbol first or keep CHECK prefixes in one place.

3 years ago[InstCombine] add tests for pow() divisor; NFC
Sanjay Patel [Sat, 13 Feb 2021 16:00:55 +0000 (11:00 -0500)]
[InstCombine] add tests for pow() divisor; NFC

3 years ago[pstl] Iterator types renaming: ForwardIterator -> RandomAccessIterator; for parallel...
Mikhail Dvorskiy [Sat, 13 Feb 2021 17:28:50 +0000 (20:28 +0300)]
[pstl] Iterator types renaming: ForwardIterator -> RandomAccessIterator; for parallel patterns/bricks

https://reviews.llvm.org/D96266

3 years ago[IRBuilder] Remove Align-related deprecated APIs
Nikita Popov [Sat, 13 Feb 2021 15:39:44 +0000 (16:39 +0100)]
[IRBuilder] Remove Align-related deprecated APIs

This removes IRBuilder methods accepting unsigned alignments
in favor of their Align/MaybeAlign variants. These methods have
been deprecated for more than a year at this point, so they
should be safe to remove.

3 years ago[ARM] Fix duplicate fdiv tests, changing them to frem. NFC
David Green [Sat, 13 Feb 2021 15:16:11 +0000 (15:16 +0000)]
[ARM] Fix duplicate fdiv tests, changing them to frem. NFC

3 years ago[ARM] Extra vector shuffle tests of various kinds. NFC
David Green [Sat, 13 Feb 2021 14:16:50 +0000 (14:16 +0000)]
[ARM] Extra vector shuffle tests of various kinds. NFC

3 years ago[DAG] Fold i1/vXi1 saddsat/uaddsat(x,y) -> or(x,y)
Simon Pilgrim [Sat, 13 Feb 2021 15:01:48 +0000 (15:01 +0000)]
[DAG] Fold i1/vXi1 saddsat/uaddsat(x,y) -> or(x,y)

Alive2: https://alive2.llvm.org/ce/z/FzcrpH

3 years ago[NFC][Docs] Fix RAVFrontendAction doc's CMakeLists.txt for shared build
Shivam Gupta [Sat, 13 Feb 2021 14:18:49 +0000 (19:48 +0530)]
[NFC][Docs] Fix RAVFrontendAction doc's CMakeLists.txt for shared build

It should fix following error:

  Undefined symbols for architecture x86_64:
    "llvm::outs()", referenced from:
        FindNamedClassVisitor::VisitCXXRecordDecl(clang::CXXRecordDecl*) in FindClassDecls.cpp.o

3 years ago[clangd] Retire clang-tidy-checks flag.
Nathan James [Sat, 13 Feb 2021 14:14:21 +0000 (14:14 +0000)]
[clangd] Retire clang-tidy-checks flag.

In clangd-12 the ability to override what clang tidy checks should run was moved into config.
For the 13 release its a wise progression to remove the command line option for this.

Reviewed By: sammccall

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

3 years ago[clang-tidy] Simplify inaccurate erase check
Stephen Kelly [Sun, 3 Jan 2021 16:43:54 +0000 (16:43 +0000)]
[clang-tidy] Simplify inaccurate erase check

The normalization of matchers means that this now works in all language
modes.

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

3 years ago[clang-tidy] Simplify static assert check
Stephen Kelly [Mon, 28 Dec 2020 01:18:54 +0000 (01:18 +0000)]
[clang-tidy] Simplify static assert check

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

3 years ago[DAG] Fold i1/vXi1 ssubsat/usubsat(x,y) -> and(x,~y)
Simon Pilgrim [Sat, 13 Feb 2021 13:21:15 +0000 (13:21 +0000)]
[DAG] Fold i1/vXi1 ssubsat/usubsat(x,y) -> and(x,~y)

Alive2: https://alive2.llvm.org/ce/z/4nkNGh

3 years ago[DAG] PromoteIntRes_ADDSUBSHLSAT - use promoted ISD::USUBSAT directly
Simon Pilgrim [Sat, 13 Feb 2021 12:34:56 +0000 (12:34 +0000)]
[DAG] PromoteIntRes_ADDSUBSHLSAT - use promoted ISD::USUBSAT directly

As discussed on D96413, as long as the promoted bits of the args are zero we can use the basic ISD::USUBSAT pattern directly, without the shifting like we do for other ops.

I think something similar should be possible for ISD::UADDSAT as well, which I'll look at later.

Also, create a ISD::USUBSAT node directly - this will be expanded back by the legalizer later on if necessary.

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

3 years ago[clangd] Fix unsued private field warning
Kadir Cetinkaya [Sat, 13 Feb 2021 12:20:15 +0000 (13:20 +0100)]
[clangd] Fix unsued private field warning

3 years agoreland [InstCombine] convert assumes to operand bundles
Tyker [Tue, 9 Feb 2021 18:20:50 +0000 (19:20 +0100)]
reland [InstCombine] convert assumes to operand bundles

Instcombine will convert the nonnull and alignment assumption that use the boolean condtion
to an assumption that uses the operand bundles when knowledge retention is enabled.

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

3 years ago[DAG] Fix shift amount limit in SimplifyDemandedBits trunc(shift(x,c)) to truncated...
Simon Pilgrim [Sat, 13 Feb 2021 11:59:52 +0000 (11:59 +0000)]
[DAG] Fix shift amount limit in SimplifyDemandedBits trunc(shift(x,c)) to truncated bitwidth

We lost this in D56387/rG69bc0990a9181e6eb86228276d2f59435a7fae67 - where I got the src/dst bitwidths mixed up and assumed getValidShiftAmountConstant would catch it.

Patch by @craig.topper - confirmed by @Carrot that it fixes PR49162

3 years ago[WebAssemblly] Fix rethrow's argument computation
Heejin Ahn [Thu, 11 Feb 2021 19:05:41 +0000 (11:05 -0800)]
[WebAssemblly] Fix rethrow's argument computation

Previously we assumed `rethrow`'s argument was always 0, but it turned
out `rethrow` follows the same rule with `br` or `delegate`:
https://github.com/WebAssembly/exception-handling/pull/137
https://github.com/WebAssembly/exception-handling/issues/146#issuecomment-777349038

Currently `rethrow`s generated by our backend always rethrow the
exception caught by the innermost enclosing catch, so this adds a
function to compute that and replaces `rethrow`'s argument with its
computed result.

This also renames `EHPadStack` in `InstPrinter` to `TryStack`, because
in CFGStackify we use `EHPadStack` to mean the range between
`catch`~`end`, while in `InstPrinter` we used it to mean the range
between `try`~`catch`, so choosing different names would look clearer.
Doesn't contain any functional changes in `InstPrinter`.

Reviewed By: dschuff

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

3 years ago[X86] Add reduced test case for PR49162
Simon Pilgrim [Sat, 13 Feb 2021 11:33:14 +0000 (11:33 +0000)]
[X86] Add reduced test case for PR49162

3 years ago[ARM] MVE min/max cost tests. NFC
David Green [Sat, 13 Feb 2021 11:12:12 +0000 (11:12 +0000)]
[ARM] MVE min/max cost tests. NFC

3 years ago[analyzer][tests] Fix issue comparison script
Valeriy Savchenko [Fri, 12 Feb 2021 16:47:24 +0000 (19:47 +0300)]
[analyzer][tests] Fix issue comparison script

When newer build has duplicate issues the script tried to
remove it from the list more than once.  The new approach
changes the way we filter out matching issues.

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

3 years ago[libunwind][cmake] Add an option to enable/disable tests
Kristina Bessonova [Sat, 13 Feb 2021 10:49:47 +0000 (12:49 +0200)]
[libunwind][cmake] Add an option to enable/disable tests

Reviewed By: ldionne, compnerd

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

3 years ago[Polly] Preserve DetectionContext references.
Michael Kruse [Sat, 13 Feb 2021 06:36:19 +0000 (00:36 -0600)]
[Polly] Preserve DetectionContext references.

DetectionContext objects are stored as values in a DenseMap. When the
DenseMap reaches its maximum load factor, it is resized and all its
objects moved to a new memory allocation. Unfortunately Scop object have
a reference to its DetectionContext. When the DenseMap resizes, all the
DetectionContexts reference now point to invalid memory, even if caused
by an unrelated DetectionContext.

Even worse, NewPM's ScopPassManager called isMaxRegionInScop with the
Verify=true parameter before each pass. This caused the old
DetectionContext to be removed an a new on created and re-verified.
Of course, the Scop object was already created pointing to the old
DetectionContext. Because the new DetectionContext would
usually be stored at the same position in the DenseMap, the reference
would usually reference the new DetectionContext of the same Region.
Usually.
If not, the old position still points to memory in the DenseMap
allocation (unless also a resizing occurs) such that tools like Valgrind
and AddressSanitizer would not be able to diagnose this.

Instead of storing the DetectionContext inside the DenseMap, use a
std::unique_ptr to a DetectionContext allocation, i.e. it will not move
around anymore. This also allows use to remove the very strange

    DetectionContext(const DetectionContext &&)

copy/move(?) constructor. DetectionContext objects now are neither
copied nor moved.

As a result, every re-verification of a DetectionContext will use a new
allocation. Therefore, once a Scop object has been created using a
DetectionContext, it must not be re-verified (the Scop data structure
requires its underlying Region to not change before code generation
anyway). The NewPM may call isMaxRegionInScop only with
Validate=false parameter.

3 years ago[test] Make ELF tests less reliant on the lexicographical order of non-local symbols
Fangrui Song [Sat, 13 Feb 2021 09:01:06 +0000 (01:01 -0800)]
[test] Make ELF tests less reliant on the lexicographical order of non-local symbols

3 years ago[CodeGen] Use range-based for loops (NFC)
Kazu Hirata [Sat, 13 Feb 2021 07:44:33 +0000 (23:44 -0800)]
[CodeGen] Use range-based for loops (NFC)

3 years ago[AMDGPU] Drop unnecessary const from a return type (NFC)
Kazu Hirata [Sat, 13 Feb 2021 07:44:31 +0000 (23:44 -0800)]
[AMDGPU] Drop unnecessary const from a return type (NFC)

Identified with readability-const-return-type.

3 years ago[TableGen] Use ListSeparator (NFC)
Kazu Hirata [Sat, 13 Feb 2021 07:44:30 +0000 (23:44 -0800)]
[TableGen] Use ListSeparator (NFC)

3 years ago[InstSimplify] add tests that look into pointer operands of instructions
Juneyoung Lee [Sat, 13 Feb 2021 07:25:27 +0000 (16:25 +0900)]
[InstSimplify] add tests that look into pointer operands of instructions

3 years ago[LTO] Perform DSOLocal propagation in combined index
Wei Wang [Wed, 10 Feb 2021 05:14:43 +0000 (21:14 -0800)]
[LTO] Perform DSOLocal propagation in combined index

Perform DSOLocal propagation within summary list of every GV. This
avoids the repeated query of this information during function
importing.

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

3 years ago[LangRef] Update memory access ops to raise UB if ptrs are not well defined
Juneyoung Lee [Sat, 13 Feb 2021 05:12:33 +0000 (14:12 +0900)]
[LangRef] Update memory access ops to raise UB if ptrs are not well defined

In the past, it was stated in D87994 that it is allowed to dereference a pointer that is partially undefined
if all of its possible representations fit into a dereferenceable range.
The motivation of the direction was to make a range analysis helpful for assuring dereferenceability.
Even if a range analysis concludes that its offset is within bounds, the offset could still be partially undefined; to utilize the range analysis, this relaxation was necessary.
https://groups.google.com/g/llvm-dev/c/2Qk4fOHUoAE/m/KcvYMEgOAgAJ has more context about this.

However, this is currently blocking another optimization, which is annotating the noundef attribute for library functions' arguments. D95122 is the patch.
Currently, there are quite a few library functions which cannot have noundef attached to its pointer argument because it can be transformed from load/store.
For example, MemCpyOpt can convert stores into memset:

```
store p, i32 0
store (p+1), i32 0 // Since currently it is allowed for store to have partially undefined pointer..
->
memset(p, 0, 8)    // memset cannot guarantee that its ptr argument is noundef.
```

A bigger problem is that this makes unclear which library functions are allowed to have 'noundef' and which functions aren't (e.g., strlen).
This makes annotating noundef almost impossible for this kind of functions.

This patch proposes that all memory operations should have well-defined pointers.
For memset/memcpy, it is semantically equivalent to running a loop until the size is met (and branching on undef is UB), so the size is also updated to be well-defined.

Strictly speaking, this again violates the implication of dereferenceability from range analysis result.
However, I think this is okay for the following reasons:

1. It seems the existing analyses in the LLVM main repo does not have conflicting implementation with the new proposal.
`isDereferenceableAndAlignedPointer` works only when the GEP offset is constant, and `isDereferenceableAndAlignedInLoop` is also fine.

2. A possible miscompilation happens only when the source has a pointer with a *partially* undefined offset (it's okay with poison because there is no 'partially poison' value).
But, at least I'm not aware of a language using LLVM as backend that has a well-defined program while allowing partially undefined pointers.
There might be such a language that I'm not aware of, but improving the performance of the mainstream languages like C and Rust is more important IMHO.

Reviewed By: jdoerfert

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

3 years ago[test] Make ELF tests amenable to the order of non-local symbols
Fangrui Song [Sat, 13 Feb 2021 05:00:42 +0000 (21:00 -0800)]
[test] Make ELF tests amenable to the order of non-local symbols

3 years ago[FPEnv][ARM] Implement lowering of llvm.set.rounding
Serge Pavlov [Thu, 11 Feb 2021 13:06:28 +0000 (20:06 +0700)]
[FPEnv][ARM] Implement lowering of llvm.set.rounding

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

3 years agoRevert "[flang][fir] Add fir-opt tool"
clementval [Sat, 13 Feb 2021 03:27:48 +0000 (22:27 -0500)]
Revert "[flang][fir] Add fir-opt tool"

This reverts commit df1eeaa7b404f7c5a96a812479f0ee2ce8354f6a.

Buildbot failure.

3 years ago[flang][fir][NFC] Move FieldType to TableGen type definition
Valentin Clement [Sat, 13 Feb 2021 03:22:56 +0000 (22:22 -0500)]
[flang][fir][NFC] Move FieldType to TableGen type definition

This patch is a follow up of D96422 and move ComplexType to TableGen.

Reviewed By: schweitz, mehdi_amini

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

3 years ago[flang][fir] Add fir-opt tool
Valentin Clement [Sat, 13 Feb 2021 03:20:15 +0000 (22:20 -0500)]
[flang][fir] Add fir-opt tool

This patch introduce the fir-opt tool. Similar to mlir-opt for FIR.
It will be used in following patches to test fir opt and round-trip.

Reviewed By: schweitz, mehdi_amini

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

3 years ago[llvm-objcopy] preserve file ownership when overwritten by root
Jian Cai [Wed, 3 Feb 2021 02:47:03 +0000 (18:47 -0800)]
[llvm-objcopy] preserve file ownership when overwritten by root

As of binutils 2.36, GNU strip calls chown(2) for "sudo strip foo" and
"sudo strip foo -o foo", but no "sudo strip foo -o bar" or "sudo strip
foo -o ./foo". In other words, while "sudo strip foo -o bar" creates a
new file bar with root access, "sudo strip foo" will keep the owner and
group of foo unchanged. Currently llvm-objcopy and llvm-strip behave
differently, always changing the owner and gropu to root. The
discrepancy prevents Chrome OS from migrating to llvm-objcopy and
llvm-strip as they change file ownership and cause intended users/groups
to lose access when invoked by sudo with the following sequence
(recommended in man page of GNU strip).

1.<Link the executable as normal.>
1.<Copy "foo" to "foo.full">
1.<Run "strip --strip-debug foo">
1.<Run "objcopy --add-gnu-debuglink=foo.full foo">

This patch makes llvm-objcopy and llvm-strip follow GNU's behavior.

Link: crbug.com/1108880

3 years ago[OpenMP] NFC: fix test removing the target construct
AndreyChurbanov [Sat, 13 Feb 2021 01:49:52 +0000 (04:49 +0300)]
[OpenMP] NFC: fix test removing the target construct

3 years ago[OpenMP] fix test adding mapping of shared variables
AndreyChurbanov [Sat, 13 Feb 2021 01:13:54 +0000 (04:13 +0300)]
[OpenMP] fix test adding mapping of shared variables

3 years ago[SYCL] Ignore file-scope asm during device-side SYCL compilation.
Artur Gainullin [Thu, 11 Feb 2021 20:54:59 +0000 (12:54 -0800)]
[SYCL] Ignore file-scope asm during device-side SYCL compilation.

Reviewed By: bader, eandrews

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

3 years agoStore the LocationKind of an entry value buffer independently from the main LocationK...
Adrian Prantl [Thu, 11 Feb 2021 23:38:49 +0000 (15:38 -0800)]
Store the LocationKind of an entry value buffer independently from the main LocationKind (NFC)

This patch hides the logic for setting the location kind of an entry
value inside the begin/finalize/cancel functions. This way we get rid
the strange workaround that is currently in setLocation().

In the future, this will allow us to set the location kind of the
entry value independently from the location kind of the main
expression.

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

3 years ago[CSSPGO][llvm-profgen] Filter out the instructions without location info for symbolizer
wlei [Wed, 10 Feb 2021 18:04:39 +0000 (10:04 -0800)]
[CSSPGO][llvm-profgen] Filter out the instructions without location info for symbolizer

It appears some instructions doesn't have the debug location info and the symbolizer will return an empty call stack for them which will cause some crash later in profile unwinding. Actually we do not record the sample info for them, so this change just filter out those instruction.

As those instruction would appears at the begin and end of the instruction list, without them we need to add the boundary check for IP `advance` and `backward`.

Also for pseudo probe based profile, we actually don't need the symbolized location info, so here just change to use an empty stack for it. This could save half of the binary loading time.

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

3 years ago[NFC] Combine runNewPMPasses() and runNewPMCustomPasses()
Arthur Eubanks [Thu, 11 Feb 2021 22:37:29 +0000 (14:37 -0800)]
[NFC] Combine runNewPMPasses() and runNewPMCustomPasses()

I've already witnessed two separate changes missing runNewPMPasses()
because runNewPMCustomPasses() is so similar.

This cleans up some duplicated code.

Reviewed By: tejohnson

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

3 years ago[lldb] Fix up SysV ABI implementations after 057efa9916cdc354ef4653bcd128a578cc43125e
Benjamin Kramer [Sat, 13 Feb 2021 00:33:22 +0000 (01:33 +0100)]
[lldb] Fix up SysV ABI implementations after 057efa9916cdc354ef4653bcd128a578cc43125e

3 years ago[SystemZ] Fix vecintrin.h to not emit alignment hints in vec_xl/vec_xst.
Jonas Paulsson [Wed, 10 Feb 2021 00:30:05 +0000 (18:30 -0600)]
[SystemZ] Fix vecintrin.h to not emit alignment hints in vec_xl/vec_xst.

vec_xl() and vec_xst() should not emit alignment hints since they take a
scalar pointer and also add a byte offset if passed.

This patch uses memcpy to achieve the desired result.

Review: Ulrich Weigand

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

3 years agoSupport dereferencing a DWARF scalar stack value
Adrian Prantl [Thu, 11 Feb 2021 23:04:10 +0000 (15:04 -0800)]
Support dereferencing a DWARF scalar stack value

Swift async functions receive function arguments inside a
heap-allocated data structure, similar to how ObjC block captures or
C++ coroutine arguments are implement. In DWARF they are described
relative to an entry value that produces a pointer into that heap
object. At typical location looks like

DW_OP_entry_value [ DW_OP_reg14 ] DW_OP_deref DW_OP_plus_uconst 32 DW_OP_deref

This allows the unwinder (which has special ABI knowledge to restore
the contents of r14) to push the base address onto the stack thus
allowing the deref/offset operations to continue. The result of the
entry value is a scalar, because DW_OP_reg14 is a register location —
as it should be since we want to restore the pointer value contained
in r14 at the beginning of the function and not the historical memory
contents it was pointing to. The entry value should restore the
address, which is still valid, not the contents at function entry.

To make this work, we need to allow LLDB to dereference Scalar stack
results like load addresses, which is what this patch
does. Unfortunately it is difficult to test this in isolation, since
the DWARFExpression unit test doesn't have a process.

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