Benjamin Kramer [Tue, 24 Mar 2020 12:43:00 +0000 (13:43 +0100)]
Make helpers static. NFC.
Simon Pilgrim [Tue, 24 Mar 2020 11:40:02 +0000 (11:40 +0000)]
Fix unused variable warning
Russell Gallop [Tue, 24 Mar 2020 11:43:51 +0000 (11:43 +0000)]
Increase DIAG_SIZE_DRIVER as we're close to hitting it
Simon Tatham [Tue, 24 Mar 2020 11:37:51 +0000 (11:37 +0000)]
[ReleaseNotes,ARM] MVE intrinsics are all implemented!
Summary:
The next release of LLVM will support the full ACLE spec for MVE intrinsics,
so it's worth saying so in the release notes.
Reviewers: kristof.beyls
Reviewed By: kristof.beyls
Subscribers: cfe-commits, hans, dmgreen, llvm-commits
Tags: #llvm, #clang
Differential Revision: https://reviews.llvm.org/D76513
Lorenz Junglas [Tue, 24 Mar 2020 11:30:51 +0000 (12:30 +0100)]
[clangd] Change line break behaviour for hoverinfo
`parseDocumentation` retains hard line breaks and removes soft line
breaks inside documentation comments.
Wether a line break is hard or soft is determined by the following rules
(some of which have been discussed in
https://github.com/clangd/clangd/issues/95):
Line breaks that are preceded by a punctuation are retained
Line breaks that are followed by "interesting characters" (e.g. Markdown
syntax, doxygen commands) are retained
All other line breaks are removed
Related issue: https://github.com/clangd/clangd/issues/95
Differential Revision: https://reviews.llvm.org/D76094
Raphael Isemann [Tue, 24 Mar 2020 11:30:01 +0000 (12:30 +0100)]
[lldb][NFC] Mark GetNextPersistentVariableName as overriden to silence warning
This was triggering -Winconsistent-missing-override warnings.
Sam Parker [Tue, 24 Mar 2020 11:07:20 +0000 (11:07 +0000)]
[NFC][ARM] Add missing tests
Simon Pilgrim [Tue, 24 Mar 2020 10:59:08 +0000 (10:59 +0000)]
[UpdateTestChecks] Use common ir function name matcher and extend to accept periods in names (PR37586)
Remove the local versions of the IR_FUNCTION_RE matcher (they weren't doing anything different), and ensure all the function name matchers accept '.' and '-'.
We don't need to use '\.' inside python regex sets either, or '\-' as long as thats at the end of the set.
Dmitry Vyukov [Tue, 24 Mar 2020 09:27:08 +0000 (10:27 +0100)]
tsan: Adding releaseAcquire() to ThreadClock
realeaseAcquire() is a new function added to TSan in support of the Go data-race detector.
It's semantics is:
void ThreadClock::releaseAcquire(SyncClock *sc) const {
for (int i = 0; i < kMaxThreads; i++) {
tmp = clock[i];
clock[i] = max(clock[i], sc->clock[i]);
sc->clock[i] = tmp;
}
}
For context see: https://go-review.googlesource.com/c/go/+/220419
Reviewed-in: https://reviews.llvm.org/D76322
Author: dfava (Daniel Fava)
Momchil Velikov [Tue, 24 Mar 2020 09:32:51 +0000 (09:32 +0000)]
[ARM][CMSE] Implement CMSE attributes
This patch adds CMSE attributes `cmse_nonsecure_call` and
`cmse_nonsecure_entry`. As usual, specification is available here:
https://developer.arm.com/docs/ecm0359818/latest
Patch by Javed Absar, Bradley Smith, David Green, Momchil Velikov,
possibly others.
Differential Revision: https://reviews.llvm.org/D71129
David Green [Tue, 24 Mar 2020 08:47:50 +0000 (08:47 +0000)]
[ARM] Don't split trunc stores that can be better handled as VMOVN
We deliberately split stores of the form
store(truncate(larger-than-legal-type)) into two stores, allowing each
store to perform part of the truncate for free.
There are times however where it makes more sense to use VMOVN to
de-interlace the results back into a single vector, and store that in
one go. This adds a check for that situation, not splitting the store if
it looks like a VMOVN can be more useful.
Differential Revision: https://reviews.llvm.org/D76511
Sam Parker [Tue, 24 Mar 2020 08:41:48 +0000 (08:41 +0000)]
[ARM][LowOverheadLoops] Add checks for narrowing
Modify ValidateLiveOuts to track 'FalseLaneZeros' more precisely,
including checks on specific operations that can generate non-zeros
from zero values, e.g VMVN. We can then check that any instructions
that retain some information in their output register (all narrowing
instructions) that they only use and def registers that always have
zeros in their falsely predicated bytes, whether or not tail
predication happens.
Most of the logic remains the same, just the names of the data
structures and helpers have been renamed to reflect the change in
logic. The key change, apart from the opcode checkers, is that the
FalseZeros set now strictly contains only instructions which will
always generate zeros, and not instructions that could also have
their false bytes masked away later.
Differential Revision: https://reviews.llvm.org/D76235
Sam Parker [Tue, 24 Mar 2020 08:23:05 +0000 (08:23 +0000)]
[ARM][MVE] Add target flag for narrowing insts
Add a flag, 'RetainsPreviousHalfElement', for operations that operate
on top/bottom halves of their input and only write to half of their
destination, leaving the other half to retain its previous value.
Differential Revision: https://reviews.llvm.org/D76608
Haojian Wu [Thu, 19 Mar 2020 15:30:40 +0000 (16:30 +0100)]
[AST] Add RecoveryExpr to retain expressions on semantic errors
Normally clang avoids creating expressions when it encounters semantic
errors, even if the parser knows which expression to produce.
This works well for the compiler. However, this is not ideal for
source-level tools that have to deal with broken code, e.g. clangd is
not able to provide navigation features even for names that compiler
knows how to resolve.
The new RecoveryExpr aims to capture the minimal set of information
useful for the tools that need to deal with incorrect code:
source range of the expression being dropped,
subexpressions of the expression.
We aim to make constructing RecoveryExprs as simple as possible to
ensure writing code to avoid dropping expressions is easy.
Producing RecoveryExprs can result in new code paths being taken in the
frontend. In particular, clang can produce some new diagnostics now and
we aim to suppress bogus ones based on Expr::containsErrors.
We deliberately produce RecoveryExprs only in the parser for now to
minimize the code affected by this patch. Producing RecoveryExprs in
Sema potentially allows to preserve more information (e.g. type of an
expression), but also results in more code being affected. E.g.
SFINAE checks will have to take presence of RecoveryExprs into account.
Initial implementation only works in C++ mode, as it relies on compiler
postponing diagnostics on dependent expressions. C and ObjC often do not
do this, so they require more work to make sure we do not produce too
many bogus diagnostics on the new expressions.
See documentation of RecoveryExpr for more details.
original patch from Ilya
This change is based on https://reviews.llvm.org/D61722
Reviewers: sammccall, rsmith
Reviewed By: sammccall, rsmith
Tags: #clang
Differential Revision: https://reviews.llvm.org/D69330
Walter Erquinigo [Sat, 21 Mar 2020 02:33:14 +0000 (19:33 -0700)]
[lldb-vscode] Add missing launchCommands entry in the package.json
Chen Zheng [Tue, 24 Mar 2020 05:53:59 +0000 (01:53 -0400)]
[PowerPC] fix a typo in commit
3f85134d710c
Implement target hook isProfitableToHoist - typo fix.
Douglas Yung [Tue, 24 Mar 2020 05:52:56 +0000 (22:52 -0700)]
Fix another instance where a variable was renamed in the generated LLVM IR. [NFC]
Jun Ma [Tue, 10 Mar 2020 10:32:55 +0000 (18:32 +0800)]
[Coroutines] Also check lifetime intrinsic for local variable when build
coroutine frame
Currently we move all allocas into the frame when build coroutine frame in
CoroSplit pass. However, this can be relaxed.
Since CoroSplit pass run after Inline pass, we can use lifetime intrinsic to
do such analysis: If the scope of lifetime intrinsic is not across any suspend
point, rather than move the allocas to frame, we can just move them to entry bb
of corresponding function. This reduce the frame size.
More importantly, this also avoid data race in multithread environment.
Consider one inline function by coroutine: it starts a thread which access
local variables, while after inline the movement of allocs to frame also access
them. cause data race.
Differential Revision: https://reviews.llvm.org/D75664
Jun Ma [Fri, 13 Mar 2020 07:27:45 +0000 (15:27 +0800)]
[Coroutines] Insert lifetime intrinsics even O0 is used
Differential Revision: https://reviews.llvm.org/D76119
Vedant Kumar [Mon, 23 Mar 2020 22:09:38 +0000 (15:09 -0700)]
[GlobalOpt] Treat null-check of loaded value as use of global (PR35760)
PR35760 shows an example program which, when compiled with `clang -O0`
or gcc at any optimization level, prints '0'. However, llvm transforms
the program in a way that causes it to print '1'.
Fix the issue by having `AllUsesOfValueWillTrapIfNull` return false when
analyzing a load from a global which is used by an `icmp`. This special
case was untested [0] so this is just deleting dead code.
An alternative fix might be to change the GlobalStatus analysis for the
global to report "Stored" instead of "StoredOnce". However, "StoredOnce"
is appropriate when only one value other than the initializer is stored
to the global.
[0]
http://lab.llvm.org:8080/coverage/coverage-reports/coverage/Users/buildslave/jenkins/workspace/coverage/llvm-project/llvm/lib/Transforms/IPO/GlobalOpt.cpp.html#L662
Differential Revision: https://reviews.llvm.org/D76645
Uday Bondhugula [Tue, 24 Mar 2020 04:22:41 +0000 (09:52 +0530)]
[MLIR][NFC] flat affine constraints - refactor to share, renames
- refactor to remove duplicate code
- some renaming / comment updates for readability
Signed-off-by: Uday Bondhugula <uday@polymagelabs.com>
Differential Revision: https://reviews.llvm.org/D76667
Douglas Yung [Tue, 24 Mar 2020 05:03:21 +0000 (22:03 -0700)]
Make test more flexible for when the variable is renamed in the generated LLVM IR. [NFC]
Pierre Habouzit [Mon, 23 Mar 2020 22:10:03 +0000 (15:10 -0700)]
[objc_direct] also go through implementations when looking for clashes
Some methods are sometimes declared in the @implementation blocks which
can cause undiagnosed clashes.
Just write a checkObjCDirectMethodClashes() for this purpose.
Also make sure that "unavailable" selectors do not inherit
objc_direct_members.
Differential Revision: https://reviews.llvm.org/D76643
Signed-off-by: Pierre Habouzit <phabouzit@apple.com>
Radar-ID: rdar://problem/
59332804, rdar://problem/
59782963
Paula Toth [Tue, 24 Mar 2020 03:33:56 +0000 (20:33 -0700)]
[libc] Enable llvmlibc clang-tidy checks
Summary:
Add clang-tidy for llvm-libc source directory.
Example of check in action:
```
/workspace/llvm-project/libc/src/string/strcpy.cpp:10:1: error: system include stdio.h not allowed [llvmlibc-restrict-system-libc-headers,-warnings-as-errors]
#include <stdio.h>
^~~~~~~~~~~~~~~~~~
```
Reviewers: sivachandra, abrachet
Reviewed By: sivachandra, abrachet
Subscribers: aheejin, MaskRay, tschuett, libc-commits
Tags: #libc-project
Differential Revision: https://reviews.llvm.org/D76559
Jinsong Ji [Tue, 24 Mar 2020 02:55:30 +0000 (02:55 +0000)]
[NFC][RUIP] Small debug output refine
Add a new line, so that we always print MI in a new line,
before and after UpdateRegMask, for easier check..
John McCall [Fri, 20 Mar 2020 20:45:39 +0000 (16:45 -0400)]
Add an algorithm for performing "optimal" layout of a struct.
The algorithm supports both assigning a fixed offset to a field prior to
layout and allowing fields to have sizes that aren't multiples of their
required alignments. This means that the well-known algorithm of sorting
by decreasing alignment isn't always good enough. Still, we start with
that, and only if that leaves padding around do we fall back on a greedy
padding-minimizing algorithm.
There is no known efficient algorithm for producing a guaranteed-minimal
layout in all cases. In fact, allowing arbitrary fixed-offset fields means
there's a straightforward reduction from bin-packing, making this NP-hard.
But as usual with such problems, we can still efficiently produce adequate
solutions to the cases that matter most to us.
I intend to use this in coroutine frame layout, where the retcon lowerings
very badly want to minimize total space usage, and where the switch lowering
can indeed produce a header with interior padding if the promise field is
highly-aligned. But it may be useful in a much wider variety of situations.
Uday Bondhugula [Mon, 23 Mar 2020 18:26:00 +0000 (23:56 +0530)]
[MLIR] move loopUnrollJamBy*Factor to loop transforms utils
The declarations for these were already part of transforms utils, but
the definitions were left in affine transforms. Move definitions to loop
transforms utils.
Signed-off-by: Uday Bondhugula <uday@polymagelabs.com>
Differential Revision: https://reviews.llvm.org/D76633
Walter Erquinigo [Sat, 21 Mar 2020 02:31:33 +0000 (19:31 -0700)]
Create basic SBEnvironment class
Uday Bondhugula [Mon, 23 Mar 2020 15:02:58 +0000 (20:32 +0530)]
[MLIR][NFC] loop tiling - improve comments / naming
Improve comments, naming, and other cleanup
Signed-off-by: Uday Bondhugula <uday@polymagelabs.com>
Differential Revision: https://reviews.llvm.org/D76616
aartbik [Mon, 23 Mar 2020 22:31:51 +0000 (15:31 -0700)]
[mlir] [VectorOps] A "reference" lowering of vector.transpose to LLVM IR
Summary: Makes the vector.tranpose runnable on CPU.
Reviewers: nicolasvasilache, andydavis1, rriddle
Reviewed By: nicolasvasilache
Subscribers: mehdi_amini, rriddle, jpienaar, burmako, shauheen, antiagainst, nicolasvasilache, arpith-jacob, mgester, lucyrfox, liufengdb, Joonsoo, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D76644
Jonas Devlieghere [Tue, 24 Mar 2020 00:47:18 +0000 (17:47 -0700)]
[VirtualFileSystem] Add unit test for vfs::YAMLVFSWriter
Add a unit test for vfs::YAMLVFSWriter.
This patch exposes an issue in the writer: when we call addFileMapping
with a directory, the VFS writer will emit it as a regular file, causing
any of the nested files or directories to not be found.
Peter Collingbourne [Mon, 23 Mar 2020 23:08:18 +0000 (16:08 -0700)]
scudo: Create a public include directory. NFCI.
For MTE error reporting we will need to expose interfaces for crash handlers
to use to interpret scudo headers and metadata. The intent is that these
interfaces will live in scudo/interface.h.
Move the existing interface.h into an include/scudo directory and make it
independent of the internal headers, so that we will be able to add the
interfaces there.
Differential Revision: https://reviews.llvm.org/D76648
Walter Erquinigo [Tue, 24 Mar 2020 01:20:10 +0000 (18:20 -0700)]
Revert "Create basic SBEnvironment class"
This reverts commit
fd868f517d2c5ca8c0f160dbec0857b14ecf74c1.
Walter Erquinigo [Sat, 21 Mar 2020 02:31:33 +0000 (19:31 -0700)]
Create basic SBEnvironment class
Chris Lattner [Mon, 23 Mar 2020 22:39:32 +0000 (15:39 -0700)]
Fix a bug in the .mlir lexer, where a \0 character in a file is treated as a colon (due to an accidental fall through) instead of whitespace.
Summary:
While here, simplify the lexer a bit by eliminating the unneeded 'operator'
classification of certain sigils, they can just be treated as 'punctuation'.
Reviewers: rriddle!
Subscribers: mehdi_amini, rriddle, jpienaar, burmako, shauheen, antiagainst, nicolasvasilache, arpith-jacob, mgester, lucyrfox, liufengdb, Joonsoo, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D76647
Johannes Doerfert [Tue, 24 Mar 2020 00:14:34 +0000 (19:14 -0500)]
[OpenMPOpt] Initialize value to avoid use of uninitialized memory
This should fix the issue reported here:
https://reviews.llvm.org/D76058#1937554
Jessica Paquette [Fri, 20 Mar 2020 01:12:18 +0000 (18:12 -0700)]
[GlobalISel] Combine G_SELECTs of the form (cond ? x : x) into x
When we find something like this:
```
%a:_(s32) = G_SOMETHING ...
...
%select:_(s32) = G_SELECT %cond(s1), %a, %a
```
We can remove the select and just replace it entirely with `%a` because it's
always going to result in `%a`.
Same if we have
```
%select:_(s32) = G_SELECT %cond(s1), %a, %b
```
where we can deduce that `%a == %b`.
This implements the following cases:
- `%select:_(s32) = G_SELECT %cond(s1), %a, %a` -> `%a`
- `%select:_(s32) = G_SELECT %cond(s1), %a, %some_copy_from_a` -> `%a`
- `%select:_(s32) = G_SELECT %cond(s1), %a, %b` -> `%a` when `%a` and `%b`
are defined by identical instructions
This gives a few minor code size improvements on CTMark at -O3 for AArch64.
Differential Revision: https://reviews.llvm.org/D76523
Sam McCall [Mon, 23 Mar 2020 23:31:14 +0000 (00:31 +0100)]
[clangd] Rename theia-derived semantic highlighting protocol. NFC
This feature is being added to LSP with a different (request-response)
protocol in 3.16, so this should avoid some confusion.
Max Moroz [Thu, 19 Mar 2020 19:42:23 +0000 (12:42 -0700)]
[compiler-rt] Add ConsumeRandomLengthString() version without arguments.
Reviewers: hctim, metzman
Subscribers: dberris, #sanitizers
Tags: #sanitizers
Differential Revision: https://reviews.llvm.org/D76448
Richard Smith [Mon, 23 Mar 2020 23:30:46 +0000 (16:30 -0700)]
Update documentation for __builtin_operator_new and
__builtin_operator_delete to match r328134.
Evgenii Stepanov [Mon, 23 Mar 2020 23:15:58 +0000 (16:15 -0700)]
[msan] Fix sigaltstack false positive.
struct stack_t on Linux x86_64 has internal padding which may be left
uninitialized. The check should be replaced with multiple checks for
individual fields of the struct. For now, remove the check altogether.
Fangrui Song [Mon, 23 Mar 2020 23:09:59 +0000 (16:09 -0700)]
[analyzer] Delete unneeded headers and using after D76509 for layering check
Otherwise it is incorrect to remove clangStaticAnalyzerFrontend's
dependency on clangRewrite and clangToolingCore.
Nemanja Ivanovic [Mon, 23 Mar 2020 22:34:05 +0000 (17:34 -0500)]
[PowerPC] Improve handling of some BUILD_VECTOR nodes
An analysis of real world code turned up a number of patterns with BUILD_VECTOR
of nodes resulting from operations on extracted vector elements for which we
produce poor code. This addresses those cases. No attempt is made for
completeness as that would entail a large amount of work for something that
there is no evidence of in real code.
Differential revision: https://reviews.llvm.org/D72660
Stephen Neuendorffer [Mon, 23 Mar 2020 22:20:54 +0000 (15:20 -0700)]
[examples] Fixes for BUILD_SHARED_LIBS=on
Stephen Neuendorffer [Mon, 23 Mar 2020 22:20:14 +0000 (15:20 -0700)]
[MLIR] Fixes for BUILD_SHARED_LIBS=on
Alexander Belyaev [Mon, 23 Mar 2020 21:33:33 +0000 (22:33 +0100)]
[MLIR] Insert loop.yield to IfOp regions only if it's void.
Differential Revision: https://reviews.llvm.org/D76603
Alexey Bataev [Mon, 23 Mar 2020 21:30:38 +0000 (17:30 -0400)]
[OPENMP50]Add 'default' modifier in reduction clauses.
Added full support for 'default' modifier in the reduction clauses.
Justin Hibbits [Mon, 23 Mar 2020 14:44:39 +0000 (09:44 -0500)]
[PowerPC]: e500 target can't use lwsync, use msync instead
The e500 core has a silicon bug that triggers an illegal instruction
program trap on any sync other than msync. Other cores will typically
ignore illegal sync types, and the documentation even implies that the
'illegal' bits are ignored.
Address this hardware deficiency by only using msync, like the PPC440.
Differential Revision: https://reviews.llvm.org/D76614
Richard Smith [Mon, 23 Mar 2020 22:05:38 +0000 (15:05 -0700)]
PR45142: 'template ~X<T>' is ill-formed; reject it rather than crashing.
Ladd Van Tol [Mon, 23 Mar 2020 21:16:55 +0000 (14:16 -0700)]
Improve module.pcm lock file performance on machines with high core counts
Summary:
When building a large Xcode project with multiple module dependencies, and mixed Objective-C & Swift, I observed a large number of clang processes stalling at zero CPU for 30+ seconds throughout the build. This was especially prevalent on my 18-core iMac Pro.
After some sampling, the major cause appears to be the lock file implementation for precompiled modules in the module cache. When the lock is heavily contended by multiple clang processes, the exponential backoff runs in lockstep, with some of the processes sleeping for 30+ seconds in order to acquire the file lock.
In the attached patch, I implemented a more aggressive polling mechanism that limits the sleep interval to a max of 500ms, and randomizes the wait time. I preserved a limited form of exponential backoff. I also updated the code to use cross-platform timing, thread sleep, and random number capabilities available in C++11.
On iMac Pro (2.3 GHz Intel Xeon W, 18 core):
Xcode 11.1 bundled clang:
502.2 seconds (average of 5 runs)
Custom clang build with LockFileManager patch applied:
276.6 seconds (average of 5 runs)
This is a 1.82x speedup for this use case.
On MacBook Pro (4 core 3.1GHz Intel i7):
Xcode 11.1 bundled clang:
539.4 seconds (average of 2 runs)
Custom clang build with LockFileManager patch applied:
509.5 seconds (average of 2 runs)
As expected, machines with fewer cores benefit less from this change.
```
Call graph:
2992 Thread_393602 DispatchQueue_1: com.apple.main-thread (serial)
2992 start (in libdyld.dylib) + 1 [0x7fff6a1683d5]
2992 main (in clang) + 297 [0x1097a1059]
2992 driver_main(int, char const**) (in clang) + 2803 [0x1097a5513]
2992 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (in clang) + 1608 [0x1097a7cc8]
2992 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (in clang) + 3299 [0x1097dace3]
2992 clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (in clang) + 509 [0x1097dcc1d]
2992 clang::FrontendAction::Execute() (in clang) + 42 [0x109818b3a]
2992 clang::ParseAST(clang::Sema&, bool, bool) (in clang) + 185 [0x10981b369]
2992 clang::Parser::ParseFirstTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&) (in clang) + 37 [0x10983e9b5]
2992 clang::Parser::ParseTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&) (in clang) + 141 [0x10983ecfd]
2992 clang::Parser::ParseExternalDeclaration(clang::Parser::ParsedAttributesWithRange&, clang::ParsingDeclSpec*) (in clang) + 695 [0x10983f3b7]
2992 clang::Parser::ParseObjCAtDirectives(clang::Parser::ParsedAttributesWithRange&) (in clang) + 637 [0x10a9be9bd]
2992 clang::Parser::ParseModuleImport(clang::SourceLocation) (in clang) + 170 [0x10c4841ba]
2992 clang::Parser::ParseModuleName(clang::SourceLocation, llvm::SmallVectorImpl<std::__1::pair<clang::IdentifierInfo*, clang::SourceLocation> >&, bool) (in clang) + 503 [0x10c485267]
2992 clang::Preprocessor::Lex(clang::Token&) (in clang) + 316 [0x1098285cc]
2992 clang::Preprocessor::LexAfterModuleImport(clang::Token&) (in clang) + 690 [0x10cc7af62]
2992 clang::CompilerInstance::loadModule(clang::SourceLocation, llvm::ArrayRef<std::__1::pair<clang::IdentifierInfo*, clang::SourceLocation> >, clang::Module::NameVisibilityKind, bool) (in clang) + 7989 [0x10bba6535]
2992 compileAndLoadModule(clang::CompilerInstance&, clang::SourceLocation, clang::SourceLocation, clang::Module*, llvm::StringRef) (in clang) + 296 [0x10bba8318]
2992 llvm::LockFileManager::waitForUnlock() (in clang) + 91 [0x10b6953ab]
2992 nanosleep (in libsystem_c.dylib) + 199 [0x7fff6a22c914]
2992 __semwait_signal (in libsystem_kernel.dylib) + 10 [0x7fff6a2a0f32]
```
Differential Revision: https://reviews.llvm.org/D69575
Fred Riss [Thu, 19 Mar 2020 15:43:41 +0000 (08:43 -0700)]
[lldb/PlatformDarwin] Always delete destination file first in PutFile
Summary:
The default behavior of Platform::PutFile is to open the file and
truncate it if it already exists. This works fine and is a sensible
default, but it interacts badly with code-signing on iOS, as doing so
invalidates the signature of the file (even if the new content has a
valid code signature).
We have a couple tests which on purpose reload a different binary with
the same name. Those tests are currently broken because of the above
interaction.
This patch simply makes the Darwin platform unconditionally delete the
destination file before sending the new one to work around this issue.
Reviewers: jasonmolenda
Subscribers: lldb-commits
Tags: #lldb
Differential Revision: https://reviews.llvm.org/D76450
Eli Friedman [Mon, 23 Mar 2020 19:20:05 +0000 (12:20 -0700)]
[lld] Enabling loading LLVM pass plugins
Add the relevant magic bits to allow "-mllvm=-load=plugin.so" etc.
This is now using export_executable_symbols_for_plugins, so symbols are
only exported if plugins are enabled.
Differential Revision: https://reviews.llvm.org/D75879
LLVM GN Syncbot [Mon, 23 Mar 2020 21:05:55 +0000 (21:05 +0000)]
[gn build] Port
7bf871c39f7
Simon Pilgrim [Mon, 23 Mar 2020 21:02:54 +0000 (21:02 +0000)]
[analyzer] ConstraintManager - use EXPENSIVE_CHECKS instead of (gcc specific) __OPTIMIZE__ guard
This was noticed on D71817, which removed another use of __OPTIMIZE__
Differential Revision: https://reviews.llvm.org/D76622
Matt Arsenault [Fri, 20 Mar 2020 21:16:46 +0000 (17:16 -0400)]
AMDGPU: Allow vectorization of round intrinsic
There seems to be a small benefit to the legalized sequence for v2f16
round with packed instructions, so allow vectorizing it by reducing
the cost.
An unintended side effect is vectorization of f32 round also
happens. The current FMA logic seems off to me, and isn't checking for
packed instructions.
Alexandre Ganea [Mon, 23 Mar 2020 20:54:24 +0000 (16:54 -0400)]
[Clang] Fix HIP tests when running on Windows with the LLVM toolchain is in the path
On Windows, when the LLVM toolchain is in the current path (%PATH%), fusing the linker yields c:\{path}\lld.exe whereas the hip tests did not expect the .exe part.
This only happens if LLD is not present in the build folder, which consequently makes the code in Driver::GetProgramPath() to fall back to %PATH% and platform-specific search, which includes the .exe part (see https://github.com/llvm/llvm-project/blob/master/clang/lib/Driver/Driver.cpp#L4733).
Differential Revision: https://reviews.llvm.org/D76631
Matt Arsenault [Fri, 20 Mar 2020 01:40:58 +0000 (21:40 -0400)]
AMDGPU: Emit llvm.fshr for __builtin_amdgcn_alignbit
These are equivalent. The generic rotate builtins do not directly map
to the fshr intrinsic.
Matt Arsenault [Mon, 23 Mar 2020 20:26:02 +0000 (16:26 -0400)]
GVNSink: Allow handling addrspacecast
Kirstóf Umann [Thu, 19 Mar 2020 13:53:09 +0000 (14:53 +0100)]
[analyzer][NFC] Move the text output type to its own file, move code to PathDiagnosticConsumer creator functions
TableGen and .def files (which are meant to be used with the preprocessor) come
with obvious downsides. One of those issues is that generated switch-case
branches have to be identical. This pushes corner cases either to an outer code
block, or into the generated code.
Inspect the removed code in AnalysisConsumer::DigestAnalyzerOptions. You can see
how corner cases like a not existing output file, the analysis output type being
set to PD_NONE, or whether to complement the output with additional diagnostics
on stderr lay around the preprocessor generated code. This is a bit problematic,
as to how to deal with such errors is not in the hands of the users of this
interface (those implementing output types, like PlistDiagnostics etc).
This patch changes this by moving these corner cases into the generated code,
more specifically, into the called functions. In addition, I introduced a new
output type for convenience purposes, PD_TEXT_MINIMAL, which always existed
conceptually, but never in the actual Analyses.def file. This refactoring
allowed me to move TextDiagnostics (renamed from ClangDiagPathDiagConsumer) to
its own file, which it really deserved.
Also, those that had the misfortune to gaze upon Analyses.def will probably
enjoy the sight that a clang-format did on it.
Differential Revision: https://reviews.llvm.org/D76509
Fangrui Song [Sun, 22 Mar 2020 06:39:01 +0000 (23:39 -0700)]
[llvm-objcopy] Improve tool selection logic to recognize llvm-strip-$major as strip
Debian and some other distributions install llvm-strip as llvm-strip-$major (e.g. `/usr/bin/llvm-strip-9`)
D54193 made it work with llvm-strip-$major but did not add a test.
The behavior was regressed by D69146.
Fixes https://github.com/ClangBuiltLinux/linux/issues/940
Reviewed By: alexshap
Differential Revision: https://reviews.llvm.org/D76562
Stefanos Baziotis [Mon, 23 Mar 2020 20:44:10 +0000 (22:44 +0200)]
[Attributor][NFC] Refactorings and typos in doc
Reviewed By: sstefan1, uenoku
Differential Revision: https://reviews.llvm.org/D76175
Jim Ingham [Fri, 20 Mar 2020 21:59:54 +0000 (14:59 -0700)]
Internal expressions shouldn't increment the result variable numbering.
There an option: EvaluateExpressionOptions::SetResultIsInternal to indicate
whether the result number should be returned to the pool or not. It
got broken when the PersistentExpressionState was refactored.
This fixes the issue and provides a test of the behavior.
Differential Revision: https://reviews.llvm.org/D76532
Ilya Leoshkevich [Mon, 23 Mar 2020 19:46:20 +0000 (12:46 -0700)]
[compiler-rt] Intercept the uname() function
Summary:
Move interceptor from msan to sanitizer_common_interceptors.inc, so that
other sanitizers could benefit.
Adjust FixedCVE_2016_2143() to deal with the intercepted uname().
Patch by Ilya Leoshkevich.
Reviewers: eugenis, vitalybuka, uweigand, jonpa
Reviewed By: eugenis, vitalybuka
Subscribers: dberris, krytarowski, #sanitizers, stefansf, Andreas-Krebbel
Tags: #sanitizers
Differential Revision: https://reviews.llvm.org/D76578
Vitaly Buka [Mon, 23 Mar 2020 19:49:41 +0000 (12:49 -0700)]
Fix "previously declared as a struct" warning
Matt Arsenault [Wed, 13 Feb 2019 23:28:16 +0000 (18:28 -0500)]
Allow replacing intrinsic operands with variables
Since intrinsics can now specify when an argument is required to be
constant, it is now OK to replace arguments with variables if they
aren't. This means intrinsics must now be accurately marked with
immarg.
Johannes Doerfert [Sat, 14 Mar 2020 04:42:05 +0000 (23:42 -0500)]
[OpenMP][NFC] Minimize memory usage and copying of `OMPTraitInfo`s
See rational here: https://reviews.llvm.org/D71830#1922656
Reviewed By: rnk
Differential Revision: https://reviews.llvm.org/D76173
Johannes Doerfert [Sat, 14 Mar 2020 00:39:09 +0000 (19:39 -0500)]
[OpenMP][NFC] Reduce instantiation time with different data structure
See rational here: https://reviews.llvm.org/D71847#1922648
Reviewed By: rnk
Differential Revision: https://reviews.llvm.org/D76170
Eli Friedman [Fri, 20 Mar 2020 21:00:19 +0000 (14:00 -0700)]
Don't export symbols from clang/opt/llc if plugins are disabled.
The only reason we export symbols from these tools is to support
plugins; if we don't have plugins, exporting symbols just bloats the
executable and makes LTO less effective.
See review of D75879 for the discussion that led to this patch.
Differential Revision: https://reviews.llvm.org/D76527
LLVM GN Syncbot [Mon, 23 Mar 2020 19:09:57 +0000 (19:09 +0000)]
[gn build] Port
56abcfad70e
Jonas Devlieghere [Mon, 23 Mar 2020 18:56:39 +0000 (11:56 -0700)]
Revert "[analyzer][NFC] Tie CheckerRegistry to CheckerManager, allow CheckerManager to be constructed for non-analysis purposes"
Temporarily reverting this patch because it breaks the modules build.
Matt Arsenault [Sun, 22 Mar 2020 23:06:30 +0000 (19:06 -0400)]
AMDGPU/GlobalISel: Implement computeNumSignBitsForTargetInstr
Matt Arsenault [Sun, 22 Mar 2020 22:12:25 +0000 (18:12 -0400)]
GlobalISel: Prepare to allow other target unit tests
Currently all GlobalISel unittests use a hardcoded AArch64 target
machine. Factor this so I can write some for AMDGPU specific known
bits unittests.
Matt Arsenault [Wed, 22 Jan 2020 15:31:03 +0000 (10:31 -0500)]
GlobalISel: Add computeKnownBitsForTargetInstr
I think we can save the MRI argument from these since it's in
GISelKnownBits already, but currently not accessible.
Implementation deferred to avoid dependency on other patches.
Andrew Ng [Sat, 21 Mar 2020 12:06:06 +0000 (12:06 +0000)]
[Support] Fix clang warning in widenPath NFC
Differential Revision: https://reviews.llvm.org/D76544
MaheshRavishankar [Thu, 19 Mar 2020 23:02:18 +0000 (16:02 -0700)]
[mlir] Fix unsafe create operation in GreedyPatternRewriter
When trying to fold an operation during operation creation check that
the operation folding succeeds before inserting the op.
Differential Revision: https://reviews.llvm.org/D76415
shafik [Mon, 23 Mar 2020 18:42:41 +0000 (11:42 -0700)]
[DataFormatters] Add formatter for libc++ std::unique_ptr
This adds a formatter for libc++ std::unique_ptr.
I also refactored GetValueOfCompressedPair(...) out of LibCxxList.cpp since I need the same functionality and it made sense to share it.
Differential Revision: https://reviews.llvm.org/D76476
Fangrui Song [Mon, 23 Mar 2020 18:12:10 +0000 (11:12 -0700)]
[CMake] Fix AMDGPUTests -DBUILD_SHARED_LIBS=on builds and trim dependencies of AMDGPUTests and AMDDwarfTests after D76357/G24698e526f619271705fe72bcaa928be9bc82484
FAILED: unittests/Target/AMDGPU/AMDGPUTests
...
ld.lld: error: undefined symbol: llvm::MCRegisterInfo::getLLVMRegNum(unsigned int, bool) const
>>> referenced by DwarfRegMappings.cpp:60 (/usr/local/google/home/maskray/llvm/llvm/unittests/Target/AMDGPU/DwarfRegMappings.cpp:60)
>>> unittests/Target/AMDGPU/CMakeFiles/AMDGPUTests.dir/DwarfRegMappings.cpp.o:(AMDGPUDwarfRegMappingTests_TestWave64DwarfRegMapping_Test::TestBody())
>>> referenced by DwarfRegMappings.cpp:82 (/usr/local/google/home/maskray/llvm/llvm/unittests/Target/AMDGPU/DwarfRegMappings.cpp:82)
>>> unittests/Target/AMDGPU/CMakeFiles/AMDGPUTests.dir/DwarfRegMappings.cpp.o:(AMDGPUDwarfRegMappingTests_TestWave32DwarfRegMapping_Test::TestBody())
A -DBUILD_SHARED_LIBS=off build is good because AMDGPUCodeGen pulls in MC.
A -DBUILD_SHARED_LIBS=on build requires all direct dependencies (MC) to be listed becuase llvm/cmake/modules/HandleLLVMOptions.cmake uses -Wl,-z,defs
Chris Lattner [Mon, 23 Mar 2020 16:51:07 +0000 (09:51 -0700)]
Fix a warning building on my machine, NFC. warning: unused function 'compilePtxToCubinForTesting'
Summary: Also eliminate the redunant anon namespace around the already static function.
Reviewers: herhut
Subscribers: hiraditya, steven_wu, dexonsmith, mehdi_amini, rriddle, jpienaar, burmako, shauheen, antiagainst, nicolasvasilache, csigg, arpith-jacob, mgester, lucyrfox, aartbik, liufengdb, Joonsoo, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D76627
Sanjay Patel [Mon, 23 Mar 2020 17:56:07 +0000 (13:56 -0400)]
[InstCombine] remove one-use check for ctpop -> cttz
Two one-use checks were added with rGfdcb27105537,
but only the first one is necessary to limit an
increase in instruction count. The second transform
only creates one instruction, so it is always a
reasonable canonicalization/optimization.
Fangrui Song [Wed, 26 Feb 2020 02:00:13 +0000 (18:00 -0800)]
[ELF] Keep orphan section names (.rodata.foo .text.foo) unchanged if !hasSectionsCommand
This behavior matches GNU ld and seems reasonable.
```
// If a SECTIONS command is not specified
.text.* -> .text
.rodata.* -> .rodata
.init_array.* -> .init_array
```
A proposed Linux feature CONFIG_FG_KASLR may depend on the GNU ld behavior.
Reword a comment about -z keep-text-section-prefix and a comment about
CommonSection (deleted by rL286234).
Reviewed By: grimar
Differential Revision: https://reviews.llvm.org/D75225
LLVM GN Syncbot [Mon, 23 Mar 2020 17:23:22 +0000 (17:23 +0000)]
[gn build] Port
57b8a407493
Fangrui Song [Mon, 23 Mar 2020 17:22:07 +0000 (10:22 -0700)]
Jonathan Coe [Mon, 23 Mar 2020 17:17:27 +0000 (17:17 +0000)]
[clang-format] No space inserted between commas in C#
Reviewers: krasimir
Reviewed By: krasimir
Subscribers: cfe-commits, MyDeveloperDay
Tags: #clang-format, #clang
Differential Revision: https://reviews.llvm.org/D76621
Alexey Bataev [Mon, 23 Mar 2020 14:41:08 +0000 (10:41 -0400)]
[OPENMP50]Bassic support for exclusive clause.
Added basic support (parsing/sema/serialization) for exclusive clause in
scan directives.
AndreyChurbanov [Mon, 23 Mar 2020 17:02:19 +0000 (20:02 +0300)]
[openmp][runtime] Fixed hang for explicit task inside a taskloop.
Added missed initialization of td_last_tied field for taskloop tasks.
Differential Revision: https://reviews.llvm.org/D75673
Fangrui Song [Mon, 23 Mar 2020 16:55:39 +0000 (09:55 -0700)]
Jonas Devlieghere [Mon, 23 Mar 2020 16:52:42 +0000 (09:52 -0700)]
[lldb/Reproducers] Mark reproducer test directory as unsupported on Windows
Reproducers are unsupported on Windows. Rather than having a UNSUPPORTED
line in every test, just skip the whole subdirectory.
Johannes Doerfert [Mon, 23 Mar 2020 15:47:06 +0000 (10:47 -0500)]
[OpenMPOpt] Validate declaration types against the expected types
Validation of the found runtime library functions declarations types
(return and argument types) with the expected types.
Reviewed By: jdoerfert
Differential Revision: https://reviews.llvm.org/D76058
Johannes Doerfert [Mon, 23 Mar 2020 16:39:34 +0000 (11:39 -0500)]
[OpenMPOpt][FIX] Resolve OpenMP runtime call type mismatches
Exposed by D76058 and tested once that one lands.
Benjamin Kramer [Mon, 23 Mar 2020 16:41:52 +0000 (17:41 +0100)]
[Attributor] Fold single-use variable into assert
Fixes unused variable warning in Release builds.
Fangrui Song [Mon, 23 Mar 2020 16:27:49 +0000 (09:27 -0700)]
[ELF][test] Clean text-section-prefix.s
Adam Balogh [Wed, 18 Mar 2020 19:15:20 +0000 (20:15 +0100)]
[Analyzer] IteratorRangeChecker verify `std::advance()`, `std::prev()` and `std::next()`
Upon calling one of the functions `std::advance()`, `std::prev()` and
`std::next()` iterators could get out of their valid range which leads
to undefined behavior. If all these funcions are inlined together with
the functions they call internally (e.g. `__advance()` called by
`std::advance()` in some implementations) the error is detected by
`IteratorRangeChecker` but the bug location is inside the STL
implementation. Even worse, if the budget runs out and one of the calls
is not inlined the bug remains undetected. This patch fixes this
behavior: all the bugs are detected at the point of the STL function
invocation.
Differential Revision: https://reviews.llvm.org/D76379
Alexandre Ganea [Mon, 23 Mar 2020 16:19:07 +0000 (12:19 -0400)]
[Support] Silence warning in Path unittests when compiling with clang-cl
warning: comparison of integers of different signs: 'const unsigned long long' and 'const int' [-Wsign-compare]
David Green [Mon, 23 Mar 2020 12:39:00 +0000 (12:39 +0000)]
[ARM] Extra VMOVN and VMULL tests. NFC
Louis Dionne [Mon, 23 Mar 2020 15:37:40 +0000 (11:37 -0400)]
[libc++] Bump Clang support for Clang 4
It's hard to imagine someone using a recent version of libc++ with a
roughly 3 years old Clang. Since we're not testing libc++ with Clang 3.5
anyway, claiming support for it is somewhat of a lie.
Note that we don't test Clang 4 either, however I have no reason to bump
the requirement beyond Clang 4 at the moment, whereas removing Clang 3.5
allows simplifying the test suite.
Differential Revision: https://reviews.llvm.org/D76618
Fred Riss [Mon, 23 Mar 2020 16:13:40 +0000 (09:13 -0700)]
[lldb/testsuite] Skip part of TestSettings.py on windows
The newly introduced tests for unsetting environment variables
is failing on Windows. Skip the test there to allow investigation.
It seems like setting inherit-env to false was never tested
before. Could it be that the Windows process launcher doesn't
honor this setting?
Ram Nalamothu [Mon, 23 Mar 2020 15:56:02 +0000 (21:26 +0530)]
Add AMDGPU MC unittests only when AMDGPU target is being built
Fixes the build failures introduced by
24698e526f619271705fe72bcaa928be9bc82484
Kristóf Umann [Fri, 28 Feb 2020 14:07:50 +0000 (15:07 +0100)]
[analyzer][NFC] Tie CheckerRegistry to CheckerManager, allow CheckerManager to be constructed for non-analysis purposes
Its been a while since my CheckerRegistry related patches landed, allow me to
refresh your memory:
During compilation, TblGen turns
clang/include/clang/StaticAnalyzer/Checkers/Checkers.td into
(build directory)/tools/clang/include/clang/StaticAnalyzer/Checkers/Checkers.inc.
This is a file that contains the full name of the checkers, their options, etc.
The class that is responsible for parsing this file is CheckerRegistry. The job
of this class is to establish what checkers are available for the analyzer (even
from plugins and statically linked but non-tblgen generated files!), and
calculate which ones should be turned on according to the analyzer's invocation.
CheckerManager is the class that is responsible for the construction and storage
of checkers. This process works by first creating a CheckerRegistry object, and
passing itself to CheckerRegistry::initializeManager(CheckerManager&), which
will call the checker registry functions (for example registerMallocChecker) on
it.
The big problem here is that these two classes lie in two different libraries,
so their interaction is pretty awkward. This used to be far worse, but I
refactored much of it, which made things better but nowhere near perfect.
---
This patch changes how the above mentioned two classes interact. CheckerRegistry
is mainly used by CheckerManager, and they are so intertwined, it makes a lot of
sense to turn in into a field, instead of a one-time local variable. This has
additional benefits: much of the information that CheckerRegistry conveniently
holds is no longer thrown away right after the analyzer's initialization, and
opens the possibility to pass CheckerManager in the shouldRegister* function
rather then LangOptions (D75271).
There are a few problems with this. CheckerManager isn't the only user, when we
honor help flags like -analyzer-checker-help, we only have access to a
CompilerInstance class, that is before the point of parsing the AST.
CheckerManager makes little sense without ASTContext, so I made some changes and
added new constructors to make it constructible for the use of help flags.
Differential Revision: https://reviews.llvm.org/D75360
Yaxun (Sam) Liu [Wed, 26 Feb 2020 15:57:39 +0000 (10:57 -0500)]
recommit
1b978ddba05c [CUDA][HIP][OpenMP] Emit deferred diagnostics by a post-parsing AST travese
Differential Revision: https://reviews.llvm.org/D70172
zoecarver [Mon, 23 Mar 2020 16:05:47 +0000 (09:05 -0700)]
[libc++] [NFC] Test that correct value category is used in scoped_allocator_adaptor::construct
This patch fixes 2586. Just tests. NFC.
Differential Revision: https://reviews.llvm.org/D63050