Kazu Hirata [Sat, 10 Jul 2021 14:50:24 +0000 (07:50 -0700)]
[AFDO] Require x86_64-linux in a testcase
This patch fixes a testcase failure by requring x86_64-linux in a
testcase.
Simon Pilgrim [Sat, 10 Jul 2021 14:08:34 +0000 (15:08 +0100)]
[X86] Add tests from D93707 for fsub_strict(x,fneg(y)) -> fadd_strict(x,y) folds.
Also, add matching i686 coverage to strict-fadd-combines.ll and regenerate checks.
Andrea Di Biagio [Sat, 10 Jul 2021 12:50:29 +0000 (13:50 +0100)]
[llvm-mca][JSON] Teach the PipelinePrinter how to deal with anonymous code regions (PR51008)
This patch addresses the last remaining problems reported in PR51008.
Previous fixes for PR51008 worked under the wrong assumption that code regions
are always named (except maybe for the default region, which was automatically
named "main").
In reality, it is quite common for users to declare multiple anonymous regions.
So we cannot really use the region name as the key string of a JSON object. In
practice, code region names are completely optional.
Using "main" for the default region was also problematic because there can be
another region with that same name.
This patch fixes these issues by introducing a json::array of regions. Each
region has a "Name" field, which would default to the empty string for anonymous
regions.
Added a few more tests to verify that the JSON file format is still valid, and
that multiple anonymous regions all appear in the final output.
Andrea Di Biagio [Sat, 10 Jul 2021 11:27:30 +0000 (12:27 +0100)]
[llvm-mca][JSON] Further refactoring of the JSON printing logic.
This patch renames object "Resources" to "TargetInfo".
Moved the getJSONTargetInfo method from class InstructionView to the
PipelinePrinter.
Removed uses of std::stringstream.
Removed unused method View::printViewJSON().
Sander de Smalen [Sat, 10 Jul 2021 10:57:12 +0000 (11:57 +0100)]
[LV] NFCI: Do cost comparison on InstructionCost directly.
Instead of performing the isMoreProfitable() operation on
InstructionCost::CostTy the operation is performed on InstructionCost
directly, so that it can handle the case where one of the costs is
Invalid.
This patch also changes the CostTy to be int64_t, so that the type is
wide enough to deal with multiplications with e.g. `unsigned MaxTripCount`.
Reviewed By: dmgreen
Differential Revision: https://reviews.llvm.org/D105113
Sander de Smalen [Sat, 10 Jul 2021 10:28:38 +0000 (11:28 +0100)]
[InstructionCost] Add saturation support.
This patch makes the operations on InstructionCost saturate, so that when
costs are accumulated they saturate to <max value>.
One of the compelling reasons for wanting to have saturation support
is because in various places, arbitrary values are used to represent
a 'high' cost, but when accumulating the cost of some set of operations
or a loop, overflow is not taken into account, which may lead to unexpected
results. By defining the operations to saturate, we can express the cost
of something 'very expensive' as InstructionCost::getMax().
Reviewed By: kparzysz, dmgreen
Differential Revision: https://reviews.llvm.org/D105108
Martin Storsjö [Sat, 10 Jul 2021 07:45:54 +0000 (10:45 +0300)]
Revert "Prepare Compiler-RT for GnuInstallDirs, matching libcxx"
This reverts commit
9a9bc76c0eb72f0f2732c729a460abbd5239c2e3.
That commit broke "ninja install" when building compiler-rt for mingw
targets, building standalone (pointing cmake at the compiler-rt
directory) with cmake 3.16.3 (the one shipped in ubuntu 20.04), with
errors like this:
-- Install configuration: "Release"
CMake Error at cmake_install.cmake:44 (file):
file cannot create directory: /include/sanitizer. Maybe need
administrative privileges.
Call Stack (most recent call first):
/home/martin/code/llvm-mingw/src/llvm-project/compiler-rt/build-i686-sanitizers/cmake_install.cmake:37 (include)
FAILED: include/CMakeFiles/install-compiler-rt-headers
cd /home/martin/code/llvm-mingw/src/llvm-project/compiler-rt/build-i686-sanitizers/include && /usr/bin/cmake -DCMAKE_INSTALL_COMPONENT="compiler-rt-headers" -P /home/martin/code/llvm-mingw/src/llvm-project/compiler-rt/build-i686-sanitizers/cmake_install.cmake
ninja: build stopped: subcommand failed.
Amara Emerson [Sat, 10 Jul 2021 06:11:22 +0000 (23:11 -0700)]
[AArch64][GlobalISel] Implement moreElements legalization for G_SHUFFLE_VECTOR.
Differential Revision: https://reviews.llvm.org/D103301
Eli Friedman [Sat, 10 Jul 2021 06:32:31 +0000 (23:32 -0700)]
[NFC][ScalarEvolution] Precommit tests for D104075.
Amara Emerson [Mon, 24 May 2021 22:09:33 +0000 (15:09 -0700)]
[GlobalISel] Add a new artifact combiner for unmerge which looks through general artifact expressions.
The original motivation for this was to implement moreElementsVector of shuffles
on AArch64, which resulted in complex sequences of artifacts like unmerge(unmerge(concat...))
which the combiner couldn't handle. It seemed here that the better option,
instead of writing ever-more-complex combines, was to have a way to find
the original "non-artifact" source registers for a given definition, walking
through arbitrary expressions of unmerge/concat/insert. As long as the bits
aren't extended or truncated, this is a pretty simple algorithm that avoids
the need for lots of combines and instead jumps straight to the final result
we want.
I've only used this new technique in 2 places within tryCombineUnmerge, using it
in more general situations resulted in infinite loops in AMDGPU. So for now
it's used when we would otherwise fail to combine and that seems to work.
In order to support looking through G_INSERTs, I also had to add it as an
artifact in isArtifact(), which caused a whole lot of issues in tests. AMDGPU
started infinite looping since full legalization of G_INSERT doensn't seem to
be there. To work around this, I've temporarily added a CLI option to use the
old behaviour so that the MIR tests will still run and terminate.
Other minor changes include no longer making >128b G_MERGE/UNMERGE legal.
We never had isel support for that anyway and it was a remnant of the legacy
legalizer rules. However being legal prevented the combiner from checking if it
was dead and deleting them.
Differential Revision: https://reviews.llvm.org/D104355
Lang Hames [Thu, 8 Jul 2021 22:24:08 +0000 (08:24 +1000)]
[ORC] Flesh out ExecutorAddress, rename CommonOrcRuntimeTypes header.
Renames CommonOrcRuntimeTypes.h to ExecutorAddress.h and moves ExecutorAddress
into the 'orc' namespace (rather than orc::shared).
Also makes ExecutorAddress a class, adds an ExecutorAddrDiff type and some
arithmetic operations on the pair (subtracting two addresses yields an addrdiff,
adding an addrdiff and an address yields an address).
Vy Nguyen [Fri, 2 Jul 2021 18:49:40 +0000 (14:49 -0400)]
[lld-macho] Fix bug in handling unwind info from ld -r
Two changess:
- Drop assertions that all symbols are in GOT
- Set allEntriesAreOmitted correctly
Related bug: 50812
Differential Revision: https://reviews.llvm.org/D105364
Thomas Lively [Sat, 10 Jul 2021 01:59:29 +0000 (18:59 -0700)]
[WebAssembly] Custom combines for f64x2.promote_low_f32x4
Replace the clang builtin function and LLVM intrinsic previously used to select
the f64x2.promote_low_f32x4 instruction with custom combines from standard
SelectionDAG nodes. Implement the new combines to share code with the similar
combines for f64x2.convert_low_i32x4_{s,u}. Resolves PR50232.
Differential Revision: https://reviews.llvm.org/D105675
David Blaikie [Sat, 10 Jul 2021 01:27:31 +0000 (18:27 -0700)]
llvm-symbolizer: Fix "start file" to work with Split DWARF
A followup to the feature added in
69da27c7496ea373567ce5121e6fe8613846e7a5 that added the optional "start
file name" to match "start line" - but this didn't work with Split DWARF
because of the need for the decl file number resolution code to refer
back to the skeleton unit to find its .debug_line contribution. So this
patch adds the necessary infrastructure to track the skeleton unit
corresponding to a split full unit for the purpose of this lookup.
Eli Friedman [Sat, 10 Jul 2021 00:52:04 +0000 (17:52 -0700)]
Fix buildbot regression from 9c4baf5.
Apparently ScalarEvolution::isImpliedCond tries to truncate a pointer in
some obscure cases. Guard the code with a check for pointers.
Vitaly Buka [Fri, 9 Jul 2021 19:24:50 +0000 (12:24 -0700)]
[scudo] Check if we use __clang_major__ >= 12
This makes sure we have support for MTE instructions.
Later the check can be extended to support MTE on other compilers.
Reviewed By: pcc
Differential Revision: https://reviews.llvm.org/D105722
Eli Friedman [Wed, 23 Jun 2021 21:43:59 +0000 (14:43 -0700)]
[ScalarEvolution] Strictly enforce pointer/int type rules.
Rules:
1. SCEVUnknown is a pointer if and only if the LLVM IR value is a
pointer.
2. SCEVPtrToInt is never a pointer.
3. If any other SCEV expression has no pointer operands, the result is
an integer.
4. If a SCEVAddExpr has exactly one pointer operand, the result is a
pointer.
5. If a SCEVAddRecExpr's first operand is a pointer, and it has no other
pointer operands, the result is a pointer.
6. If every operand of a SCEVMinMaxExpr is a pointer, the result is a
pointer.
7. Otherwise, the SCEV expression is invalid.
I'm not sure how useful rule 6 is in practice. If we exclude it, we can
guarantee that ScalarEvolution::getPointerBase always returns a
SCEVUnknown, which might be a helpful property. Anyway, I'll leave that
for a followup.
This is basically mop-up at this point; all the changes with significant
functional effects have landed. Some of the remaining changes could be
split off, but I don't see much point.
Differential Revision: https://reviews.llvm.org/D105510
Valery N Dmitriev [Fri, 9 Jul 2021 23:19:11 +0000 (16:19 -0700)]
[SLP] Do not make an attempt to match reduction on already erased instruction.
Differential Revision: https://reviews.llvm.org/D105752
Derek Schuff [Fri, 9 Jul 2021 22:15:35 +0000 (15:15 -0700)]
WebAssembly: Update datalayout to match fp128 ABI change
This fix goes along with
d1a96e906cc03a95cfd41a1f22bdda92651250c7
and makes the fp128 alignment match clang's long double alignment.
Differential Revision: https://reviews.llvm.org/D105749
Uday Bondhugula [Fri, 9 Jul 2021 07:21:19 +0000 (12:51 +0530)]
[MLIR][GPU][NFC] Fix documentation for wmma matrix load/store ops
Fix/improve documentation for wmma load/store matrix ops. Fix some
broken and stale sentences.
Differential Revision: https://reviews.llvm.org/D105678
Kazu Hirata [Fri, 9 Jul 2021 23:47:12 +0000 (16:47 -0700)]
[AFDO] Merge function attributes after inlining
This patch teaches the sample profile loader to merge function
attributes after inlining functions.
Without this patch, the compiler could inline a function requiring the
512-bit vector width into its caller without merging function
attributes, triggering a failure during instruction selection.
Differential Revision: https://reviews.llvm.org/D105729
Kazu Hirata [Fri, 9 Jul 2021 23:39:35 +0000 (16:39 -0700)]
[WebAssembly] Fix warnings
Nico Weber [Fri, 9 Jul 2021 23:04:46 +0000 (19:04 -0400)]
[gn build] fix formatting after
9647a6f719ee
Fangrui Song [Fri, 9 Jul 2021 22:24:45 +0000 (15:24 -0700)]
[llvm-nm][test] diff -q => diff to make AIX happy
Andrea Di Biagio [Fri, 9 Jul 2021 21:35:12 +0000 (22:35 +0100)]
[llvm-mca] Refactor the logic that prints JSON files.
Moved most of the printing logic into the PipelinePrinter.
This patch also fixes the JSON output when flag -instruction-tables is
specified.
Wouter van Oortmerssen [Fri, 9 Jul 2021 21:38:52 +0000 (14:38 -0700)]
[WebAssembly] Fixed 2 warnings in Asm Type Checker
Wouter van Oortmerssen [Fri, 9 Jul 2021 21:30:12 +0000 (14:30 -0700)]
[WebAssembly] fix broken tools/llvm-symbolizer/wasm-basic.s test
Aaron En Ye Shi [Thu, 8 Jul 2021 19:38:32 +0000 (19:38 +0000)]
[HIP] Move std headers after device malloc/free
Set the device malloc and free functions as weak,
and move the std headers after device malloc/free
to avoid issues with std malloc/free.
Fixes: SWDEV-293590
Reviewed By: yaxunl
Differential Revision: https://reviews.llvm.org/D105707
Jessica Paquette [Thu, 8 Jul 2021 23:45:45 +0000 (16:45 -0700)]
[GlobalISel] Use GCDTy when extracting GCD ty from leftover regs in insertParts
`LegalizerHelper::insertParts` uses `extractGCDType` on registers split into
a desired type and a smaller leftover type. This is used to populate a list
of registers. Each register in the list will have the same type as returned by
`extractGCDType`.
If we have
- `ResultTy` = s792
- `PartTy` = s64
- `LeftoverTy` = s24
When we call `extractGCDType`, we'll end up with two different types appended
to the list:
Part: gcd(792, 64, 24) => s8
Leftover: gcd(792, 24, 24) => s24
When this happens, we'll hit an assert while trying to build a G_MERGE_VALUES.
This patch changes the code for the leftover type so that we reuse the GCD from
the desired type.
e.g.
Leftover: gcd(792, 8, 24) => s8
https://llvm.godbolt.org/z/137Kqxj6j
Differential Revision: https://reviews.llvm.org/D105674
Wouter van Oortmerssen [Mon, 7 Jun 2021 19:10:47 +0000 (12:10 -0700)]
[WebAssembly] Added initial type checker to MC Assembler
This to protect against non-sensical instruction sequences being assembled,
which would either cause asserts/crashes further down, or a Wasm module being output that doesn't validate.
Unlike a validator, this type checker is able to give type-errors as part of the parsing process, which makes the assembler much friendlier to be used by humans writing manual input.
Because the MC system is single pass (instructions aren't even stored in MC format, they are directly output) the type checker has to be single pass as well, which means that from now on .globaltype and .functype decls must come before their use. An extra pass is added to Codegen to collect information for this purpose, since AsmPrinter is normally single pass / streaming as well, and would otherwise generate this information on the fly.
A `-no-type-check` flag was added to llvm-mc (and any other tools that take asm input) that surpresses type errors, as a quick escape hatch for tests that were not intended to be type correct.
This is a first version of the type checker that ignores control flow, i.e. it checks that types are correct along the linear path, but not the branch path. This will still catch most errors. Branch checking could be added in the future.
Differential Revision: https://reviews.llvm.org/D104945
David Blaikie [Fri, 9 Jul 2021 20:52:39 +0000 (13:52 -0700)]
PR51018: A few more explicit conversions from SmallString to StringRef
Follow-up to
1def2579e10dd84405465f403e8c31acebff0c97 with a few more
obscure cases.
John Ericson [Wed, 28 Apr 2021 22:36:47 +0000 (22:36 +0000)]
Prepare Compiler-RT for GnuInstallDirs, matching libcxx
Instead of using `COMPILER_RT_INSTALL_PATH` through the CMake for
complier-rt, just use it to define variables for the subdirs which
themselves are used.
This preserves compatibility, but later on we might consider getting rid
of `COMPILER_RT_INSTALL_PATH` and just changing the defaults for the
subdir variables directly.
---
There was a seaming bug where the (non-Apple) per-target libdir was
`${target}` not `lib/${target}`. I suspect that has to do with the docs
on `COMPILER_RT_INSTALL_PATH` saying was the library dir when that's no
longer true, so I just went ahead and fixed it, allowing me to define
fewer and more sensible variables.
That last part should be the only behavior changes; everything else
should be a pure refactoring.
---
D99484 is the main thrust of the `GnuInstallDirs` work. Once this lands,
it should be feasible to follow both of these up with a simple patch for
compiler-rt analogous to the one for libcxx.
Reviewed By: phosek
Differential Revision: https://reviews.llvm.org/D101497
Adrian Prantl [Fri, 9 Jul 2021 20:36:26 +0000 (13:36 -0700)]
Add scoped timers to ReadMemoryFromInferior and ReadMemoryFromFileCache.
Jonas Devlieghere [Fri, 9 Jul 2021 20:20:37 +0000 (13:20 -0700)]
[lldb] Drop REQUIRES where redundant because of lit.local.cfg
Stanislav Mekhanoshin [Fri, 9 Jul 2021 19:41:11 +0000 (12:41 -0700)]
[AMDGPU] Added v_accvgpr_read_b32 rematerialization test. NFC.
Alexey Bataev [Wed, 7 Jul 2021 12:26:53 +0000 (05:26 -0700)]
[OPENMP]Fix overlapped mapping for dereferenced pointer members.
If the base is used in a map clause and later we have a memberexpr with
this base, and the member is a pointer, and this pointer is dereferenced
anyhow (subscript, array section, dereference, etc.), such components
should be considered as overlapped, otherwise it may lead to incorrect
size computations, since we try to map a pointee as a part of the whole
struct, which is not true for the pointer members.
Differential Revision: https://reviews.llvm.org/D105562
Stanislav Mekhanoshin [Fri, 9 Jul 2021 18:48:19 +0000 (11:48 -0700)]
[AMDGPU] Fix flags of V_MOV_B64_PSEUDO
In particular it was not rematerializable.
Differential Revision: https://reviews.llvm.org/D105724
Jonas Devlieghere [Fri, 9 Jul 2021 19:40:19 +0000 (12:40 -0700)]
[lldb] Use custom script instead of lldb.macosx.crashlog in test
I'm not entirely sure this is the problem, but the Windows bot doesn't
seem to like this test. Let's do something similar to
command_import.test which doesn't have that issue.
Nikita Popov [Fri, 9 Jul 2021 19:38:41 +0000 (21:38 +0200)]
[IR] Add GEPOperator::indices() (NFC)
In order to mirror the GetElementPtrInst::indices() API.
Wanted to use this in the IRForTarget code, and was surprised to
find that it didn't exist yet.
Sanjay Patel [Fri, 9 Jul 2021 19:08:03 +0000 (15:08 -0400)]
[PhaseOrdering] add tests for vector cmp reductions; NFC
These are based on PR41312. There needs to be effort
from all of SimplifyCFG, InstCombine, SLP, and possibly
VectorCombine to get this into ideal form.
Sanjay Patel [Fri, 9 Jul 2021 17:47:38 +0000 (13:47 -0400)]
[SLP] add tests for poison-safe logical reductions; NFC
Sanjay Patel [Fri, 9 Jul 2021 17:30:42 +0000 (13:30 -0400)]
[SLP] make invalid operand explicit for extra arg in reduction matching; NFC
This makes it clearer when we have encountered the extra arg.
Also, we may need to adjust the way the operand iteration
works when handling logical and/or.
David Spickett [Fri, 9 Jul 2021 19:29:40 +0000 (15:29 -0400)]
[libcxx][CI] Work around Arm buildkite failures
For reasons unknown, the build is now using compilers
from /usr/bin instead of /usr/local/bin which is where
we have our clang-12 aliases placed.
Reviewed By: #libc, ldionne
Differential Revision: https://reviews.llvm.org/D105704
Florian Mayer [Fri, 9 Jul 2021 15:44:12 +0000 (16:44 +0100)]
[hwasan] More realistic setjmp test.
The existing one actually failed on the int* p, not on int z (as can be
seen by the fault being 8 bytes rather than 4).
This is also needed to make sure the stack safety analysis does not
classify the alloca as safe.
Reviewed By: hctim
Differential Revision: https://reviews.llvm.org/D105705
Graham Yiu [Wed, 7 Jul 2021 16:46:06 +0000 (09:46 -0700)]
[ARC][NFC] Include file re-ordering
- Sort includes in alphabetical order via clang-format
Stanislav Mekhanoshin [Fri, 9 Jul 2021 19:08:45 +0000 (12:08 -0700)]
[AMDGPU] Add VOP rematerialization test. NFC.
Nikita Popov [Thu, 8 Jul 2021 18:56:05 +0000 (20:56 +0200)]
Reapply [IR] Don't accept nullptr as GEP element type
Reapply after fixing another occurrence in lldb that was relying
on this in the preceding commit.
-----
GetElementPtrInst::Create() (and IRBuilder methods based on it)
currently accept nullptr as the element type, and will fetch the
element type from the pointer in that case. Remove this fallback,
as it is incompatible with opaque pointers. I've removed a handful
of leftover calls using this behavior as a preliminary step.
Out-of-tree code affected by this change should either pass a proper
type, or can temporarily explicitly call getPointerElementType(),
if the newly added assertion is encountered.
Differential Revision: https://reviews.llvm.org/D105653
Nikita Popov [Fri, 9 Jul 2021 19:12:44 +0000 (21:12 +0200)]
[IRForTarget] Don't pass nullptr to GetElementPtrInst::Create() (NFC)
In one case use the source element type of the original GEP. In the
other the correct type isn't obvious to me, so use
getPointerElementType() for now.
Riccardo Mori [Fri, 9 Jul 2021 18:10:57 +0000 (20:10 +0200)]
[Polly][Isl] Use isl::*::ctx instead of isl::*::get_ctx. NFC
This is part of an effort to reduce the differences between the custom C++ bindings used right now by polly in `lib/External/isl/include/isl/isl-noxceptions.h` and the official isl C++ interface.
Changes made:
- Use `isl::*::ctx()` instead of `isl::*::get_ctx()` (for example `isl::space::ctx()` instead of `isl::space::get_ctx()`)
- Add `isl::` namespace in front of isl types to avoid confusion (for example `isl::space::ctx` and `isl::ctx`
- `isl-noexceptions.h` has been generated by this https://github.com/patacca/isl/commit/
b64e33c62d3fe7db506f6630f9e935b663f9c5a4
Reviewed By: Meinersbur
Differential Revision: https://reviews.llvm.org/D105691
David Blaikie [Fri, 9 Jul 2021 18:56:37 +0000 (11:56 -0700)]
PR51034: Debug Info: Remove 'prototyped' from K&R function declarations
Regression caused by
6c9559b67b91966bfeff9e17808a3e84a92e64a0.
Nikita Popov [Fri, 9 Jul 2021 15:58:48 +0000 (17:58 +0200)]
Reapply [IR] Don't mark mustprogress as type attribute
Reapply with fixes for clang tests.
-----
This is a simple enum attribute. Test changes are because enum
attributes are sorted before type attributes, so mustprogress is
now in a different position.
Varun Gandhi [Tue, 22 Jun 2021 21:44:29 +0000 (14:44 -0700)]
[Clang] Introduce Swift async calling convention.
This change is intended as initial setup. The plan is to add
more semantic checks later. I plan to update the documentation
as more semantic checks are added (instead of documenting the
details up front). Most of the code closely mirrors that for
the Swift calling convention. Three places are marked as
[FIXME: swiftasynccc]; those will be addressed once the
corresponding convention is introduced in LLVM.
Reviewed By: rjmccall
Differential Revision: https://reviews.llvm.org/D95561
Stella Stamenova [Fri, 9 Jul 2021 18:32:39 +0000 (11:32 -0700)]
Revert "[IR] Don't accept nullptr as GEP element type"
This reverts commit
5035e7be1a8ab923e1a82def7e313cc11c0b176f.
This change broke several lldb bots.
Andrzej Warzynski [Wed, 7 Jul 2021 10:41:45 +0000 (11:41 +0100)]
[flang][driver] Fix how output filename is generated
Currently, `flang -c file.f` generates `flang_unparsed_source_file_0.o`.
This is incorrect. This patch:
* simplifies the logic around output filename generation, and
* makes sure that `file.o` is produced instead of e.g.
`flang_unparsed_source_file_0.o` when using the `-c` flag
The output filename generation is moved to a dedicated function. I've
also made a few minor improvements, e.g. marked variables as local,
added comments, refined error messages.
Differential Revision: https://reviews.llvm.org/D105546
Leonard Chan [Thu, 8 Jul 2021 22:04:30 +0000 (15:04 -0700)]
[NFC][compiler-rt][hwasan] Move TagMemoryAligned into hwasan_linux.cpp
Based on comments in D91466, we can make the current implementation
linux-speciic. The fuchsia implementation will just be a call to
`__sanitizer_fill_shadow`.
Differential Revision: https://reviews.llvm.org/D105663
Leonard Chan [Thu, 8 Jul 2021 22:32:20 +0000 (15:32 -0700)]
[NFC][compiler-rt][hwasan] Rename InitPrctl to InitializeOsSupport
The new name is something less linux-y and more platform generic. Once we
finalize the tagged pointer ABI in zircon, we will do the appropriate check
for fuchsia to see that TBI is enabled.
Differential Revision: https://reviews.llvm.org/D105667
Leonard Chan [Thu, 8 Jul 2021 22:49:04 +0000 (15:49 -0700)]
[NFC][compiler-rt][hwasan] Move __hwasan_tag_mismatch4 to hwasan.cpp
This can be moved out of hwasan_linux.cpp because it can be re-used in the fuchsia port.
Differential Revision: https://reviews.llvm.org/D105669
Krzysztof Drewniak [Thu, 1 Jul 2021 18:45:03 +0000 (18:45 +0000)]
[AMDGPU][Docs] Update Code Object V3 example to includes args section
The documentation for the AMDGPU assembler's examples don't show the
.args section, which, if ommitted, will cause arguments to silently
not be passed into the kernel. This commit fixes this issue.
Reviewed By: #amdgpu, scott.linder
Differential Revision: https://reviews.llvm.org/D105222
Fangrui Song [Fri, 9 Jul 2021 17:30:16 +0000 (10:30 -0700)]
[llvm-mca] Fix -Wunused-private-field after D105618
Arthur Eubanks [Fri, 9 Jul 2021 17:28:50 +0000 (10:28 -0700)]
[OpaquePtr][InferAddrSpace] Use PointerType::getWithSamePointeeType()
Fangrui Song [Fri, 9 Jul 2021 17:26:53 +0000 (10:26 -0700)]
[llvm-size] Switch command line parsing from llvm::cl to OptTable
Part of https://lists.llvm.org/pipermail/llvm-dev/2021-July/151622.html
"Binary utilities: switch command line parsing from llvm::cl to OptTable"
* `--totals=false` and `--totals=0` cannot be used. Omit the option.
* `--help-list` is removed. This is a `cl::` specific option.
OptTable avoids global option collision if we decide to support multiplexing for binary utilities.
Note: because the tool is simple, and its long options are uncommon, I just drop
the one-dash forms except `-arch <value>` (Darwin style).
Reviewed By: jhenderson
Differential Revision: https://reviews.llvm.org/D105598
LLVM GN Syncbot [Fri, 9 Jul 2021 17:14:37 +0000 (17:14 +0000)]
[gn build] Port
0e09a41b415b
zoecarver [Fri, 9 Jul 2021 17:12:16 +0000 (10:12 -0700)]
[libcxx][ranges] Add `ranges::transform_view`.
Reviewed By: cjdb, ldionne, #libc
Differential Revision: https://reviews.llvm.org/D103056
zoecarver [Wed, 7 Jul 2021 22:25:53 +0000 (15:25 -0700)]
[libcxx][nfc] Remove <variant>'s dependence on <array>.
This will allow us to use variant in common_iterator. We do this by introducing a new `__light_array` type that variant uses instead of `std::array`.
Differential Revision: https://reviews.llvm.org/D105597
Jeremy Morse [Fri, 9 Jul 2021 16:49:46 +0000 (17:49 +0100)]
[X86] Return src/dest register from stack spill/restore recogniser
LLVM provides target hooks to recognise stack spill and restore
instructions, such as isLoadFromStackSlot, and it also provides post frame
elimination versions such as isLoadFromStackSlotPostFE. These are supposed
to return the store-source and load-destination registers; unfortunately on
X86, the PostFE recognisers just return "1", apparently to signify "yes
it's a spill/load". This patch alters the hooks to correctly return the
store-source and load-destination registers:
This is really useful for debug-info as we it helps follow variable values
as they move on/off the stack. There should be no codegen changes: the only
other users of these PostFE target hooks are MachineInstr::getRestoreSize
and MachineInstr::getSpillSize, which don't attempt to interpret the
returned register location.
While we're here, delete the (InstrRef) LiveDebugValues heuristic that
tries to find the spill source register by looking for a killed reg -- we
should be able to rely on the target hooks for that. This involves
temporarily turning off a n InstrRef LivedDebugValues test on aarch64
(patch to re-enable it is in D104521).
Differential Revision: https://reviews.llvm.org/D105428
Fangrui Song [Fri, 9 Jul 2021 17:10:45 +0000 (10:10 -0700)]
[llvm-cxxfilt] Switch command line parsing from llvm::cl to OptTable
Similar to D104889. The tool is very simple and its long options are uncommon,
so just drop the one-dash form in this patch.
Reviewed By: jhenderson
Differential Revision: https://reviews.llvm.org/D105605
Jonas Devlieghere [Fri, 9 Jul 2021 16:23:54 +0000 (09:23 -0700)]
[lldb] Add the ability to silently import scripted commands
Add the ability to silence command script import. The motivation for
this change is being able to add command script import -s
lldb.macosx.crashlog to your ~/.lldbinit without it printing the
following message at the beginning of every debug session.
"malloc_info", "ptr_refs", "cstr_refs", "find_variable", and
"objc_refs" commands have been installed, use the "--help" options on
these commands for detailed help.
In addition to forwarding the silent option to LoadScriptingModule, this
also changes ScriptInterpreterPythonImpl::ExecuteOneLineWithReturn and
ScriptInterpreterPythonImpl::ExecuteMultipleLines to honor the enable IO
option in ExecuteScriptOptions, which until now was ignored.
Note that IO is only enabled (or disabled) at the start of a session,
and for this particular use case, that's done when taking the Python
lock in LoadScriptingModule, which means that the changes to these two
functions are not strictly necessary, but (IMO) desirable nonetheless.
Differential revision: https://reviews.llvm.org/D105327
Sylvestre Ledru [Fri, 9 Jul 2021 16:55:06 +0000 (18:55 +0200)]
m86k: adjust the usage of ArgInfo after change
9b057f647d70fc958d4a1a7a00e2deba65
Fails with:
```
/build/llvm-toolchain-snapshot-13~++
20210709092633+
88326bbce38c/llvm/lib/Target/M68k/GlSel/M68kCallLowering.cpp: In member function 'virtual bool llvm::M68kCallLowering::lowerReturn(llvm::MachineIRBuilder&, const llvm::Value*, llvm::ArrayRef<llvm::Register>, llvm::FunctionLoweringInfo&, llvm::Register) const':
/build/llvm-toolchain-snapshot-13~++
20210709092633+
88326bbce38c/llvm/lib/Target/M68k/GlSel/M68kCallLowering.cpp:71:42: error: no matching function for call to 'llvm::CallLowering::ArgInfo::ArgInfo(<brace-enclosed initializer list>)'
ArgInfo OrigArg{VRegs, Val->getType()};
```
Differential Revision: https://reviews.llvm.org/D105689
Arthur Eubanks [Fri, 9 Jul 2021 16:55:07 +0000 (09:55 -0700)]
[NFC][OpaquePtr] Use GlobalValue::getValueType() more
Instead of getType()->getElementType().
Sanjay Patel [Fri, 9 Jul 2021 16:48:42 +0000 (12:48 -0400)]
[SLP] improve code comments; NFC
This likely started out only supporint binops,
but now we handle min/max using cmp+sel, and
we may extend to handle bool logic in the form
of select.
Nikita Popov [Fri, 9 Jul 2021 16:45:28 +0000 (18:45 +0200)]
Revert "[IR] Don't mark mustprogress as type attribute"
This reverts commit
84ed3a794b4ffe7bd673f1e5a17d507aa3113d12.
A number of clang tests are also affected by this change. Revert
until I can update them.
Sanjay Patel [Fri, 9 Jul 2021 15:56:26 +0000 (11:56 -0400)]
[SLP] make checks for cmp+select min/max more explicit
This is NFC-intended currently (so no test diffs). The motivation
is to eventually allow matching for poison-safe logical-and and
logical-or (these are in the form of a select-of-bools).
( https://llvm.org/PR41312 )
Those patterns will not have all of the same constraints as min/max
in the form of cmp+sel. We may also end up removing the cmp+sel
min/max matching entirely (if we canonicalize to intrinsics), so
this will make that step easier.
Arthur Eubanks [Fri, 9 Jul 2021 16:32:40 +0000 (09:32 -0700)]
[OpaquePointers][CallPromotion] Don't look at pointee type for byval
byval's type parameter is now always required.
Nikita Popov [Fri, 9 Jul 2021 16:27:57 +0000 (18:27 +0200)]
[AttrBuilder] Try to fix build
Some buildbots fail with undefined references to ByValTypeIndex
etc. Replace static consts with an enum to ensure the address is
not taken.
Nikita Popov [Fri, 9 Jul 2021 15:58:48 +0000 (17:58 +0200)]
[IR] Don't mark mustprogress as type attribute
This is a simple enum attribute.
Test changes are because enum attributes are sorted before type
attributes.
Louis Dionne [Fri, 9 Jul 2021 16:22:48 +0000 (12:22 -0400)]
[libc++][ci] Keep the C++03 build job on Clang 12
Because of https://reviews.llvm.org/D104500, libc++ is broken with
recent Clangs in C++03 mode.
Marcos Horro [Fri, 9 Jul 2021 15:58:57 +0000 (17:58 +0200)]
[llvm-mca] Fix JSON format for multiple regions
Instead of printing each region individually when using JSON format,
this patch creates a JSON object which is updated with the values of
each region, printing them at the end. New test is added for JSON output
with multiple regions.
Bug: https://bugs.llvm.org/show_bug.cgi?id=51008
Reviewed By: andreadb
Differential Revision: https://reviews.llvm.org/D105618
Alex Zinenko [Thu, 8 Jul 2021 08:59:02 +0000 (10:59 +0200)]
[mlir] add support for reductions in OpenMP WsLoopOp
Use a modeling similar to SCF ParallelOp to support arbitrary parallel
reductions. The two main differences are: (1) reductions are named and declared
beforehand similarly to functions using a special op that provides the neutral
element, the reduction code and optionally the atomic reduction code; (2)
reductions go through memory instead because this is closer to the OpenMP
semantics.
See https://llvm.discourse.group/t/rfc-openmp-reduction-support/3367.
Reviewed By: kiranchandramohan
Differential Revision: https://reviews.llvm.org/D105358
Alex Zinenko [Thu, 8 Jul 2021 14:07:09 +0000 (16:07 +0200)]
[mlir] don't drop undef initializers in translation to LLVM IR
LLVM IR allows globals with external linkage to have initializers, including
undef. The translation was incorrectly using undef as a indicator that the
initializer should be ignored in translation, leading to the impossibility to
create an external global with an explicit undef initializer. Fix this and use
nullptr as a marker instead.
Reviewed By: wsmoses
Differential Revision: https://reviews.llvm.org/D105631
Nikita Popov [Thu, 8 Jul 2021 20:40:56 +0000 (22:40 +0200)]
[AttrBuilder] Make handling of type attributes more generic (NFCI)
While working on the elementtype attribute, I felt that the type
attribute handling in AttrBuilder is overly repetitive. This patch
converts the separate Type* members into an std::array<Type*>, so
that all type attribute kinds can be handled generically.
There's more room for improvement here (especially when it comes to
converting the AttrBuilder to an Attribute), but this seems like a
good starting point.
Differential Revision: https://reviews.llvm.org/D105658
Nico Weber [Fri, 9 Jul 2021 15:39:40 +0000 (11:39 -0400)]
Revert "Revert "Temporarily do not drop volatile stores before unreachable""
This reverts commit
52aeacfbf5ce5f949efe0eae029e56db171ea1f7.
There isn't full agreement on a path forward yet, but there is agreement that
this shouldn't land as-is. See discussion on https://reviews.llvm.org/D105338
Also reverts unreviewed "[clang] Improve `-Wnull-dereference` diag to be more in-line with reality"
This reverts commit
f4877c78c0fc98be47b926439bbfe33d5e1d1b6d.
And all the related changes to tests:
This reverts commit
9a0152799f8e4a59e0483728c9f11c8a7805616f.
This reverts commit
3f7c9cc27422f7302cf5a683eeb3978e6cb84270.
This reverts commit
329f8197ef59f9bd23328b52d623ba768b51dbb2.
This reverts commit
aa9f58cc2c48ca6cfc853a2467cd775dc7622746.
This reverts commit
2df37d5ddd38091aafbb7d338660e58836f4ac80.
This reverts commit
a72a44181264fd83e05be958c2712cbd4560aba7.
Nikita Popov [Thu, 8 Jul 2021 18:56:05 +0000 (20:56 +0200)]
[IR] Don't accept nullptr as GEP element type
GetElementPtrInst::Create() (and IRBuilder methods based on it)
currently accept nullptr as the element type, and will fetch the
element type from the pointer in that case. Remove this fallback,
as it is incompatible with opaque pointers. I've removed a handful
of leftover calls using this behavior as a preliminary step.
Out-of-tree code affected by this change should either pass a proper
type, or can temporarily explicitly call getPointerElementType(),
if the newly added assertion is encountered.
Differential Revision: https://reviews.llvm.org/D105653
Kevin P. Neal [Thu, 8 Jul 2021 19:12:11 +0000 (15:12 -0400)]
[FPEnv][InstSimplify] Constrained FP support for NaN
Currently InstructionSimplify.cpp knows how to simplify floating point
instructions that have a NaN operand. It does not know how to handle the
matching constrained FP intrinsic.
This patch teaches it how to simplify so long as the exception handling
is not "fpexcept.strict".
Differential Revision: https://reviews.llvm.org/D103169
zhijian [Fri, 9 Jul 2021 15:06:46 +0000 (11:06 -0400)]
[AIX][XCOFF] Use bit order of has_vec and longtbtable bits as defined in AIX header debug.h
Summary:
The bit order of the has_vec and longtbtable bits in the traceback table generated by the XL compiler flipped at some point after v12.1. This is different from the definition is the AIX header debug.h. The change in the XL compiler that caused the deviation from the OS header definition was unintentional. Since both orderings are extant and the XL compiler runtime also expects the ordering defined by the OS, we will correct the output from LLVM to match the defined ordering given by the OS (which is also consistent with the Assembler Language Reference). Mitigation for traceback tables encoded with the wrong ordering is required for either ordering.
Reviewers: XingXue, HubertTong
Differential Revision: https://reviews.llvm.org/D105487
Jeremy Morse [Fri, 9 Jul 2021 14:32:30 +0000 (15:32 +0100)]
[Debug-info][InstrRef] Avoid an unnecessary map ordering
We keep a record of substitutions between debug value numbers post-isel,
however we never actually look them up until the end of compilation. As a
result, there's nothing gained by the collection being a std::map. This
patch downgrades it to being a vector, that's then sorted at the end of
compilation in LiveDebugValues.
Differential Revision: https://reviews.llvm.org/D105029
Louis Dionne [Thu, 8 Jul 2021 16:26:33 +0000 (12:26 -0400)]
[libc++][ci] Test Clang ToT by default, and add jobs on Clang 11 and 12
It makes the most sense to test with Clang ToT by default since that's
exactly what we're trying to QA: that libc++ works with whatever compiler
we're going to release next.
Roman Lebedev [Fri, 9 Jul 2021 13:25:08 +0000 (16:25 +0300)]
Revert "Transform memset + malloc --> calloc (PR25892)"
It broke `check-msan`, see e.g. https://lab.llvm.org/buildbot/#/builders/18/builds/1934
This reverts commit
375694a07bcba3be66864c42a5932be1a22831e2.
Alex Zinenko [Thu, 8 Jul 2021 16:35:18 +0000 (18:35 +0200)]
[mlir] factor memref-to-llvm lowering out of std-to-llvm
After the MemRef has been split out of the Standard dialect, the
conversion to the LLVM dialect remained as a huge monolithic pass.
This is undesirable for the same complexity management reasons as having
a huge Standard dialect itself, and is even more confusing given the
existence of a separate dialect. Extract the conversion of the MemRef
dialect operations to LLVM into a separate library and a separate
conversion pass.
Reviewed By: herhut, silvas
Differential Revision: https://reviews.llvm.org/D105625
Roman Lebedev [Fri, 9 Jul 2021 11:56:18 +0000 (14:56 +0300)]
[compiler-rt] fuzzer: adjust tests to not expect that store to null traps and is not erase
Instead, mostly just trap directly.
Roman Lebedev [Fri, 9 Jul 2021 11:39:29 +0000 (14:39 +0300)]
[compiler-rt] Conceal UB in sanitizer_common/TestCases/Linux/signal_line.cpp test
Store to null is deleted, so the test no longer did what it was expecting to do.
Conceal that by creating null pointer in a more elaborate way,
thus retaining original test coverage.
Martin Storsjö [Sat, 1 Aug 2020 06:44:24 +0000 (09:44 +0300)]
[llvm-rc] Make commas in user data structs optional
This matches what rc.exe tolerates in this type.
This fixes cases like this:
1 24
BEGIN
"<?xml version=""1.0""?>\n"
"<assembly>\n"
"</assembly>\n"
END
Differential Revision: https://reviews.llvm.org/D105621
Martin Storsjö [Fri, 9 Jul 2021 11:02:51 +0000 (14:02 +0300)]
Revert "[ScalarEvolution] Fix overflow in computeBECount."
This reverts commit
5b350183cdabd83573bc760ddf513f3e1d991bcb (and
also "[NFC][ScalarEvolution] Cleanup howManyLessThans.",
009436e9c1fee1290d62bc0faafe0c0295542f56, to make it apply).
See https://reviews.llvm.org/D105216 for discussion on various
miscompilations caused by that commit.
Roman Lebedev [Fri, 9 Jul 2021 10:36:21 +0000 (13:36 +0300)]
Revert "Temporarily do not drop volatile stores before unreachable"
This reverts commit
4e413e16216d0c94ada2171f3c59e0a85f4fa4b6,
which landed almost 10 months ago under premise that the original behavior
didn't match reality and was breaking users, even though it was correct as per
the LangRef. But the LangRef change still hasn't appeared, which might suggest
that the affected parties aren't really worried about this problem.
Please refer to discussion in:
* https://reviews.llvm.org/D87399 (`Revert "[InstCombine] erase instructions leading up to unreachable"`)
* https://reviews.llvm.org/D53184 (`[LangRef] Clarify semantics of volatile operations.`)
* https://reviews.llvm.org/D87149 (`[InstCombine] erase instructions leading up to unreachable`)
clang has `-Wnull-dereference` which will diagnose the obvious cases
of null dereference, it was adjusted in
f4877c78c0fc98be47b926439bbfe33d5e1d1b6d,
but it will only catch the cases where the pointer is a null literal,
it will not catch the cases where an arbitrary store is expected to trap.
Differential Revision: https://reviews.llvm.org/D105338
Roman Lebedev [Fri, 9 Jul 2021 11:13:34 +0000 (14:13 +0300)]
[NFC][Clang][CodegenOpenCL] Fix test not to rely on volatile store not being removed
Simon Pilgrim [Fri, 9 Jul 2021 11:04:09 +0000 (12:04 +0100)]
Fix MSVC "not all control paths return a value" warning. NFCI.
Simon Pilgrim [Fri, 9 Jul 2021 10:48:25 +0000 (11:48 +0100)]
[X86] ReplaceNodeResults - fp_to_sint/uint - manually widen v2i32 results to let us add AssertSext/AssertZext
Its proving tricky to move this to the generic legalizer code, so manually insert the v2i32 subvector into v4i32, insert the AssertSext/AssertZext node, then extract the subvector again.
This avoids masks in the truncation/pack code, which means we avoid a PSHUFB in the fp_to_sint/uint code for sub-128 bit types (specific targets can still combine the packs to a pshufb if they have fast variable per-lane shuffles).
This was noticed when I was trying to improve fp_to_sint/uint costs with D103695 (and some targets had very high fp_to_sint costs due to the PSHUFB), so we can then update the fp_to_uint codegen from D89697.
Max Kazantsev [Fri, 9 Jul 2021 10:40:42 +0000 (17:40 +0700)]
[LoopDeletion] Handle switch in proving that loop exits on first iteration
Added check for switch-terminated blocks in loops.
Now if a block is terminated with a switch, we try to find out which of the
cases is taken on 1st iteration and mark corresponding edge from the block
to the case successor as live.
Patch by Dmitry Makogon!
Differential Revision: https://reviews.llvm.org/D105688
Reviewed By: nikic, mkazantsev
David Green [Fri, 9 Jul 2021 10:51:16 +0000 (11:51 +0100)]
[TTI] Remove IsPairwiseForm from getArithmeticReductionCost
This patch removes the IsPairwiseForm flag from the Reduction Cost TTI
hooks, along with some accompanying code for pattern matching reductions
from trees starting at extract elements. IsPairWise is now assumed to be
false, which was the predominant way that the value was used from both
the Loop and SLP vectorizers. Since the adjustments such as D93860, the
SLP vectorizer has not relied upon this distinction between paiwise and
non-pairwise reductions.
This also removes some code that was detecting reductions trees starting
from extract elements inside the costmodel. This case was
double-counting costs though, adding the individual costs on the
individual instruction _and_ the total cost of the reduction. Removing
it changes the costs in llvm/test/Analysis/CostModel/X86/reduction.ll to
not double count. The cost of reduction intrinsics is still tested
through the various tests in
llvm/test/Analysis/CostModel/X86/reduce-xyz.ll.
Differential Revision: https://reviews.llvm.org/D105484
Roman Lebedev [Fri, 9 Jul 2021 10:30:17 +0000 (13:30 +0300)]
Speculatively adjust gtest's UnitTest::AddTestPartResult() to not rely on volatile store to null trapping
This fallback path is used at least on PPC.
If this doesn't work on some compilers that take this path,
then this will have to be changed to either abort,
or partitioned to do different things based on the compiler.
Please refer to https://reviews.llvm.org/D105338.
Roman Lebedev [Fri, 9 Jul 2021 10:14:15 +0000 (13:14 +0300)]
[NFC][Codegen] Harden a few tests to not rely that volatile store to null isn't erased