Haojian Wu [Thu, 17 Jun 2021 16:48:12 +0000 (18:48 +0200)]
fix an -Wunused-variable warning in release built, NFC
Sanjay Patel [Thu, 17 Jun 2021 15:57:44 +0000 (11:57 -0400)]
[InstSimplify] add tests for computeKnownBits of shift-with-bitcast op; NFC
Sanjay Patel [Wed, 16 Jun 2021 19:30:55 +0000 (15:30 -0400)]
[InstCombine][x86] add tests for complex vector shift value tracking; NFC
https://llvm.org/PR50123
Yabin Cui [Thu, 17 Jun 2021 16:25:58 +0000 (09:25 -0700)]
[compiler-rt][hwasan]: undefine new/delete operators with alignment on Android.
This is to fix build on Android. And we don't want to intercept more new/delete operators on Android.
Differential Revision: https://reviews.llvm.org/D104313
Kevin Athey [Thu, 17 Jun 2021 16:26:13 +0000 (09:26 -0700)]
Revert "Remove obsolete call to AsyncSignalSafeLazyInitiFakeStack."
This reverts commit
07481b37961f5b9a670c924367d2ead2e3c32b86.
Differential Revision: https://reviews.llvm.org/D104469
Saleem Abdulrasool [Wed, 26 May 2021 15:41:11 +0000 (15:41 +0000)]
RISCV: adjust handling of relocation emission for RISCV
This re-architects the RISCV relocation handling to bring the
implementation closer in line with the implementation in binutils. We
would previously aggressively resolve the relocation. With this
restructuring, we always will emit a paired relocation for any symbolic
difference of the type of S±T[±C] where S and T are labels and C is a
constant.
GAS has a special target hook controlled by `RELOC_EXPANSION_POSSIBLE`
which indicates that a fixup may be expanded into multiple relocations.
This is used by the RISCV backend to always emit a paired relocation -
either ADD[WIDTH] + SUB[WIDTH] for text relocations or SET[WIDTH] +
SUB[WIDTH] for a debug info relocation. Irrespective of whether linker
relaxation support is enabled, symbolic difference is always emitted as
a paired relocation.
This change also sinks the target specific behaviour down into the
target specific area rather than exposing it to the shared relocation
handling. In the process, we also sink the "special" handling for debug
information down into the RISCV target. Although this improves the path
for the other targets, this is not necessarily entirely ideal either.
The changes in the debug info emission could be done through another
type of hook as this functionality would be required by any other target
which wishes to do linker relaxation. However, as there are no other
targets in LLVM which currently do this, this is a reasonable thing to
do until such time as the code needs to be shared.
Improve the handling of the relocation (and add a reduced test case from
the Linux kernel) to ensure that we handle complex expressions for
symbolic difference. This ensures that we correct relocate symbols with
the adddends normalized and associated with the addition portion of the
paired relocation.
This change also addresses some review comments from Alex Bradbury about
the relocations meant for use in the DWARF CFA being named incorrectly
(using ADD6 instead of SET6) in the original change which introduced the
relocation type.
This resolves the issues with the symbolic difference emission
sufficiently to enable building the Linux kernel with clang+IAS+lld
(without linker relaxation).
Resolves PR50153, PR50156!
Fixes: ClangBuiltLinux/linux#1023, ClangBuiltLinux/linux#1143
Reviewed By: nickdesaulniers, maskray
Differential Revision: https://reviews.llvm.org/D103539
Stephen Tozer [Thu, 17 Jun 2021 14:21:10 +0000 (15:21 +0100)]
Reapply "[DebugInfo] Prevent non-determinism when updating DIArgList users of a value"
Reapply the commit which previously caused build failures due to the
mismatched template arguments between the return type and the returned
SmallVector.
This reverts commit
e8991caea8690ec2d17b0b7e1c29bf0da6609076.
Jez Ng [Thu, 17 Jun 2021 15:12:52 +0000 (11:12 -0400)]
[lld-macho] Avoid force-loading the same archive twice
We need to dedup archive loads (similar to what we do for dylib
loads).
I noticed this issue after building some Swift stuff that used
`-force_load_swift_libs`, as it caused some Swift archives to be loaded
many times.
Reviewed By: #lld-macho, thakis, MaskRay
Differential Revision: https://reviews.llvm.org/D104353
Haojian Wu [Thu, 17 Jun 2021 12:33:24 +0000 (14:33 +0200)]
[clangd] Explicitly fail if the file passed to --check is not valid.
Differential Revision: https://reviews.llvm.org/D104455
Kevin P. Neal [Thu, 17 Jun 2021 14:30:21 +0000 (10:30 -0400)]
[FPEnv][InstSimplify] Precommit tests for D103169.
In D103169 I'm adding to InstSimplify support for NaN to constrained
intrinsics that have a regular FP IR instruction counterpart. Precommit
the tests for clarity when that ticket lands.
Guillaume Chatelet [Thu, 17 Jun 2021 14:30:52 +0000 (14:30 +0000)]
[llvm] fix typo in comment
Stephen Tozer [Thu, 17 Jun 2021 14:20:06 +0000 (15:20 +0100)]
Revert "[DebugInfo] Prevent non-determinism when updating DIArgList users of a value"
Commit caused build errors on buildbots with [-Werror,-Wreturn-std-move]
enabled.
This reverts commit
fa1de88f81e9c6db5255ca7c4d0fd25606c5a054.
eahcmrh [Wed, 16 Jun 2021 21:35:19 +0000 (23:35 +0200)]
[Sema] Fix for PR50741
Fixed crash when doing pointer math on a void pointer.
Also, reworked test to use -verify rather than FileCheck.
Reviewed By: erichkeane
Differential Revision: https://reviews.llvm.org/D104424
Stephen Tozer [Thu, 17 Jun 2021 12:58:34 +0000 (13:58 +0100)]
[DebugInfo] Prevent non-determinism when updating DIArgList users of a value
This patch fixes an issue where builds of programs with multiple dbg.values
with DIArgList locations could have non-deterministic output. This issue
was caused by ReplaceableMetadataImpl::getAllArgListUsers, which
returned DIArgList pointers in a random order; the output of this
function would later be used to insert dbg.values, causing the order of
insertion to be non-deterministic. This patch changes getAllArgListUsers
to return pointers in a fixed order.
Differential Revision: https://reviews.llvm.org/D104105
Alexander Belyaev [Thu, 17 Jun 2021 14:04:06 +0000 (16:04 +0200)]
[mlir] Remove linalg.indexed_generic forward decl.
David Spickett [Thu, 17 Jun 2021 11:32:23 +0000 (12:32 +0100)]
[lldb] Remove redundant calls to set eReturnStatusFailed
This is part 2, covering the commands source.
Some uses remain where it's tricky to see what the
logic is or they are not used with AppendError.
Reviewed By: teemperor
Differential Revision: https://reviews.llvm.org/D104448
Sjoerd Meijer [Thu, 17 Jun 2021 12:50:15 +0000 (13:50 +0100)]
[FuncSpec] Precommit test: don't specialise funcs with NoDuplicate instrs. NFC.
Benjamin Kramer [Thu, 17 Jun 2021 13:02:00 +0000 (15:02 +0200)]
[mlir] Split things dependent on LLVM_DEBUG into a .cpp file
LLVM_DEBUG in headers is awkward, better avoid it. DEBUG_TYPE in a
header results in a lot of macro redefinition warnings.
Simon Pilgrim [Thu, 17 Jun 2021 12:17:51 +0000 (13:17 +0100)]
[X86] combineSelect - refactor MIN/MAX detection code to make it easier to add additional select(setcc,x,y) folds. NFCI.
I need to add some additional handling to address some of the regressions from D101074
Alexander Belyaev [Thu, 17 Jun 2021 12:35:26 +0000 (14:35 +0200)]
[mlir][linalg] Purge linalg.indexed_generic.
Differential Revision: https://reviews.llvm.org/D104449
Florian Hahn [Thu, 17 Jun 2021 12:08:53 +0000 (13:08 +0100)]
[X86] Check using default in test added in
0bd5bbb31e0345ae.
Make sure llvm-mc is invariant with respect to debug locations in the
test (checks update to use the -x86-pad-for-align default value)
Guillaume Chatelet [Thu, 10 Jun 2021 13:04:56 +0000 (13:04 +0000)]
[libc] Generate one benchmark per implementation
We now generate as many benchmarks as there are implementations.
Differential Revision: https://reviews.llvm.org/D102156
Florian Hahn [Thu, 17 Jun 2021 11:13:55 +0000 (12:13 +0100)]
[X86] Add test showing binary differences with -x86-pad-for-align.
This patch adds a test case showing how a single extra .loc can cause
binary differences when using -x86-pad-for-align=true.
The issue has been discussed in D94542, PR42138, PR48742.
Alex Zinenko [Thu, 17 Jun 2021 11:24:32 +0000 (13:24 +0200)]
[mlir] define a customized DEBUG_TYPE in InterfaceSupport.h
David Spickett [Wed, 16 Jun 2021 12:56:51 +0000 (13:56 +0100)]
[lldb] Remove redundant calls to set eReturnStatusFailed
Since https://reviews.llvm.org/D103701 AppendError<...>
sets this for you.
This change includes all of the non-command uses.
Some uses remain where it's either tricky to reason about
the logic, or they aren't paired with AppendError calls.
Reviewed By: teemperor
Differential Revision: https://reviews.llvm.org/D104379
David Spickett [Wed, 16 Jun 2021 13:39:50 +0000 (14:39 +0100)]
[lldb] Set return object failed status even if error string is empty
The idea is now that AppendError<...> will set eReturnStatusFailed
for you so you don't have to call SetStatus again.
Previously if the error message was empty, the status wouldn't
be set.
I don't think there are any sitautions where the message is in
fact empty but it potentially could be depending on where
we get the string from.
So let's set the status up front then return early if the message is empty.
Reviewed By: teemperor
Differential Revision: https://reviews.llvm.org/D104380
Alex Zinenko [Wed, 16 Jun 2021 16:53:21 +0000 (18:53 +0200)]
[mlir] Enable delayed registration of attribute/operation/type interfaces
This functionality is similar to delayed registration of dialect interfaces. It
allows external interface models to be registered before the dialect containing
the attribute/operation/type interface is loaded, or even before the context is
created.
Reviewed By: rriddle
Differential Revision: https://reviews.llvm.org/D104397
Florian Mayer [Wed, 16 Jun 2021 18:38:37 +0000 (19:38 +0100)]
[hwasan] Improve report for addresses within regions.
Before: ADDR is located -320 bytes to the right of 1072-byte region
After: ADDR is located 752 bytes inside 1072-byte region
Reviewed By: eugenis, walli99
Differential Revision: https://reviews.llvm.org/D104412
Florian Mayer [Tue, 15 Jun 2021 12:12:02 +0000 (13:12 +0100)]
[hwasan] Do not use short granule tags as poison tags.
Short granule tags as poison cause a UaF to read the referenced
memory to retrieve the tag, and means we do not detect the UaF
if the last granule's tag is still around.
This only increases the change of not catching a UaF from
0.39 % (1 / 256) to 0.42 % (1 / (256 - 17)).
Reviewed By: eugenis
Differential Revision: https://reviews.llvm.org/D104304
hyeongyukim [Thu, 17 Jun 2021 10:28:24 +0000 (19:28 +0900)]
[InstCombine] Fix miscompile on GEP+load to icmp fold (PR45210)
As noted in PR45210: https://bugs.llvm.org/show_bug.cgi?id=45210
...the bug is triggered as Eli say when sext(idx) * ElementSize overflows.
```
// assume that GV is an array of 4-byte elements
GEP = gep GV, 0, Idx // this is accessing Idx * 4
L = load GEP
ICI = icmp eq L, value
=>
ICI = icmp eq Idx, NewIdx
```
The foldCmpLoadFromIndexedGlobal function simplifies GEP+load operation to icmp.
And there is a problem because Idx * ElementSize can overflow.
Let's assume that the wanted value is at offset 0.
Then, there are actually four possible values for Idx to match offset 0: 0x00..00, 0x40..00, 0x80..00, 0xC0..00.
We should return true for all these values, but currently, the new icmp only returns true for 0x00..00.
This problem can be solved by masking off (trailing zeros of ElementSize) bits from Idx.
```
...
=>
Idx' = and Idx, 0x3F..FF
ICI = icmp eq Idx', NewIdx
```
Reviewed By: efriedma
Differential Revision: https://reviews.llvm.org/D99481
Jean Perier [Thu, 17 Jun 2021 10:40:19 +0000 (12:40 +0200)]
[flang] preserve symbol in DescriptorInquiry
Do not use ultimate symbols in DescriptorInquiry. Using the ultimate
symbol may lead to issues later for at least two reasons:
- The original symbols may have volatile/asynchronous attributes that
the ultimate may not have. Later phases working on the DescriptorInquiry
would then not apply potential care required by these attributes.
- HostAssociatedDetails symbols are used by OpenMP for symbols with
special OpenMP attributes inside OpenMP region (e.g variables with
private attribute), so it is very important to preserve this
aspect in the DescriptorInquiry, that would otherwise apply on the
symbol outside of the region.
Differential Revision: https://reviews.llvm.org/D104385
Florian Mayer [Thu, 17 Jun 2021 10:17:11 +0000 (11:17 +0100)]
[NFC] test commit, fix namespace ending comment.
Igor Kudrin [Thu, 17 Jun 2021 10:08:13 +0000 (17:08 +0700)]
[ELF] Restore arm-branch.s test
After D77330, the comments are inconsistent with the disassembled code.
As the value of `far` has been changed, a thunk to reach it is now
generated, and target addresses of branch instructions are different
from what was initially expected.
The patch fixes that and makes the test closer to what it was originally.
Differential Revision: https://reviews.llvm.org/D104286
Martin Storsjö [Wed, 16 Jun 2021 13:56:33 +0000 (16:56 +0300)]
[LLD] [COFF] Remove a stray duplicate comment. NFC.
The following class isn't part of the export table; there's a
second correctly placed comment about the things that actually
belong to the export table.
Martin Storsjö [Mon, 14 Jun 2021 10:21:54 +0000 (13:21 +0300)]
[llvm-dlltool] Imply the target arch from a tool triple prefix
Also use the default LLVM target as default for dlltool. This
matches how GNU dlltool behaves; it is compiled with one default
target, which is used if no option is provided.
Extend the anonymous namespace in the implementation file instead
of using static functions.
Based on a patch by Mateusz Mikuła.
The effect of the default LLVM target, if neither the -m option
nor a tool triple prefix is provided, isn't tested, as we can't
make assumptions about what it is set to.
(We could make the default be forced to one of the four supported
architectures if the default triple is another arch, and then just
test that llvm-dlltool without an -m option is able to produce an
import library, without checking the actual architecture though.)
Differential Revision: https://reviews.llvm.org/D104212
Martin Storsjö [Mon, 14 Jun 2021 10:28:33 +0000 (13:28 +0300)]
[llvm-dlltool] [test] Add a testcase for all machine option types. NFC.
The existing tests only test that some options (but not e.g. arm)
are accepted, but it doesn't test their functional effect of
affecting the generated object files.
Differential Revision: https://reviews.llvm.org/D104215
Martin Storsjö [Mon, 14 Jun 2021 10:25:28 +0000 (13:25 +0300)]
[llvm-dlltool] [test] Remove superfluous --coff-exports option to llvm-readobj. NFC.
The --coff-exports option to llvm-readobj prints the exported symbols
from a DLL/EXE, it doesn't do anything with regards to an import
library.
Differential Revision: https://reviews.llvm.org/D104214
Martin Storsjö [Mon, 14 Jun 2021 10:23:01 +0000 (13:23 +0300)]
[llvm-dlltool] [test] Test both short and long forms of options. NFC.
Differential Revision: https://reviews.llvm.org/D104213
Martin Storsjö [Wed, 16 Jun 2021 12:22:28 +0000 (15:22 +0300)]
[libcxx] Fix a case of -Wundef warnings regarding _POSIX_TIMERS
Differential Revision: https://reviews.llvm.org/D104372
Alex Zinenko [Tue, 15 Jun 2021 13:27:01 +0000 (15:27 +0200)]
[mlir] separable registration of operation interfaces
This is similar to attribute and type interfaces and mostly the same mechanism
(FallbackModel / ExternalModel, ODS generation). There are minor differences in
how the concept-based polymorphism is implemented for operations that are
accounted for by ODS backends, and this essentially adds a test and exposes the
API.
Reviewed By: rriddle
Differential Revision: https://reviews.llvm.org/D104294
Sjoerd Meijer [Wed, 16 Jun 2021 13:26:57 +0000 (14:26 +0100)]
[FuncSpec] Don't specialise functions with attribute NoDuplicate.
Differential Revision: https://reviews.llvm.org/D104378
Fraser Cormack [Mon, 14 Jun 2021 10:00:25 +0000 (11:00 +0100)]
[RISCV][VP] Lower FP VP ISD nodes to RVV instructions
With the exception of `frem`, this patch supports the current set of VP
floating-point binary intrinsics by lowering them to to RVV instructions. It
does so by using the existing `RISCVISD *_VL` custom nodes as an intermediate
layer. Both scalable and fixed-length vectors are supported by using this
method.
The `frem` node is unsupported due to a lack of available instructions. For
fixed-length vectors we could scalarize but that option is not (currently)
available for scalable-vector types. The support is intentionally left out so
it equivalent for both vector types.
The matching of vector/scalar forms is currently lacking, as scalable vector
types do not lower to the custom `VFMV_V_F_VL` node. We could either make
floating-point scalable vector splats lower to this node, or support the
matching of multiple kinds of splat via a `ComplexPattern`, much like we do for
integer types.
Reviewed By: rogfer01
Differential Revision: https://reviews.llvm.org/D104237
Balázs Kéri [Thu, 17 Jun 2021 07:12:36 +0000 (09:12 +0200)]
[clang][AST] Set correct DeclContext in ASTImporter lookup table for template params.
Template parameters are created in ASTImporter with the translation unit as DeclContext.
The DeclContext is later updated (by the create function of template classes).
ASTImporterLookupTable was not updated after these changes of the DC. The patch
adds update of the DeclContext in ASTImporterLookupTable.
Reviewed By: martong
Differential Revision: https://reviews.llvm.org/D103792
David Green [Thu, 17 Jun 2021 08:53:33 +0000 (09:53 +0100)]
[InterleaveAccess] Copy fast math flags when adjusting binary operators in interleave access pass
The Interleave Access pass will convert shuffle(binop(load, load)) to
binop(shuffle(load), shuffle(load)), in order to create more
interleaving load patterns (VLD2/3/4) that might have been messed up by
instcombine. As shown in D104247 we were missing copying IR flags to the
new instruction though, which should just be kept the same as the
original instruction.
Differential Revision: https://reviews.llvm.org/D104255
Tomasz Miąsko [Thu, 17 Jun 2021 08:30:04 +0000 (10:30 +0200)]
[Demangle] Support Rust v0 mangling scheme in llvm::demangle
The llvm::demangle is currently used by llvm-objdump and llvm-readobj,
so this effectively adds support for Rust v0 mangling to those
applications.
Reviewed By: dblaikie
Differential Revision: https://reviews.llvm.org/D104340
Florian Hahn [Thu, 17 Jun 2021 07:53:36 +0000 (08:53 +0100)]
[VPlan] Support PHIs as LastInst when inserting scalars in ::get().
At the moment, we create insertelement instructions directly after
LastInst when inserting scalar values in a vector in
VPTransformState::get.
This results in invalid IR when LastInst is a phi, followed by another
phi. In that case, the new instructions should be inserted just after
the last PHI node in the block.
At the moment, I don't think the problematic case can be triggered, but
it can happen once predicate regions are merged and multiple
VPredInstPHI recipes are in the same block (D100260).
Reviewed By: Ayal
Differential Revision: https://reviews.llvm.org/D104188
Yilong Guo [Thu, 17 Jun 2021 08:33:00 +0000 (09:33 +0100)]
[Format] Fix incorrect pointer/reference detection
https://llvm.org/PR50568
When an overloaded operator is called, its argument must be an
expression.
Before:
void f() { a.operator()(a *a); }
After:
void f() { a.operator()(a * a); }
Reviewed By: HazardyKnusperkeks, curdeius, MyDeveloperDay
Differential Revision: https://reviews.llvm.org/D103678
Kirstóf Umann [Fri, 21 May 2021 12:02:03 +0000 (14:02 +0200)]
[analyzer] Make checker silencing work for non-pathsensitive bug reports
D66572 separated BugReport and BugReporter into basic and path sensitive
versions. As a result, checker silencing, which worked deep in the path
sensitive report generation facilities became specific to it. DeadStoresChecker,
for instance, despite being in the static analyzer, emits non-pathsensitive
reports, and was impossible to silence.
This patch moves the corresponding code before the call to the virtual function
generateDiagnosticForConsumerMap (which is overriden by the specific kinds of
bug reporters). Although we see bug reporting as relatively lightweight compared
to the analysis, this will get rid of several steps we used to throw away.
Quoting from D65379:
At a very high level, this consists of 3 steps:
For all BugReports in the same BugReportEquivClass, collect all their error
nodes in a set. With that set, create a new, trimmed ExplodedGraph whose leafs
are all error nodes.
Until a valid report is found, construct a bug path, which is yet another
ExplodedGraph, that is linear from a given error node to the root of the graph.
Run all visitors on the constructed bug path. If in this process the report got
invalidated, start over from step 2.
Checker silencing used to kick in after all of these. Now it does before any of
them :^)
Differential Revision: https://reviews.llvm.org/D102914
Change-Id: Ice42939304516f2bebd05a1ea19878b89c96a25d
Alex Zinenko [Wed, 16 Jun 2021 14:31:17 +0000 (16:31 +0200)]
[mlir] ODS: emit interface traits outside of the interface class
ODS currently emits the interface trait class as a nested class inside the
interface class. As an unintended consequence, the default implementations of
interface methods have implicit access to static fields of the interface class,
e.g. those declared in `extraClassDeclaration`, including private methods (!),
or in the parent class. This may break the use of default implementations for
external models, which are not defined in the interface class, and generally
complexifies the abstraction.
Emit intraface traits outside of the interface class itself to avoid accidental
implicit visibility. Public static fields can still be accessed via explicit
qualification with a class name, e.g., `MyOpInterface::staticMethod()` instead
of `staticMethod`.
Update the documentation to clarify the role of `extraClassDeclaration` in
interfaces.
Reviewed By: rriddle
Differential Revision: https://reviews.llvm.org/D104384
Raphael Isemann [Thu, 17 Jun 2021 07:52:08 +0000 (09:52 +0200)]
[lldb] Skip variant/optional libc++ tests for Clang 5/6
Clang 5 and Clang 6 can no longer parse newer versions of libc++. As we can't
specify the specific libc++ version in the decorator, let's only allow Clang
versions that can parse all currently available libc++ versions.
Bjorn Pettersson [Fri, 26 Mar 2021 20:02:26 +0000 (21:02 +0100)]
Update @llvm.powi to handle different int sizes for the exponent
This can be seen as a follow up to commit
0ee439b705e82a4fe20e2,
that changed the second argument of __powidf2, __powisf2 and
__powitf2 in compiler-rt from si_int to int. That was to align with
how those runtimes are defined in libgcc.
One thing that seem to have been missing in that patch was to make
sure that the rest of LLVM also handle that the argument now depends
on the size of int (not using the si_int machine mode for 32-bit).
When using __builtin_powi for a target with 16-bit int clang crashed.
And when emitting libcalls to those rtlib functions, typically when
lowering @llvm.powi), the backend would always prepare the exponent
argument as an i32 which caused miscompiles when the rtlib was
compiled with 16-bit int.
The solution used here is to use an overloaded type for the second
argument in @llvm.powi. This way clang can use the "correct" type
when lowering __builtin_powi, and then later when emitting the libcall
it is assumed that the type used in @llvm.powi matches the rtlib
function.
One thing that needed some extra attention was that when vectorizing
calls several passes did not support that several arguments could
be overloaded in the intrinsics. This patch allows overload of a
scalar operand by adding hasVectorInstrinsicOverloadedScalarOpd, with
an entry for powi.
Differential Revision: https://reviews.llvm.org/D99439
Kadir Cetinkaya [Mon, 31 May 2021 06:24:06 +0000 (08:24 +0200)]
[clangd] Fix feature modules to drop diagnostics
Ignored diagnostics were only checked after level adjusters and assumed
it would stay the same for the rest. But it can also be modified by
FeatureModules.
Differential Revision: https://reviews.llvm.org/D103387
Kadir Cetinkaya [Fri, 19 Mar 2021 09:01:14 +0000 (10:01 +0100)]
[clangd] Use command line adjusters for inserting compile flags
This fixes issues with `--` in the compile flags.
Fixes https://github.com/clangd/clangd/issues/632.
Differential Revision: https://reviews.llvm.org/D99523
Kristof Beyls [Tue, 15 Jun 2021 12:37:08 +0000 (13:37 +0100)]
Avoid unnecessary AArch64 DSB in __clear_cache in some situations.
The dsb after instruction cache invalidation only needs to be executed
if any instruction cache invalidation did happen.
Without this change, if the CTR_EL0.DIC bit indicates that instruction
cache invalidation is not needed, __clear_cache would execute two dsb
instructions in a row; with the second one being unnecessary.
Differential Revision: https://reviews.llvm.org/D104371
MaheshRavishankar [Thu, 17 Jun 2021 05:12:16 +0000 (22:12 -0700)]
[mlir] Move `memref.dim` canonicalization using `InferShapedTypeOpInterface` to a separate pass.
Based on dicussion in
[this](https://llvm.discourse.group/t/remove-canonicalizer-for-memref-dim-via-shapedtypeopinterface/3641)
thread the pattern to resolve the `memref.dim` of a value that is a
result of an operation that implements the
`InferShapedTypeOpInterface` is moved to a separate pass instead of
running it as a canonicalization pass. This allows shape resolution to
happen when explicitly required, instead of automatically through a
canonicalization.
Differential Revision: https://reviews.llvm.org/D104321
Lang Hames [Wed, 16 Jun 2021 11:58:26 +0000 (21:58 +1000)]
[ORC] Switch from uint8_t to char buffers for TargetProcessControl::runWrapper.
This matches WrapperFunctionResult's char buffer, cutting down on the number of
pointer casts needed.
Mehdi Amini [Thu, 17 Jun 2021 01:28:17 +0000 (01:28 +0000)]
Improve error reporting on pass registration collision (NFC)
Differential Revision: https://reviews.llvm.org/D104430
Xuanda Yang [Thu, 17 Jun 2021 02:13:15 +0000 (10:13 +0800)]
[lld][MachO] Sort symbols in parallel in -map
source: https://bugs.llvm.org/show_bug.cgi?id=50689
When writing a map file, sort symbols in parallel using parallelSort.
Use address name to break ties if two symbols have the same address.
Reviewed By: thakis, int3
Differential Revision: https://reviews.llvm.org/D104346
Haruki Imai [Thu, 17 Jun 2021 01:37:32 +0000 (18:37 -0700)]
[mlir] Fixed dynamic operand storage on big-endian machines.
Many tests fails by D101969 (https://reviews.llvm.org/D101969)
on big-endian machines. This patch changes bit order of
TrailingOperandStorage in big-endian machines. This patch
works on System Z (Triple = "s390x-ibm-linux", CPU = "z14").
Signed-off-by: Haruki Imai <imaihal@jp.ibm.com>
Reviewed By: rriddle
Differential Revision: https://reviews.llvm.org/D104225
Kevin Athey [Wed, 16 Jun 2021 05:54:04 +0000 (22:54 -0700)]
Remove obsolete call to AsyncSignalSafeLazyInitiFakeStack.
Code was originally added for Myriad D46626 which was removed
with D104279.
related to: https://github.com/google/sanitizers/issues/1394
Reviewed By: vitalybuka, morehouse
Differential Revision: https://reviews.llvm.org/D104419
River Riddle [Thu, 17 Jun 2021 01:21:47 +0000 (18:21 -0700)]
[mlir-vscode] Add a link to mlir.llvm.org at the top of the vscode extension doc
River Riddle [Thu, 17 Jun 2021 01:21:39 +0000 (18:21 -0700)]
[mlir-lsp-server] Add an explicit blurb on where to send code contributions.
When the vscode extension is published, it may be unclear how to contribute improvements to the extension. This revision makes it clear that contributions should follow the traditional LLVM guidelines.
Adrian Prantl [Thu, 17 Jun 2021 01:17:58 +0000 (18:17 -0700)]
Relax language comparison when matching up C++ forward decls with definitions
when dealing with -gmodules debug info.
This fixes the bot failures on Darwin.
A recent clang change (presumably https://reviews.llvm.org/D104291)
introduced a bug where .pcm files would identify themselves as
DW_LANG_C_plus_plus, but the .o that references them would identify as
DW_LANG_C_plus_plus_14. While that bug needs to be fixed, too, it
shows that the current strict comparison also isn't meaningful.
rdar://
79423225
peter klausler [Tue, 15 Jun 2021 22:17:16 +0000 (15:17 -0700)]
[flang] Complain about more cases of calls to insufficiently defined procedures
When a function is called in a specification expression, it must be
sufficiently defined, and cannot be a recursive call (10.1.11(5)).
The best fix for this is to change the contract for the procedure
characterization infrastructure to catch and report such errors,
and to guarantee that it does emit errors on failed characterizations.
Some call sites were adjusted to avoid cascades.
Differential Revision: https://reviews.llvm.org/D104330
River Riddle [Thu, 17 Jun 2021 00:58:24 +0000 (17:58 -0700)]
[mlir-lsp-server][Docs] Tweak the documentation for the visual studio code extension
This revision updates the feature set, and cleans up the contributing section a little.
Mehdi Amini [Thu, 17 Jun 2021 00:22:35 +0000 (00:22 +0000)]
Improve error message on pass registration failures to include the faulty pass name
Matheus Izvekov [Sun, 6 Jun 2021 01:20:25 +0000 (03:20 +0200)]
[clang] use correct builtin type for defaulted comparison analyzer
Fixes PR50591.
When analyzing classes with members which have user-defined conversion
operators to builtin types, the defaulted comparison analyzer was
picking the member type instead of the type for the builtin operator
which was selected as the best match.
This could either result in wrong comparison category being selected,
or a crash when runtime checks are enabled.
Signed-off-by: Matheus Izvekov <mizvekov@gmail.com>
Reviewed By: rsmith
Differential Revision: https://reviews.llvm.org/D103760
Stanislav Mekhanoshin [Wed, 16 Jun 2021 22:38:39 +0000 (15:38 -0700)]
[AMDGPU] Fixed constexpr expansion to handle multiple uses
Recently added convertConstantExprsToInstructions() does not handle
a case when a same ConstantExpr used multiple times in the same
instruction. A first use is replaced and the rest of the uses in the
instruction are replaced as well with the replaceUsesOfWith(). Then
function attempts to replace a constant already destroyed.
So far this interface is only used by the AMDGPU BE.
Differential Revision: https://reviews.llvm.org/D104425
Matheus Izvekov [Fri, 19 Mar 2021 02:32:06 +0000 (03:32 +0100)]
[clang] NRVO: Improvements and handling of more cases.
This expands NRVO propagation for more cases:
Parse analysis improvement:
* Lambdas and Blocks with dependent return type can have their variables
marked as NRVO Candidates.
Variable instantiation improvements:
* Fixes crash when instantiating NRVO variables in Blocks.
* Functions, Lambdas, and Blocks which have auto return type have their
variables' NRVO status propagated. For Blocks with non-auto return type,
as a limitation, this propagation does not consider the actual return
type.
This also implements exclusion of VarDecls which are references to
dependent types.
Signed-off-by: Matheus Izvekov <mizvekov@gmail.com>
Reviewed By: Quuxplusone
Differential Revision: https://reviews.llvm.org/D99696
Mehdi Amini [Wed, 16 Jun 2021 23:42:13 +0000 (23:42 +0000)]
Migrate MLIR test passes to the new registration API
Make sure they all define getArgument()/getDescription().
Depends On D104421
Differential Revision: https://reviews.llvm.org/D104426
Mehdi Amini [Wed, 16 Jun 2021 23:41:23 +0000 (23:41 +0000)]
Decouple registring passes from specifying argument/description
This patch changes the (not recommended) static registration API from:
static PassRegistration<MyPass> reg("my-pass", "My Pass Description.");
to:
static PassRegistration<MyPass> reg;
And the explicit registration from:
void registerPass("my-pass", "My Pass Description.",
[] { return createMyPass(); });
To:
void registerPass([] { return createMyPass(); });
It is expected that Pass implementations overrides the getArgument() method
instead. This will ensure that pipeline description can be printed and parsed
back.
Differential Revision: https://reviews.llvm.org/D104421
peter klausler [Wed, 16 Jun 2021 23:37:20 +0000 (16:37 -0700)]
[flang] Fix ARM/POWER test failure (folding20.f90)
Recent code for folding MINVAL() didn't allow for architectures
whose C/C++ char type is unsigned, so the value of the maximum
Fortran character was incorrect. This was caught by the
folding20.f90 test. The fix is to avoid numeric_limits<> and
use hard values for max signed integers of various character kinds.
Pushing into llvm-project/main to restore ARM/POWER buildbots.
Ben Shi [Wed, 16 Jun 2021 23:02:33 +0000 (07:02 +0800)]
[RISCV][test] Add new tests of SH*ADD in the zba extension
These tests will show the following optimization by future patches.
Rx + Ry * 6 => (SH1ADD (SH2ADD Rx, Ry), Ry)
Rx + Ry * 10 => (SH1ADD (SH3ADD Rx, Ry), Ry)
Rx + Ry * 12 => (SH2ADD (SH3ADD Rx, Ry), Ry)
Reviewed By: MaskRay
Differential Revision: https://reviews.llvm.org/D104210
Robert David [Wed, 16 Jun 2021 22:31:20 +0000 (15:31 -0700)]
[mlir] Make Type::print and Type::dump const
Nico Weber [Wed, 16 Jun 2021 22:04:46 +0000 (18:04 -0400)]
[gn build] (manually) port
f9aba9a5afe
peter klausler [Tue, 15 Jun 2021 22:19:51 +0000 (15:19 -0700)]
[flang] Implement runtime for IALL & IANY
We had IPARITY (xor-reduction) but I missed IALL (and)
and IANY (or).
Differential Revision: https://reviews.llvm.org/D104339
Joachim Meyer [Thu, 6 May 2021 18:18:11 +0000 (20:18 +0200)]
Use `-cfg-func-name` value as filter for `-view-cfg`, etc.
Currently the value is only used when calling `F->viewCFG()` which is missing out on its potential and usefulness.
So I added the check to the printer passes as well.
Reviewed By: MaskRay
Differential Revision: https://reviews.llvm.org/D102011
Adrian Prantl [Wed, 16 Jun 2021 21:26:02 +0000 (14:26 -0700)]
Move the definition of LLVM_SUPPORT_XCODE_SIGNPOSTS into llvm-config.h
since it is now used by a public header file (Signposts.h).
This fixes the standalone LLDB build.
peter klausler [Tue, 15 Jun 2021 22:19:18 +0000 (15:19 -0700)]
[flang] Use a "double-double" accumulator in SUM
Use a "double-double" accumulator, a/k/a Kahan summation,
in the SUM intrinsic in the runtime for real & complex.
This seems to be the best-recommended technique for reducing
error, as opposed to the initial implementation of SUM's
distinct accumulators for positive and negative items.
Differential Revision: https://reviews.llvm.org/D104338
Kostya Kortchinsky [Wed, 16 Jun 2021 17:51:51 +0000 (10:51 -0700)]
[scudo] Ensure proper allocator alignment in TSD test
The `MockAllocator` used in `ScudoTSDTest` wasn't allocated
properly aligned, which resulted in the `TSDs` of the shared
registry not being aligned either. This lead to some failures
like: https://reviews.llvm.org/D103119#2822008
This changes how the `MockAllocator` is allocated, same as
Vitaly did in the combined tests, properly aligning it, which
results in the `TSDs` being aligned as well.
Add a `DCHECK` in the shared registry to check that it is.
Differential Revision: https://reviews.llvm.org/D104402
peter klausler [Tue, 15 Jun 2021 22:18:41 +0000 (15:18 -0700)]
[flang] Fold MAXVAL & MINVAL
Implement constant folding for the reduction transformational
intrinsic functions MAXVAL and MINVAL.
In anticipation of more folding work to follow, with (I hope)
some common infrastructure, these two have been implemented in a
new header file.
Differential Revision: https://reviews.llvm.org/D104337
Andrzej Warzynski [Wed, 16 Jun 2021 21:00:13 +0000 (21:00 +0000)]
[flang][driver] Add missing `! REQUIRES` LIT directive
The test added in https://reviews.llvm.org/D104305 will only work with
the new driver and should be marked as such.
Sending this without a review as it's fairly straightforward and fixes
test failures for developers that don't want to build the new driver.
peter klausler [Tue, 15 Jun 2021 22:18:01 +0000 (15:18 -0700)]
[flang] Cope with errors with array constructors
When a program attempts to put something like a subprogram
into an array constructor, emit an error rather than crashing.
Differential Revision: https://reviews.llvm.org/D104336
Terry Wilmarth [Fri, 21 May 2021 22:06:09 +0000 (17:06 -0500)]
[OpenMP] Add Two-level Distributed Barrier
Two-level distributed barrier is a new experimental barrier designed
for Intel hardware that has better performance in some cases than the
default hyper barrier.
This barrier is designed to handle fine granularity parallelism where
barriers are used frequently with little compute and memory access
between barriers. There is no need to use it for codes with few
barriers and large granularity compute, or memory intensive
applications, as little difference will be seen between this barrier
and the default hyper barrier. This barrier is designed to work
optimally with a fixed number of threads, and has a significant setup
time, so should NOT be used in situations where the number of threads
in a team is varied frequently.
The two-level distributed barrier is off by default -- hyper barrier
is used by default. To use this barrier, you must set all barrier
patterns to use this type, because it will not work with other barrier
patterns. Thus, to turn it on, the following settings are required:
KMP_FORKJOIN_BARRIER_PATTERN=dist,dist
KMP_PLAIN_BARRIER_PATTERN=dist,dist
KMP_REDUCTION_BARRIER_PATTERN=dist,dist
Branching factors (set with KMP_FORKJOIN_BARRIER, KMP_PLAIN_BARRIER,
and KMP_REDUCTION_BARRIER) are ignored by the two-level distributed
barrier.
Differential Revision: https://reviews.llvm.org/D103121
Yitzhak Mandelbaum [Wed, 16 Jun 2021 14:52:13 +0000 (14:52 +0000)]
[libTooling] Change `access` stencil to recognize use of `operator*`.
Currently, `access` doesn't recognize a dereferenced smart pointer. So,
`access(e, "field")` where `e = *x`, yields:
* `x->field`, for normal-pointer x,
* `(*x).field`, for smart-pointer x.
This patch normalizes handling of smart pointer to match normal pointer, when
the smart pointer type supports `->`.
Differential Revision: https://reviews.llvm.org/D104390
Gus Smith [Wed, 16 Jun 2021 20:04:09 +0000 (13:04 -0700)]
Add sparse matrix multiplication integration test
Adds an integration test for the SPMM (sparse matrix multiplication) kernel, which multiplies a sparse matrix by a dense matrix, resulting in a dense matrix. This is just a simple modification on the existing matrix-vector multiplication kernel.
Reviewed By: aartbik
Differential Revision: https://reviews.llvm.org/D104334
Yitzhak Mandelbaum [Wed, 16 Jun 2021 14:47:18 +0000 (14:47 +0000)]
[ASTMatchers] Fix bug in `hasUnaryOperand`
Currently, `hasUnaryOperand` fails for the overloaded `operator*`. This patch fixes the bug and
adds tests for this case.
Differential Revision: https://reviews.llvm.org/D104389
Uday Bondhugula [Thu, 27 May 2021 19:38:30 +0000 (01:08 +0530)]
[MLIR] Make store to load fwd condition less conservative
Make store to load fwd condition for -memref-dataflow-opt less
conservative. Post dominance info is not really needed. Add additional
check for common cases.
Differential Revision: https://reviews.llvm.org/D104174
Prashant Kumar [Wed, 16 Jun 2021 19:45:35 +0000 (01:15 +0530)]
[MLIR] Fix affine parallelize pass.
To control the number of outer parallel loops, we need to process the
outer loops first and hence pre-order walk fixes the issue.
Reviewed By: bondhugula
Differential Revision: https://reviews.llvm.org/D104361
Jacques Pienaar [Wed, 16 Jun 2021 19:53:21 +0000 (12:53 -0700)]
Add hook for dialect specializing processing blocks post inlining calls
This allows for dialects to do different post-processing depending on operations with the inliner (my use case requires different attribute propagation rules depending on call op). This hook runs before the regular processInlinedBlocks method.
Differential Revision: https://reviews.llvm.org/D104399
peter klausler [Tue, 15 Jun 2021 22:15:34 +0000 (15:15 -0700)]
[flang] Fix crashes on calls to non-procedures
When a procedure reference is attempted to an entity that just
isn't a procedure, say so.
Differential Revision: https://reviews.llvm.org/D104329
Min-Yih Hsu [Wed, 16 Jun 2021 17:34:57 +0000 (10:34 -0700)]
[MCA] Anchoring the vtable of CustomBehaviour
Put the dtor of mca::CustomBehaviour into the cpp file to avoid
undefined vtable when linking libLLVMMCACustomBehaviourAMDGPU as shared
library.
Differential Revision: https://reviews.llvm.org/D104401
Mehdi Amini [Wed, 16 Jun 2021 19:42:41 +0000 (19:42 +0000)]
Use early exist and simplify a condition in Block SuccessorRange (NFC)
Mehdi Amini [Wed, 16 Jun 2021 18:59:43 +0000 (18:59 +0000)]
Fix verifier crashing on some invalid IR
In a region with multiple blocks the verifier will try to look for
dominance and may get successor list for blocks, even though a block
may be empty or does not end with a terminator.
Differential Revision: https://reviews.llvm.org/D104411
Eli Friedman [Wed, 16 Jun 2021 19:30:45 +0000 (12:30 -0700)]
[NFC][ScalarEvolution] Refactor createNodeForSelectOrPHI
In preparation for D103660.
peter klausler [Tue, 15 Jun 2021 22:14:16 +0000 (15:14 -0700)]
[flang] Don't crash on some bogus expressions
Recover more gracefully from user errors in expressions.
Differential Revision: https://reviews.llvm.org/D104326
Jez Ng [Wed, 16 Jun 2021 19:23:07 +0000 (15:23 -0400)]
[lld-macho] Put DATA_IN_CODE immediately after FUNCTION_STARTS
codesign checks for this.
Reviewed By: #lld-macho, thakis
Differential Revision: https://reviews.llvm.org/D104354
Jez Ng [Wed, 16 Jun 2021 19:23:06 +0000 (15:23 -0400)]
[lld-macho] Handle multiple LC_LINKER_OPTIONs
We previously only parsed the first one.
Reviewed By: #lld-macho, thakis
Differential Revision: https://reviews.llvm.org/D104352
Jez Ng [Wed, 16 Jun 2021 19:23:04 +0000 (15:23 -0400)]
[lld-macho][nfc] Put back shouldOmitFromOutput() asserts
I removed them in rG5de7467e982 but @thakis pointed out that
they were useful to keep, so here they are again. I've also converted
the `!isCoalescedWeak()` asserts into `!shouldOmitFromOutput()` asserts,
since the latter check subsumes the former.
Reviewed By: #lld-macho, thakis
Differential Revision: https://reviews.llvm.org/D104169
Fangrui Song [Wed, 16 Jun 2021 19:09:49 +0000 (12:09 -0700)]
[llvm-objcopy][MachO] Copy LC_LINKER_OPTIMIZATION_HINT
This fixes `error: unsupported load command (cmd=0x2e)`