Pavel Labath [Thu, 13 Aug 2020 13:02:16 +0000 (15:02 +0200)]
[lldb] Check Decl kind when completing -flimit-debug-info types
The search for the complete class definition can also produce entries
which are not of the expected type. This can happen for instance when
there is a function with the same name as the class we're looking up
(which means that the class needs to be disambiguated with the
struct/class tag in most contexts).
Previously we were just picking the first Decl that the lookup returned,
which later caused crashes or assertion failures if it was not of the
correct type. This patch changes that to search for an entry of the
correct type.
Differential Revision: https://reviews.llvm.org/D85904
Pavel Labath [Fri, 14 Aug 2020 10:14:29 +0000 (12:14 +0200)]
[lldb] Fix py3 incompatibility in gdbremote_testcase.py
This didn't cause test failures since this variable is only used during
connection shutdown.
Stefan Gränitz [Fri, 14 Aug 2020 09:59:18 +0000 (11:59 +0200)]
[ORC] Fix missing include in OrcRemoteTargetClient.h
Raphael Isemann [Fri, 14 Aug 2020 09:48:14 +0000 (11:48 +0200)]
[lldb] Deduplicate copy-pasted TypeSystemMap::GetTypeSystemForLanguage
There are two implementations for `TypeSystemMap::GetTypeSystemForLanguage`
which are both identical beside one taking a `Module` and one taking a `Target`
(and then passing that argument to the `TypeSystem::CreateInstance` function).
This merges both implementations into one function with a lambda that wraps the
different calls to `TypeSystem::CreateInstance`.
Reviewed By: #lldb, JDevlieghere
Differential Revision: https://reviews.llvm.org/D82537
Stefan Gränitz [Fri, 14 Aug 2020 09:45:46 +0000 (11:45 +0200)]
[ORC][NFC] Fix a header comment
Mehdi Amini [Fri, 14 Aug 2020 08:27:22 +0000 (08:27 +0000)]
Separate the Registration from Loading dialects in the Context
This changes the behavior of constructing MLIRContext to no longer load globally registered dialects on construction. Instead Dialects are only loaded explicitly on demand:
- the Parser is lazily loading Dialects in the context as it encounters them during parsing. This is the only purpose for registering dialects and not load them in the context.
- Passes are expected to declare the dialects they will create entity from (Operations, Attributes, or Types), and the PassManager is loading Dialects into the Context when starting a pipeline.
This changes simplifies the configuration of the registration: a compiler only need to load the dialect for the IR it will emit, and the optimizer is self-contained and load the required Dialects. For example in the Toy tutorial, the compiler only needs to load the Toy dialect in the Context, all the others (linalg, affine, std, LLVM, ...) are automatically loaded depending on the optimization pipeline enabled.
Shu Anzai [Wed, 12 Aug 2020 10:54:28 +0000 (12:54 +0200)]
[lldb] Display autosuggestion part in gray if there is one possible suggestion
This is relanding D81001. The patch originally failed as on newer editline
versions it seems CC_REFRESH will move the cursor to the start of the line via
\r and then back to the original position. On older editline versions like
the one used by default on macOS, CC_REFRESH doesn't move the cursor at all.
As the patch changed the way we handle tab completion (previously we did
REDISPLAY but now we're doing CC_REFRESH), this caused a few completion tests
to receive this unexpected cursor movement in the output stream.
This patch updates those tests to also accept output that contains the specific
cursor movement commands (\r and then \x1b[XC). lldbpexpect.py received an
utility method for generating the cursor movement escape sequence.
Original summary:
I implemented autosuggestion if there is one possible suggestion.
I set the keybinds for every character. When a character is typed, Editline::TypedCharacter is called.
Then, autosuggestion part is displayed in gray, and you can actually input by typing C-k.
Editline::Autosuggest is a function for finding completion, and it is like Editline::TabCommand now, but I will add more features to it.
Testing does not work well in my environment, so I can't confirm that it goes well, sorry. I am dealing with it now.
Reviewed By: teemperor, JDevlieghere, #lldb
Differential Revision: https://reviews.llvm.org/D81001
Stefan Gränitz [Thu, 13 Aug 2020 19:11:59 +0000 (21:11 +0200)]
[ORC][NFC] Refactor loop to determine name of init symbol in IRMaterializationUnit
This loop caused me a little headache once, because I didn't see the assigned variable is a member. The refactored version appears more readable to me.
Differential Revision: https://reviews.llvm.org/D85922
Stefan Gränitz [Thu, 13 Aug 2020 19:05:24 +0000 (21:05 +0200)]
[ORC] In LLLazyJIT provide public access to the CompileOnDemandLayer
This is analog to how LLJIT provides public access to all its layers.
Differential Revision: https://reviews.llvm.org/D85921
Stefan Gränitz [Thu, 13 Aug 2020 18:47:57 +0000 (20:47 +0200)]
[ORC] Add JITLink-compatible remote memory-manager and LLJITWithChildProcess example
This adds RemoteJITLinkMemoryManager is a new subclass of OrcRemoteTargetClient. It implements jitlink::JITLinkMemoryManager and targets the OrcRemoteTargetRPCAPI.
Behavior should be very similar to RemoteRTDyldMemoryManager. The essential differnce with JITLink is that allocations work in isolation from its memory manager. Thus, the RemoteJITLinkMemoryManager might be seen as "JITLink allocation factory".
RPCMMAlloc is another subclass of OrcRemoteTargetClient and implements the actual functionality. It allocates working memory on the host and target memory on the remote target. Upon finalization working memory is copied over to the tagrte address space. Finalization can be asynchronous for JITLink allocations, but I don't see that it makes a difference here.
Differential Revision: https://reviews.llvm.org/D85919
Alex Zinenko [Thu, 13 Aug 2020 12:45:59 +0000 (14:45 +0200)]
[mlir] do not emit bitcasts between structs in StandardToLLVM
The convresion of memref cast operaitons from the Standard dialect to the LLVM
dialect has been emitting bitcasts from a struct type to itself. Beyond being
useless, such casts are invalid as bitcast does not operate on aggregate types.
This kept working by accident because LLVM IR bitcast construction API skips
the construction if types are equal before it verifies that the types are
acceptable in a bitcast. Do not emit such bitcasts, the memref cast that only
adds/erases size information is in fact a noop on the current descriptor as it
always contains dynamic values for all sizes.
Reviewed By: pifon2a
Differential Revision: https://reviews.llvm.org/D85899
Alex Zinenko [Thu, 13 Aug 2020 12:54:26 +0000 (14:54 +0200)]
[mlir] Mention mandatory RFC process for changes in Standard dialect
We have been asking for this systematically, mention it in the documentation.
Reviewed By: mehdi_amini
Differential Revision: https://reviews.llvm.org/D85902
Sam Parker [Fri, 14 Aug 2020 09:19:16 +0000 (10:19 +0100)]
[NFC][ARM] Port MaybeCall into ARMTTImpl method
Renamed to maybeLoweredToCall.
Frederik Gossen [Fri, 14 Aug 2020 08:33:58 +0000 (08:33 +0000)]
[MLIR][Shape] Add custom assembly format for `shape.any`
Add custom assembly format for `shape.any` with variadic operands.
Differential Revision: https://reviews.llvm.org/D85306
Pavel Labath [Thu, 13 Aug 2020 13:49:03 +0000 (15:49 +0200)]
[lldb/Utility] Simplify Scalar::PromoteToMaxType
The function had very complicated signature, because it was trying to
avoid making unnecessary copies of the Scalar object. However, this
class is not hot enough to worry about these kinds of optimizations. My
making copies unconditionally, we can simplify the function and all of
its call sites.
Differential Revision: https://reviews.llvm.org/D85906
Kirill Bobyrev [Fri, 14 Aug 2020 09:02:03 +0000 (11:02 +0200)]
[clangd] Clarify comments regarding gRPC linking
Aleksandr Platonov [Fri, 14 Aug 2020 08:33:00 +0000 (11:33 +0300)]
[clangd] Fix find_program() result check when searching for gRPC
`find_program(<VAR> ...)` sets <VAR> to <VAR>-NOTFOUND if nothing was found.
So we need to compare <VAR> with "<VAR>-NOTFOUND" or just use `if([NOT] <VAR>)`, because `if(<VAR>)` is false if `<VAR>` ends in the suffix -NOTFOUND.
Reviewed By: kbobyrev
Differential Revision: https://reviews.llvm.org/D85958
Joachim Protze [Fri, 14 Aug 2020 08:13:31 +0000 (10:13 +0200)]
[OpenMP] Fix releasing of stack memory
Starting with
787eb0c637b I got spurious segmentation faults for some testcases. I could nail it down to `brel` trying to release the "memory" of the node allocated on the stack of __kmpc_omp_wait_deps. With this patch, you will see the assertion triggering for some of the tests in the test suite.
My proposed solution for the issue is to just patch __kmpc_omp_wait_deps:
```
__kmp_init_node(&node);
- node.dn.on_stack = 1;
+ // the stack owns the node
+ __kmp_node_ref(&node);
```
What do you think?
Reviewed By: AndreyChurbanov
Differential Revision: https://reviews.llvm.org/D84472
Kirill Bobyrev [Fri, 14 Aug 2020 08:22:06 +0000 (10:22 +0200)]
[clangd] Warn developers when trying to link system-installed gRPC statically
Reviewed By: sammccall
Differential Revision: https://reviews.llvm.org/D85815
Vitaly Buka [Fri, 14 Aug 2020 08:14:02 +0000 (01:14 -0700)]
[NFC][StackSafety] Dedup callees
Mehdi Amini [Fri, 14 Aug 2020 08:02:35 +0000 (08:02 +0000)]
Remove spurious empty line at the beginning of source file (NFC)
Mehdi Amini [Fri, 14 Aug 2020 07:55:57 +0000 (07:55 +0000)]
Fix BufferPlacement Pass to derive from the TableGen generated parent class (NFC)
Gui Andrade [Fri, 14 Aug 2020 07:34:01 +0000 (07:34 +0000)]
[CGAtomic] Mark atomic libcall functions `nounwind`
These functions won't ever unwind. This is useful for MemorySanitizer
as it simplifies handling __atomic_load in particular.
Differential Revision: https://reviews.llvm.org/D85573
LLVM GN Syncbot [Fri, 14 Aug 2020 07:42:49 +0000 (07:42 +0000)]
[gn build] Port
2e4a20fd706
Eduardo Caldas [Thu, 13 Aug 2020 16:10:50 +0000 (16:10 +0000)]
[SyntaxTree] Split `TreeTestBase` into header and source
* Switch to using directive on source files.
* Remove unused `SyntaxTreeTest::addFile`
Differential Revision: https://reviews.llvm.org/D85913
Raphael Isemann [Fri, 14 Aug 2020 06:49:01 +0000 (08:49 +0200)]
[lldb] Fix a crash when tab-completion an empty line in a function with only one local variable
When LLDB sees only one possible completion for an input, it will add a trailing
space to the completion to signal that to the user. If the current argument is
quoted, that also means LLDB needs to add the trailing quote to finish the
current argument first.
In case the user is in a function with only one local variable and is currently
editing an empty line in the multiline expression editor, then we are in the
unique situation where we can have a unique completion for an empty input line.
(In a normal LLDB session this would never occur as empty input would just list
all the possible commands).
In this special situation our check if the current argument needs to receive a
trailing quote will crash LLDB as there is no current argument and the
completion code just unconditionally tries to access the current argument. This
just adds the missing check if we even have a current argument before we check
if we need to add a terminating quote character.
Reviewed By: labath
Differential Revision: https://reviews.llvm.org/D85903
Sebastian Neubauer [Thu, 13 Aug 2020 10:37:37 +0000 (12:37 +0200)]
[AMDGPU] Enable .rodata for amdpal os
PAL recently got support for multiple ELF sections and relocations,
therefore we can now use .rodata sections instead of forcing constants
into .text.
Differential Revision: https://reviews.llvm.org/D85895
David Sherwood [Thu, 13 Aug 2020 09:44:12 +0000 (10:44 +0100)]
[SVE] Fix bug in SVEIntrinsicOpts::optimizePTest
The code wasn't taking into account that the two operands
passed to ptest could be identical and was trying to erase
them twice.
Differential Revision: https://reviews.llvm.org/D85892
Sam Parker [Fri, 14 Aug 2020 06:53:43 +0000 (07:53 +0100)]
[NFCI][SimpleLoopUnswitch] Adjust CostKind query
When getUserCost was transitioned to use an explicit CostKind,
TCK_CodeSize was used even though the original kind was implicitly
SizeAndLatency so restore this behaviour. We now only query for
CodeSize when optimising for minsize.
I expect this to not change anything as, I think all, targets will
currently return the same value for CodeSize and SizeLatency. Indeed
I see no changes in the test suite for Arm, AArch64 and X86.
Differential Revision: https://reviews.llvm.org/D85829
Igor Kudrin [Fri, 14 Aug 2020 06:11:37 +0000 (13:11 +0700)]
[DebugInfo] Avoid an infinite loop with a truncated pre-v5 .debug_str_offsets.dwo.
dumpStringOffsetsSection() expects the size of a contribution to be
correctly aligned. The patch adds the corresponding verifications for
pre-v5 cases.
Differential Revision: https://reviews.llvm.org/D85739
Arthur Eubanks [Fri, 14 Aug 2020 04:05:03 +0000 (21:05 -0700)]
Revert "[SLC] sprintf(dst, "%s", str) -> strcpy(dst, str)"
This reverts commit
ab9fc8bae805c785066779e76e7846aabad5609e.
Incorrect transformation if the result is used.
Causes breakages, e.g.
http://green.lab.llvm.org/green/job/test-suite-verify-machineinstrs-x86_64-O3/8193/
Chris Kennelly [Fri, 14 Aug 2020 01:16:46 +0000 (21:16 -0400)]
[NFC] Remove unused function.
Differential Revision: https://reviews.llvm.org/D85944
aartbik [Thu, 13 Aug 2020 22:53:57 +0000 (15:53 -0700)]
[mlir] [VectorOps] Canonicalization of 1-D memory operations
Masked loading/storing in various forms can be optimized
into simpler memory operations when the mask is all true
or all false. Note that the backend does similar optimizations
but doing this early may expose more opportunities for further
optimizations. This further prepares progressively lowering
transfer read and write into 1-D memory operations.
Reviewed By: ThomasRaoux
Differential Revision: https://reviews.llvm.org/D85769
Thomas Lively [Thu, 13 Aug 2020 23:33:52 +0000 (16:33 -0700)]
[WebAssembly] Add missing lit.local.cfg
Peter Collingbourne [Thu, 13 Aug 2020 01:44:31 +0000 (18:44 -0700)]
hwasan: Emit the globals note even when globals are uninstrumented.
This lets us support the scenario where a binary is linked from a mix
of object files with both instrumented and non-instrumented globals.
This is likely to occur on Android where the decision of whether to use
instrumented globals is based on the API level, which is user-facing.
Previously, in this scenario, it was possible for the comdat from
one of the object files with non-instrumented globals to be selected,
and since this comdat did not contain the note it would mean that the
note would be missing in the linked binary and the globals' shadow
memory would be left uninitialized, leading to a tag mismatch failure
at runtime when accessing one of the instrumented globals.
It is harmless to include the note when targeting a runtime that does
not support instrumenting globals because it will just be ignored.
Differential Revision: https://reviews.llvm.org/D85871
Yuanfang Chen [Thu, 13 Aug 2020 19:52:35 +0000 (12:52 -0700)]
[NewPM][CodeGen] Add machine code verification callback
D83608 need this.
Reviewed By: aeubanks
Differential Revision: https://reviews.llvm.org/D85916
Ben Dunbobbin [Thu, 13 Aug 2020 22:58:40 +0000 (23:58 +0100)]
[X86][ELF] Prefer lowering MC_GlobalAddress operands to .Lfoo$local for STV_DEFAULT only
This patch restricts the behaviour of referencing via .Lfoo$local
local aliases, introduced in https://reviews.llvm.org/D73230, to
STV_DEFAULT globals only.
Hidden symbols via --fvisiblity=hidden (https://gcc.gnu.org/wiki/Visibility)
is an important scenario.
Benefits:
- Improves the size of object files by using fewer STT_SECTION symbols.
- The code reads a bit better (it was not obvious to me without going
back to the code reviews why the canBenefitFromLocalAlias function
currently doesn't consider visibility).
- There is also a side benefit in restoring the effectiveness of the
--wrap linker option and making the behavior of --wrap consistent
between LTO and normal builds for references within a translation-unit.
Note: this --wrap behavior (which is specific to LLD) should not be
considered reliable. See comments on https://reviews.llvm.org/D73230
for more.
Differential Revision: https://reviews.llvm.org/D85782
Arthur Eubanks [Mon, 10 Aug 2020 19:53:30 +0000 (12:53 -0700)]
[ConstProp] Handle insertelement constants
Previously ConstantFoldExtractElementInstruction() would only work with
insertelement instructions, not contants. This properly handles
insertelement constants as well.
Reviewed By: efriedma
Differential Revision: https://reviews.llvm.org/D85865
Amy Huang [Thu, 13 Aug 2020 22:48:55 +0000 (15:48 -0700)]
[DebugInfo] Add -fuse-ctor-homing cc1 flag so we can turn on constructor homing only if limited debug info is already on.
This adds a cc1 flag to enable constructor homing but doesn't turn on debug
info if it wasn't enabled already (which is what using
-debug-info-kind=constructor does). This will be used for testing, and won't
be needed anymore once ctor homing is used as default / merged into =limited.
Bug to enable ctor homing: https://bugs.llvm.org/show_bug.cgi?id=46537
Differential Revision: https://reviews.llvm.org/D85799
Dávid Bolvanský [Thu, 13 Aug 2020 22:03:54 +0000 (00:03 +0200)]
[SLC] sprintf(dst, "%s", str) -> strcpy(dst, str)
Solves 46489
Chris Kennelly [Thu, 13 Aug 2020 21:49:19 +0000 (17:49 -0400)]
[NFC] Remove unused variables.
These were no longer needed following
96855125e77044b1a5d3c7f0ae90ea3a5cb035c0.
Reviewed By: rupprecht
Differential Revision: https://reviews.llvm.org/D85939
David Green [Thu, 13 Aug 2020 21:40:36 +0000 (22:40 +0100)]
Revert "[ARM] Fix IT block generation after Thumb2SizeReduce with -Oz"
This reverts commit
18279a54b5d3382874924d6a3c7775b7e22598dc as it is
causing some chromium android test problems.
Jonas Devlieghere [Thu, 13 Aug 2020 21:36:17 +0000 (14:36 -0700)]
[lldb] Improve diagnostics in lldb-repro when replay fails
- Print the replay invocation.
- Keep the reproducer around.
- Return the "opposite" exit code so we don't have to rely on FileCheck
to fail the test when the expected exit code is non-zero.
Austin Kerbow [Tue, 11 Aug 2020 19:04:17 +0000 (12:04 -0700)]
[AMDGPU] Fix FP/BP spills when MUBUF constant offset exceeded
If we need a scratch register for the spill don't use the same scratch
register that is being used for the MBUF offset.
Reviewed By: arsenm
Differential Revision: https://reviews.llvm.org/D85772
Thomas Lively [Thu, 13 Aug 2020 20:57:43 +0000 (13:57 -0700)]
[WebAssembly] Allow inlining functions with different features
Allow inlining only when the Callee has a subset of the Caller's
features. In principle, we should be able to inline regardless of any
features because WebAssembly supports features at module granularity,
not function granularity, but without this restriction it would be
possible for a module to "forget" about features if all the functions
that used them were inlined.
Requested in PR46812.
Differential Revision: https://reviews.llvm.org/D85494
Rainer Orth [Thu, 13 Aug 2020 20:42:58 +0000 (22:42 +0200)]
[clang][Driver] Default to /usr/bin/ld on Solaris
`clang` currently requires the native linker on Solaris:
- It passes `-C` to `ld` which GNU `ld` doesn't understand.
- To use `gld`, one needs to pass the correct `-m EMU` option to select
the right emulation. Solaris `ld` cannot handle that option.
So far I've worked around this by passing `-DCLANG_DEFAULT_LINKER=/usr/bin/ld`
to `cmake`. However, if someone forgets this, it depends on the user's
`PATH` whether or not `clang` finds the correct linker, which doesn't make
for a good user experience.
While it would be nice to detect the linker flavor at runtime, this is more
involved. Instead, this patch defaults to `/usr/bin/ld` on Solaris. This
doesn't work on its own, however: a link fails with
clang-12: error: unable to execute command: Executable "x86_64-pc-solaris2.11-/usr/bin/ld" doesn't exist!
I avoid this by leaving absolute paths alone in `ToolChain::GetLinkerPath`.
Tested on `amd64-pc-solaris2.11`, `sparcv9-sun-solaris2.11`, and
`x86_64-pc-linux-gnu`.
Differential Revision: https://reviews.llvm.org/D84029
Dávid Bolvanský [Thu, 13 Aug 2020 20:37:24 +0000 (22:37 +0200)]
[Tests] Update strncpy tests
Lang Hames [Thu, 13 Aug 2020 19:25:05 +0000 (12:25 -0700)]
Re-apply "[llvm-jitlink] Don't demote unreferenced definitions in -harness mode"
This reapplies commit
e137b550587a85b0d9c9c539edc79de0122b6946 with
fixes for the broken test case: Non-global symbols should only be
skipped after checking that they're not referenced by the harness.
Dávid Bolvanský [Thu, 13 Aug 2020 20:22:33 +0000 (22:22 +0200)]
[SLC] Optimize strncpy(a, a, C) to memcpy(a, a000, C)
Solves PR47154
Nikita Popov [Thu, 13 Aug 2020 20:08:40 +0000 (22:08 +0200)]
[InstSimplify] Add tests for assume with min/max intrinsic (NFC)
If we assume one of the operands is smaller/greater, then min/max
may be simplified.
Peter Collingbourne [Thu, 13 Aug 2020 02:32:15 +0000 (19:32 -0700)]
sanitizer_common: Introduce internal_madvise and start using it.
A recent change to sanitizer_common caused us to issue the syscall
madvise(MADV_HUGEPAGE) during HWASAN initialization. This may lead to a
problem if madvise is instrumented (e.g. because libc is instrumented
or the user intercepted it). For example, on Android the syscall may
fail if the kernel does not support transparent hugepages, which leads
to an attempt to set errno in a HWASAN instrumented function. Avoid
this problem by introducing a syscall wrapper and using it to issue
this syscall.
Tested only on Linux; includes untested updates for the other
platforms.
Differential Revision: https://reviews.llvm.org/D85870
Vy Nguyen [Wed, 12 Aug 2020 16:23:37 +0000 (12:23 -0400)]
Add "status" to the list of absl libraries.
The Abseil-NoInternalDependenciesCheck currently mistakenly triggers on any usage of internal helpers even if it is within absl/status.
Differential Revision: https://reviews.llvm.org/D85843
Abhina Sreeskantharajan [Thu, 13 Aug 2020 18:33:04 +0000 (14:33 -0400)]
[SystemZ][z/OS] enable trigraphs by default on z/OS
This patch enables trigraphs on z/OS.
Reviewed By: hubert.reinterpretcast, fanbo-meng
Differential Revision: https://reviews.llvm.org/D85722
Chris Kennelly [Wed, 12 Aug 2020 16:13:32 +0000 (12:13 -0400)]
[tsan] Respect no_huge_pages_for_shadow.
Disable huge pages in the TSan shadow regions when no_huge_pages_for_shadow == true (default).
Reviewed By: eugenis
Differential Revision: https://reviews.llvm.org/D85841
parallels [Thu, 13 Aug 2020 19:51:16 +0000 (15:51 -0400)]
[libc] Add strtok_r implementation.
Reviewed By: sivachandra
Differential Revision: https://reviews.llvm.org/D85779
Cameron McInally [Thu, 13 Aug 2020 19:47:34 +0000 (14:47 -0500)]
[SVE] Lower fixed length vector integer UMIN/UMAX
Differential Revision: https://reviews.llvm.org/D85926
Nico Weber [Thu, 13 Aug 2020 19:48:03 +0000 (15:48 -0400)]
[gn build] (manually) port
d650cbc349ccc4 better
Nico Weber [Thu, 13 Aug 2020 19:43:43 +0000 (15:43 -0400)]
[gn build] (manually) port
d650cbc349ccc4
Stefan Gränitz [Tue, 11 Aug 2020 11:39:54 +0000 (13:39 +0200)]
[ORC][NFC] Fix typo in comment
Alex Lorenz [Thu, 13 Aug 2020 19:05:57 +0000 (12:05 -0700)]
[darwin][driver] fix isMacosxVersionLT minimum supported OS version check
The previous Driver's triple check only worked for -target, but not for -arch -mmacosx-version-min invocations
River Riddle [Thu, 13 Aug 2020 19:05:04 +0000 (12:05 -0700)]
[mlir][docs] Update/Add documentation for MLIRs Pattern Rewrite infrastructure
This infrastructure has evolved a lot over the course of MLIRs lifetime, and has never truly been documented outside of rationale or proposals. This revision aims to document the infrastructure and user facing API, with the rationale specific portions moved to the Rationale folder and updated.
Differential Revision: https://reviews.llvm.org/D85260
River Riddle [Thu, 13 Aug 2020 19:04:57 +0000 (12:04 -0700)]
[mlir][DialectConversion] Update the documentation for dialect conversion
This revision updates the documentation for dialect conversion, as many concepts have changed/evolved over time.
Differential Revision: https://reviews.llvm.org/D85167
Stefan Gränitz [Sun, 2 Aug 2020 12:37:33 +0000 (14:37 +0200)]
[ORC] cloneToNewContext() can work with a const-ref to ThreadSafeModule
Stefan Gränitz [Sun, 2 Aug 2020 12:36:02 +0000 (14:36 +0200)]
[ORC] Fix SymbolLookupSet::containsDuplicates()
shafik [Thu, 13 Aug 2020 17:49:40 +0000 (10:49 -0700)]
[LLDB] Fix how ValueObjectChild handles bit-fields stored in a Scalar in UpdateValue()
When bit-field data was stored in a Scalar in ValueObjectChild during UpdateValue()
it was extracting the bit-field value. Later on in lldb_private::DumpDataExtractor(…)
we were again attempting to extract the bit-field. Which would then not obtain the
correct value. This will remove the extra extraction in UpdateValue().
We hit this specific case when values are passed in registers, which we could only
reproduce in an optimized build.
Differential Revision: https://reviews.llvm.org/D85376
Haowei Wu [Tue, 11 Aug 2020 18:44:22 +0000 (11:44 -0700)]
[elfabi] Move llvm-elfabi related code to InterfaceStub library
This change moves elfabi related code to llvm/InterfaceStub library
so it can be shared by multiple llvm tools without causing cyclic
dependencies.
Differential Revision: https://reviews.llvm.org/D85678
Lang Hames [Thu, 13 Aug 2020 18:44:42 +0000 (11:44 -0700)]
Revert "[llvm-jitlink] Don't demote unreferenced definitions in -harness mode."
This reverts commit
e137b550587a85b0d9c9c539edc79de0122b6946.
This commit broke a test case. Reverting while I investigate.
Stanislav Mekhanoshin [Thu, 13 Aug 2020 18:15:44 +0000 (11:15 -0700)]
[AMDGPU] Inhibit SDWA if target instruction has FI
Differential Revision: https://reviews.llvm.org/D85918
Stanislav Mekhanoshin [Thu, 13 Aug 2020 18:22:01 +0000 (11:22 -0700)]
[AMDGPU] Fix misleading SDWA verifier error. NFC.
The old error from GFX9 shall be updated to GFX9+.
Aditya Kumar [Thu, 13 Aug 2020 07:06:22 +0000 (00:06 -0700)]
Fix PR45442: Bail out when MemorySSA information is not available
Reviewers: sebpop, uabelho, fhahn
Reviewed by: fhahn
Differential Revision: https://reviews.llvm.org/D85881
Dávid Bolvanský [Thu, 13 Aug 2020 18:21:19 +0000 (20:21 +0200)]
[Tests] Removed debug copy command
Dávid Bolvanský [Thu, 13 Aug 2020 18:19:21 +0000 (20:19 +0200)]
[Diagnostics] Skip var decl of structs for -Wstring-concatenation
Lang Hames [Thu, 13 Aug 2020 03:44:05 +0000 (20:44 -0700)]
[llvm-jitlink] Don't demote unreferenced definitions in -harness mode.
Demoting unreferenced externals is unsafe if multiple interdependent test
objects are used, including objects loaded from archives.
Lang Hames [Thu, 13 Aug 2020 00:43:28 +0000 (17:43 -0700)]
[JITLink][MachO] Return an error when MachO TLV relocations are encountered.
MachO TLV relocations aren't supported yet. Error out rather than falling
through to llvm_unreachable.
Sameer Arora [Tue, 28 Jul 2020 16:50:51 +0000 (09:50 -0700)]
[llvm-libtool-darwin] Add support for -arch_only
Add support for -arch_only option for llvm-libtool-darwin. This diff
also adds support for accepting universal files as input and flattening
them to create the required static library. Supports input universal
files contaning both Mach-O object files or archives.
Differences from cctools' libtool:
- `-arch_only` can be specified multiple times
- archives containing universal files are considered invalid (libtool
allows such archives)
Reviewed by jhenderson, smeenai
Differential Revision: https://reviews.llvm.org/D84770
Valentin Clement [Thu, 13 Aug 2020 18:04:43 +0000 (14:04 -0400)]
[flang][openacc] Handle optional end directive in combined construct
OpenACC combined construct can have an optional end directive. This patch handle this
case in the parsing/unparsing with a canonicalization step. Unlike OmpEndLoopDirective,
this doesn't need a special treatment in the pre-fir tree as there is no clause attached to
a AccEndCombinedDirective.
Reviewed By: klausler
Differential Revision: https://reviews.llvm.org/D84481
Sameer Arora [Wed, 29 Jul 2020 14:40:11 +0000 (07:40 -0700)]
[llvm-libtool-darwin] Refactor ArchiveWriter
Refactoring function `writeArchive` in ArchiveWriter. Added a new
function `writeArchiveBuffer` that returns the archive in a memory
buffer instead of writing it out to the disk. This refactor is necessary
so as to allow `llvm-libtool-darwin` to write universal files containing
archives.
Reviewed by jhenderson, MaskRay, smeenai
Differential Revision: https://reviews.llvm.org/D84858
Dávid Bolvanský [Thu, 13 Aug 2020 10:45:14 +0000 (12:45 +0200)]
[BPI] Improve static heuristics for integer comparisons
Similarly as for pointers, even for integers a == b is usually false.
GCC also uses this heuristic.
Reviewed By: ebrevnov
Differential Revision: https://reviews.llvm.org/D85781
Sameer Arora [Mon, 10 Aug 2020 01:58:02 +0000 (18:58 -0700)]
[llvm-install-name-tool] Add more documentation
Add documentation for the remaining options of
`llvm-install-name-tool`.
Reviewed by jhenderson, smeenai
Differential Revision: https://reviews.llvm.org/D85655
peter klausler [Wed, 12 Aug 2020 23:25:26 +0000 (16:25 -0700)]
[flang] Descriptor-based I/O using wrong size for contiguous unformatted I/O
The descriptor-based I/O routine was using the size of the descriptor
rather than the size of the described data for the transfer. Fix,
and add a comment to the relevant API.
Differential Revision: https://reviews.llvm.org/D85863
Simon Pilgrim [Thu, 13 Aug 2020 15:56:08 +0000 (16:56 +0100)]
[X86][SSE] Add HADD combine regression case from rG9bd97d036398
rG9bd97d036398 caused a miscompile of this internal test case
Jonas Devlieghere [Thu, 13 Aug 2020 17:23:52 +0000 (10:23 -0700)]
[lldb] Set the launch flags to GetLaunchInfo().GetLaunchFlags()
Instead of clearing the launch flags, always pass the target's current
launch flags.
Alexander Belyaev [Thu, 13 Aug 2020 16:53:07 +0000 (18:53 +0200)]
[mlir] Test CallOp STD->LLVM conversion.
This exercises the corner case that was fixed in
https://reviews.llvm.org/rG8979a9cdf226066196f1710903d13492e6929563.
The bug can be reproduced when there is a @callee with a custom type argument and @caller has a producer of this argument passed to the @callee.
Example:
func @callee(!test.test_type) -> i32
func @caller() -> i32 {
%arg = "test.type_producer"() : () -> !test.test_type
%out = call @callee(%arg) : (!test.test_type) -> i32
return %out : i32
}
Even though there is a type conversion for !test.test_type, the output IR (before the fix) contained a DialectCastOp:
module {
llvm.func @callee(!llvm.ptr<i8>) -> !llvm.i32
llvm.func @caller() -> !llvm.i32 {
%0 = llvm.mlir.null : !llvm.ptr<i8>
%1 = llvm.mlir.cast %0 : !llvm.ptr<i8> to !test.test_type
%2 = llvm.call @callee(%1) : (!test.test_type) -> !llvm.i32
llvm.return %2 : !llvm.i32
}
}
instead of
module {
llvm.func @callee(!llvm.ptr<i8>) -> !llvm.i32
llvm.func @caller() -> !llvm.i32 {
%0 = llvm.mlir.null : !llvm.ptr<i8>
%1 = llvm.call @callee(%0) : (!llvm.ptr<i8>) -> !llvm.i32
llvm.return %1 : !llvm.i32
}
}
Differential Revision: https://reviews.llvm.org/D85914
David Green [Thu, 13 Aug 2020 17:01:11 +0000 (18:01 +0100)]
[ARM] Mark VMINNMA/VMAXNMA as commutative
These operations take Qda and Rn register operands, which are
commutative so long as the instruction is not predicated.
Differential Revision: https://reviews.llvm.org/D85813
peter klausler [Wed, 12 Aug 2020 23:38:28 +0000 (16:38 -0700)]
[flang] Implement shape analysis of TRANSFER intrinsic function result
The shape (esp. the size) of the result of a call to TRANSFER
is implemented according to the definition in the standard.
Differential Revision: https://reviews.llvm.org/D85866
Jonas Devlieghere [Thu, 13 Aug 2020 16:41:52 +0000 (09:41 -0700)]
[lldb] Skip TestStepScripted with reproducers
Some of the test methods were already skipped because of an unexpected
packet. The test started failing after it was expanded. Skip the whole
test with reproducers so we don't have to add the decorator for every
method.
Cameron McInally [Thu, 13 Aug 2020 16:00:37 +0000 (11:00 -0500)]
[SVE] Lower fixed length vector integer SMIN/SMAX
Differential Revision: https://reviews.llvm.org/D85855
Kadir Cetinkaya [Mon, 6 Jul 2020 13:44:16 +0000 (15:44 +0200)]
[clangd] Move clang-tidy check modifications into ClangdServer
Summary:
This enables sharing the logic between standalone clangd and embedders
of it. The new approach should be same performance-wise, as it is only called
once per addDocument call.
This patch also introduces a blacklisting code path for disabling crashy or
high-noise tests, until we figure out a way to make them work with clangd-setup.
The biggest difference is the way we make use of preambles, hence those checks
can't see directives coming from the preamble section of the file. The second
thing is the fact that code might-not be compiling while clangd is trying to
build an AST, hence some checks might choke on those incomplete ASTs.
Reviewers: sammccall
Subscribers: ilya-biryukov, MaskRay, jkorous, arphaman, usaxena95, aaron.ballman, cfe-commits
Tags: #clang
Differential Revision: https://reviews.llvm.org/D83224
Kadir Cetinkaya [Sun, 5 Jul 2020 19:12:11 +0000 (21:12 +0200)]
[clangd] Send EOF before resetting diagnostics consumer
Summary:
Some clang-tidy checkers, e.g. llvm-include-order can emit diagnostics
at this callback (as mentioned in the comments).
Clangd was resetting diag consumer to IgnoreDiags before sending EOF, hence we
were unable to emit diagnostics for such checkers.
This patch changes the order of that reset and preprocosser event to make sure
we emit that diag.
Fixes https://github.com/clangd/clangd/issues/314.
Reviewers: sammccall
Subscribers: ilya-biryukov, MaskRay, jkorous, arphaman, usaxena95, cfe-commits
Tags: #clang
Differential Revision: https://reviews.llvm.org/D83178
Aditya Kumar [Thu, 13 Aug 2020 07:06:22 +0000 (00:06 -0700)]
Fix PR45442: Bail out when MemorySSA information is not available
Aditya Kumar [Thu, 13 Aug 2020 05:11:50 +0000 (22:11 -0700)]
Add cold attribute to one time construction APIs
_cxa_guard_acquire is used for only one purpose,
namely guarding local static variable initialization,
and since that purpose is definitionally cold,
it should be attributed as cold
Reviewed By: ldionne
Reviewers: mclow.lists, ldionne, jfb, yfeldblum
Differential Revision: https://reviews.llvm.org/D85873
Bjorn Pettersson [Thu, 13 Aug 2020 15:43:12 +0000 (17:43 +0200)]
[VectorCombine] Fix for non-zero addrspace when creating vector load from scalar load
This is a fixup to commit
43bdac290663f4424f9fb, to make sure the
address space from the original load pointer is retained in the
vector pointer.
Resolves problem with
Assertion `castIsValid(op, S, Ty) && "Invalid cast!"' failed.
due to address space mismatch.
Reviewed By: spatel
Differential Revision: https://reviews.llvm.org/D85912
Serguei Katkov [Wed, 12 Aug 2020 07:25:18 +0000 (14:25 +0700)]
[InstCombine] Handle gc.relocate(null) in one iteration
InstCombine adds users of transformed instruction to working list to
process on the same iteration. However gc.relocate may have a hidden
user (next gc.relocate) which is connected through gc.statepoint intrinsic and
there is no direct def-use chain between them.
In this case if the next gc.relocation is already processed it will not be added
to worklist and will not be able to be processed on the same iteration.
Let's we have the following case:
A = gc.relocate(null)
B = statepoint(A)
C = gc.relocate(B, hidden(A))
If C is already considered then after replacement of A with null, statepoint B
instruction will be added to the queue but not C.
C can be processed only on the next iteration.
If the chain of relocation is pretty long the many iteration may be required.
This change is to reduce the number of iteration to meet the latest changes
related to reducing infinite loop threshold.
This is a quick (not best) fix. In the follow up patches I plan to move gc relocation
handling into statepoint handler. This should also help to remove unused gc live
entries in statepoint bundle.
Reviewers: reames, dantrushin
Reviewed By: reames
Subscribers: llvm-commits
Differential Revision: https://reviews.llvm.org/D75598
Sam McCall [Thu, 13 Aug 2020 16:01:47 +0000 (18:01 +0200)]
[clangd] Extract BackgroundIndex::Options struct. NFC
I've dropped the background context parameter, since we in practice just pass the
current context there, and we now have a different way to specify context too.
While here, clean up a couple of comments.
Reviewed By: kadircet
Differential Revision: https://reviews.llvm.org/D83157
Fangrui Song [Thu, 13 Aug 2020 03:50:59 +0000 (20:50 -0700)]
[ELF] --gdb-index: skip SHF_GROUP .debug_info
-gdwarf-5 -fdebug-types-section may produce multiple .debug_info sections. All
except one are type units (.debug_types before DWARF v5). When constructing
.gdb_index, we should ignore these type units. We use a simple heuristic: the
compile unit does not have the SHF_GROUP flag. (This needs to be revisited if
people place compile unit .debug_info in COMDAT groups.)
This issue manifests as a data race: because an object file may have multiple
.debug_info sections, we may concurrently construct `LLDDwarfObj` for the same
file in multiple threads. The threads may access `InputSectionBase::data()`
concurrently on the same input section. `InputSectionBase::data()` does a lazy
uncompress() and rewrites the member variable `rawData`. A thread running zlib
`inflate()` (transitively called by uncompress()) on a buffer with `rawData`
tampered by another thread may fail with `uncompress failed: zlib error: Z_DATA_ERROR`.
Even if no data race occurred in an optimistic run, if there are N .debug_info,
one CU entry and its address ranges will be replicated N times. The result
.gdb_index can be much larger than a correct one.
The new test gdb-index-dwarf5-type-unit.s actually has two compile units. This
cannot be produced with regular approaches (it can be produced with -r
--unique). This is used to demonstrate that the .gdb_index construction code
only considers the last non-SHF_GROUP .debug_info
Reviewed By: grimar
Differential Revision: https://reviews.llvm.org/D85579
Peter Steinfeld [Thu, 13 Aug 2020 15:07:58 +0000 (08:07 -0700)]
[flang] Fix assert on character literal substrings as arguments
Character literal substrings used as arguments were causing asserts. This
happened when the code was trying to get the DynamicType of the substring. We
were only recording the DynamicType of the Designator on which the substring
was based. For character literal substrings, the Designator was a character
literal, and we weren't handling getting its type.
I fixed this by changing the `GetType()` method for `DynamicType` to check to
see if we were getting the type of a `Substring` and calculating the type of
the substring by getting the number of bytes in an element of the string.
I also changed the test `resolve49.f90` with some tests, one of which causes
the original crash.
Differential Revision: https://reviews.llvm.org/D85908
peter klausler [Wed, 12 Aug 2020 23:35:26 +0000 (16:35 -0700)]
[flang] Correct manipulation of mixed complex expressions
Ensure that mixed complex expressions (one operand complex,
the other not) are properly manipulated; add test.
peter klausler [Wed, 12 Aug 2020 23:20:20 +0000 (16:20 -0700)]
[flang] Ensure Preprocessor::Define saves macro names correctly
This fixes problems with macros defined with -D on the command line
and predefined macros defined in the throwaway driver program.
peter klausler [Wed, 12 Aug 2020 23:09:51 +0000 (16:09 -0700)]
[flang] Correct the default value for PAD= to PAD='YES'.
Sam McCall [Thu, 13 Aug 2020 15:42:58 +0000 (17:42 +0200)]
[clangd] Clean up old test fixture/names a little. NFC