Jonas Devlieghere [Mon, 20 Sep 2021 15:53:20 +0000 (08:53 -0700)]
[lldb] Extract adding symbols for UUID/File/Frame (NFC)
This moves the logic for adding symbols based on UUID, file and frame
into little helper functions. This is in preparation for D110011.
Differential revision: https://reviews.llvm.org/D110010
Jonas Devlieghere [Fri, 17 Sep 2021 19:41:23 +0000 (12:41 -0700)]
[lldb] Fix whitespace in CommandObjectTarget (NFC)
Florian Hahn [Mon, 20 Sep 2021 14:41:28 +0000 (15:41 +0100)]
[DSE] Add additional tests to cover review comments.
Adds additional tests following comments from D109844.
Also removes unusued in.ptr arguments and places in the call tests that
used loads instead of a getval call.
Tobias Gysi [Mon, 20 Sep 2021 15:49:15 +0000 (15:49 +0000)]
[mlir][linalg] Add IndexOp support to fusion on tensors.
This revision depends on https://reviews.llvm.org/D109761 and https://reviews.llvm.org/D109766.
Reviewed By: nicolasvasilache
Differential Revision: https://reviews.llvm.org/D109774
Morten Borup Petersen [Fri, 20 Aug 2021 08:49:56 +0000 (09:49 +0100)]
[MLIR][SCF] Add for-to-while loop transformation pass
This pass transforms SCF.ForOp operations to SCF.WhileOp. The For loop condition is placed in the 'before' region of the while operation, and indctuion variable incrementation + the loop body in the 'after' region. The loop carried values of the while op are the induction variable (IV) of the for-loop + any iter_args specified for the for-loop.
Any 'yield' ops in the for-loop are rewritten to additionally yield the (incremented) induction variable.
This transformation is useful for passes where we want to consider structured control flow solely on the basis of a loop body and the computation of a loop condition. As an example, when doing high-level synthesis in CIRCT, the incrementation of an IV in a for-loop is "just another part" of a circuit datapath, and what we really care about is the distinction between our datapath and our control logic (the condition variable).
Differential Revision: https://reviews.llvm.org/D108454
Tobias Gysi [Mon, 20 Sep 2021 15:44:41 +0000 (15:44 +0000)]
[mlir][linalg] Fix typo (NFC).
Alexey Bataev [Tue, 3 Aug 2021 20:20:32 +0000 (13:20 -0700)]
[SLP]Improve graph reordering.
Reworked reordering algorithm. Originally, the compiler just tried to
detect the most common order in the reordarable nodes (loads, stores,
extractelements,extractvalues) and then fully rebuilding the graph in
the best order. This was not effecient, since it required an extra
memory and time for building/rebuilding tree, double the use of the
scheduling budget, which could lead to missing vectorization due to
exausted scheduling resources.
Patch provide 2-way approach for graph reodering problem. At first, all
reordering is done in-place, it doe not required tree
deleting/rebuilding, it just rotates the scalars/orders/reuses masks in
the graph node.
The first step (top-to bottom) rotates the whole graph, similarly to the previous
implementation. Compiler counts the number of the most used orders of
the graph nodes with the same vectorization factor and then rotates the
subgraph with the given vectorization factor to the most used order, if
it is not empty. Then repeats the same procedure for the subgraphs with
the smaller vectorization factor. We can do this because we still need
to reshuffle smaller subgraph when buildiong operands for the graph
nodes with lasrger vectorization factor, we can rotate just subgraph,
not the whole graph.
The second step (bottom-to-top) scans through the leaves and tries to
detect the users of the leaves which can be reordered. If the leaves can
be reorder in the best fashion, they are reordered and their user too.
It allows to remove double shuffles to the same ordering of the operands in
many cases and just reorder the user operations instead. Plus, it moves
the final shuffles closer to the top of the graph and in many cases
allows to remove extra shuffle because the same procedure is repeated
again and we can again merge some reordering masks and reorder user nodes
instead of the operands.
Also, patch improves cost model for gathering of loads, which improves
x264 benchmark in some cases.
Gives about +2% on AVX512 + LTO (more expected for AVX/AVX2) for {625,525}x264,
+3% for 508.namd, improves most of other benchmarks.
The compile and link time are almost the same, though in some cases it
should be better (we're not doing an extra instruction scheduling
anymore) + we may vectorize more code for the large basic blocks again
because of saving scheduling budget.
Differential Revision: https://reviews.llvm.org/D105020
peter klausler [Wed, 15 Sep 2021 23:41:26 +0000 (16:41 -0700)]
[flang] Put intrinsic function table back into order
Some intrinsic functions weren't findable because the table
wasn't strictly in order of names.
And complete a missing generalization of the extension DCONJG
to accept any kind of complex argument, like DREAL and DIMAG
were.
Differential Revision: https://reviews.llvm.org/D110002
Wang, Pengfei [Mon, 20 Sep 2021 14:52:59 +0000 (22:52 +0800)]
[X86] Always check the size of SourceTy before getting the next type
D109607 results in a regression in llvm-test-suite.
The reason is we didn't check the size of SourceTy, so that we will
return wrong SSE type when SourceTy is overlapped.
Reviewed By: Meinersbur
Differential Revision: https://reviews.llvm.org/D110037
Wang, Pengfei [Sun, 19 Sep 2021 14:38:12 +0000 (22:38 +0800)]
[X86] Add test to show the effect caused by D109607. NFC
Justas Janickas [Tue, 7 Sep 2021 16:13:05 +0000 (17:13 +0100)]
[OpenCL] Supports atomics in C++ for OpenCL 2021
Atomics in C++ for OpenCL 2021 are now handled the same way as in
OpenCL C 3.0. This is a header-only change.
Differential Revision: https://reviews.llvm.org/D109424
Kadir Cetinkaya [Thu, 16 Sep 2021 15:43:15 +0000 (17:43 +0200)]
[clangd] Bail-out when an empty compile flag is encountered
Fixes https://github.com/clangd/clangd/issues/865
Differential Revision: https://reviews.llvm.org/D109894
Tobias Gysi [Mon, 20 Sep 2021 14:16:26 +0000 (14:16 +0000)]
[mlir][linalg] Fusion on tensors.
Add a new version of fusion on tensors that supports the following scenarios:
- support input and output operand fusion
- fuse a producer result passed in via tile loop iteration arguments (update the tile loop iteration arguments)
- supports only linalg operations on tensors
- supports only scf::for
- cannot add an output to the tile loop nest
The LinalgTileAndFuseOnTensors pass tiles the root operation and fuses its producers.
Reviewed By: nicolasvasilache, mravishankar
Differential Revision: https://reviews.llvm.org/D109766
Deep Majumder [Mon, 20 Sep 2021 14:42:26 +0000 (20:12 +0530)]
[analyzer] Move docs of SmartPtr to correct subcategory
The docs of alpha.cplusplus.SmartPtr was incorrectly placed under
alpha.deadcode. Moved it to under alpha.cplusplus
Differential Revision: https://reviews.llvm.org/D110032
David Sherwood [Thu, 16 Sep 2021 13:19:55 +0000 (14:19 +0100)]
[Analysis] Add support for vscale in computeKnownBitsFromOperator
In ValueTracking.cpp we use a function called
computeKnownBitsFromOperator to determine the known bits of a value.
For the vscale intrinsic if the function contains the vscale_range
attribute we can use the maximum and minimum values of vscale to
determine some known zero and one bits. This should help to improve
code quality by allowing certain optimisations to take place.
Tests added here:
Transforms/InstCombine/icmp-vscale.ll
Differential Revision: https://reviews.llvm.org/D109883
Jay Foad [Mon, 20 Sep 2021 13:21:55 +0000 (14:21 +0100)]
[AMDGPU] Regenerate checks
Stefan Gränitz [Mon, 20 Sep 2021 13:22:15 +0000 (15:22 +0200)]
[JITLink] Adopt forEachRelocation() helper in ELF RISCV backend (NFC)
Following D109516, this patch re-uses the new helper function for ELF relocation traversal in the RISCV backend.
Reviewed By: StephenFan
Differential Revision: https://reviews.llvm.org/D109522
Stefan Gränitz [Mon, 20 Sep 2021 13:21:34 +0000 (15:21 +0200)]
[JITLink] Adopt forEachRelocation() helper in ELF x86-64 backend (NFC)
Following D109516, this patch re-uses the new helper function for ELF relocation traversal in the x86-64 backend.
Reviewed By: StephenFan
Differential Revision: https://reviews.llvm.org/D109520
Aaron Puchert [Mon, 20 Sep 2021 13:20:09 +0000 (15:20 +0200)]
Thread safety analysis: Drop special block handling
Previous changes like D101202 and D104261 have eliminated the special
status that break and continue once had, since now we're making
decisions purely based on the structure of the CFG without regard for
the underlying source code constructs.
This means we don't gain anything from defering handling for these
blocks. Dropping it moves some diagnostics, though arguably into a
better place. We're working around a "quirk" in the CFG that perhaps
wasn't visible before: while loops have an empty "transition block"
where continue statements and the regular loop exit meet, before
continuing to the loop entry. To get a source location for that, we
slightly extend our handling for empty blocks. The source location for
the transition ends up to be the loop entry then, but formally this
isn't a back edge. We pretend it is anyway. (This is safe: we can always
treat edges as back edges, it just means we allow less and don't modify
the lock set. The other way around it wouldn't be safe.)
Reviewed By: aaron.ballman
Differential Revision: https://reviews.llvm.org/D106715
Michał Górny [Sat, 18 Sep 2021 13:25:32 +0000 (15:25 +0200)]
[lldb] [DynamicRegisterInfo] Unset value_regs/invalidate_regs before Finalize()
Set value_regs and invalidate_regs in RegisterInfo pushed onto m_regs
to nullptr, to ensure that the temporaries passed there are not
accidentally used.
Differential Revision: https://reviews.llvm.org/D109879
Michał Górny [Thu, 16 Sep 2021 18:52:02 +0000 (20:52 +0200)]
[lldb] [test] Add unittest for DynamicRegisterInfo::Finalize()
Differential Revision: https://reviews.llvm.org/D109906
Brain Swift [Mon, 20 Sep 2021 12:45:35 +0000 (18:15 +0530)]
[Clang] [Fix] Clang build fails when build directory contains space character
Clang build fails when build directory contains space character.
Error messages:
[ 95%] Linking CXX executable ../../../../bin/clang
clang: error: no such file or directory: 'Space/Net/llvm/Build/tools/clang/tools/driver/Info.plist'
make[2]: *** [bin/clang-14] Error 1
make[1]: *** [tools/clang/tools/driver/CMakeFiles/clang.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....
The path name is actually:
'Dev Space/Net/llvm/Build/tools/clang/tools/driver/Info.plist'
Bugzilla issue - https://bugs.llvm.org/show_bug.cgi?id=51884
Reporter and patch author - Brain Swift <bsp2bsp-llvm@yahoo.com>
Reviewed By: aaron.ballman
Differential Revision: https://reviews.llvm.org/D109979
David Green [Mon, 20 Sep 2021 12:48:01 +0000 (13:48 +0100)]
[ARM] MVE reverse shuffles.
The vectorizer can sometimes make reverse shuffles from indices that
count down. In MVE, we don't have a 128bit rev instruction, but we can
select this to a VREV64 with some lane movs to swap the two halfs.
Ideally this would use VMOVD's, but only gets as far as VMOVS's at the
moment.
Differential Revision: https://reviews.llvm.org/D69510
Alex Richardson [Mon, 20 Sep 2021 11:33:33 +0000 (12:33 +0100)]
[update_mir_test_checks.py] Use -NEXT FileCheck directories
Previously the script emitted output using plain CHECK directives. This
can result in a test passing even if there are some instructions between
CHECK directives that should have been removed. It also makes debugging
tests that have the output in a different order more difficult since
FileCheck can match with a later line and then complain about the "wrong"
directive not being found.
This will cause quite large diffs when updating existing tests, but I'm not sure we need an opt-in flag here.
Depends on D109765 (pre-commit tests)
Reviewed By: MaskRay
Differential Revision: https://reviews.llvm.org/D109767
Alex Richardson [Mon, 20 Sep 2021 11:33:25 +0000 (12:33 +0100)]
pre-commit test for D109767
Differential Revision: https://reviews.llvm.org/D109765
Alex Richardson [Mon, 20 Sep 2021 11:32:56 +0000 (12:32 +0100)]
Fix CLANG_ENABLE_STATIC_ANALYZER=OFF building all analyzer source
Since https://reviews.llvm.org/D87118, the StaticAnalyzer directory is
added unconditionally. In theory this should not cause the static analyzer
sources to be built unless they are referenced by another target. However,
the clang-cpp target (defined in clang/tools/clang-shlib) uses the
CLANG_STATIC_LIBS global property to determine which libraries need to
be included. To solve this issue, this patch avoids adding libraries to
that property if EXCLUDE_FROM_ALL is set.
In case something like this comes up again: `cmake --graphviz=targets.dot`
is quite useful to see why a target is included as part of `ninja all`.
Reviewed By: thakis
Differential Revision: https://reviews.llvm.org/D109611
Simon Pilgrim [Fri, 17 Sep 2021 16:47:28 +0000 (17:47 +0100)]
MachOObjectFile - checkOverlappingElement - use const-ref to avoid unnecessary copies. NFCI.
Reported by MSVC static analyzer.
Simon Pilgrim [Fri, 17 Sep 2021 15:25:30 +0000 (16:25 +0100)]
[X86] X86TargetTransformInfo - remove unnecessary if-else after early exit. NFCI.
(style) Break the if-else chain as they all return.
Simon Pilgrim [Fri, 17 Sep 2021 15:22:55 +0000 (16:22 +0100)]
[MCA] InstructionTables::execute() - use const-ref iterator in for-range loop. NFCI.
Avoid unnecessary copies, reported by MSVC static analyzer.
Valentin Clement [Thu, 22 Jul 2021 01:47:54 +0000 (21:47 -0400)]
[mlir][openacc] Make use of the second counter extension in DataOp translation
Make use of runtime extension for the second reference counter used in
structured data region. This extension is implemented in D106510 and D106509.
Differential Revision: https://reviews.llvm.org/D106517
Michał Górny [Sun, 19 Sep 2021 11:02:31 +0000 (13:02 +0200)]
[lldb] [gdb-remote] Always send PID when detaching w/ multiprocess
Always send PID in the detach packet when multiprocess extensions are
enabled. This is required by qemu's GDB server, as plain 'D' packet
results in an error and the emulated system is not resumed.
Differential Revision: https://reviews.llvm.org/D110033
Petar Avramovic [Mon, 20 Sep 2021 11:00:13 +0000 (13:00 +0200)]
[GlobalISel] Improve elimination of dead instructions in legalizer
Add eraseInstr(s) utility functions. Before deleting an instruction
collects its use instructions. After deletion deletes use instructions
that became trivially dead.
This patch clears all dead instructions in existing legalizer mir tests.
Differential Revision: https://reviews.llvm.org/D109154
Bjorn Pettersson [Thu, 16 Sep 2021 07:28:32 +0000 (09:28 +0200)]
[NewPM] Make InlinerPass (aka 'inline') a parameterized pass
In default pipelines the ModuleInlinerWrapperPass is adding the
InlinerPass to the pipeline twice, once due to MandatoryFirst (passing
true in the ctor) and then a second time with false as argument.
To make it possible to bisect and reduce opt test cases for this
part of the pipeline we need to be able to choose between the two
different variants of the InlinerPass when running opt. This patch is
changing 'inline' to a CGSCC_PASS_WITH_PARAMS in the PassRegistry,
making it possible run opt with both -passes=cgscc(inline) and
-passes=cgscc(inline<only-mandatory>).
Reviewed By: aeubanks, mtrofin
Differential Revision: https://reviews.llvm.org/D109877
Andy Wingo [Wed, 4 Aug 2021 08:39:52 +0000 (10:39 +0200)]
[clang][NFC] Remove dead code
Remove code that has no effect in SemaType.cpp:processTypeAttrs.
Differential Revision: https://reviews.llvm.org/D108360
Alexey Bader [Mon, 20 Sep 2021 06:31:35 +0000 (09:31 +0300)]
Add myself as a code owner for SYCL support
Justas Janickas [Mon, 6 Sep 2021 15:04:19 +0000 (16:04 +0100)]
[OpenCL] Supports optional writing to 3d images in C++ for OpenCL 2021
Adds support for a feature macro __opencl_c_3d_image_writes in
C++ for OpenCL 2021 enabling a respective optional core feature
from OpenCL 3.0.
This change aims to achieve compatibility between C++ for OpenCL
2021 and OpenCL 3.0.
Differential Revision: https://reviews.llvm.org/D109328
Tim Northover [Wed, 15 Sep 2021 11:20:03 +0000 (12:20 +0100)]
AArch64: use ldp/stp for 128-bit atomic load/store in v.84 onwards
v8.4 says that normal loads/stores of 128-bytes are single-copy atomic if
they're properly aligned (which all LLVM atomics are) so we no longer need to
do a full RMW operation to guarantee we got a clean read.
Vladislav Vinogradov [Mon, 20 Sep 2021 08:48:24 +0000 (11:48 +0300)]
[mlir] Fix integration tests failures introduced in D108505
David Spickett [Mon, 20 Sep 2021 08:44:09 +0000 (08:44 +0000)]
Revert "[AArch64][SVE] Teach cost model that masked loads/stores are cheap"
This reverts commit
734708e04f84b72f1ae7c8b35c002b8bf97dc064.
Due to build failures on the 2 stage SVE VLS bot.
https://lab.llvm.org/buildbot/#/builders/176/builds/908/steps/11/logs/stdio
Michał Górny [Thu, 16 Sep 2021 17:01:55 +0000 (19:01 +0200)]
[lldb] [gdb-remote] Recognize aarch64v type from gdbserver
Differential Revision: https://reviews.llvm.org/D109899
Michał Górny [Mon, 30 Aug 2021 08:23:22 +0000 (10:23 +0200)]
[lldb] [gdb-remote] Remove unused arg from GDBRemoteRegisterContext::ReadRegisterBytes()
Differential Revision: https://reviews.llvm.org/D110020
KareemErgawy-TomTom [Mon, 20 Sep 2021 07:35:42 +0000 (09:35 +0200)]
[MLIR][Linalg] Make detensoring cost-model more flexible.
So far, the CF cost-model for detensoring was limited to discovering
pure CF structures. This means, if while discovering the CF component,
the cost-model found any op that is not detensorable, it gives up on
detensoring altogether. This patch makes it a bit more flexible by
cleaning-up the detensorable component from non-detensorable ops without
giving up entirely.
Reviewed By: silvas
Differential Revision: https://reviews.llvm.org/D109965
Florian Hahn [Mon, 20 Sep 2021 08:07:34 +0000 (09:07 +0100)]
[CaptureTracking] Allow passing LI to PointerMayBeCapturedBefore (NFC).
isPotentiallyReachable can use LoopInfo to return earlier. This patch
allows passing an optional LI to PointerMayBeCapturedBefore. Used in
D109844.
Reviewed By: nikic, asbirlea
Differential Revision: https://reviews.llvm.org/D109978
Fangrui Song [Mon, 20 Sep 2021 07:56:27 +0000 (00:56 -0700)]
[CMake] Add debuginfo-tests to LLVM_ALL_PROJECTS after D110016
Arjun P [Mon, 20 Sep 2021 07:39:05 +0000 (13:09 +0530)]
[MLIR] Simplex::appendVariable: early return if count == 0
Vladislav Vinogradov [Fri, 20 Aug 2021 11:25:42 +0000 (14:25 +0300)]
[mlir] Fix bug in partial dialect conversion
The discussion on forum:
https://llvm.discourse.group/t/bug-in-partial-dialect-conversion/4115
The `applyPartialConversion` didn't handle the operations, that were
marked as illegal inside dynamic legality callback.
Instead of reporting error, if such operation was not converted to legal set,
the method just added it to `unconvertedSet` in the same way as unknown operations.
This patch fixes that and handle dynamically illegal operations as well.
The patch includes 2 fixes for existing passes:
* `tensor-bufferize` - explicitly mark `std.return` as legal.
* `convert-parallel-loops-to-gpu` - ugly fix with marking visited operations
to avoid recursive legality checks.
Reviewed By: rriddle
Differential Revision: https://reviews.llvm.org/D108505
Vladislav Vinogradov [Fri, 3 Sep 2021 11:02:34 +0000 (14:02 +0300)]
[mlir][NFC] Add explicit "::mlir" namespace to tblgen generated code
Reviewed By: lattner, ftynse
Differential Revision: https://reviews.llvm.org/D109223
Pavel Labath [Fri, 17 Sep 2021 11:16:26 +0000 (13:16 +0200)]
[lldb] Remove two #ifndef linux from Platform.cpp
These have been here since r215992, guarding the calls to HostInfo, but
their purpose unclear -- HostInfoLinux provides these functions and they
work fine.
Siva Chandra Reddy [Mon, 20 Sep 2021 05:54:32 +0000 (05:54 +0000)]
[libc][obvious] Add inttypes.h and stdlib.h as deps to *div functions.
Siva Chandra Reddy [Mon, 20 Sep 2021 05:44:10 +0000 (05:44 +0000)]
[libc][obvious] Make *abs and *div functions buildable in default mode.
Max Kazantsev [Mon, 20 Sep 2021 04:58:17 +0000 (11:58 +0700)]
[NFC] Add assert and test showing that revert of D109596 wasn't justified
All transforms of IndVars have prerequisite requirement of LCSSA and LoopSimplify
form and rely on it. Added test that shows that this actually stands.
Max Kazantsev [Mon, 20 Sep 2021 04:28:56 +0000 (11:28 +0700)]
Revert "Revert "[IndVars] Replace PHIs if loop exits on 1st iteration""
This reverts commit
6fec6552f54885ae06bf76b35f9f1173a0561a4c.
The patch was reverted on incorrect claim that this patch may break LCSSA form
when the loop is not in a simplify form. All IndVars' transform insure that
the loop is in simplify and LCSSA form, so if it wasn't broken before this
transform, it will also not be broken after it.
Siva Chandra Reddy [Fri, 17 Sep 2021 04:38:17 +0000 (04:38 +0000)]
[libc] Add implementations of div, ldiv, lldiv and imaxdiv.
Reviewed By: michaelrj
Differential Revision: https://reviews.llvm.org/D109952
Max Kazantsev [Mon, 20 Sep 2021 04:26:33 +0000 (11:26 +0700)]
[SCEV] Support negative values in signed/unsigned predicate reasoning
There is a piece of logic that uses the fact that signed and unsigned
versions of the same predicate are equivalent when both values are
non-negative. It's also true when both of them are negative.
Differential Revision: https://reviews.llvm.org/D109957
Reviewed By: nikic
David Blaikie [Mon, 20 Sep 2021 00:33:56 +0000 (17:33 -0700)]
llvm-dwarfdump: pretty type printing: print fully qualified names in function type parameter types
David Blaikie [Mon, 20 Sep 2021 00:33:56 +0000 (17:33 -0700)]
llvm-dwarfdump: support for type printing "decltype(nullptr)" as "nullptr_t"
This should probably be rendered as "std::nullptr_t" but for now clang
uses the unqualified name (which is ambiguous with possible user defined
name in the global namespace), so match that here.
David Blaikie [Mon, 20 Sep 2021 00:03:10 +0000 (17:03 -0700)]
llvm-dwarfdump: Don't print even an empty string when a type is unprintable
David Blaikie [Sun, 19 Sep 2021 22:31:35 +0000 (15:31 -0700)]
llvm-dwarfdump: Pretty print names qualified/with scopes
Simon Pilgrim [Sun, 19 Sep 2021 21:53:13 +0000 (22:53 +0100)]
[X86] SimplifyDemandedBits - only narrow a broadcast source if we only have one use.
Helps with the regression noted on D109065 - don't truncate a broadcast source if the source has multiple uses.
Kazu Hirata [Sun, 19 Sep 2021 20:44:23 +0000 (13:44 -0700)]
[llvm] Use pop_back_val (NFC)
Chris Jackson [Sun, 19 Sep 2021 14:52:20 +0000 (15:52 +0100)]
[DebugInfo][LSR] Emit shorter expressions from scev-based salvaging
The scev-based salvaging for LSR can sometimes produce unnecessarily
verbose expressions. This patch adds logic to detect when the value to
be recovered and the induction variable differ by only a constant
offset. Then, the expression to derive the current iteration count can
be omitted from the dbg.value in favour of the offset.
Reviewed by: aprantl
Differential Revision: https://reviews.llvm.org/D109044
David Blaikie [Sun, 19 Sep 2021 20:32:21 +0000 (13:32 -0700)]
llvm-dwarfdump: Pretty printing types including a space between const and parenthesized references/pointers to arrays
Craig Topper [Sun, 19 Sep 2021 20:20:36 +0000 (13:20 -0700)]
[X86] Remove Commutable flag from mpsadbw intrinsics.
Unlike psadbw, mpsadbw is not commutable because of how it operates
on blocks. We already marked as not commutable for MachineIR, but
had it commutable for the tablegened isel patterns.
Fixes PR51908.
Craig Topper [Sun, 19 Sep 2021 20:12:30 +0000 (13:12 -0700)]
[X86] Add test cases for pr51908. NFC
David Blaikie [Sun, 19 Sep 2021 20:06:18 +0000 (13:06 -0700)]
DWARFDie.cpp: Minor follow-up clang-format
David Blaikie [Sun, 19 Sep 2021 19:52:06 +0000 (12:52 -0700)]
DWARFDie: Improve type printing for function and array types - with qualifiers (cv/reference) and pointers to them
Simon Pilgrim [Sun, 19 Sep 2021 19:39:10 +0000 (20:39 +0100)]
[X86][Atom] Fix FP uops + port usage
Both ports are required in most cases. Update the uops counts + port usage based off the most recent llvm-exegesis captures (PR36895) and what Intel AoM / Agner / InstLatX64 reports as well.
Noticed while trying to improve fp costs for vectorization via the D103695 helper script.
Simon Pilgrim [Sun, 19 Sep 2021 17:41:55 +0000 (18:41 +0100)]
[X86] Fold SHUFPS(shuffle(x),shuffle(y),mask) -> SHUFPS(x,y,mask')
We can combine unary shuffles into either of SHUFPS's inputs and adjust the shuffle mask accordingly.
Unlike general shuffle combining, we can be more aggressive and handle multiuse cases as we're not going to accidentally create additional shuffles.
David Blaikie [Sun, 19 Sep 2021 16:24:25 +0000 (09:24 -0700)]
llvm-dwarfdump: Refactor type pretty printing tests
Move most type tests to a pre-generated assembly file to make it easier
to add more weird cases without having to hand craft more DWARF.
Move the novel array types that aren't reachable via clang-generated
DWARF to a separate file for easy maintenance.
Simon Pilgrim [Sun, 19 Sep 2021 15:58:40 +0000 (16:58 +0100)]
[X86][Atom] Specific uops for all IMUL/IDIV instructions
Based off a mixture of llvm-exegesis captures (PR36895) and Intel AoM / Agner / InstLatX64 reports.
Roman Lebedev [Sun, 19 Sep 2021 14:38:32 +0000 (17:38 +0300)]
[X86][TLI] SimplifyDemandedVectorEltsForTargetNode(): don't break apart broadcasts from which not just the 0'th elt is demanded
Apparently this has no test coverage before D108382,
but D108382 itself shows a few regressions that this fixes.
It doesn't seem worthwhile breaking apart broadcasts,
assuming we want the broadcasted value to be preset in several elements,
not just the 0'th one.
Reviewed By: RKSimon
Differential Revision: https://reviews.llvm.org/D108411
Roman Lebedev [Sun, 19 Sep 2021 14:32:43 +0000 (17:32 +0300)]
[X86] lowerShuffleAsDecomposedShuffleMerge(): if both inputs are broadcastable/identities, canonicalize broadcasts as such
Split off from D108253.
Broadcast is simpler than any other shuffle we might produce
to do what we want to do here, so prefer it.
Reviewed By: RKSimon
Differential Revision: https://reviews.llvm.org/D108382
Roman Lebedev [Sun, 19 Sep 2021 14:27:35 +0000 (17:27 +0300)]
[NFC] combineX86ShufflesRecursively(): actually address nits for previous patch
Roman Lebedev [Sun, 19 Sep 2021 14:21:17 +0000 (17:21 +0300)]
[X86] combineX86ShufflesRecursively(): call SimplifyMultipleUseDemandedVectorElts() on after finishing recursing
This was suggested in https://reviews.llvm.org/D108382#inline-1039018,
and it avoids regressions in that patch.
Reviewed By: RKSimon
Differential Revision: https://reviews.llvm.org/D109065
Sanjay Patel [Sun, 19 Sep 2021 13:18:07 +0000 (09:18 -0400)]
[InstCombine] add/adjust tests for min/max intrinsics; NFC
If we transform these, we have to propagate no-wrap/undef carefully.
David Green [Sun, 19 Sep 2021 13:25:21 +0000 (14:25 +0100)]
[ARM] Add VGETLANEu patterns for v4f16 and v8f16
These were apparently missing, having no pattern that could convert a
VGETLANEu of a v4f16 to an i32. Added bf16 whilst here, following the
same code.
xndcn [Sun, 19 Sep 2021 12:01:12 +0000 (20:01 +0800)]
[mlir][emitc] Fix indent in CondBranchOp and block label
1. Add missing indent in CondBranchOp
2. Remove indent in block label
Differential Revision: https://reviews.llvm.org/D109805
Simon Pilgrim [Sat, 18 Sep 2021 20:29:33 +0000 (21:29 +0100)]
[X86][Atom] Fix (U)COMISS/SD uops, latency and throughput
Both ports are required, for reg and mem variants - we can also use the WriteFComX class directly and remove the unnecessary InstRW overrides. Matches what Intel AoM / Agner / InstLatX64 report as well.
Sylvestre Ledru [Sun, 19 Sep 2021 10:17:49 +0000 (12:17 +0200)]
llvm/cmake: fix a typo
Ben Shi [Mon, 30 Aug 2021 13:14:12 +0000 (21:14 +0800)]
[RISCV] Optimize (add (shl x, c0), (shl y, c1)) with SH*ADD
Optimize (add (shl x, c0), (shl y, c1)) ->
(SLLI (SH*ADD x, y), c1), if c0-c1 == 1/2/3.
Reviewed By: craig.topper, luismarques
Differential Revision: https://reviews.llvm.org/D108916
David Blaikie [Sun, 19 Sep 2021 05:54:57 +0000 (22:54 -0700)]
DWARFDie:DWARFTypePrinter: Add common utility function for checking where parentheses are required
David Blaikie [Sun, 19 Sep 2021 05:22:25 +0000 (22:22 -0700)]
DWARFDie.cpp: Reduce indentation with early continue
Roman Lebedev [Sat, 18 Sep 2021 19:13:25 +0000 (22:13 +0300)]
[X86] Improve i8 all-ones element insertion in pre-SSE4.1
Should avoid some regressions in D109065
Reviewed By: RKSimon
Differential Revision: https://reviews.llvm.org/D109989
Nikita Popov [Sat, 18 Sep 2021 19:14:35 +0000 (21:14 +0200)]
[Tests] Fix noalias metadata in one more test
Missed this one in
80110aafa09aff9869cdb50ed718a169888da578. This
is another test mixing up alias scopes and alias scope lists.
Nikita Popov [Thu, 16 Sep 2021 20:17:36 +0000 (22:17 +0200)]
[Tests] Fix incorrect noalias metadata
Mostly this fixes cases where !noalias or !alias.scope were passed
a scope rather than a scope list. In some cases I opted to drop
the metadata entirely instead, because it is not really relevant
to the test.
alokmishra.besu [Fri, 17 Sep 2021 21:03:01 +0000 (16:03 -0500)]
OpenMP 5.0 metadirective
This patch supports OpenMP 5.0 metadirective features.
It is implemented keeping the OpenMP 5.1 features like dynamic user condition in mind.
A new function, getBestWhenMatchForContext, is defined in llvm/Frontend/OpenMP/OMPContext.h
Currently this function return the index of the when clause with the highest score from the ones applicable in the Context.
But this function is declared with an array which can be used in OpenMP 5.1 implementation to select all the valid when clauses which can be resolved in runtime. Currently this array is set to null by default and its implementation is left for future.
Reviewed By: jdoerfert
Differential Revision: https://reviews.llvm.org/D91944
Usman Nadeem [Sat, 18 Sep 2021 18:28:49 +0000 (11:28 -0700)]
Precommit tests for D109807 "[InstCombine] Narrow type of logical operation chains when possible"
Change-Id: Iae9bf18619e4926301a866c7e2bd38ced524804e
Mehdi Amini [Sat, 18 Sep 2021 02:38:17 +0000 (02:38 +0000)]
Check for invalid projects passed in LLVM_ENABLE_PROJECTS
This is catching misconfiguration. For example one of my automation
had a typo running `-DLLVM_ENABLE_PROJECTS=nlir` and it was just
silently ignored. Instead, an error will now be displayed.
Recommit
4121ac1e after fixing it to not fail on "all"
Differential Revision: https://reviews.llvm.org/D110016
Alexandre Ganea [Sat, 18 Sep 2021 16:00:17 +0000 (12:00 -0400)]
[Support] Attempt to fix deadlock in ThreadGroup
This is an attempt to fix the situation described by https://reviews.llvm.org/D104207#2826290 and PR41508.
See sequence of operations leading to the bug in https://reviews.llvm.org/D104207#3004689
We ensure that the Latch is completely "free" before decrementing the number of TaskGroupInstances.
Differential revision: https://reviews.llvm.org/D109914
David Green [Sat, 18 Sep 2021 17:47:02 +0000 (18:47 +0100)]
[ARM] Prevent large integer VQDMULH pattern crashes
Put a limit on the size of constant integers we test when looking for
VQDMULH, to prevent it from crashing from values more than 64bits.
Arjun P [Sat, 18 Sep 2021 16:10:59 +0000 (21:40 +0530)]
[MLIR] Simplex: rename num{Variables,Constraints} to getNum{Variables,Constraints}
As per the LLVM Coding Standards, function names should be verb phrases.
Kazu Hirata [Sat, 18 Sep 2021 16:29:24 +0000 (09:29 -0700)]
[CodeGen] Use make_early_inc_range (NFC)
Arjun P [Sat, 18 Sep 2021 10:34:46 +0000 (16:04 +0530)]
[MLIR] Simplex: support adding new variables dynamically
Reviewed By: Groverkss
Differential Revision: https://reviews.llvm.org/D109962
Nico Weber [Sat, 18 Sep 2021 15:15:21 +0000 (11:15 -0400)]
[lld/mac] Fix comment typo to cycle bots
Jacques Pienaar [Sat, 18 Sep 2021 13:57:51 +0000 (06:57 -0700)]
[mlir-c] Add getting fused loc
For creating a fused loc using array of locations and metadata.
Differential Revision: https://reviews.llvm.org/D110022
Nico Weber [Sat, 18 Sep 2021 13:10:37 +0000 (09:10 -0400)]
Revert "OpenMP 5.0 metadirective"
This reverts commit
c7d7b98e5263472f05b2f3cb767b5d16e1349e9a.
Breaks tests on macOS, see comment on https://reviews.llvm.org/D91944
Aaron Puchert [Sat, 18 Sep 2021 11:46:50 +0000 (13:46 +0200)]
Thread safety analysis: Warn when demoting locks on back edges
Previously in D104261 we warned about dropping locks from back edges,
this is the corresponding change for exclusive/shared joins. If we're
entering the loop with an exclusive change, which is then relaxed to a
shared lock before we loop back, we have already analyzed the loop body
with the stronger exclusive lock and thus might have false positives.
There is a minor non-observable change: we modify the exit lock set of a
function, but since that isn't used further it doesn't change anything.
Reviewed By: aaron.ballman
Differential Revision: https://reviews.llvm.org/D106713
Roman Lebedev [Sat, 18 Sep 2021 10:56:54 +0000 (13:56 +0300)]
Revert "Check for invalid projects passed in LLVM_ENABLE_PROJECTS"
```
CMake Error at CMakeLists.txt:76 (MESSAGE):
all isn't a know project:
clang;clang-tools-extra;compiler-rt;cross-project-tests;libc;libclc;libcxx;libcxxabi;libunwind;lld;lldb;mlir;openmp;parallel-libs;polly;pstl;flang;llvm
```
This reverts commit
4121ac1e7f96d826b793bd7e29c181f1eb8168bf.
Sylvestre Ledru [Sat, 18 Sep 2021 10:42:50 +0000 (12:42 +0200)]
llvm doc: remove the old reference to subversion and add a link to the GH repo instead
Sylvestre Ledru [Sat, 18 Sep 2021 10:42:09 +0000 (12:42 +0200)]
llvm doc: subversion isn't necessary in this example