platform/upstream/llvm.git
4 years ago[lldb][NFC] Remove FormatMap
Raphael Isemann [Thu, 23 Jul 2020 16:18:25 +0000 (18:18 +0200)]
[lldb][NFC] Remove FormatMap

Summary:

FormattersContainer.h has two containers: FormatMap and FormattersContainer
itself. FormatMap is essentially just a SetVector with a listener interface that
is aspiring to be thread-safe as most of its functions lock its member mutex.

FormattersContainer is for the most part just calling the matching functions of
internal FormatMap instance and essentially acts as a wrapper class with some
minor formatter search functionality on top. The only difference is that the
FormattersContainer's public `Get` function is actually searching formatters in
the list of formatters (and for example doing regex-matching) while FormatMap's
`Get` function is just looking up a a format by the type matcher string.

This patch deletes `FormatMap` by just renaming it to `FormattersContainer` and
pulling in the two `Get` functions from the original `FormattersContainer`
class.

The only other user of `FormatMap` was the `NamedSummariesMap` in the
`FormatManager` which I migrated by just making it also a `FormattersContainer`
and replaced the only call to the `Get` function (which now has new semantics)
with `GetExact` (which is FormattersContainer's function that has the semantics
of FormatMap's `Get`). As `NamedSummariesMap` only stores non-regex-based
formatters, both `Get` and `GetExact` would have worked, so this was mostly to
clarify that this is supposed to be NFC.

I also added the missing mutex lock in the `GetCount` function which was
previously missing in the `FormatMap` implementation. Technically not "NFC" but
I anyway had to change the function...

Reviewers: labath, mib

Reviewed By: labath

Subscribers: abidh, JDevlieghere

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

4 years ago[MSAN] Mark libatomic test unsupported on PowerPC
Gui Andrade [Thu, 23 Jul 2020 16:30:49 +0000 (16:30 +0000)]
[MSAN] Mark libatomic test unsupported on PowerPC

4 years ago[IPSCCP] Add test case for PR46717 for argmemonly handling.
Florian Hahn [Thu, 23 Jul 2020 16:17:40 +0000 (17:17 +0100)]
[IPSCCP] Add test case for PR46717 for argmemonly handling.

4 years agoReland [lldb] Unify type name matching in FormattersContainer II
Raphael Isemann [Tue, 21 Jul 2020 16:44:16 +0000 (18:44 +0200)]
Reland [lldb] Unify type name matching in FormattersContainer II

This was originally reverted because the m_valid member in TypeMatcher was
unused in builds with disabled asserts. Now the member is gone and the default
constructor is deleted (thanks Eric for the idea!).

Summary:

FormattersContainer stores LLDB's formatters. It's implemented as a templated
map-like data structures that supports any kind of value type and only allows
ConstString and RegularExpression as the key types. The keys are used for
matching type names (e.g., the ConstString key `std::vector` matches the type
with the same name while RegularExpression keys match any type where the
RegularExpression instance matches).

The fact that a single FormattersContainer can only match either by string
comparison or regex matching (depending on the KeyType) causes us to always have
two FormatterContainer instances in all the formatting code. This also leads to
us having every type name matching logic in LLDB twice. For example,
TypeCategory has to implement every method twice (one string matching one, one
regex matching one).

This patch changes FormattersContainer to instead have a single `TypeMatcher`
key that wraps the logic for string-based and regex-based type matching and is
now the only possible KeyType for the FormattersContainer. This means that a
single FormattersContainer can now match types with both regex and string
comparison.

To summarize the changes in this patch:
* Remove all the `*_Impl` methods from `FormattersContainer`
* Instead call the FormatMap functions from `FormattersContainer` with a
  `TypeMatcher` type that does the respective matching.
* Replace `ConstString` with `TypeMatcher` in the few places that directly
  interact with `FormattersContainer`.

I'm working on some follow up patches that I split up because they deserve their
own review:

* Unify FormatMap and FormattersContainer (they are nearly identical now).
* Delete the duplicated half of all the type matching code that can now use one
  interface.
* Propagate TypeMatcher through all the formatter code interfaces instead of
  always offering two functions for everything.

There is one ugly design part that I couldn't get rid of yet and that is that we
have to support getting back the string used to construct a `TypeMatcher` later
on. The reason for this is that LLDB only supports referencing existing type
matchers by just typing their respective input string again (without even
supplying if it's a regex or not).

Reviewers: davide, mib

Reviewed By: mib

Subscribers: mgorny, JDevlieghere

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

4 years agoCSEInfo.h - remove unused includes. NFC.
Simon Pilgrim [Thu, 23 Jul 2020 16:16:00 +0000 (17:16 +0100)]
CSEInfo.h - remove unused includes. NFC.

4 years ago[X86] Add Feature64Bit to the 'generic' CPU and remove feature string hacking in...
Craig Topper [Thu, 23 Jul 2020 15:52:06 +0000 (08:52 -0700)]
[X86] Add Feature64Bit to the 'generic' CPU and remove feature string hacking in X86Subtarget constructor

Feature64Bit is only used by a check in the X86Subtarget
constructor to ensure that the CPU selected supports 64-bit mode
when the triple is for 64-bit mode.

'generic' is the default CPU in llc and so needs to be able to
pass this check. Previously we did this by detecting the name and
adding the feature to the feature string. But there doesn't seem
to be any reason we can't just add the feature to the CPU directly.

4 years ago[flang] Fix a crash when a BOZ literal is used as a relational operator
Pete Steinfeld [Wed, 15 Jul 2020 23:02:49 +0000 (16:02 -0700)]
[flang] Fix a crash when a BOZ literal is used as a relational operator

Summary:
Expressions like `iVar==z'fe'` were causing an assertion error  because
the `Relate()` function in `Evaluate/tools.cpp` that processes
relational operators didn't deal with BOZ literals, which are typeless.
I fixed this by checking to see if the operands are BOZ literals.  If
so, if the other operand is REAL, I convert them to REAL.  Otherwise, I convert
them to integers with default kind.

I also added a test to resolve63.f90 that triggers the problem.

Reviewers: tskeith, DavidTruby

Subscribers: llvm-commits

Tags: #llvm

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

4 years ago[lldb] Pass ConstString by value (again) (NFC)
Jonas Devlieghere [Thu, 23 Jul 2020 15:54:56 +0000 (08:54 -0700)]
[lldb] Pass ConstString by value (again) (NFC)

This reverts "Eliminate unneeded value parameters in Utility" for
ConstString. As Pavel pointed out on the mailing list, the class *is*
trivially copyable.

4 years ago[Bitcode] Drop invalid branch_weight in BitcodeReader
Steven Wu [Thu, 23 Jul 2020 16:06:47 +0000 (09:06 -0700)]
[Bitcode] Drop invalid branch_weight in BitcodeReader

Summary:
If bitcode reader gets an invalid branch weight, drop that from the
inputs. This allows us to read the broken modules we generated before
the verifier was able to catch this.

rdar://64870641

Reviewers: yrouban, t.p.northover, dexonsmith, arphaman, aprantl

Reviewed By: aprantl

Subscribers: aprantl, hiraditya, jkorous, ributzka, llvm-commits

Tags: #llvm

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

4 years agoRecommit "[libFuzzer] Link libFuzzer's own interceptors when other compiler runtimes...
Dokyung Song [Thu, 16 Jul 2020 20:26:03 +0000 (20:26 +0000)]
Recommit "[libFuzzer] Link libFuzzer's own interceptors when other compiler runtimes are not linked."

Summary: libFuzzer intercepts certain library functions such as memcmp/strcmp by defining weak hooks. Weak hooks, however, are called only when other runtimes such as ASan is linked. This patch defines libFuzzer's own interceptors, which is linked into the libFuzzer executable when other runtimes are not linked, i.e., when -fsanitize=fuzzer is given, but not others.

The patch once landed but was reverted in 8ef9e2bf355d05bc81d8b0fe1e5333eec59a0a91 due to an assertion failure caused by calling an intercepted function, strncmp, while initializing the interceptors in fuzzerInit(). This issue is now fixed by calling libFuzzer's own implementation of library functions (i.e., internal_*) when the fuzzer has not been initialized yet, instead of recursively calling fuzzerInit() again.

Reviewers: kcc, morehouse, hctim

Subscribers: #sanitizers, krytarowski, mgorny, cfe-commits

Tags: #clang, #sanitizers

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

4 years ago[DFSan] Print more debugging info on test failure.
Matt Morehouse [Thu, 23 Jul 2020 15:46:44 +0000 (15:46 +0000)]
[DFSan] Print more debugging info on test failure.

4 years ago[lldb] Make deleting frame recognizers actually work
Raphael Isemann [Thu, 23 Jul 2020 15:25:17 +0000 (17:25 +0200)]
[lldb] Make deleting frame recognizers actually work

Summary:

Frame recognizers are stored alongside a flag that indicates whether they were
deleted by the user. If the flag is set, they are supposed to be ignored by the
rest of the frame recognizer code. 'frame recognizer delete' is supposed to set
that flag. 'frame recognizer clear' however actually deletes all frame
recognizers (so, it doesn't set the flag but directly deletes them from the
list).

The current implementation of this concept is pretty broken. `frame recognizer
delete` sets the flag, but it somehow thinks that the recognizer id is an index
in the recognizer list. That's not true as it's actually just a member of each
recognizer entry. So it actually just sets the `deleted` flag for a random other
recognizer. The tests for the recognizer still pass as `frame recognizer list`
is also broken and just completely ignored the `deleted` flag and lists all
recognizers. Also `frame recognizer delete` just ignores if it can't actually
delete a recognizer if the id is invalid.

I think we can simplify this whole thing by just actually deleting recognizers
instead of making sure all code is actually respecting the `deleted` flag. I
assume the intention of this was to make sure that all recognizers are getting
unique ids over the course of an LLDB session, but as `clear` is actually
deleting them and we keep recycling ids, that didn't really work to begin with.

This patch deletes the `deleted` flag and just actually deletes the stored
recognizer. Also adds the missing error message in case it find a recognizer
with a given id.

Reviewers: mib

Reviewed By: mib

Subscribers: abidh, JDevlieghere

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

4 years ago[llvm][NFC] Add comments and common-case API to MachineBlockFrequencyInfo
Mircea Trofin [Thu, 23 Jul 2020 15:42:34 +0000 (08:42 -0700)]
[llvm][NFC] Add comments and common-case API to MachineBlockFrequencyInfo

Clarify the relation between a block's BlockFrequency and the
getEntryFreq() API, and added an API for the relatively common case of
finding a block's frequency relative to the entrypoint.

Added / moved some comments to header.

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

4 years ago[libc++abi] Build the dylib with C++17, like for libc++
Louis Dionne [Thu, 23 Jul 2020 15:35:04 +0000 (11:35 -0400)]
[libc++abi] Build the dylib with C++17, like for libc++

4 years ago[X86][docs] Add mention of removal of 'mpx' backend feature to the release notes.
Craig Topper [Thu, 23 Jul 2020 15:24:45 +0000 (08:24 -0700)]
[X86][docs] Add mention of removal of 'mpx' backend feature to the release notes.

I removed the feature from X86.td in ebe5f17f9c396f14742a7c747951b65eaada158e

4 years ago[VectorCombine] add tests for load vectorization; NFC
Sanjay Patel [Thu, 23 Jul 2020 14:35:03 +0000 (10:35 -0400)]
[VectorCombine] add tests for load vectorization; NFC

4 years agoGISelKnownBits.h - remove unused includes. NFC.
Simon Pilgrim [Thu, 23 Jul 2020 14:52:16 +0000 (15:52 +0100)]
GISelKnownBits.h - remove unused includes. NFC.

4 years agoAggressiveInstCombine.h - remove unused includes. NFC.
Simon Pilgrim [Thu, 23 Jul 2020 14:47:53 +0000 (15:47 +0100)]
AggressiveInstCombine.h - remove unused includes. NFC.

4 years agoPassTimingInfo.h - remove unused includes. NFC.
Simon Pilgrim [Thu, 23 Jul 2020 14:42:25 +0000 (15:42 +0100)]
PassTimingInfo.h - remove unused includes. NFC.

Remove duplicate includes from PassTimingInfo.cpp that already exist in PassTimingInfo.h

4 years ago[ELF] Support -r --gc-sections
Fangrui Song [Thu, 23 Jul 2020 15:16:01 +0000 (08:16 -0700)]
[ELF] Support -r --gc-sections

-r --gc-sections is usually not useful because it just makes intermediate output
smaller. https://bugs.llvm.org/show_bug.cgi?id=46700#c7 mentions a use case:
validating the absence of undefined symbols ealier than in the final link.

After D84129 (SHT_GROUP support in -r links), we can support -r
--gc-sections without extra code. So let's allow it.

Reviewed By: grimar, jhenderson

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

4 years ago[gn build] Port 92874d28669
LLVM GN Syncbot [Thu, 23 Jul 2020 15:07:01 +0000 (15:07 +0000)]
[gn build] Port 92874d28669

4 years ago[CodeGen][TargetPassConfig] Add unreachable-mbb-elimination pass explicitly
Evgeny Leviant [Thu, 23 Jul 2020 15:05:11 +0000 (18:05 +0300)]
[CodeGen][TargetPassConfig] Add unreachable-mbb-elimination pass explicitly

Differential revision: https://reviews.llvm.org/D84228

4 years ago[Matrix] Add asserts for mismatched element types.
Braedy Kuzma [Thu, 23 Jul 2020 14:57:22 +0000 (15:57 +0100)]
[Matrix] Add asserts for mismatched element types.

This patch clarifies the failing point of having input or output vectors
of differing types. Before, lowering would fail elsewhere (e.g. in
`fmul` creation) which may have been not immediately clear.

As a side effect, the `getElementType` and `getVectoryTy` functions
required the `const` qualifier to be added.

Reviewers: fhahn

Reviewed By: fhahn

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

4 years ago[AMDGPU] Fix typo. NFC
Sebastian Neubauer [Thu, 23 Jul 2020 14:58:16 +0000 (16:58 +0200)]
[AMDGPU] Fix typo. NFC

4 years ago[DWARFYAML] Refactor emitDebugInfo() to make the length be inferred.
Xing GUO [Thu, 23 Jul 2020 15:00:19 +0000 (23:00 +0800)]
[DWARFYAML] Refactor emitDebugInfo() to make the length be inferred.

This patch refactors `emitDebugInfo()` to make the length field be
inferred from its content. Besides, the `Visitor` class is removed in
this patch. The original `Visitor` class helps us determine an
appropriate length and emit the .debug_info section. These two
processes can be merged into one process. Besides, the length field
should be inferred when it's missing rather than when it's zero.

Reviewed By: jhenderson, labath

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

4 years ago[DWARFYAML] Pull out common helper functions for rnglist and loclist tables. NFC.
Xing GUO [Thu, 23 Jul 2020 14:57:30 +0000 (22:57 +0800)]
[DWARFYAML] Pull out common helper functions for rnglist and loclist tables. NFC.

This patch helps pull out some common helper functions for range list
and location list tables. NFC.

Reviewed By: jhenderson

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

4 years ago[mlir]: NFC: Fix trivial typo in documents and comments
Kazuaki Ishizaki [Thu, 23 Jul 2020 14:40:35 +0000 (23:40 +0900)]
[mlir]: NFC: Fix trivial typo in documents and comments

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

4 years ago[X86][SSE] SimplifyDemandedVectorEltsForTargetNode - add SSE shift multiple use handling
Simon Pilgrim [Thu, 23 Jul 2020 13:09:31 +0000 (14:09 +0100)]
[X86][SSE] SimplifyDemandedVectorEltsForTargetNode - add SSE shift multiple use handling

Add SimplifyMultipleUseDemandedVectorElts peek through for imm/var SSE shifts

4 years ago[SystemZ] Ensure -mno-vx disables any use of vector features
Ulrich Weigand [Thu, 23 Jul 2020 13:31:15 +0000 (15:31 +0200)]
[SystemZ] Ensure -mno-vx disables any use of vector features

When passing the -vector feature to LLVM (or equivalently the
-mno-vx command line argument to clang), the intent is that
generated code must not use any vector features (in particular,
no vector registers must be used).

However, there are some cases where we still could generate
such uses; these are all related to some of the additional
vector features (like +vector-enhancements-1).  Since none
of those features are actually usable with -vector, just make
sure we disable them all if -vector is given.

4 years ago[SCEVExpander] Use IRBuilderCallbackInserter to call rememberInstruction.
Florian Hahn [Thu, 23 Jul 2020 13:19:01 +0000 (14:19 +0100)]
[SCEVExpander] Use IRBuilderCallbackInserter to call rememberInstruction.

Currently there are plenty of instructions that SCEVExpander creates but
does not track as created. IRBuilder allows specifying a callback
whenever an instruction is inserted. Use this to call
rememberInstruction automatically for each created instruction.

There are still a few rememberInstruction calls remaining, because in
some cases Inst::Create functions are used to construct instructions.

Suggested by @lebedev.ri in D75980.

Reviewers: mkazantsev, reames, sanjoy.google, lebedev.ri

Reviewed By: lebedev.ri

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

4 years ago[docs] Fix TestSuiteGuide.md to mention scipy
Russell Gallop [Tue, 23 Jun 2020 13:50:11 +0000 (14:50 +0100)]
[docs] Fix TestSuiteGuide.md to mention scipy

This has been required since https://reviews.llvm.org/D57828.

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

4 years ago[libcxx] Adjust trivial_abi tests for C++03 and C++11 testing
Mikhail Maltsev [Thu, 23 Jul 2020 13:20:30 +0000 (14:20 +0100)]
[libcxx] Adjust trivial_abi tests for C++03 and C++11 testing

This change replaces std::make_unique with manual construction of
std::unique_ptr to make the tests compatible with C++11
(std::make_unique is a C++14 feature).

libc++ supports std::unique_ptr and std::shared_ptr even in C++03 but
with some limitations: unique_ptr_array.pass.cpp and
shared_ptr_arg.pass.cpp fail to compile in C++03 mode and need to be
disabled.

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

4 years ago[GlobalISel][AMDGPU] Legalize saturating add/subtract
Jay Foad [Sun, 12 Jul 2020 18:18:45 +0000 (14:18 -0400)]
[GlobalISel][AMDGPU] Legalize saturating add/subtract

Add support in LegalizerHelper for lowering G_SADDSAT etc. either
using add/subtract-with-overflow or using max/min instructions.

Enable this lowering for AMDGPU so it can be tested. The legalization
rules are still approximate and skips out on using the clamp bit to
treat these as legal, which has never been used before. This also
doesn't yet try to deal with expanding SALU cases.

4 years ago[LSR] Re-generate check lines for test.
Florian Hahn [Thu, 23 Jul 2020 12:26:22 +0000 (13:26 +0100)]
[LSR] Re-generate check lines for test.

The test is quite frafile, as the check lines match IR numbers and it is
not obvious why only a very small subset is checked.

Re-generate check lines, so further changes are more obvious.

4 years ago[LoopIdiom] Add additional test cases.
Florian Hahn [Thu, 23 Jul 2020 09:20:55 +0000 (10:20 +0100)]
[LoopIdiom] Add additional test cases.

4 years agoUpdate make_cxx_dr_status and cxx_dr_status.html for the new release.
Erich Keane [Thu, 23 Jul 2020 12:50:10 +0000 (05:50 -0700)]
Update make_cxx_dr_status and cxx_dr_status.html for the new release.

Our latest release is now 11, so update the make_cxx_dr_status and
regenerate the cxx_dr_status.html document.

4 years ago[InstSimplify] reduce code duplication for binop expansion; NFC
Sanjay Patel [Thu, 23 Jul 2020 12:33:45 +0000 (08:33 -0400)]
[InstSimplify] reduce code duplication for binop expansion; NFC

D84250 proposes to extend this code, so the duplication for
the commuted case would continue to grow.

4 years agoFix -Wparentheses warning - add missing brackets around the entire assertion condition
Simon Pilgrim [Thu, 23 Jul 2020 11:51:18 +0000 (12:51 +0100)]
Fix -Wparentheses warning - add missing brackets around the entire assertion condition

4 years agoRecommit "[lldb/API] Overwrite variables with SBLaunchInfo::SetEnvironment(append...
Pavel Labath [Mon, 6 Jul 2020 14:44:37 +0000 (16:44 +0200)]
Recommit "[lldb/API] Overwrite variables with SBLaunchInfo::SetEnvironment(append=true)"

The patch was reverted 27d52cd86a2c because of failures in
TestWeakSymbols.py. These have now been addressed in D83552.

The original commit message was:
This function was documented to overwrite entries with D76111, which was
adding a couple of similar functions. However, this function (unlike the
functions added in that patch) was/is not actually overwriting variables
-- any pre-existing variables would get ignored.

This behavior does not seem to be intentional. In fact, before the refactor in
D41359, this function could introduce duplicate entries, which could
have very surprising effects both inside lldb and on other applications
(some applications would take the first value, some the second one; in
lldb, attempting to unset a variable could make the second variable
become active, etc.).

Overwriting seems to be the most reasonable behavior here, so change the
code to match documentation.

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

4 years ago[Attributor] Cache query results for isPotentiallyReachable in AAReachability
Shinji Okumura [Thu, 23 Jul 2020 11:26:30 +0000 (20:26 +0900)]
[Attributor] Cache query results for isPotentiallyReachable in AAReachability

Summary:
This is the next patch of [[ https://reviews.llvm.org/D76210 | D76210 ]].
This patch made a map in `InformationCache` for caching results.

Reviewers: jdoerfert, sstefan1, uenoku, homerdin, baziotis

Reviewed By: jdoerfert

Subscribers: hiraditya, uenoku, kuter, bbn, llvm-commits

Tags: #llvm

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

4 years ago[GlobalISel][InlineAsm] Add register class ID to the flags of register input operands
Konstantin Schwarz [Tue, 30 Jun 2020 13:59:55 +0000 (15:59 +0200)]
[GlobalISel][InlineAsm] Add register class ID to the flags of register input operands

Summary: We do this already for output operands, but missed it for (non-tied) input operands.

Reviewers: arsenm, Petar.Avramovic

Reviewed By: arsenm

Subscribers: jvesely, wdng, nhaehnle, rovka, hiraditya, llvm-commits, kerbowa

Tags: #llvm

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

4 years agoFix implicit dependency on CommandLine.h
Simon Pilgrim [Thu, 23 Jul 2020 11:32:53 +0000 (12:32 +0100)]
Fix implicit dependency on CommandLine.h

4 years agoValueProfileCollector.h - remove unnecessary includes. NFC.
Simon Pilgrim [Thu, 23 Jul 2020 11:31:12 +0000 (12:31 +0100)]
ValueProfileCollector.h - remove unnecessary includes. NFC.

4 years ago[lldb/test] Fix TestHistoryRecall failure (NFC)
Med Ismail Bennani [Thu, 23 Jul 2020 11:21:26 +0000 (13:21 +0200)]
[lldb/test] Fix TestHistoryRecall failure (NFC)

This patch fixes a test failure in TestHistoryRecall caused by the move
of the `history` subcommand to the `session` command.

This change was introduced by commit 85fbb08fa2ac5195dc7a2f13eea7de1471da2a21.

Signed-off-by: Med Ismail Bennani <medismail.bennani@gmail.com>
4 years agoFix implicit dependency on CommandLine.h
Simon Pilgrim [Thu, 23 Jul 2020 11:14:35 +0000 (12:14 +0100)]
Fix implicit dependency on CommandLine.h

4 years ago[lldb/interpreter] Move the history subcommand to session (NFCI)
Med Ismail Bennani [Wed, 22 Jul 2020 11:07:12 +0000 (13:07 +0200)]
[lldb/interpreter] Move the history subcommand to session (NFCI)

This patch moves the `history` subcommand from the `command` to `session`
command. I think it makes more sense to have it there because as the `command`
usage suggests, it should be used to manage custom LLDB commands.

However, `history` is essentially tied to a debugging session and holds
all the commands (not specifically custom ones).

This also makes it more discoverable by adding an alias for it (mimicking
the shell builtin).

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

Signed-off-by: Med Ismail Bennani <medismail.bennani@gmail.com>
4 years agoSpeculation.h - remove unnecessary includes. NFC.
Simon Pilgrim [Thu, 23 Jul 2020 10:54:10 +0000 (11:54 +0100)]
Speculation.h - remove unnecessary includes. NFC.

4 years ago[ScheduleDAGRRList] Pacify overload mismatch in std::min.
Florian Hahn [Thu, 23 Jul 2020 10:54:38 +0000 (11:54 +0100)]
[ScheduleDAGRRList] Pacify overload mismatch in std::min.

On systems where size() doesn't return unsigned long, this leads to an
overloading mismatch. Convert the constant to whatever type is used for
Q.size() on the system.

4 years ago[ScheduleDAGRRList] Limit number of candidates to explore.
Florian Hahn [Thu, 23 Jul 2020 09:14:32 +0000 (10:14 +0100)]
[ScheduleDAGRRList] Limit number of candidates to explore.

Currently popFromQueueImpl iterates over all candidates to find the best
one. While the candidate queue is small, this is not a problem. But it
becomes a problem once the queue gets larger. For example, the snippet
below takes 330s to compile with llc -O0, but completes in 3s with this
patch.

define void @test(i4000000* %ptr) {
entry:
  store i4000000 0, i4000000* %ptr, align 4
  ret void
}

This patch limits the number of candidates to check to 1000. This limit
ensures that it never triggers for test-suite/SPEC2000/SPEC2006 on X86
and AArch64 with -O3, while still drastically limiting the compile-time
in case of very large queues.

It would be even better to use a binary heap to manage to queue
(D83335), but some heuristics change the score of a node in the queue
after another node has been scheduled. I plan to address this for
backends that use the MachineScheduler in the future, but that requires
a more careful evaluation. In the meantime, the limit should help users
impacted by this issue.

The patch includes a slightly smaller version of the motivating example
as test case, to guard against the issue.

Reviewers: efriedma, paquette, niravd

Reviewed By: efriedma

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

4 years ago[mlir][Linalg] emitLoopRanges and emitLoopRangesWithSymbols merged into one
Jakub Lichman [Thu, 23 Jul 2020 10:27:46 +0000 (12:27 +0200)]
[mlir][Linalg] emitLoopRanges and emitLoopRangesWithSymbols merged into one

Right now there is a branching for 2 functions based on whether target map has
symbols or not. In this commit these functions are merged into one.
Furthermore, emitting does not require inverse and map applying as it computes
the correct Range in a single step and thus reduces unnecessary overhead.

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

4 years ago[mlir] Added verification check for linalg.conv to ensure memrefs are of rank > 2
Jakub Lichman [Thu, 23 Jul 2020 10:26:05 +0000 (12:26 +0200)]
[mlir] Added verification check for linalg.conv to ensure memrefs are of rank > 2

linalg.conv does not support memrefs with rank smaller than 3 as stated here:
https://www.tensorflow.org/versions/r2.0/api_docs/python/tf/nn/convolution

However it does not verify it and thus crashes with "LLVM ERROR: out of memory"
error for 1D case and "nWin > 0 && "expected at least one window dimension"" assertion
for 2D case. This commit adds check for that in the verification method.

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

4 years ago[lit] Include total elapsed time in xunit output
Alex Richardson [Thu, 23 Jul 2020 09:45:55 +0000 (10:45 +0100)]
[lit] Include total elapsed time in xunit output

The time= attribute can also be used for the testsuites tag. While this
attribute appears to be ignored by Jenkins (https://github.com/jenkinsci/junit-plugin/blob/bab34bcc96154a494f8c371953efe06d45813f67/src/main/java/hudson/tasks/junit/SuiteResult.java#L202),
it is still useful if you manually inspect the xml file.

Reviewed By: yln

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

4 years ago[libcxx][lit] Fix incorrect lambda capture in hasLocale checks
Alex Richardson [Thu, 23 Jul 2020 09:45:25 +0000 (10:45 +0100)]
[libcxx][lit] Fix incorrect lambda capture in hasLocale checks

The lambda being used to check whether locales are supported was always
passing the value of alts from the last loop iteration due to the way that
python lambda captures work. Fix this by using a default argument capture.

To help debug future similar issues I also added a prefix to the config
test binary indicating which locale is being tested.
I originally found this issue when implementing a new executor that simply
collects test binaries in a given directory and was surprised to see many
additional executables other than the expected test binaries. I therefore
added the locale prefix to the test binaries and noticed that they were all
checking for cs_CZ.ISO8859-2.

Reviewed By: #libc, ldionne

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

4 years ago[llvm-readelf] - Simplify the implementation of getSectionTypeString() helper. NFCI.
Georgii Rymar [Wed, 22 Jul 2020 14:44:32 +0000 (17:44 +0300)]
[llvm-readelf] - Simplify the implementation of getSectionTypeString() helper. NFCI.

It is used for printing section headers in the GNU style
and the implementation can be simplified.

Differential revision: https://reviews.llvm.org/D84330

4 years ago[Analyzer][StreamChecker] Use BugType::SuppressOnSink at resource leak report.
Balázs Kéri [Thu, 23 Jul 2020 08:53:16 +0000 (10:53 +0200)]
[Analyzer][StreamChecker] Use BugType::SuppressOnSink at resource leak report.

Summary:
Use the built-in functionality BugType::SuppressOnSink
instead of a manual solution in StreamChecker.

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

4 years ago[DebugInfo] Attempt to fix regression test failure after 59a76d957a2603ee0
Sourabh Singh Tomar [Thu, 23 Jul 2020 09:13:24 +0000 (14:43 +0530)]
[DebugInfo] Attempt to fix regression test failure after 59a76d957a2603ee0

Test case `test/CodeGen/WebAssembly/stackified-debug.ll`
was failing due to malformed DwarfExpression.

This failure has been seen in lot of bots, for instance in:
http://lab.llvm.org:8011/builders/lld-x86_64-ubuntu-fast/builds/18794

: 'RUN: at line 1'
/home/buildbot/as-builder-4/lld-x86_64-ubuntu-fast/build/bin/llc
/home/buildbot/as-builder-4/lld-x86_64-ubuntu-fast/build/bin/FileCheck /home/buildbot/as-builder-4/lld-x86_64-ubuntu-fast/llvm-project/llvm/test/CodeGen/WebAssembly/stackified-debug.ll
home/buildbot/as-builder-4/lld-x86_64-ubuntu-fast/llvm-project/llvm/test/CodeGen/WebAssembly/stackified-debug.ll:26:10: error: CHECK: expected string not found in input
 CHECK: .int16 4 # Loc expr size
         ^
<stdin>:34:2: note: scanning from here
 .int16 3 # Loc expr size

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

4 years ago[mlir] Loop bounds inference in linalg.generic op improved to support bounds for...
Jakub Lichman [Thu, 23 Jul 2020 08:58:21 +0000 (10:58 +0200)]
[mlir] Loop bounds inference in linalg.generic op improved to support bounds for convolution

Loop bound inference is right now very limited as it supports only permutation maps and thus
it is impossible to implement convolution with linalg.generic as it requires more advanced
loop bound inference. This commits solves it for the convolution case.

Depends On D83158

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

4 years agoRe-apply:" Emit DW_OP_implicit_value for Floating point constants"
Sourabh Singh Tomar [Thu, 23 Jul 2020 01:51:06 +0000 (07:21 +0530)]
Re-apply:" Emit DW_OP_implicit_value for Floating point constants"

This patch was reverted in 9d2da6759b4d due to assertion failure seen
in `test/DebugInfo/Sparc/subreg.ll`. Assertion failure was happening
due to malformed/unhandeled DwarfExpression.

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

4 years ago[Reduce] Rewrite runDeltaPass() workloop: do reduce a single and/or last target
Roman Lebedev [Thu, 23 Jul 2020 07:51:09 +0000 (10:51 +0300)]
[Reduce] Rewrite runDeltaPass() workloop: do reduce a single and/or last target

Summary:
If there was a single target to begin with, because a single target
can only occupy a single chunk, we couldn't increase granularity.
and would immediately give up.

Likewise, if we had multiple targets, if by the end we'd end up with
a single target, we wouldn't finish reducing it, it would always
end up being "interesting"

Reviewers: dblaikie, nickdesaulniers, diegotf

Reviewed By: dblaikie

Subscribers: llvm-commits

Tags: #llvm

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

4 years agoTemporarily Revert "Reland [lldb] Unify type name matching in FormattersContainer"
Eric Christopher [Thu, 23 Jul 2020 07:46:03 +0000 (00:46 -0700)]
Temporarily Revert "Reland [lldb] Unify type name matching in FormattersContainer"
as it breaks bots with due to m_valid being an unused class member
except in assert builds.

This reverts commit 074b121642b286afb16adeebda5ec8236f7b8ea9.

4 years ago[compiler-rt][sanitizers] Fix Solaris madvise declaration
Rainer Orth [Thu, 23 Jul 2020 07:37:14 +0000 (09:37 +0200)]
[compiler-rt][sanitizers] Fix Solaris madvise declaration

A last-minute silent change in  D84046 <https://reviews.llvm.org/D84046> broke the Solaris buildbots (Solaris/sparcv9 <http://lab.llvm.org:8014/builders/clang-solaris11-sparcv9/builds/6772>, Solaris/amd64 <http://lab.llvm.org:8014/builders/clang-solaris11-amd64/builds/5434>):

  [2/3679] Building CXX object projects/compiler-rt/lib/sanitizer_common/CMakeFiles/RTSanitizerCommonLibc.sparc.dir/sanitizer_posix_libcdep.cpp.o
  FAILED: projects/compiler-rt/lib/sanitizer_common/CMakeFiles/RTSanitizerCommonLibc.sparc.dir/sanitizer_posix_libcdep.cpp.o
  /opt/llvm-buildbot/bin/c++  -DHAVE_RPC_XDR_H=1 -D_DEBUG -D_FILE_OFFSET_BITS=64 -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -Iprojects/compiler-rt/lib/sanitizer_common -I/opt/llvm-buildbot/home/solaris11-sparcv9/clang-solaris11-sparcv9/llvm/compiler-rt/lib/sanitizer_common -Iinclude -I/opt/llvm-buildbot/home/solaris11-sparcv9/clang-solaris11-sparcv9/llvm/llvm/include -I/opt/llvm-buildbot/home/solaris11-sparcv9/clang-solaris11-sparcv9/llvm/llvm/include/llvm/Support/Solaris -I/opt/llvm-buildbot/home/solaris11-sparcv9/clang-solaris11-sparcv9/llvm/compiler-rt/lib/sanitizer_common/.. -fPIC -fvisibility-inlines-hidden -Werror=date-time -Wall -Wextra -Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wno-missing-field-initializers -pedantic -Wno-long-long -Wimplicit-fallthrough -Wno-maybe-uninitialized -Wno-noexcept-type -Wdelete-non-virtual-dtor -Wno-comment -fdiagnostics-color -ffunction-sections -fdata-sections -Wall -std=c++14 -Wno-unused-parameter -O3     -m32 -fPIC -fno-builtin -fno-exceptions -fomit-frame-pointer -funwind-tables -fno-stack-protector -fvisibility=hidden -fno-lto -O3 -g -Wno-variadic-macros -Wno-non-virtual-dtor -fno-rtti -Wframe-larger-than=570 -UNDEBUG -std=c++14 -MD -MT projects/compiler-rt/lib/sanitizer_common/CMakeFiles/RTSanitizerCommonLibc.sparc.dir/sanitizer_posix_libcdep.cpp.o -MF projects/compiler-rt/lib/sanitizer_common/CMakeFiles/RTSanitizerCommonLibc.sparc.dir/sanitizer_posix_libcdep.cpp.o.d -o projects/compiler-rt/lib/sanitizer_common/CMakeFiles/RTSanitizerCommonLibc.sparc.dir/sanitizer_posix_libcdep.cpp.o -c /opt/llvm-buildbot/home/solaris11-sparcv9/clang-solaris11-sparcv9/llvm/compiler-rt/lib/sanitizer_common/sanitizer_posix_libcdep.cpp
  /opt/llvm-buildbot/home/solaris11-sparcv9/clang-solaris11-sparcv9/llvm/compiler-rt/lib/sanitizer_common/sanitizer_posix_libcdep.cpp:50:16: error: conflicting declaration of C function ‘int madvise(caddr_t, std::size_t, int)’
   extern "C" int madvise(caddr_t, size_t, int);
                  ^~~~~~~
  In file included from /opt/llvm-buildbot/home/solaris11-sparcv9/clang-solaris11-sparcv9/llvm/compiler-rt/lib/sanitizer_common/sanitizer_posix_libcdep.cpp:32:0:
  /usr/include/sys/mman.h:232:12: note: previous declaration ‘int madvise(void*, std::size_t, int)’
   extern int madvise(void *, size_t, int);
              ^~~~~~~

This patch undoes that change.

Tested on `amd64-pc-solaris2.11` (Solaris 11.4 and OpenIndiana).

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

4 years ago[mlir] [VectorOps] Improve scatter/gather CPU performance
aartbik [Thu, 23 Jul 2020 06:47:33 +0000 (23:47 -0700)]
[mlir] [VectorOps] Improve scatter/gather CPU performance

Replaced the linearized address with the proper LLVM way of
defining vector of base + indices in SIMD style. This yields
much better code. Some prototype results with microbencmarking
sparse matrix x vector with 50% sparsity (about 2-3x faster):

         LINEARIZED     IMPROVED
GFLOPS  sdot  saxpy     sdot saxpy
16x16    1.6   1.4       4.4  2.1
32x32    1.7   1.6       5.8  5.9
64x64    1.7   1.7       6.4  6.4
128x128  1.7   1.7       5.9  5.9
256x256  1.6   1.6       6.1  6.0
512x512  1.4   1.4       4.9  4.7

Reviewed By: nicolasvasilache

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

4 years ago[Windows] Fix limit on command line size
Serge Pavlov [Tue, 14 Jul 2020 10:57:04 +0000 (17:57 +0700)]
[Windows] Fix limit on command line size

This reapplies commit d4020ef7c474, reverted in ac0edc55887b because it
broke build of LLDB. This commit contains appropriate changes for LLDB.
The original commit message is below.

Documentation on CreateProcessW states that maximal size of command line
is 32767 characters including ternimation null character. In the
function llvm::sys::commandLineFitsWithinSystemLimits this limit was set
to 32768. As a result if command line was exactly 32768 characters long,
a response file was not created and CreateProcessW was called with
too long command line.

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

4 years agoReland D84057 [PGO][PGSO] Remove a temporary flag used for gradual rollout.
Hiroshi Yamauchi [Thu, 23 Jul 2020 03:57:25 +0000 (20:57 -0700)]
Reland D84057 [PGO][PGSO] Remove a temporary flag used for gradual rollout.

The revert was a misfire.

Remove the temporary flag PGSOIRPassOrTestOnly and the guard code which was used
for the staged rollout. This is a cleanup (NFC) as it's now false by default.

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

4 years agoRevert "[DebugInfo] Emit DW_OP_implicit_value for Floating point constants"
Sourabh Singh Tomar [Thu, 23 Jul 2020 03:17:39 +0000 (08:47 +0530)]
Revert "[DebugInfo] Emit DW_OP_implicit_value for Floating point constants"

This reverts commit 6b55a95898e98664164caae4aba7c5e24fd1a05e.
Temporal revert due to a failing/assertion in test case in Sparc backend.
`test/DebugInfo/Sparc/subreg.ll`
Seen in lot of bots, for instance in:
`http://lab.llvm.org:8011/builders/llvm-clang-x86_64-expensive-checks-win/builds/24679`

4 years agoRevert "[OpenMP] Wait for kernel prior to memory deallocation"
Shilei Tian [Thu, 23 Jul 2020 03:03:36 +0000 (23:03 -0400)]
Revert "[OpenMP] Wait for kernel prior to memory deallocation"

This reverts commit 9b2832c0897c1d39846eee0ad84bf787f05d2d4b.

4 years ago[OpenMP] Wait for kernel prior to memory deallocation
Shilei Tian [Thu, 23 Jul 2020 02:48:53 +0000 (22:48 -0400)]
[OpenMP] Wait for kernel prior to memory deallocation

Summary:
In the function `target`, memory deallocation and `target_data_end` is called
immediately returning from launching kernel. This might cause a race condition
that the corresponding memory is still being used by the kernel and a potential
issue that when the kernel starts to execute, its required data have already
been deallocated, especially when multiple kernels running concurrently. Since
nevertheless, we will block the thread issuing the target offloading at the end
of the target, we just move the synchronization ahead a little bit to make sure
the correctness.

Reviewers: jdoerfert

Reviewed By: jdoerfert

Subscribers: yaxunl, guansong, sstefan1, openmp-commits

Tags: #openmp

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

4 years ago[DWARFYAML] Refactor range list table to hold more data structure.
Xing GUO [Thu, 23 Jul 2020 02:25:01 +0000 (10:25 +0800)]
[DWARFYAML] Refactor range list table to hold more data structure.

This patch refactors the range list table to hold both the range list
table and the location list table.

Reviewed By: jhenderson, labath

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

4 years ago[DebugInfo] Emit DW_OP_implicit_value for Floating point constants
Sourabh Singh Tomar [Thu, 23 Jul 2020 01:51:06 +0000 (07:21 +0530)]
[DebugInfo] Emit DW_OP_implicit_value for Floating point constants

Summary:
llvm is missing support for DW_OP_implicit_value operation.
DW_OP_implicit_value op is indispensable for cases such as
optimized out long double variables.

For intro refer: DWARFv5 Spec Pg: 40 2.6.1.1.4 Implicit Location Descriptions

Consider the following example:
```
int main() {
        long double ld = 3.14;
        printf("dummy\n");
        ld *= ld;
        return 0;
}
```
when compiled with tunk `clang` as
`clang test.c -g -O1` produces following location description
of variable `ld`:
```
DW_AT_location        (0x00000000:
                     [0x0000000000201691, 0x000000000020169b): DW_OP_constu 0xc8f5c28f5c28f800, DW_OP_stack_value, DW_OP_piece 0x8, DW_OP_constu 0x4000, DW_OP_stack_value, DW_OP_bit_piece 0x10 0x40, DW_OP_stack_value)
                  DW_AT_name    ("ld")
```
Here one may notice that this representation is incorrect(DWARF4
stack could only hold integers(and only up to the size of address)).
Here the variable size itself is `128` bit.
GDB and LLDB confirms this:
```
(gdb) p ld
$1 = <invalid float value>
(lldb) frame variable ld
(long double) ld = <extracting data from value failed>
```

GCC represents/uses DW_OP_implicit_value in these sort of situations.
Based on the discussion with Jakub Jelinek regarding GCC's motivation
for using this, I concluded that DW_OP_implicit_value is most appropriate
in this case.

Link: https://gcc.gnu.org/pipermail/gcc/2020-July/233057.html
GDB seems happy after this patch:(LLDB doesn't have support
for DW_OP_implicit_value)
```
(gdb) p ld
p ld
$1 = 3.14000000000000012434
```

Reviewed By: aprantl

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

4 years ago[PGO] Don't call calloc(0, sizeof(ValueProfNode *))
Fangrui Song [Thu, 23 Jul 2020 01:46:57 +0000 (18:46 -0700)]
[PGO] Don't call calloc(0, sizeof(ValueProfNode *))

A malloc implementation may return a pointer to some allocated space.  It is
undefined for libclang_rt.profile- to access the object - which actually happens
in instrumentTargetValueImpl, where ValueCounters[CounterIndex] may access a
ValueProfNode (from another allocated object) and crashes when the code accesses
the object referenced by CurVNode->Next.

4 years ago[flang][OpenMP] Added support for lowering OpenMP taskyield construct
Sourabh Singh Tomar [Wed, 22 Jul 2020 18:09:54 +0000 (23:39 +0530)]
[flang][OpenMP] Added support for lowering OpenMP taskyield construct

Summary:
This patch lower `!OMP TASKYIELD` construct from PFT to
OpenMPDialect operations.
Construct is lowered with conformance to OpenMP 5.0 spec.

Patch is carved out of following merged PR:
https://github.com/flang-compiler/f18-llvm-project/pull/297

Reviewed: kiranchandramohan

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

4 years ago[flang][openacc] Skeleton for OpenACC construct lowering
Valentin Clement [Thu, 23 Jul 2020 01:32:57 +0000 (21:32 -0400)]
[flang][openacc] Skeleton for OpenACC construct lowering

Summary:
This patch introduce the basic infrastructure to be able to lower
OpenACC constructs to the future OpenACC dialect.

Reviewers: schweitz, kiranchandramohan, DavidTruby, sscalpone, jdoerfert, ichoyjx

Reviewed By: ichoyjx

Subscribers: ichoyjx, SouraVX, mgorny, jfb, sstefan1, llvm-commits

Tags: #llvm, #flang

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

4 years ago[flang][openmp] Required clauses are allowed
Valentin Clement [Thu, 23 Jul 2020 01:31:07 +0000 (21:31 -0400)]
[flang][openmp] Required clauses are allowed

Summary:
This patch fix a problem where clause needed to be in the allowed set even
they were in the required set. A required clause is allowed obvisouly. This allow
to remove the duplicate in OMP.td

Reviewers: kiranchandramohan, DavidTruby, richard.barton.arm, jdoerfert, sscalpone, kiranktp, ichoyjx

Reviewed By: kiranchandramohan

Subscribers: yaxunl, guansong, sstefan1, llvm-commits

Tags: #llvm

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

4 years ago[OpenMPOpt] Regression test for hiding latency of H2D mem transfers
Hamilton Tobon Mosquera [Thu, 23 Jul 2020 01:02:54 +0000 (20:02 -0500)]
[OpenMPOpt] Regression test for hiding latency of H2D mem transfers

4 years ago[flang] Add runtime I/O APIs for COMPLEX formatted input
peter klausler [Thu, 23 Jul 2020 00:01:22 +0000 (17:01 -0700)]
[flang] Add runtime I/O APIs for COMPLEX formatted input

It turns out that COMPLEX formatted input needs its own runtime APIs
so that null values in list-directed input skip the entire COMPLEX
datum rather than just a real or imaginary part thereof.

Reviewed By: sscalpone

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

4 years agoReapply "Try enabling -Wsuggest-override again, using add_compile_options instead...
Logan Smith [Thu, 23 Jul 2020 00:44:52 +0000 (17:44 -0700)]
Reapply "Try enabling -Wsuggest-override again, using add_compile_options instead of add_compile_definitions for disabling it in unittests/ directories."

add_compile_options is more sensitive to its location in the file than add_definitions--it only takes effect for sources that are added after it. This updated patch ensures that the add_compile_options is done before adding any source files that depend on it.

Using add_definitions caused the flag to be passed to rc.exe on Windows and thus broke Windows builds.

4 years ago[X86] Remove the DeprecatedMPX feature flag.
Craig Topper [Thu, 23 Jul 2020 00:09:11 +0000 (17:09 -0700)]
[X86] Remove the DeprecatedMPX feature flag.

We deprecated mpx feature in 10.0. I left this feature flag
in case someone still had IR files containing the feature
in a target-feature attribute. At the time I think I thought it
would fail the test if the feature couldn't be found. Further
review suggests that at worst it prints a message to
stderr about ignoring the feature.

4 years ago[Symbolize][PDB] Switch llvm-symbolizer to use PDB_ReaderType::Native.
Amy Huang [Thu, 23 Jul 2020 00:17:57 +0000 (17:17 -0700)]
[Symbolize][PDB] Switch llvm-symbolizer to use PDB_ReaderType::Native.

Since native PDB reading has been implemented for symbolizing,
switch to using the native PDB reader by default, unless
LLVM_ENABLE_DIA_SDK is on.

Bug: https://bugs.llvm.org/show_bug.cgi?id=41795

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

4 years ago[lldb] Fix LLDB_DEFAULT_TEST_ARCH for standalone builds
Jonas Devlieghere [Thu, 23 Jul 2020 00:03:09 +0000 (17:03 -0700)]
[lldb] Fix LLDB_DEFAULT_TEST_ARCH for standalone builds

LLVM_TARGET_ARCH is not exported by LLVM so we can't use it from
standalone builds. Default to the architecture in LLVM_HOST_TRIPLE when
no LLDB_DEFAULT_TEST_ARCH was specified.

4 years ago[X86] Rework the "sahf" feature flag to only apply to 64-bit mode.
Craig Topper [Wed, 22 Jul 2020 23:19:38 +0000 (16:19 -0700)]
[X86] Rework the "sahf" feature flag to only apply to 64-bit mode.

SAHF/LAHF instructions are always available in 32-bit mode. Early
64-bit capable CPUs made the undefined opcodes in 64-bit mode. This
was changed on later CPUs.

We have a feature flag to control our usage of these instructions.
This feature flag is hooked up to a clang command line option
-msahf/-mno-sahf specifically to give control of the 64-bit mode
behavior.

In the backend X86Subtarget constructor we were explicitly forcing
+sahf into the feature flag string if we were not compiling for
64-bit mode. This was intended to make the predicates always allow
the instructions outside of 64-bit mode. Unfortunately, the way
it was placed into the string allowed -mno-sahf from clang to disable
SAHF instructions in 32-bit mode. This causes an assertion to fire
if you compile a floating point comparison with something like
"-march=pentium -mno-sahf" as our floating point comparison
handling on CPUs that don't support FCOMI/FUCOMI instructions
requires SAHF.

To fix this, this commit restricts the feature flag to only apply to
64-bit mode by ignoring the flag outside 64-bit mode in
X86Subtarget::hasLAHFSAHF(). This way we don't need to mess with
the feature string at all.

4 years ago[DFSan] Handle fast16labels for all API functions.
Matt Morehouse [Wed, 22 Jul 2020 23:53:57 +0000 (23:53 +0000)]
[DFSan] Handle fast16labels for all API functions.

Summary:
Support fast16labels in `dfsan_has_label`, and print an error for all
other API functions.

Reviewers: kcc, vitalybuka, pcc

Reviewed By: kcc

Subscribers: jfb, llvm-commits, #sanitizers

Tags: #sanitizers

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

4 years ago[gn build] Port 13ad00be98e
LLVM GN Syncbot [Wed, 22 Jul 2020 23:32:03 +0000 (23:32 +0000)]
[gn build] Port 13ad00be98e

4 years ago[ORC] Add a TargetProcessControl-based dynamic library search generator.
Lang Hames [Wed, 22 Jul 2020 23:06:16 +0000 (16:06 -0700)]
[ORC] Add a TargetProcessControl-based dynamic library search generator.

TPCDynamicLibrarySearchGenerator uses a TargetProcessControl instance to
load libraries and search for symbol addresses in a target process. It
can be used in place of a DynamicLibrarySearchGenerator to enable
target-process agnostic lookup.

4 years ago[gn build] Port 27650ec5541
LLVM GN Syncbot [Wed, 22 Jul 2020 23:08:46 +0000 (23:08 +0000)]
[gn build] Port 27650ec5541

4 years agoRevert D81682 "[PGO] Extend the value profile buckets for mem op sizes."
Fangrui Song [Wed, 22 Jul 2020 23:08:06 +0000 (16:08 -0700)]
Revert D81682 "[PGO] Extend the value profile buckets for mem op sizes."

This reverts commit 4a539faf74b9b4c25ee3b880e4007564bd5139b0.

There is a __llvm_profile_instrument_range related crash in PGO-instrumented clang:

```
(gdb) bt
llvm::ConstantRange const&, llvm::APInt const&, unsigned int, bool) ()
llvm::ScalarEvolution::getRangeForAffineAR(llvm::SCEV const*, llvm::SCEV
const*, llvm::SCEV const*, unsigned int) ()
```

(The body of __llvm_profile_instrument_range is inlined, so we can only find__llvm_profile_instrument_target in the trace)

```
 23│    0x000055555dba0961 <+65>:    nopw   %cs:0x0(%rax,%rax,1)
 24│    0x000055555dba096b <+75>:    nopl   0x0(%rax,%rax,1)
 25│    0x000055555dba0970 <+80>:    mov    %rsi,%rbx
 26│    0x000055555dba0973 <+83>:    mov    0x8(%rsi),%rsi  # %rsi=-1 -> SIGSEGV
 27│    0x000055555dba0977 <+87>:    cmp    %r15,(%rbx)
 28│    0x000055555dba097a <+90>:    je     0x55555dba0a76 <__llvm_profile_instrument_target+342>
```

4 years ago[PowerPC][Power10] Fix vins*vlx instructions to have i32 arguments.
Amy Kwan [Wed, 22 Jul 2020 21:25:03 +0000 (16:25 -0500)]
[PowerPC][Power10] Fix vins*vlx instructions to have i32 arguments.

Previously, the vins*vlx instructions were incorrectly defined with i64 as the
second argument. This patches fixes this issue by correcting the second argument
of the vins*vlx instructions/intrinsics to be i32.

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

4 years ago[X86] Remove a couple temporary std::string for CPU names that I don't need to exist.
Craig Topper [Wed, 22 Jul 2020 22:44:41 +0000 (15:44 -0700)]
[X86] Remove a couple temporary std::string for CPU names that I don't need to exist.

The input to these functions is a StringRef. We then convert it
to a std::string. Then maybe replace with "generic". I think we
can just overwrite the incoming StringRef with "generic" if needed
and then pass it along without creating any std::string.

4 years ago[NFC] Simplify `splitLiteralAndReplacement` function
Rahul Joshi [Mon, 20 Jul 2020 15:29:23 +0000 (08:29 -0700)]
[NFC] Simplify `splitLiteralAndReplacement` function

- Eliminate `From` which is 0 most of the times.
- Replace 'find_first_of('{') != 0' with 'front() != '{'
- Simplify the loop body given the it executes only when front() == '}'

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

4 years ago[LLVM] Update formatv() documentation to clarify no escape for `}`
Rahul Joshi [Mon, 20 Jul 2020 15:04:14 +0000 (08:04 -0700)]
[LLVM] Update formatv() documentation to clarify no escape for `}`

- Update documentation to clarify that `}` does not need to be doubled up.
- Update `EscapedBrace` test case to test this behavior

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

4 years ago[libc] Implements strnlen.
cgyurgyik [Wed, 22 Jul 2020 22:21:00 +0000 (18:21 -0400)]
[libc] Implements strnlen.

Reviewed By: sivachandra

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

4 years ago[SVE] Remove calls to VectorType::getNumElements from Analysis
Christopher Tetreault [Wed, 22 Jul 2020 21:36:48 +0000 (14:36 -0700)]
[SVE] Remove calls to VectorType::getNumElements from Analysis

Reviewers: efriedma, fpetrogalli, c-rhodes, asbirlea, RKSimon

Reviewed By: RKSimon

Subscribers: tschuett, hiraditya, rkruppe, psnobl, llvm-commits

Tags: #llvm

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

4 years agoRevert "Try enabling -Wsuggest-override again, using add_compile_options instead...
Logan Smith [Wed, 22 Jul 2020 22:06:05 +0000 (15:06 -0700)]
Revert "Try enabling -Wsuggest-override again, using add_compile_options instead of add_compile_definitions for disabling it in unittests/ directories."

This reverts commit 388c9fb1af48b059d8b65cb2e002e0992d147aa5.

4 years ago[PGO] Supporting code for always instrumenting entry block
Rong Xu [Wed, 22 Jul 2020 21:58:42 +0000 (14:58 -0700)]
[PGO] Supporting code for always instrumenting entry block

This patch includes the supporting code that enables always
instrumenting the function entry block by default.

This patch will NOT the default behavior.

It adds a variant bit in the profile version, adds new directives in
text profile format, and changes llvm-profdata tool accordingly.

This patch is a split of D83024 (https://reviews.llvm.org/D83024)
Many test changes from D83024 are also included.

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

4 years ago[clang][test] Fix test for external assemblers
Douglas Yung [Wed, 22 Jul 2020 21:50:20 +0000 (14:50 -0700)]
[clang][test] Fix test for external assemblers

This test depends on using the integrated assembler, so make it
explicit by specifying -fintegrated-as.

4 years ago[mlir][VectorOps] Expose SuperVectorizer as a utility
Diego Caballero [Wed, 22 Jul 2020 21:10:29 +0000 (14:10 -0700)]
[mlir][VectorOps] Expose SuperVectorizer as a utility

This patch refactors a small part of the Super Vectorizer code to
a utility so that it can be used independently from the pass. This
aligns vectorization with other utilities that we already have for loop
transformations, such as fusion, interchange, tiling, etc.

Reviewed By: nicolasvasilache

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

4 years agoRevert D84057 "[PGO][PGSO] Remove a temporary flag used for gradual rollout."
Fangrui Song [Wed, 22 Jul 2020 21:28:28 +0000 (14:28 -0700)]
Revert D84057 "[PGO][PGSO] Remove a temporary flag used for gradual rollout."

This reverts commit e64afefdf88d2607c476f13de05193c0f8991976. It caused
a PGO bootstrapped clang to crash on many source files.

`__llvm_profile_instrument_range` seems to trigger a null pointer dereference.

Call stack:
__llvm_profile_instrument_range
llvm::APInt::udiv(llvm::APInt const&) const
getRangeForAffineARHelper

4 years ago[MVT] Fix getTypeForEVT for v64f16 and v128f16
Christopher Tetreault [Wed, 22 Jul 2020 20:44:47 +0000 (13:44 -0700)]
[MVT] Fix getTypeForEVT for v64f16 and v128f16

Summary: These should have half float as the element type

Reviewers: cameron.mcinally, efriedma, sdesmalen, paulwalker-arm

Reviewed By: paulwalker-arm

Subscribers: hiraditya, llvm-commits

Tags: #llvm

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

4 years agoTry enabling -Wsuggest-override again, using add_compile_options instead of add_compi...
Logan Smith [Wed, 22 Jul 2020 21:16:35 +0000 (14:16 -0700)]
Try enabling -Wsuggest-override again, using add_compile_options instead of add_compile_definitions for disabling it in unittests/ directories.

Using add_compile_definitions caused the flag to be passed to rc.exe on Windows and thus broke Windows builds.

4 years agoDebugInfo: Use debug_line.dwo for debug_macro.dwo
David Blaikie [Sun, 12 Jul 2020 22:35:21 +0000 (15:35 -0700)]
DebugInfo: Use debug_line.dwo for debug_macro.dwo

This is an alternative proposal to D81476 (and D82084) - the details were sufficiently confusing to me it seemed easier to write some code and see how it looks.

Reviewers: SouraVX

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

4 years ago[lldb] Eliminate unneeded value parameters in Utility (NFC)
Jonas Devlieghere [Wed, 22 Jul 2020 20:33:03 +0000 (13:33 -0700)]
[lldb] Eliminate unneeded value parameters in Utility (NFC)

Eliminates value parameter for types that are not trivially copyable.