Francesco Petrogalli [Wed, 15 Apr 2020 20:46:51 +0000 (21:46 +0100)]
[llvm][CodeGen] Rename SVE gather prefetch intrinsics. [NFC]
Summary:
The renaming is necessary to make the naming scheme uniform with other
gather/scatter load/stores SVE intrinsics.
The naming of variables and functions have been adapted to make it
explicit whether we are dealing with a scalar offset (which is
unscaled) or an index (which is scaled according to the data type of
the lanes of the vector).
Reviewers: andwar, sdesmalen, rengolin
Reviewed By: andwar
Subscribers: tschuett, hiraditya, arphaman, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D77839
Jonas Devlieghere [Wed, 15 Apr 2020 20:04:18 +0000 (13:04 -0700)]
[lldb/Docs] Split testing in running and debugging
Separate running the tests from debugging the test. This is preparatory
for a new section coming soon.
Nemanja Ivanovic [Wed, 15 Apr 2020 20:40:51 +0000 (15:40 -0500)]
[PowerPC] Clear the set of symbols that need to be updated in MCTargetStreamer
We have added code to correct the .localentry values on assignments. However, we
never clear the set so presumably it will still contain the (now dangling)
MCSymbol pointers across a call to finish() and reset() in the streamer.
This is based on my speculation that it is the reason we are getting
segmentation faults mentioned in https://bugs.llvm.org/show_bug.cgi?id=45366
Fixes: https://bugs.llvm.org/show_bug.cgi?id=45366
Differential revision: https://reviews.llvm.org/D78196
Nate Voorhies [Wed, 15 Apr 2020 19:28:06 +0000 (12:28 -0700)]
[NFC] Correcting minor typo.
Summary: Hande -> Handle
Reviewers: xazax.hun
Reviewed By: xazax.hun
Subscribers: rnkovacs, cfe-commits
Tags: #clang
Differential Revision: https://reviews.llvm.org/D78233
Richard Smith [Wed, 15 Apr 2020 20:26:22 +0000 (13:26 -0700)]
Attempt to fix build with MSVC.
MSVC appears to instantiate the virtual members of FoldingSet when
instantiating the class definition, thereby requiring the element type
to be defined so that its hash function is known.
This is intended to be a temporary fix; ideally, FoldingSet should not
require this.
Richard Smith [Wed, 15 Apr 2020 20:23:56 +0000 (13:23 -0700)]
Improve diagnostic when constant-evaluating a std::initializer_list with
an unexpected form.
Craig Topper [Wed, 15 Apr 2020 19:49:20 +0000 (12:49 -0700)]
[CallSite removal][SimpleLoopUnswitch] Use CallBase instead of CallSite. NFC
Differential Revision: https://reviews.llvm.org/D78227
Sam Kerner [Wed, 15 Apr 2020 20:07:28 +0000 (13:07 -0700)]
Fix DataFlowSanitizer implementation of strchr() so that strchr(..., '\0') returns a pointer to '\0'.
Summary:
Fixes https://bugs.llvm.org/show_bug.cgi?id=22392
Reviewers: pcc, morehouse
Reviewed By: morehouse
Subscribers: morehouse, #sanitizers
Tags: #sanitizers
Differential Revision: https://reviews.llvm.org/D77996
Ismail Pazarbasi [Mon, 13 Apr 2020 13:21:38 +0000 (15:21 +0200)]
[pstl] Added missing double-underscore prefixes to some types
Summary:
Some of the `move_` types were used with leading double-underscores, but
they were declared without `__` prefix.
This patch adds double-underscores to all `move_` types, and their uses.
Reviewers: MikeDvorskiy, ldionne, EricWF, rodgert, #libc
Reviewed By: MikeDvorskiy, ldionne, #libc
Subscribers: dexonsmith, libcxx-commits
Tags: #libc
Differential Revision: https://reviews.llvm.org/D78040
Eli Friedman [Tue, 7 Apr 2020 21:05:29 +0000 (14:05 -0700)]
[SelectionDAG] Fix usage of Align constructing MachineMemOperands.
The "Align" passed into getMachineMemOperand etc. is the alignment of
the MachinePointerInfo, not the alignment of the memory operation.
(getAlign() on a MachineMemOperand automatically reduces the alignment
to account for this.)
We were passing on wrong (overconservative) alignment in a bunch of
places. Fix a bunch of these, mostly in legalization. And while I'm
here, switch to the new Align APIs.
The test changes are all scheduling changes: the biggest effect of
preserving large alignments is that it improves alias analysis, so the
scheduler has more freedom.
(I was originally just trying to do a minor cleanup in
SelectionDAGBuilder, but I accidentally went deeper down the rabbit
hole.)
Differential Revision: https://reviews.llvm.org/D77687
Melanie Blower [Fri, 10 Apr 2020 20:34:46 +0000 (13:34 -0700)]
Move BinaryOperators.FPOptions to trailing storage
Reviewers: rjmccall
Differential Revision: https://reviews.llvm.org/D76384
Jan Korous [Wed, 15 Apr 2020 19:47:24 +0000 (12:47 -0700)]
[ASTMatchers] Fix isDerivedFrom for recursive templates
Differential Revision: https://reviews.llvm.org/D77612
Craig Topper [Wed, 15 Apr 2020 19:10:10 +0000 (12:10 -0700)]
[CallSite removal][SampleProfile] Use CallBase instead of CallSite. NFC
Differential Revision: https://reviews.llvm.org/D78219
Haojian Wu [Tue, 14 Apr 2020 22:16:10 +0000 (00:16 +0200)]
[clangd] Fix a crash for accessing a null field decl returned by findExplicitReferences.
Reviewers: sammccall
Subscribers: ilya-biryukov, MaskRay, jkorous, arphaman, kadircet, usaxena95, cfe-commits
Tags: #clang
Differential Revision: https://reviews.llvm.org/D78181
Louis Dionne [Mon, 13 Apr 2020 21:27:04 +0000 (17:27 -0400)]
[libc++] Remove the ability to run using the internal Lit shell
The new format requires using an external shell, and as we transition
and we can simplify config.py as we transition to the new format. Also,
frankly, I'd be quite surprised if that setting was still working anyway
because we have several .sh.cpp tests that likely don't work in Lit's
internal shell.
Sam Clegg [Wed, 15 Apr 2020 18:35:35 +0000 (11:35 -0700)]
Enable finding bitcode in wasm objects
This commit fixes using functions in `IRObjectFile` to load bitcode from
wasm objects by recognizing the file magic for wasm and also inheriting
the default implementation of classifying sections as bitcode.
Patch By: alexcrichton
Differential Revision: https://reviews.llvm.org/D78199
Davide Italiano [Wed, 15 Apr 2020 19:28:34 +0000 (12:28 -0700)]
[LICM] Try to merge debug locations when sinking.
The current strategy LICM uses when sinking for debuginfo is
that of picking the debug location of one of the uses.
This causes stepping to be wrong sometimes, see, e.g. PR45523.
This patch introduces a generalization of getMergedLocation(),
that operates on a vector of locations instead of two, and try
to merge all them together, and use the new API in LICM.
<rdar://problem/
61750950>
Pavel Iliin [Wed, 15 Apr 2020 18:01:24 +0000 (19:01 +0100)]
[AArch64][NFC]Autogenerated checks.
Richard Smith [Sun, 12 Apr 2020 05:15:29 +0000 (22:15 -0700)]
Rework how UuidAttr, CXXUuidofExpr, and GUID template arguments and constants are represented.
Summary:
Previously, we treated CXXUuidofExpr as quite a special case: it was the
only kind of expression that could be a canonical template argument, it
could be a constant lvalue base object, and so on. In addition, we
represented the UUID value as a string, whose source form we did not
preserve faithfully, and that we partially parsed in multiple different
places.
With this patch, we create an MSGuidDecl object to represent the
implicit object of type 'struct _GUID' created by a UuidAttr. Each
UuidAttr holds a pointer to its 'struct _GUID' and its original
(as-written) UUID string. A non-value-dependent CXXUuidofExpr behaves
like a DeclRefExpr denoting that MSGuidDecl object. We cache an APValue
representation of the GUID on the MSGuidDecl and use it from constant
evaluation where needed.
This allows removing a lot of the special-case logic to handle these
expressions. Unfortunately, many parts of Clang assume there are only
a couple of interesting kinds of ValueDecl, so the total amount of
special-case logic is not really reduced very much.
This fixes a few bugs and issues:
* PR38490: we now support reading from GUID objects returned from
__uuidof during constant evaluation.
* Our Itanium mangling for a non-instantiation-dependent template
argument involving __uuidof no longer depends on which CXXUuidofExpr
template argument we happened to see first.
* We now predeclare ::_GUID, and permit use of __uuidof without
any header inclusion, better matching MSVC's behavior. We do not
predefine ::__s_GUID, though; that seems like a step too far.
* Our IR representation for GUID constants now uses the correct IR type
wherever possible. We will still fall back to using the
{i32, i16, i16, [8 x i8]}
layout if a definition of struct _GUID is not available. This is not
ideal: in principle the two layouts could have different padding.
Reviewers: rnk, jdoerfert
Subscribers: arphaman, cfe-commits, aeubanks
Tags: #clang
Differential Revision: https://reviews.llvm.org/D78171
Craig Topper [Wed, 15 Apr 2020 19:03:39 +0000 (12:03 -0700)]
[X86] Make v32i16/v64i8 legal types without avx512bw. Use custom splitting instead.
This moves v32i16/v64i8 to a model consistent with how we
treat integer types with avx1.
This does change the ABI for types vXi16/vXi8 vectors larger than
512 bits to pass in multiple zmms instead of multiple ymms. We'd
already hacked some code to make v64i8/v32i16 pass in zmm.
Cost model is still a bit of a mess. In some place I tried to
match existing behavior. But really we need to account for
splitting and concating costs. Cost model for shuffles is
especially pessimistic.
Differential Revision: https://reviews.llvm.org/D76212
Louis Dionne [Wed, 15 Apr 2020 19:05:14 +0000 (15:05 -0400)]
[libc++] Add a new target check-cxx-deps to build dependencies of the test suite
When running the tests through `lit` directly instead of through `check-cxx`,
it is required to manually build the `cxx` (and often `cxx_experimental`)
targets. Instead of having to do that manually, this commit adds a new
target `check-cxx-deps` that does that for you.
Uday Bondhugula [Fri, 10 Apr 2020 11:42:49 +0000 (17:12 +0530)]
[MLIR] Introduce utility to hoist affine if/else conditions
This revision introduces a utility to unswitch affine.for/parallel loops
by hoisting affine.if operations past surrounding affine.for/parallel.
The hoisting works for both perfect/imperfect nests and in the presence
of else blocks. The hoisting is currently to as outermost a level as
possible. Uses a test pass to test the utility.
Add convenience method Operation::getParentWithTrait<Trait>.
Depends on D77487.
Differential Revision: https://reviews.llvm.org/D77870
Fangrui Song [Wed, 15 Apr 2020 18:42:50 +0000 (11:42 -0700)]
[ELF][test] Add --match-full-lines to map-file.s to check leading and trailing spaces
Since we are going to touch so many lines, do some other cleanups.
Delete Inputs/map-file3.s and Inputs/map-file4.s which are tiny.
Kim Viggedal [Wed, 15 Apr 2020 18:47:11 +0000 (14:47 -0400)]
Remove false positive in AvoidNonConstGlobalVariables.
Addresses post-commit review feedback from https://reviews.llvm.org/D70265
Huihui Zhang [Wed, 15 Apr 2020 18:43:17 +0000 (11:43 -0700)]
[NFC] Silence compiler warning [-Wmissing-braces].
clang/unittests/AST/ASTImporterFixtures.h:70:5: warning: suggest braces around initialization of subobject [-Wmissing-braces]
ArgVector(), ArgVector{"-fdelayed-template-parsing"},
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
{
Matt Arsenault [Wed, 15 Apr 2020 18:37:31 +0000 (14:37 -0400)]
AMDGPU/GlobalISel: Work around a selector crash
Ideally types without a corresponding register class wouldn't reach
here, but we're currently missing some (in particular a 192-bit class
is missing).
Simon Pilgrim [Wed, 15 Apr 2020 18:05:42 +0000 (19:05 +0100)]
[X86] Add generic cpu target for the slow division tests
Baseline for any change due to D75567
Dimitry Andric [Wed, 15 Apr 2020 18:30:15 +0000 (20:30 +0200)]
Use maximum compression when packaging release tarballs.
Summary:
Since a full run of test-release.sh takes many hours (at least on my
poor systems), we might as well spend some extra time compressing the
tarball, in return for a quite a bit of gains for uploading and
downloading it.
As an example, the 10.0.0-rc4 .tar.xz tarball shrinks from 465MiB to
306MiB, about 52% smaller.
Reviewers: hans, tstellar, rovka
Reviewed By: hans
Subscribers: llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D76192
Dimitry Andric [Wed, 15 Apr 2020 18:29:20 +0000 (20:29 +0200)]
Turn off core dumps before starting the main body of test-release.sh.
Summary:
Some of the regression tests, such as those for the various sanitizers,
use huge shadow memory maps (showing up in top as 20 TiB). If any of
those ever crashes, your test system's disk will be filled up until
everything falls over. Set the ulimit for core dumps to 0 to prevent
this problem.
Reviewers: hans, tstellar, rovka
Reviewed By: hans
Subscribers: llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D76191
Louis Dionne [Wed, 15 Apr 2020 18:17:40 +0000 (14:17 -0400)]
[libc++] Adjust XFAIL markup for modules tests on single-threaded systems
When building these tests without modules in the whole test suite,
the __config_site macro definitions are not included anymore in the
%{compile_flags}. This causes the _LIBCPP_HAS_NO_THREADS define not
to be picked up, and the test to XPASS on single-threaded systems.
This is a stop-gap measure to fix the build bots, however the proper
solution would be to always pass the __config_site defines as compiler
macros, whether we build with modules or not.
Jon Roelofs [Mon, 13 Apr 2020 16:36:45 +0000 (10:36 -0600)]
Add FileCheck colons missed in D76210
https://reviews.llvm.org/D76210#inline-715185
Nico Weber [Tue, 14 Apr 2020 00:12:51 +0000 (20:12 -0400)]
[lit] Keep original cfg file case around.
There's been some back and forth if the cfg paths in the
config_map should be normcase()d. The argument for is that
it allows using all-lower spelling in cmd on Windows, the
argument against that doing so is lossy.
Before the relative-paths-in-generated-lit.site.cfg.py work,
there was no downside to calling normcase(), but with it
we need a hack to recover the original case.
This time, normcase() the hashtable key, but store the original
cased key in addition to the value. This fixes both cons, at the
cost of a few bytes more memory.
Differential Revision: https://reviews.llvm.org/D78169
Sam McCall [Wed, 15 Apr 2020 13:12:30 +0000 (15:12 +0200)]
[Format] Work around current vim bugs in clang-format.py
Summary:
Do line/col to byte conversions on the python side rather than relying on vim.
Its calculations are off when text annotations are present:
- https://github.com/vim/vim/issues/5930
- https://github.com/vim/vim/issues/3718 (fixed, but vim 8.1 is still common)
Reviewers: hokein
Subscribers: cfe-commits
Tags: #clang
Differential Revision: https://reviews.llvm.org/D78198
George Burgess IV [Wed, 15 Apr 2020 18:05:22 +0000 (11:05 -0700)]
[CodeGen] only add nobuiltin to inline builtins if we'll emit them
There are some inline builtin definitions that we can't emit
(isTriviallyRecursive & callers go into why). Marking these
nobuiltin is only useful if we actually emit the body, so don't mark
these as such unless we _do_ plan on emitting that.
This suboptimality was encountered in Linux (see some discussion on
D71082, and https://github.com/ClangBuiltLinux/linux/issues/979).
Differential Revision: https://reviews.llvm.org/D78162
Nico Weber [Wed, 15 Apr 2020 18:02:01 +0000 (14:02 -0400)]
Remove an apparently unneeded normcase() call.
I believe this call is unneeded after https://reviews.llvm.org/D34855.
Reviewed as part of https://reviews.llvm.org/D78169
Nikita Popov [Fri, 10 Apr 2020 20:06:12 +0000 (22:06 +0200)]
[MC] Use subclass data for MCExpr to reduce memory usage
MCExpr has a bunch of free space that is currently going to waste.
Repurpose it as 24 bits of subclass data, which is enough to reduce
the size of all subclasses by 8 bytes. This gives us some respectable
savings for debuginfo builds. Here are the max-rss reductions for the
fat LTO link step:
kc.link 238MiB 231MiB (-2.82%)
sqlite3.link 258MiB 250MiB (-3.27%)
consumer-typeset.link 152MiB 148MiB (-2.51%)
bullet.link 197MiB 192MiB (-2.30%)
tramp3d-v4.link 578MiB 567MiB (-1.92%)
pairlocalalign.link 92MiB 90MiB (-1.98%)
clamscan.link 230MiB 223MiB (-2.81%)
lencod.link 242MiB 235MiB (-2.67%)
SPASS.link 235MiB 230MiB (-2.23%)
7zip-benchmark.link 450MiB 435MiB (-3.25%)
Differential Revision: https://reviews.llvm.org/D77939
Craig Topper [Wed, 15 Apr 2020 17:04:18 +0000 (10:04 -0700)]
[X86] Various improvements to our vector splitting helpers for lowering. NFC
-Consistently name the functions as split*
-Add a helper for doing the two extractSubvector calls and determining the size of the split
-Use getSplitDestVTs to get the result type for the split node.
-Move the binary and unary helper to one place in the file near the extractSubvector functions. Left the VSETCC one near LowerVSETCC since that's its only caller.
-Remove the 256/512 wrappers that just had asserts. I don't think they provided a lot of value and now with the routines called split* the call sites are more obvious what they do.
-Make the unary routine support different source and dest types to support D76212.
-Add some weaker asserts into the helpers to make up for losing the very specific asserts from the 256/512 wrappers.
Differential Revision: https://reviews.llvm.org/D78176
Jonas Devlieghere [Wed, 15 Apr 2020 17:24:34 +0000 (10:24 -0700)]
[lldb/Scripts] Add script to replay multiple reproducers
Script to replay reproducers in parallel using the command line driver.
This is used for active replay (stage 1 as described in the RFC on
lldb-dev [1]).
[1] http://lists.llvm.org/pipermail/lldb-dev/2020-April/016100.html
Differential revision: https://reviews.llvm.org/D77608
Sterling Augustine [Wed, 15 Apr 2020 17:42:52 +0000 (10:42 -0700)]
Write ignored output to stdout, so this test runs on read-only filesystems.
Nico Weber [Wed, 15 Apr 2020 17:37:22 +0000 (13:37 -0400)]
Try to fix clang-tidy/infrastructure/config-files.cpp on Win after
cb1ee34e9d32fc.
See also r267736.
Amara Emerson [Sat, 11 Apr 2020 05:39:49 +0000 (22:39 -0700)]
[GlobalISel] Enable artifact combiner to combine starting from a G_MERGE_VALUES.
We generally only combine starting from users to defs in the artifact combiner,
but this doesn't catch cases where at the point of combining a G_UNMERGE we don't
yet have the opposite G_MERGE on input yet since we haven't legalized that far.
This change adds the users of a G_MERGE to the artifact combiner worklist if one
of the uses is a G_UNMERGE or G_TRUNC.
Differential Revision: https://reviews.llvm.org/D77931
Craig Topper [Wed, 15 Apr 2020 05:04:35 +0000 (22:04 -0700)]
[CallSite removal][PruneEH] Use CallBase instead of CallSite. NFC
Reviewers: mtrofin, dblaikie
Subscribers: hiraditya, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D78182
Louis Dionne [Wed, 15 Apr 2020 16:58:00 +0000 (12:58 -0400)]
[libc++] Remove the need for the %{build_module} substitution
Instead of using .sh.cpp tests for the modules tests, use .compile.pass.cpp
and add the -fmodules additional flag.
Dominik Montada [Wed, 15 Apr 2020 16:47:39 +0000 (18:47 +0200)]
Revert "[GlobalISel] Fix invalid combine of unmerge(merge) with intermediate cast"
This reverts commit
bddac41b9f1ae80b56dace7d55cd81a07147ff3d.
Louis Dionne [Wed, 15 Apr 2020 16:26:55 +0000 (12:26 -0400)]
[libc++] NFC: Remove the %{compile} substitution, which is not used anymore
Louis Dionne [Wed, 15 Apr 2020 16:23:11 +0000 (12:23 -0400)]
[libc++] Split up tests for <stdint.h> on AIX and make them AIX-independent
Avoid using <sys/types.h> in those tests so that we can run them on
non-AIX systems (otherwise this test is basically dead-code on all
the build bots I'm aware of). Also, split up the test to allow using
.compile.pass.cpp tests instead of .sh.cpp tests, since that is the
last test referencing the %{compile} substitution explicitly.
Pierre Oechsel [Wed, 15 Apr 2020 16:31:22 +0000 (18:31 +0200)]
[mlir] [EDSC] Add interface for yield-for loops.
Summary:
ModelBuilder was missing an api to easily generate yield-for-loops.
This diffs implements an interface allowing to write:
```
%2:2 = loop.for %i = %start to %end step %step iter_args(%arg0 = %init0, %arg1 = %init1) -> (f32, f32) {
%sum = addf %arg0, %arg1 : f32
loop.yield %arg1, %sum : f32, f32
}
%3 = addf %2#0, %2#1 : f32
```
as
```
auto results =
LoopNestBuilder(&i, start, end, step, {&arg0, &arg1}, {init0, init1})([&] {
auto sum = arg0 + arg1;
loop_yield(ArrayRef<ValueHandle>{arg1, sum});
});
// Add the two values accumulated by the yield-for-loop:
ValueHandle(results[0]) + ValueHandle(results[1]);
```
Differential Revision: https://reviews.llvm.org/D78093
Louis Dionne [Wed, 15 Apr 2020 16:08:05 +0000 (12:08 -0400)]
[libc++] Move some .sh.cpp tests to .compile.pass.cpp
As a fly-by fix, improve/fix the comments explaining the tests. This is
a step towards removing references to the %{compile} substitution.
Louis Dionne [Wed, 15 Apr 2020 16:00:52 +0000 (12:00 -0400)]
[libc++] Move aligned allocation tests to .verify.cpp
Instead of being ShTests that use clang-verify (and without the proper
REQUIRES annotation), create .verify.cpp tests instead with the right
REQUIRES annotation.
Nico Weber [Wed, 15 Apr 2020 16:01:58 +0000 (12:01 -0400)]
Remove a function that has been dead since r313889.
Vince Bridgers [Mon, 6 Apr 2020 13:22:35 +0000 (08:22 -0500)]
[ASTImporter] Add support for importing fixed point literals
Summary:
This patch adds support for importing fixed point literals, following
up to https://reviews.llvm.org/D46915 specifically for importing AST.
Reviewers: martong, leonardchan, ebevhan, a.sidorin, shafik
Reviewed By: martong
Subscribers: balazske, rnkovacs, teemperor, cfe-commits
Tags: #clang
Differential Revision: https://reviews.llvm.org/D77721
Dominik Montada [Wed, 15 Apr 2020 08:06:13 +0000 (10:06 +0200)]
[GlobalISel] Fix invalid combine of unmerge(merge) with intermediate cast
Summary:
The combine for unmerge(cast(merge)) is only valid for vectors, but was
missing a corresponding check. Add a check that the operands are vectors
to avoid an invalid combine.
Without this check, the combiner would emit incorrect code for scalars
and pointers because the artifact cast (trunc/ext) only affects bits at
the end of the type, while this combine assumes that the casted bits
appear between meaningful bits.
This also uncovered a segmentation fault in the AMDGPU
InstructionSelector. The tests triggering this bug have been moved to
their own file and a check for the segmentation fault has been added.
Reviewers: arsenm, dsanders, aemerson, paquette, aditya_nandakumar
Reviewed By: arsenm
Subscribers: tpr, jvesely, wdng, nhaehnle, rovka, kerbowa, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D78191
Fangrui Song [Tue, 14 Apr 2020 20:42:00 +0000 (13:42 -0700)]
[TimeProfiler] Fix some style issues. NFC
Reviewed By: broadwaylamb, russell.gallop
Differential Revision: https://reviews.llvm.org/D78153
Fangrui Song [Tue, 14 Apr 2020 21:17:29 +0000 (14:17 -0700)]
[ELF] Refactor the way we handle -plugin-opt= (GCC collect2 or clang LTO related options)
GCC collect2 passes several options to the linker even if LTO is not used
(note, lld does not support GCC LTO). The lto-wrapper may be a relative
path (especially during development, when gcc is in a build directory), e.g.
-plugin-opt=relative/path/to/lto-wrapper
We need to ignore such options, which are currently interpreted by
cl::ParseCommandLineOptions() and will fail with `error: --plugin-opt: ld.lld: Unknown command line argument 'relative/path/to/lto-wrapper'`
because the path is apparently not an option registered by an `llvm::cl::opt`.
See lto-plugin-ignore.s for how we interpret various -plugin-opt= options now.
Reviewed By: grimar, tejohnson
Differential Revision: https://reviews.llvm.org/D78158
Louis Dionne [Tue, 14 Apr 2020 17:00:53 +0000 (13:00 -0400)]
[libc++] Remove workaround for .fail.cpp tests that don't have clang-verify markup
By renaming .fail.cpp tests that don't need clang-verify to .compile.fail.cpp,
the new test format will not try to compile these tests with clang-verify,
and the old test format will work just the same. However, this allows
removing a workaround that requires parsing each test looking for
clang-verify markup.
After this change, a .fail.cpp test should always have clang-verify markup.
When clang-verify is not supported by the compiler, we will just check that
these tests fail to compile. When clang-verify is supported, these tests
will be compiled with clang-verify whether they have markup or not (so
they should have markup, or they will fail).
This simplifies the test suite and also ensures that all of our .fail.cpp
tests provide clang-verify markup. If it's impossible for a test to have
clang-verify markup, it can be moved to a .compile.fail.cpp test, which
are unconditionally just checked for compilation failure.
Dominik Montada [Thu, 9 Apr 2020 12:33:59 +0000 (14:33 +0200)]
[GlobalISel] translate freeze to new generic G_FREEZE
Summary:
As a follow up to https://reviews.llvm.org/D29014, add translation
support for freeze.
Introduce a new generic instruction G_FREEZE and translate freeze to it.
Reviewers: dsanders, aqjune, arsenm, aditya_nandakumar, t.p.northover, lebedev.ri, paquette, aemerson
Reviewed By: aqjune, arsenm
Subscribers: fhahn, lebedev.ri, wdng, rovka, hiraditya, jfb, volkan, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D77795
Hubert Tong [Wed, 15 Apr 2020 14:33:35 +0000 (10:33 -0400)]
[www] Update make_cxx_dr_status for v10; regenerate cxx_dr_status.html
Summary: Update `latest_release` to reflect the release of Clang 10.
Reviewed By: rsmith
Differential Revision: https://reviews.llvm.org/D78172
Florian Hahn [Wed, 15 Apr 2020 14:21:30 +0000 (15:21 +0100)]
[DSE,MSSA] Add use of alloca, to guard against removal in the future.
Currently the alloca does not escape and all stores and the memset can
be removed. Adding a use of the alloca ensures not all stores are
eliminated.
Haojian Wu [Sun, 12 Apr 2020 21:06:00 +0000 (23:06 +0200)]
[AST] Fix recovery-expr crash on invalid aligned attr.
Summary:
crash stack:
```
lang: tools/clang/include/clang/AST/AttrImpl.inc:1490: unsigned int clang::AlignedAttr::getAlignment(clang::ASTContext &) const: Assertion `!isAlignmentDependent()' failed.
PLEASE submit a bug report to https://bugs.llvm.org/ and include the crash backtrace, preprocessed source, and associated run script.
Stack dump:
0. Program arguments: ./bin/clang -cc1 -std=c++1y -ast-dump -frecovery-ast -fcxx-exceptions /tmp/t4.cpp
1. /tmp/t4.cpp:3:31: current parser token ';'
#0 0x0000000002530cff llvm::sys::PrintStackTrace(llvm::raw_ostream&) llvm-project/llvm/lib/Support/Unix/Signals.inc:564:13
#1 0x000000000252ee30 llvm::sys::RunSignalHandlers() llvm-project/llvm/lib/Support/Signals.cpp:69:18
#2 0x000000000253126c SignalHandler(int) llvm-project/llvm/lib/Support/Unix/Signals.inc:396:3
#3 0x00007f86964d0520 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x13520)
#4 0x00007f8695f9ff61 raise /build/glibc-oCLvUT/glibc-2.29/signal/../sysdeps/unix/sysv/linux/raise.c:51:1
#5 0x00007f8695f8b535 abort /build/glibc-oCLvUT/glibc-2.29/stdlib/abort.c:81:7
#6 0x00007f8695f8b40f _nl_load_domain /build/glibc-oCLvUT/glibc-2.29/intl/loadmsgcat.c:1177:9
#7 0x00007f8695f98b92 (/lib/x86_64-linux-gnu/libc.so.6+0x32b92)
#8 0x0000000004503d9f llvm::APInt::getZExtValue() const llvm-project/llvm/include/llvm/ADT/APInt.h:1623:5
#9 0x0000000004503d9f clang::AlignedAttr::getAlignment(clang::ASTContext&) const llvm-project/build/tools/clang/include/clang/AST/AttrImpl.inc:1492:0
```
Reviewers: sammccall
Subscribers: cfe-commits
Tags: #clang
Differential Revision: https://reviews.llvm.org/D78085
jasonliu [Wed, 15 Apr 2020 14:00:34 +0000 (14:00 +0000)]
[XCOFF][AIX] Relocation support for SymB
This patch intends to provide relocation support for the expression
contains two unpaired relocatable terms with opposite signs.
Differential Revision: https://reviews.llvm.org/D77424
Xing Xue [Wed, 15 Apr 2020 13:59:06 +0000 (09:59 -0400)]
[demangler] PPC and S390: Fix parsing of e-prefixed long double literals
Summary:
This patch is to fix the parsing of long double literals encoded with the e prefix on PowerPC and S390. For both PowerPC and S390, type code e is used for 64-bit long double literals and g is used for 128-bit long double literals. libcxxabi test case test_demangle.pass.cpp fails without the fix.
Authored by: xingxue-ibm
Reviewers: hubert.reinterpretcast, jasonliu, erik.pilkington, uweigand, mclow.li
sts, libc++abi
Reviewed by: hubert.reinterpretcast, erik.pilkington
Differential Revision: https://reviews.llvm.org/D74163
Georgii Rymar [Wed, 15 Apr 2020 13:55:48 +0000 (16:55 +0300)]
[FileCheck] - Refine the comment. NFC.
It did not mention the `--implicit-check-not` before,
though it should (https://reviews.llvm.org/D78024#inline-715166).
Benjamin Kramer [Wed, 15 Apr 2020 13:54:47 +0000 (15:54 +0200)]
Unbreak the build
Benjamin Kramer [Wed, 15 Apr 2020 13:52:26 +0000 (15:52 +0200)]
Pass shufflevector indices as int instead of unsigned.
No functionality change intended.
Dmitry Polukhin [Wed, 1 Apr 2020 09:08:53 +0000 (02:08 -0700)]
[clang-tidy] Optional inheritance of file configs from parent directories
Summary:
Without this patch clang-tidy stops finding file configs on the nearest
.clang-tidy file. In some cases it is not very convenient because it
results in common parts duplication into every child .clang-tidy file.
This diff adds optional config inheritance from the parent directories
config files.
Test Plan:
Added test cases in existing config test.
Reviewers: alexfh, gribozavr2, klimek, hokein
Subscribers: njames93, arphaman, xazax.hun, aheejin, cfe-commits
Tags: #clang, #clang-tools-extra
Differential Revision: https://reviews.llvm.org/D75184
Victor Campos [Wed, 25 Mar 2020 10:52:43 +0000 (10:52 +0000)]
[CodeGen][ARM] Error when writing to specific reserved registers in inline asm
Summary:
No error or warning is emitted when specific reserved registers are
written to in inline assembly. Therefore, writes to the program counter
or to the frame pointer, for instance, were permitted, which could have
led to undesirable behaviour.
Example:
int foo() {
register int a __asm__("r7"); // r7 = frame-pointer in M-class ARM
__asm__ __volatile__("mov %0, r1" : "=r"(a) : : );
return a;
}
In contrast, GCC issues an error in the same scenario.
This patch detects writes to specific reserved registers in inline
assembly for ARM and emits an error in such case. The detection works
for output and input operands. Clobber operands are not handled here:
they are already covered at a later point in
AsmPrinter::emitInlineAsm(const MachineInstr *MI). The registers
covered are: program counter, frame pointer and base pointer.
This is ARM only. Therefore the implementation of other targets'
counterparts remain open to do.
Reviewers: efriedma
Reviewed By: efriedma
Subscribers: kristof.beyls, hiraditya, danielkiss, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D76848
Sanjay Patel [Wed, 15 Apr 2020 13:11:44 +0000 (09:11 -0400)]
[InstCombine] prevent infinite loop with sub/abs of constant expression
PR45539:
https://bugs.llvm.org/show_bug.cgi?id=45539
Matt Arsenault [Mon, 13 Apr 2020 13:15:48 +0000 (09:15 -0400)]
clang/AMDGPU: Assume denormals are enabled for the default target.
Since the default logic was based on having fast denormal/fma
features, and the default target has no features, we assumed flushing
by default. This fixes incorrectly assuming flushing in builds for
"generic" IR libraries.
The handling for no specified --cuda-gpu-arch in HIP is kind of
broken. Somewhere else forces a default target of gfx803, which does
not enable denormal handling by default. We don't see this default
switching here, so you'll end up with a different denormal mode
depending on whether you explicitly requested gfx803, or used it by
default.
Jan Kratochvil [Wed, 15 Apr 2020 13:12:59 +0000 (15:12 +0200)]
Revert "[nfc] [lldb] Introduce DWARF callbacks"
This reverts commit
bd47c470d13b1c57ecf37c1faf0324833d3a4542.
It broke Green Dragon, reason is unknown to me so far:
http://green.lab.llvm.org/green/view/LLDB/job/lldb-cmake/15323/consoleFull
Differential Revision: https://reviews.llvm.org/D77327
Matt Arsenault [Wed, 15 Apr 2020 13:02:07 +0000 (09:02 -0400)]
AMDGPU/GlobalISel: Add some artifact combiner tests
Thomas Preud'homme [Sat, 4 Apr 2020 00:02:45 +0000 (01:02 +0100)]
[FileCheck] Better diagnostic for format conflict
Summary:
Improve error message in case of conflict between several implicit
format to mention the operand that conflict.
Reviewers: jhenderson, jdenny, probinson, grimar, arichardson, rnk
Reviewed By: jdenny
Subscribers: hiraditya, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D77741
Simon Moll [Wed, 15 Apr 2020 12:43:26 +0000 (14:43 +0200)]
[nfc] clang-format TargetTransformInfo.cpp
Benjamin Kramer [Wed, 15 Apr 2020 12:29:09 +0000 (14:29 +0200)]
Upgrade users of 'new ShuffleVectorInst' to pass indices as an int array
No functionality change intended.
David Truby [Wed, 15 Apr 2020 11:55:42 +0000 (12:55 +0100)]
[flang] Add return statement to Logical opeator=.
This removes the current undefined behavior where the function has a return type
but no return statement.
Fixes: https://bugs.llvm.org/show_bug.cgi?id=45530
Simon Moll [Wed, 15 Apr 2020 12:01:31 +0000 (14:01 +0200)]
[nfc] clang-format TargetTransformInfoImpl.h
Simon Moll [Wed, 15 Apr 2020 12:00:07 +0000 (14:00 +0200)]
[nfc] clang-format TargetTransformInfo.h
Denis Antrushin [Tue, 14 Apr 2020 15:30:51 +0000 (18:30 +0300)]
[Statepoint] Add getters to StatepointOpers.
To simplify future work on statepoint representation, hide
direct access to statepoint field indices and provide getters
for them. Add getters for couple more statepoint fields.
This also fixes two bugs in MachineVerifier for statepoint:
First, the `break` statement was falling out of `if` statement
scope, thus disabling following checks.
Second, it was incorrectly accessing some fields like CallingConv -
StatepointOpers gives index to their value directly, not to
preceeding field type encoding.
Reviewed By: skatkov
Differential Revision: https://reviews.llvm.org/D78119
Kirill Bobyrev [Wed, 15 Apr 2020 11:27:30 +0000 (13:27 +0200)]
[dexp] NFC: Change positional argument format
Summary:
Before:
USAGE: dexp [options] --index-path Path to the index
After:
USAGE: dexp [options] <INDEX FILE>
Reviewers: sammccall
Reviewed By: sammccall
Subscribers: jkorous, arphaman, kadircet, usaxena95, cfe-commits
Tags: #clang
Differential Revision: https://reviews.llvm.org/D78089
Florian Hahn [Tue, 14 Apr 2020 08:36:16 +0000 (09:36 +0100)]
[VPlan] Branches are not widened by VPWidenRecipe, assert (NFC).
Jonas Paulsson [Wed, 15 Apr 2020 09:29:55 +0000 (11:29 +0200)]
[SystemZ] Bugfix in adjustSubwordCmp()
adjustSubwordCmp() should not optimize a load of an i1 value. This is
achieved by checking that the size and store-size of the MemoryVT are the
same.
Fixes https://bugs.llvm.org/show_bug.cgi?id=45511.
Review: Ulrich Weigand
Differential Revision: https://reviews.llvm.org/D78187
Simon Pilgrim [Wed, 15 Apr 2020 10:54:22 +0000 (11:54 +0100)]
[CostModel][X86] Regenerate load_store.ll costs tests
Add SSE + AVX512 targets
Add some illegal type store tests
Benjamin Kramer [Wed, 15 Apr 2020 10:41:54 +0000 (12:41 +0200)]
Upgrade calls to CreateShuffleVector to use the preferred form of passing an array of ints
No functionality change intended.
Florian Hahn [Wed, 15 Apr 2020 10:41:13 +0000 (11:41 +0100)]
[VPlan] Move widening check for non-memory/non-calls to function (NFC).
After introducing VPWidenSelectRecipe, the duplicated logic can be
shared.
Reviewers: gilr, rengolin, Ayal, hsaito
Reviewed By: Ayal
Differential Revision: https://reviews.llvm.org/D77973
Pavel Labath [Wed, 15 Apr 2020 10:40:12 +0000 (12:40 +0200)]
[lldb] Fix -Wparentheses in ThreadPlanStack.cpp
Pavel Labath [Tue, 14 Apr 2020 15:06:04 +0000 (17:06 +0200)]
Fix DWARFDataExtractor::getRelocatedValue near EOF
Summary:
If we have an (invalid) relocation which relocates bytes which partially
lie outside the range of the relocated section, the getRelocatedValue
would return confusing results. It would first read zero (because that's
what the underlying DataExtractor api does for out-of-bounds reads), and
then relocate that zero anyway.
A more appropriate behavior is to return zero straight away. This is
what this patch does.
Reviewers: dblaikie, jhenderson
Subscribers: hiraditya, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D78113
Florian Hahn [Wed, 15 Apr 2020 09:42:58 +0000 (10:42 +0100)]
[DSE] Lift post-dominance for objs not accessible in caller.
We can eliminate MemoryDefs of objects not accessible after the function
returns (e.g. alloca), if there are no reads between the MemoryDef and
any function exits. We can stop traversing paths that completely
overwrite the memory location of the MemoryDef.
This patch was split off D73763.
Reviewers: dmgreen, bryant, asbirlea, Tyker, efriedma, george.burgess.iv
Reviewed By: asbirlea, george.burgess.iv
Differential Revision: https://reviews.llvm.org/D77736
Sam Parker [Thu, 9 Apr 2020 06:51:33 +0000 (07:51 +0100)]
[ARM][MVE] Tail predicate VML[A|S]LDAV
Make the non-exchanging versions of the multiply add/sub instructions
validForTailPredication.
Differential Revision: https://reviews.llvm.org/D77648
Sameer Sahasrabuddhe [Wed, 15 Apr 2020 10:25:04 +0000 (15:55 +0530)]
fix warning: specialization of template in different namespace
This is related to commit
8c11bc0cd06ffc18786a1a51ee5ce5b1cc4923f6
which introduces the FixIrreducible pass. The warning seems hard to
reproduce locally. The latest attempt ought to work.
Nandor Licker [Thu, 9 Apr 2020 18:13:38 +0000 (19:13 +0100)]
[ConstExprPreter] Updated constant interpreter documentation
Summary:
Updated the documentation to better reflect features implemented on the
constexpr branch at https://github.com/nandor/llvm-project and extended
the TODO list with known missing features
Reviewers: rsmith, Bigcheese, dexonsmith, jfb
Subscribers: lebedev.ri, cfe-commits
Tags: #clang
Differential Revision: https://reviews.llvm.org/D75726
Georgii Rymar [Tue, 14 Apr 2020 15:04:48 +0000 (18:04 +0300)]
[LLVM/tools][test] - Remove/fix dead check prefixes.
We have a few unused/broken FileCheck prefixes in `llvm/test/tools`.
This patch fixes it.
Differential revision: https://reviews.llvm.org/D78110
Simon Moll [Wed, 15 Apr 2020 10:05:07 +0000 (12:05 +0200)]
[NFC] clang-format IntrinsicInst.h|cpp
Differential Revision: https://reviews.llvm.org/D78188
LLVM GN Syncbot [Wed, 15 Apr 2020 09:38:24 +0000 (09:38 +0000)]
[gn build] Port
8c11bc0cd06
Sameer Sahasrabuddhe [Wed, 15 Apr 2020 09:35:51 +0000 (15:05 +0530)]
Introduce fix-irreducible pass
An irreducible SCC is one which has multiple "header" blocks, i.e., blocks
with control-flow edges incident from outside the SCC. This pass converts an
irreducible SCC into a natural loop by introducing a single new header
block and redirecting all the edges on the original headers to this
new block.
This is a useful workaround for a limitation in the structurizer
which, which produces incorrect control flow in the presence of
irreducible regions. The AMDGPU backend provides an option to
enable this pass before the structurizer, which may eventually be
enabled by default.
Reviewed By: nhaehnle
Differential Revision: https://reviews.llvm.org/D77198
This restores commit
2ada8e2525dd2653f30c8696a27162a3b1647d66.
Originally reverted with commit
44e09b59b869a91bf47d76e8bc569d9ee91ad145.
Florian Hahn [Wed, 15 Apr 2020 09:18:31 +0000 (10:18 +0100)]
[VPlan] Move Load/Store checks out of tryToWiden (NFC).
Handling LoadInst and StoreInst in tryToWiden seems a bit
counter-intuitive, as there is only an assertion for them and in no
case VPWidenRefipes are created for them.
I think it makes sense to move the assertion to handleReplication, where
the non-widened loads and store are handled.
Reviewers: gilr, rengolin, Ayal, hsaito
Reviewed By: Ayal
Differential Revision: https://reviews.llvm.org/D77972
Alex Zinenko [Tue, 14 Apr 2020 11:01:53 +0000 (13:01 +0200)]
[mlir] LLVM dialect: support globals without linkage keyword, assuming 'external'
Similarly to actual LLVM IR, and to `llvm.mlir.func`, allow the custom syntax
of `llvm.mlir.global` to omit the linkage keyword. If omitted, the linkage is
assumed to be external. This makes the modeling of globals in the LLVM dialect
more consistent, both within the dialect and with LLVM IR.
Differential Revision: https://reviews.llvm.org/D78096
Uday Bondhugula [Sun, 5 Apr 2020 02:40:33 +0000 (08:10 +0530)]
[MLIR] Introduce applyOpPatternsAndFold for op local rewrites
Introduce mlir::applyOpPatternsAndFold which applies patterns as well as
any folding only on a specified op (in contrast to
applyPatternsAndFoldGreedily which applies patterns only on the regions
of an op isolated from above). The caller is made aware of the op being
folded away or erased.
Depends on D77485.
Differential Revision: https://reviews.llvm.org/D77487
Jan Kratochvil [Wed, 15 Apr 2020 08:36:31 +0000 (10:36 +0200)]
[nfc] [lldb] Introduce DWARF callbacks
As requested by @labath in https://reviews.llvm.org/D73206#1949516
providing DWARF index callbacks refactorization.
Differential Revision: https://reviews.llvm.org/D77327
Shengchen Kan [Wed, 15 Apr 2020 08:18:11 +0000 (16:18 +0800)]
[NFC][test] Mark the section which contains instructions executable
As we disscussed in D77971, we haven't confirmed that if putting instructions
in a non-executable section is an undefined behaviour. To make things
easier to go on, we mark these sections executable in test file
align-branch-section-size.s.
Kazushi (Jam) Marukawa [Wed, 15 Apr 2020 07:47:14 +0000 (09:47 +0200)]
[VE] Update integer arithmetic instructions
Summary:
Changing all mnemonic to match assembly instructions to simplify mnemonic
naming rules. This time update all fixed-point arithmetic instructions.
This also corrects smax/smin code generations.
Reviewed By: simoll
Differential Revision: https://reviews.llvm.org/D77856
Raphael Isemann [Wed, 15 Apr 2020 05:34:14 +0000 (07:34 +0200)]
[lldb][NFC] Remove FormatterChoiceCriterion
Summary:
The formatters code has a lot of 'reason' or 'why' values that we keep or-ing FormatterChoiceCriterion
enum values into. These values are only read by a single log statement and don't have any functional
purpose. It also seems the implementation is not finished (for example, display names and type
names don't have any dedicated enum values). Also everything is of course not tested or documented.
Let's just remove all of this.
Reviewers: labath, JDevlieghere, jingham, davide, vsk
Reviewed By: labath, vsk
Subscribers: JDevlieghere
Differential Revision: https://reviews.llvm.org/D77968