LLVM GN Syncbot [Wed, 6 Apr 2022 19:38:53 +0000 (19:38 +0000)]
[gn build] Port
c03d6257c58f
Sam McCall [Wed, 6 Apr 2022 15:48:52 +0000 (17:48 +0200)]
[pseudo] Rename DirectiveMap -> DirectiveTree. NFC
Addressing comment from previous review
https://reviews.llvm.org/D121165?id=413636#inline-1160757
Congzhe Cao [Wed, 6 Apr 2022 19:15:37 +0000 (15:15 -0400)]
[LoopInterchange] Try to achieve the most optimal access pattern after interchange
Motivated by pr43326 (https://bugs.llvm.org/show_bug.cgi?id=43326), where a slightly
modified case is as follows.
void f(int e[10][10][10], int f[10][10][10]) {
for (int a = 0; a < 10; a++)
for (int b = 0; b < 10; b++)
for (int c = 0; c < 10; c++)
f[c][b][a] = e[c][b][a];
}
The ideal optimal access pattern after running interchange is supposed to be the following
void f(int e[10][10][10], int f[10][10][10]) {
for (int c = 0; c < 10; c++)
for (int b = 0; b < 10; b++)
for (int a = 0; a < 10; a++)
f[c][b][a] = e[c][b][a];
}
Currently loop interchange is limited to picking up the innermost loop and finding an order
that is locally optimal for it. However, the pass failed to produce the globally optimal
loop access order. For more complex examples what we get could be quite far from the
globally optimal ordering.
What is proposed in this patch is to do a "bubble-sort" fashion when doing interchange.
By comparing neighbors in `LoopList` in each iteration, we would be able to move each loop
onto a most appropriate place, hence this is an approach that tries to achieve the
globally optimal ordering.
The motivating example above is added as a test case.
Reviewed By: Meinersbur
Differential Revision: https://reviews.llvm.org/D120386
Paul Robinson [Wed, 6 Apr 2022 19:28:36 +0000 (12:28 -0700)]
[PS4] Fix a buggy cast
Walter Erquinigo [Tue, 22 Mar 2022 16:18:53 +0000 (09:18 -0700)]
[trace][intelpt] Introduce instruction Ids
In order to support quick arbitrary access to instructions in the trace, we need
each instruction to have an id. It could be an index or any other value that the
trace plugin defines.
This will be useful for reverse debugging or for creating callstacks, as each
frame will need an instruction id associated with them.
I've updated the `thread trace dump instructions` command accordingly. It now
prints the instruction id instead of relative offset. I've also added a new --id
argument that allows starting the dump from an arbitrary position.
Differential Revision: https://reviews.llvm.org/D122254
Craig Topper [Wed, 6 Apr 2022 19:13:26 +0000 (12:13 -0700)]
[RISCV] Merge rv32/rv64 test files. NFC
Peter Collingbourne [Wed, 6 Apr 2022 19:14:47 +0000 (12:14 -0700)]
Revert "gn build: Fix support for building the builtins for baremetal."
This reverts commit
b02b9b3dacc8a4afa96e8990f2dda8bc9b959f78.
Broke Mac build: http://45.33.8.238/macm1/32578/step_4.txt
Zixu Wang [Thu, 31 Mar 2022 00:21:33 +0000 (17:21 -0700)]
[clang][extract-api] Add Objective-C Category support
Add (partial) support for Objective-C category records in ExtractAPI.
The current ExtractAPI collects everything for an Objective-C category,
but not fully serialized in the SymbolGraphSerializer. Categories
extending external interfaces are disgarded during serialization, and
categories extending known interfaces are merged (all members surfaced)
into the interfaces.
Differential Revision: https://reviews.llvm.org/D122774
David Blaikie [Wed, 6 Apr 2022 18:25:16 +0000 (18:25 +0000)]
DebugInfo: Make the simplified template names prefix more unique
LLVM GN Syncbot [Wed, 6 Apr 2022 18:21:38 +0000 (18:21 +0000)]
[gn build] Port
9fc45ca00a19
Vladislav Khmelevsky [Tue, 5 Apr 2022 15:41:17 +0000 (18:41 +0300)]
[BOLT][test] Fix X86 tests
Differential Revision: https://reviews.llvm.org/D123133
Daniel Grumberg [Fri, 1 Apr 2022 18:14:23 +0000 (19:14 +0100)]
[clang][extract-api] Add support for typedefs
Typedef records consist of the symbol associated with the underlying
TypedefDecl and a SymbolReference to the underlying type. Additionally
typedefs for anonymous TagTypes use the typedef'd name as the symbol
name in their respective records and USRs. As a result the declaration
fragments for the anonymous TagType are those for the associated
typedef. This means that when the user is defining a typedef to a
typedef to a anonymous type, we use a reference the anonymous TagType
itself and do not emit the typedef to the anonymous type in the
generated symbol graph, including in the type destination of further
typedef symbol records.
Differential Revision: https://reviews.llvm.org/D123019
Nathan Sidwell [Thu, 17 Feb 2022 15:36:08 +0000 (07:36 -0800)]
[clang][DOC] Document module mangler changes
Note that the mangling has changed and the demangler's learnt a new
trick. Obviously dependent upon the mangler and demangler patches.
Reviewed By: bruno
Differential Revision: https://reviews.llvm.org/D123141
Daniil Kovalev [Wed, 6 Apr 2022 18:03:58 +0000 (21:03 +0300)]
[NFC][CodeGen] Add comments for SDNode debug ID
Normally, we place fields serving for debug purpose declarations
under `#if LLVM_ENABLE_ABI_BREAKING_CHECKS`. For `SDNode::PersistentId` and
`SelectionDAG::NextPersistentId`, we do not want to do so because it adds
unneeded complexity without noticeable benefits (see discussion with @thakis
in D120714). This patch adds comments describing why we don't place those
fields under `#if` not to confuse anyone more.
Differential Revision: https://reviews.llvm.org/D123238
Nico Weber [Wed, 6 Apr 2022 18:02:09 +0000 (14:02 -0400)]
Revert "[gn build] (manually) port
83a798d4b0e1 (abi_breaking_checks in tests)"
This reverts commit
edddf384c22b039df8d3a31bbc86f9eb4945a65d.
83a798d4b0e1 was reverted in
62a983ebc570e8ffa3d.
Peter Collingbourne [Fri, 1 Apr 2022 03:34:05 +0000 (20:34 -0700)]
gn build: Fix support for building the builtins for baremetal.
Our support for building for baremetal was conditional on a default
off arg and would have failed to build if you had somehow arranged
to pass the correct --target flag; presumably nobody noticed because
nobody was turning it on. A better approach is to model baremetal
as a separate "OS" called "baremetal" and build it in the same way
as we cross-compile for other targets. That's what this patch does.
I only hooked up the arm64 target but others can be added.
Differential Revision: https://reviews.llvm.org/D122862
Craig Topper [Wed, 6 Apr 2022 17:49:29 +0000 (10:49 -0700)]
[LegalizeTypes][VP] Use LoVT/HiVT when splitting VP operations in SplitVecRes_UnaryOp.
The VP path was using the split source VTs instead of the split
destination VTs. This may not be a problem today because the VP
nodes going through this have the same source and dest VTs.
It will be a problem when we start using this function for legalizing
VP cast operations.
Alan Zhao [Wed, 6 Apr 2022 17:43:02 +0000 (19:43 +0200)]
Add the /nologo flag to llvm-ml
This flag is present in MSVC's ml.exe to suppress copyright info output.
LLVM doesn't output copyright info, so this flag does nothing in
llvm-ml. We still add this flag though so that when llvm-ml is used as a
drop-in replacement for MSVC ml.exe, we don't get any extra warnings.
Furthermore, this behavior is also consistent with other llvm binaries
for Windows (e.g. clang-cl, llvm-mt, lld-link, etc.)
Differential revision: https://reviews.llvm.org/D123068
Daniel Grumberg [Mon, 4 Apr 2022 16:19:03 +0000 (17:19 +0100)]
[clang][extract-api] Fix small issues with SymbolGraphSerializer
This includes:
- replacing "relationhips" with "relationships"
- emitting the "pathComponents" property on symbols
- emitting the "accessLevel" property on symbols
Differential Revision: https://reviews.llvm.org/D123045
Hansang Bae [Wed, 6 Apr 2022 16:15:01 +0000 (11:15 -0500)]
[OpenMP] Fix warnings
Silenced compiler warnings after pushing the following change.
https://reviews.llvm.org/D122107
Differential Revision: https://reviews.llvm.org/D123233
Daniil Kovalev [Wed, 6 Apr 2022 17:30:51 +0000 (20:30 +0300)]
Revert "[CodeGen] Place SDNode debug ID declaration under appropriate #if"
This reverts commit
83a798d4b0e17ac41d5430f1290d3661343eee1e.
As discussed in D120714 with @thakis, the patch added unneeded complexity
without noticeable benefits.
Craig Topper [Wed, 6 Apr 2022 17:19:18 +0000 (10:19 -0700)]
[LegalizeTypes] Move SplitVecRes_VECTOR_REVERSE/VECTOR_SPLICE near other SplitVecRes methods. NFC
This file is divided into sections for different legalization actions.
We should keep similar methods together.
David Green [Wed, 6 Apr 2022 17:27:57 +0000 (18:27 +0100)]
[AArch64] Format the PerfectShuffle table. NFC
Nathan Sidwell [Tue, 5 Apr 2022 16:25:47 +0000 (09:25 -0700)]
[demangler] Fix undocumented Local encoding
GCC emits [some] static symbols with an 'L' mangling, which we attempt
to demangle. But the module mangling changes have exposed that we
were doing so at the wrong level. Such manglings are outside of the
ABI as they are internal-linkage, so a bit of reverse engineering was
needed. This adjusts the demangler along the same lines as the
existing gcc demangler (which is not yet module-aware). 'L' is part
of an unqualified name. As before we merely parse the 'L', and then
ignore it.
Reviewed By: iains
Differential Revision: https://reviews.llvm.org/D123138
Craig Topper [Wed, 6 Apr 2022 17:06:55 +0000 (10:06 -0700)]
[LegalizeDAG] Use SelectionDAG::getBoolConstant to simplify some code. NFC
Craig Topper [Wed, 6 Apr 2022 16:16:20 +0000 (09:16 -0700)]
[RISCV] Add lowering for vp.sext and vp.zext.
Including mask vector inputs.
Reviewed By: frasercrmck, rogfer01
Differential Revision: https://reviews.llvm.org/D123150
Craig Topper [Wed, 6 Apr 2022 16:14:51 +0000 (09:14 -0700)]
[DAGCombiner] Replace call getSExtOrTrunc with a truncate. NFC
The extend case should never occur. The sign extend would be an
arbitrary choice, remove it to avoid confusion.
Arthur Eubanks [Tue, 5 Apr 2022 21:50:44 +0000 (14:50 -0700)]
[test][DSE] Precommit test for D123162
Simon Pilgrim [Wed, 6 Apr 2022 16:51:47 +0000 (17:51 +0100)]
[X86] Add Issue #42433 test case
Nico Weber [Wed, 6 Apr 2022 13:23:25 +0000 (09:23 -0400)]
[dsymutil] Fix a few TODOs about reporting errors to the user
I saw the TODOs while reading this file and figured I'd do them.
I haven't seen these happen in practice.
No expected behavior change.
Differential Revision: https://reviews.llvm.org/D123215
Nico Weber [Wed, 6 Apr 2022 13:30:39 +0000 (09:30 -0400)]
[dsymutil] Fix O(n^2) behavior when running on ld64.lld's current ICF output
STABS information consists of a list of records in the linked binary
that look like this:
OSO: path/to/some.o
SO: path/to/some.c
FUN: sym1
FUN: sym2
...
The linked binary has one such set of records for every .o file linked
into it.
When dsymutil processes the binary's STABS information, it:
1. Reads the .o file mentioned in the OSO line
2. For each FUN entry after it in the main executable's STABS info:
a) it looks up that symbol in the symbol of that .o file
b) if it doesn't find it there, it goes through all symbols in the
main binary at the same address and sees if any of those match
With ICF, ld64.lld's STABS output claims that all identical functions
that were folded are in the .o file of the one that's deemed the
canonical one. Many small functions might be folded into a single
function, so there are .o OSO entries that end up with many FUN lines,
but almost none of them exist in the .o file's symbol table.
Previously, dsymutil would do a full scan of all symbols in the main
executable _for every of these entries_.
This patch instead scans all aliases once and remembers them per name.
This reduces the alias resolution complexity from
O(number_of_aliases_in_o_file * number_of_symbols_in_main_executable) to
O(number_of_aliases_in_o_file * log(number_of_aliases_in_o_file)).
In practice, it reduces the time spent to run dsymutil on
Chromium Framework from 26 min (after https://reviews.llvm.org/D89444)
or 12 min (before https://reviews.llvm.org/D89444) to ~8m30s.
We probably want to change how ld64.lld writes STABS entries when ICF
is enabled, but making dsymutil not have pathological performance for
this input seems like a good change as well.
No expected behavior change (other than it's faster). I verified that
for Chromium Framework, the generated .dSYM is identical with and
without this patch.
Differential Revision: https://reviews.llvm.org/D123218
Paul Walker [Tue, 22 Feb 2022 15:20:28 +0000 (15:20 +0000)]
[DAGCombine] insert_subvector undef, (splat X), N2 -> splat X
Differential Revision: https://reviews.llvm.org/D120328
Fraser Cormack [Wed, 30 Mar 2022 16:01:30 +0000 (17:01 +0100)]
[RISCV][VP] Add basic RVV codegen for vp.icmp
This patch adds the minimum required to successfully lower vp.icmp via
the new ISD::VP_SETCC node to RVV instructions.
Regular ISD::SETCC goes through a lot of canonicalization which targets
may rely on which has not hereto been ported to VP_SETCC. It also
supports expansion of individual condition codes and a non-boolean
return type. Support for all of that will follow in later patches.
In the case of RVV this largely isn't a problem as the vector integer
comparison instructions are plentiful enough that it can lower all
VP_SETCC nodes on legal integer vectors except for boolean vectors,
which regular SETCC folds away immediately into logical operations.
Floating-point VP_SETCC operations aren't as well supported in RVV and
the backend relies on condition code expansion, so support for those
operations will come in later patches.
Portions of this code were taken from the VP reference patches.
Reviewed By: craig.topper
Differential Revision: https://reviews.llvm.org/D122743
LLVM GN Syncbot [Wed, 6 Apr 2022 15:52:20 +0000 (15:52 +0000)]
[gn build] Port
d78624975b43
Matthias Springer [Wed, 6 Apr 2022 14:42:53 +0000 (23:42 +0900)]
[mlir][bufferize][NFC] Remove caller map and ordered func list from FuncAnalysisState
These can be local variables. No need to store them in the struct.
Differential Revision: https://reviews.llvm.org/D123210
Matthias Springer [Wed, 6 Apr 2022 14:42:31 +0000 (23:42 +0900)]
[mlir][bufferize][NFC] Rename ModuleAnalysisState to FuncAnalysisState
This is for consistency reasons. `*AnalysisState` always starts with the name of the dialect.
Differential Revision: https://reviews.llvm.org/D123209
Mark de Wever [Tue, 5 Apr 2022 16:34:37 +0000 (18:34 +0200)]
[libc++] Use cpp20_output_iterator in tests.
Adds the new cpp20_output_iterator in the ranges::transform test.
Reviewed By: philnik, #libc
Differential Revision: https://reviews.llvm.org/D123139
Mark de Wever [Sun, 3 Apr 2022 13:58:57 +0000 (15:58 +0200)]
[NFC][libc++] Modularize chrono's calendar.
The is a followup of D116965 to split the calendar header. This is a
preparation to add the formatters for the chrono header.
The code is only moved no other changes have been made.
Reviewed By: ldionne, #libc, philnik
Differential Revision: https://reviews.llvm.org/D122995
Arjun P [Wed, 6 Apr 2022 13:52:30 +0000 (14:52 +0100)]
[MLIR][Presburger] Refactor subtraction in preparation for making it iterative
Refactor the operation of subtraction by
- removing the usage of SimplexRollbackScopeExit since this
can't be used in the iterative version
- reducing the number of stack variables to make the
iterative version easier to follow
Reviewed By: Groverkss
Differential Revision: https://reviews.llvm.org/D123156
Roman Lebedev [Wed, 6 Apr 2022 14:32:31 +0000 (17:32 +0300)]
[X86] `lowerBuildVectorAsBroadcast()`: with AVX512VL, allow i64->XMM broadcasts from constant pool
Reviewed By: RKSimon
Differential Revision: https://reviews.llvm.org/D123221
Sam McCall [Mon, 7 Mar 2022 22:33:40 +0000 (23:33 +0100)]
[pseudo] Add crude heuristics to choose taken preprocessor branches.
In files where different preprocessing paths are possible, our goal is to
choose a preprocessed token sequence which we can parse that pins down as much
of the grammatical structure as possible.
This forms the "primary parse", and the not-taken branches get parsed later,
and are constrained to be compatible with the primary parse.
Concretely:
int x =
#ifdef // TAKEN
2 + 2 + 2 // determined during primary parse to be an expression
#else
2 // constrained to be an expression during a secondary parse
#endif
;
Differential Revision: https://reviews.llvm.org/D121165
Matthias Springer [Wed, 6 Apr 2022 14:41:56 +0000 (23:41 +0900)]
[mlir][bufferize] Better analysis for return values of CallOps
Support returning arbitrary tensors from functions. Even those that are
not equivalent. To that end, additional information is gathered during
the analysis phase. In particular, which function args are aliasing with
which return values.
Also fix bugs in the current implementation when returning equivalent
tensors. Various unit tests are added to ensure that we have better test
coverage.
Note: Returning non-equivalent tensors is only allowed when
allowReturnAllocs is enabled. This functionality is useful for unit
testing and compatibility with other bufferizations such as the sparse
compiler. This is also towards using ModuleBufferization as a
replacement for --func-bufferize.
Differential Revision: https://reviews.llvm.org/D119120
Matthias Springer [Wed, 6 Apr 2022 14:41:33 +0000 (23:41 +0900)]
[mlir][bufferize] Simplify ModuleBufferization driver
* Bufferize FuncOp bodies and boundaries in the same loop. This is in preparation of moving FuncOp bufferization into an external model implementation.
* As a side effect, stop bufferization earlier if there was an error. (Do not continue bufferization, fewer error messages.)
* Run equivalence analysis of CallOps before the main analysis. This is needed so that equialvence info is propagated properly.
Differential Revision: https://reviews.llvm.org/D123208
Matthias Springer [Wed, 6 Apr 2022 14:40:59 +0000 (23:40 +0900)]
[mlir][bufferize] Fix dropped return type in ModuleBufferization
Differential Revision: https://reviews.llvm.org/D123192
Paul Walker [Wed, 6 Apr 2022 13:58:38 +0000 (14:58 +0100)]
[NFC] Remove redundant IndexType canonicalisation from DAGTypeLegalizer::PromoteIntOp_MSCATTER
Promotion does not affect the base element type and so the original
index type will remain unchanged. This reflects the behaviour of
DAGTypeLegalizer::PromoteIntOp_MGATHER with no tests affected.
Paul Walker [Wed, 6 Apr 2022 12:45:26 +0000 (13:45 +0100)]
[SVE] Add gather/scatter tests to highlight bugs in their generated code.
LLVM GN Syncbot [Wed, 6 Apr 2022 14:24:39 +0000 (14:24 +0000)]
[gn build] Port
afa94306a8c1
Sam McCall [Mon, 3 Jan 2022 02:57:14 +0000 (03:57 +0100)]
[clangd] Add code action to generate a constructor for a C++ class
Differential Revision: https://reviews.llvm.org/D116514
LLVM GN Syncbot [Wed, 6 Apr 2022 14:15:16 +0000 (14:15 +0000)]
[gn build] Port
68eac9a6e7a1
Sam McCall [Sun, 2 Jan 2022 04:01:43 +0000 (05:01 +0100)]
[clangd] Code action to declare missing move/copy constructor/assignment
Fixes https://github.com/clangd/clangd/issues/973
Differential Revision: https://reviews.llvm.org/D116490
Shengchen Kan [Wed, 6 Apr 2022 14:01:56 +0000 (22:01 +0800)]
[X86][tablgen] Add one entry manually into the memory folding table
```
{"MMX_MOVD64grr", "MMX_MOVD64mr"}
```
This pair has different opcodes.
chenglin.bi [Wed, 6 Apr 2022 13:17:42 +0000 (21:17 +0800)]
[AArch64] Fold lsr+bfi in tryBitfieldInsertOpFromOr
In tryBitfieldInsertOpFromOr, if the new created LSR Node's source
is LSR with Imm shift, try to fold them.
Fixes https://github.com/llvm/llvm-project/issues/54696
Reviewed By: efriedma, benshi001
Differential Revision: https://reviews.llvm.org/D122915
Nikita Popov [Wed, 6 Apr 2022 13:59:42 +0000 (15:59 +0200)]
[SimplifyLibCalls] Use KnownBits helper APIs (NFC)
Use helper APIs for isNonNegative() and getMaxValue() instead of
flipping the zero value and having a long comment explaining why
that is necessary.
Paul Robinson [Wed, 6 Apr 2022 13:52:13 +0000 (06:52 -0700)]
[PS4] clang-format PS4CPU.cpp/.h
Augie Fackler [Mon, 14 Mar 2022 19:21:04 +0000 (15:21 -0400)]
MemoryBuiltins: getAllocAlignment is now useful for non-allocator funcs
This has been true since
dba73135c8b7a02afb535328a7475e0a6890c271, but
didn't matter until now because clang wasn't emitting allocalign
attributes.
Differential Revision: https://reviews.llvm.org/D121640
Jay Foad [Wed, 6 Apr 2022 13:45:38 +0000 (14:45 +0100)]
[AMDGPU] Fix unused variable warning after D117484
Jean Perier [Wed, 6 Apr 2022 13:37:48 +0000 (15:37 +0200)]
[flang] Add runtime API to catch unit number out of range
Unit numbers must fit on a default integer. It is however possible that
the user provides the unit number in UNIT with a wider integer type.
In such case, lowering was previously silently narrowing
the value and passing the result to the BeginXXX runtime entry points.
Cases where the conversion caused overflow were not reported/caught.
Most existing compilers catch these errors and raise an IO error.
Add a CheckUnitNumberInRange runtime API to do the same in f18.
This runtime API has its own error management interface (i.e., does not
use GetIoMsg, EndIo, and EnableHandlers) because the usual error
management requires BeginXXX to be called to set up the error
management. But in this case, the BeginXXX cannot be called since
the bad unit number that would be provided to it overflew (and in the worst
case scenario, the narrowed value could point to a different valid unit
already in use). Hence I decided to make an API that must be called
before the BeginXXX and should trigger the whole BeginXXX/.../EndIoStatement
to be skipped in case the unit number is too big and the user enabled
error recovery.
Note that CheckUnitNumberInRange accepts negative numbers (as long as
they can fit on a default integer), because unit numbers may be negative
if they were created by NEWUNIT.
Differential Revision: https://reviews.llvm.org/D123157
Shengchen Kan [Wed, 6 Apr 2022 13:32:30 +0000 (21:32 +0800)]
[X86] Fold MMX_MOVD64from64rr + store to MMX_MOVQ64mr instead of MMX_MOVD64from64mr in auto-generated table
This is a follow-up patch for D122241.
zhongyunde [Wed, 6 Apr 2022 12:57:40 +0000 (20:57 +0800)]
[SVE][AArch64] Enable first active true vector combine for INTRINSIC_WO_CHAIN
WHILELO/LS insn is used very important for SVE loop, and itself
is a flag-setting operation, so add it.
Reviewed By: paulwalker-arm, david-arm
Differential Revision: https://reviews.llvm.org/D122796
Hansang Bae [Sun, 20 Mar 2022 21:03:04 +0000 (16:03 -0500)]
[OpenMP] Add support for ompt_callback_dispatch
This change adds support for ompt_callback_dispatch with the new
dispatch chunk type introduced in 5.2. Definitions of the new
ompt_work_loop types were also added in the header file.
Differential Revision: https://reviews.llvm.org/D122107
zhongyunde [Wed, 6 Apr 2022 12:47:32 +0000 (20:47 +0800)]
[AArch64][InstCombine] Fold MLOAD and zero extensions into MLOAD
Accord the discussion in D122281, we missing an ISD::AND combine for MLOAD
because it relies on BuildVectorSDNode is fails for scalable vectors.
This patch is intend to handle that, so we can circle back the type MVT::nxv2i32
Reviewed By: paulwalker-arm
Differential Revision: https://reviews.llvm.org/D122703
Louis Dionne [Tue, 26 Oct 2021 17:12:12 +0000 (13:12 -0400)]
[libc++] Support arrays in make_shared and allocate_shared (P0674R1)
This patch implements P0674R1, i.e. support for arrays in std::make_shared
and std::allocate_shared.
Co-authored-by: Zoe Carver <z.zoelec2@gmail.com>
Differential Revision: https://reviews.llvm.org/D62641
Shengchen Kan [Wed, 6 Apr 2022 12:34:02 +0000 (20:34 +0800)]
[X86][tablgen] Add three entries manually into the memory folding table
```
{X86::MOVLHPSrr,X86::MOVHPSrm}
{X86::VMOVLHPSZrr,X86::VMOVHPSZ128rm}
{X86::VMOVLHPSrr,X86::VMOVHPSrm}
```
Each of the three pairs has different mnemonic, so we have to add it
manually. This is a follow-up patch for D122477.
Nico Weber [Wed, 6 Apr 2022 12:31:20 +0000 (08:31 -0400)]
[gn build] (manually) port
83a798d4b0e1 (abi_breaking_checks in tests)
Simon Pilgrim [Wed, 6 Apr 2022 11:04:19 +0000 (12:04 +0100)]
[AMDGPU] Regenerate shared-op-cycle.ll test
Simon Pilgrim [Wed, 6 Apr 2022 11:03:49 +0000 (12:03 +0100)]
[AMDGPU] Regenerate pv-packing.ll test
Roman Lebedev [Wed, 6 Apr 2022 10:50:31 +0000 (13:50 +0300)]
[TLI] `TargetLowering::SimplifyDemandedVectorElts()`: narrowing bitcast: fill known zero elts from known src bits
E.g. in
```
%i0 = zext <2 x i8> to <2 x i16>
%i1 = bitcast <2 x i16> to <4 x i8>
```
the `%i0`'s zero bits are known to be `0xFF00` (upper half of every element is known zero),
but no elements are known to be zero, and for `%i1`, we don't know anything about zero bits,
but the elements under `0b1010` mask are known to be zero (i.e. the odd elements).
But, we didn't perform such a propagation.
Noticed while investigating more aggressive `vpmaddwd` formation.
Reviewed By: RKSimon
Differential Revision: https://reviews.llvm.org/D123163
Daniil Kovalev [Wed, 6 Apr 2022 11:08:17 +0000 (14:08 +0300)]
[CodeGen] Place SDNode debug ID declaration under appropriate #if
Place PersistentId declaration under #if LLVM_ENABLE_ABI_BREAKING_CHECKS to
reduce memory usage when it is not needed.
Differential Revision: https://reviews.llvm.org/D120714
Alex Zinenko [Wed, 6 Apr 2022 10:33:24 +0000 (12:33 +0200)]
[mlir] Fix DialectRegistry::addExtension compile error
It appears that the DialectRegistry::addExtension template was never
instantiated because it contains an obvious compilation error. Fix it.
Reviewed By: nicolasvasilache
Differential Revision: https://reviews.llvm.org/D123199
Nathan Sidwell [Tue, 5 Apr 2022 11:55:04 +0000 (04:55 -0700)]
[clang][NFC] Add specificity to compatibility hack
Add specific dates and versions to note about source_location handling.
Reviewed By: aaron.ballman
Differential Revision: https://reviews.llvm.org/D123119
Jeremy Morse [Wed, 6 Apr 2022 10:50:51 +0000 (11:50 +0100)]
[DebugInfo][InstrRef] Avoid a crash from mixed variable location modes
Variable locations now come in two modes, instruction referencing and
DBG_VALUE. At -O0 we pick DBG_VALUE to allow fast construction of variable
information. Unfortunately, SelectionDAG edits the optimisation level in
the presence of opt-bisect-limit, meaning different passes have different
views of what variable location mode we should use. That causes assertions
when they're mixed.
This patch plumbs through a boolean in SelectionDAG from start to
instruction emission, so that we don't rely on the current optimisation
level for correctness.
Differential Revision: https://reviews.llvm.org/D123033
Sven van Haastregt [Wed, 6 Apr 2022 10:43:59 +0000 (11:43 +0100)]
[OpenCL] Remove argument names from math builtins
This simplifies completeness comparisons against OpenCLBuiltins.td and
also makes the header no longer "claim" the argument name identifiers.
Continues the direction set out in D119560.
Alexander Belyaev [Wed, 6 Apr 2022 09:58:21 +0000 (11:58 +0200)]
Revert "Revert "[mlir] Rewrite canonicalization of collapse(expand) and expand(collapse).""
This reverts commit
96e9b6c9dc60946f08399def879a19395bc98107.
Jay Foad [Wed, 6 Apr 2022 09:59:25 +0000 (10:59 +0100)]
[AMDGPU] Add a test for setting WAVESIZE in pixel shaders
Wei Xiao [Wed, 6 Apr 2022 09:28:26 +0000 (17:28 +0800)]
[X86] Add test for smin(x, 0) & smax(x, 0)
Simon Pilgrim [Wed, 6 Apr 2022 09:27:43 +0000 (10:27 +0100)]
[AMDGPU] Regenerate omod.ll tests
Jay Foad [Wed, 6 Apr 2022 09:49:43 +0000 (10:49 +0100)]
[AMDGPU] Add a test for setting EXTRA_LDS_SIZE in pixel shaders
Antonio Frighetto [Wed, 6 Apr 2022 09:01:05 +0000 (10:01 +0100)]
Add support for more archs in `Triple::getArchTypeForLLVMName`
Add support for i386, s390x in Triple::getArchTypeForLLVMName.
Differential Revision: https://reviews.llvm.org/D122003
Roman Sokolkov [Wed, 6 Apr 2022 09:38:07 +0000 (10:38 +0100)]
[docs] Fix Kaleidoscope code example
* replace virtual with override
* use default like in full code example
Differential Revision: https://reviews.llvm.org/D123110
Simon Pilgrim [Wed, 6 Apr 2022 09:37:07 +0000 (10:37 +0100)]
[DAG] Allow XOR(X,MIN_SIGNED_VALUE) to perform AddLike folds
As raised on PR52267, XOR(X,MIN_SIGNED_VALUE) can be treated as ADD(X,MIN_SIGNED_VALUE), so let these cases use the 'AddLike' folds, similar to how we perform no-common-bits OR(X,Y) cases.
define i8 @src(i8 %x) {
%r = xor i8 %x, 128
ret i8 %r
}
=>
define i8 @tgt(i8 %x) {
%r = add i8 %x, 128
ret i8 %r
}
Transformation seems to be correct!
https://alive2.llvm.org/ce/z/qV46E2
Differential Revision: https://reviews.llvm.org/D122754
Matthias Springer [Wed, 6 Apr 2022 09:01:41 +0000 (18:01 +0900)]
[mlir][bufferize][NFC] Clean up ModuleBufferizationState
* Store bbArg indices instead of BlockArguments, so that args can be changed during bufferizationn.
* Use type aliases for better readability.
Differential Revision: https://reviews.llvm.org/D123191
Shengchen Kan [Wed, 6 Apr 2022 09:19:48 +0000 (17:19 +0800)]
[X86] Remove TB_NO_REVERSE for 2 memory folding entries
```
X86::MMX_MOVD64from64rr -> X86::MMX_MOVQ64mr
X86::MMX_MOVD64grr -> X86::MMX_MOVD64mr
```
These two entries were added in llvm-svn: 372770.
I think these two should be reversable.
Reviewed By: RKSimon, pengfei
Differential Revision: https://reviews.llvm.org/D122217
Nicolas Vasilache [Wed, 6 Apr 2022 07:57:03 +0000 (03:57 -0400)]
[mlir][MemRef] Allow transposed layouts in ExpandShapeOp.
https://reviews.llvm.org/D122641 introduced fixes to the ExpandShapeOp verifier
but also introduced an artificial layout limitation that prevents the consideration of transposed layouts.
This revision fixes the omissions and reimplements the logic using saturated arithmetic which is more
idiomatic and avoids leaking internal implementation details.
Tests cases are added for transposed layouts.
Reviewed By: springerm
Differential Revision: https://reviews.llvm.org/D122845
Simon Pilgrim [Wed, 6 Apr 2022 08:18:08 +0000 (09:18 +0100)]
[DAG] SimplifySetCC - relax fold (X^C1) == C2 --> X == C1^C2
https://alive2.llvm.org/ce/z/A_auBq
Remove limitation that wouldn't perform the fold if all the inverted bits are known zero
The thumb2 changes look to be benign, although it does show that the TEQ/TST isel patterns could probably be improved.
Fixes movmsk regression in D122754
Differential Revision: https://reviews.llvm.org/D123023
Nikita Popov [Tue, 5 Apr 2022 13:05:46 +0000 (15:05 +0200)]
[cmake] Remove LLVM_ENABLE_NEW_PASS_MANAGER cmake option
Or rather, error out if it is set to something other than ON. This
removes the ability to enable the legacy pass manager by default,
but does not remove the ability to explicitly enable it through
various flags like -flegacy-pass-manager or -enable-new-pm=0.
I checked, and our test suite definitely doesn't pass with
LLVM_ENABLE_NEW_PASS_MANAGER=OFF anymore.
Differential Revision: https://reviews.llvm.org/D123126
Petr Hosek [Mon, 28 Feb 2022 20:21:11 +0000 (12:21 -0800)]
[CMake][compiler-rt] Make CRT separately buildable
This is useful when building a complete toolchain to ensure that CRT
is built after builtins but before the rest of the compiler-rt.
Differential Revision: https://reviews.llvm.org/D120682
Zi Xuan Wu [Wed, 6 Apr 2022 04:03:21 +0000 (12:03 +0800)]
[CSKY] Add atomic expand pass to support atomic operation with libcall
For now, just support atomic operations by libcall. Further, should investigate atomic
implementation in CSKY target and codegen with atomic and fence related instructions.
Martin Storsjö [Thu, 10 Mar 2022 09:06:27 +0000 (11:06 +0200)]
[libcxx] [test] Remove UNSUPPORTED markings for mingw issues that no longer are present in CI
Differential Revision: https://reviews.llvm.org/D123146
Martin Storsjö [Tue, 5 Apr 2022 08:34:05 +0000 (11:34 +0300)]
Fix warnings about variables that are set but only used in debug mode
Add void casts to mark the variables used, next to the places where
they are used in assert or `LLVM_DEBUG()` expressions.
Differential Revision: https://reviews.llvm.org/D123117
Petr Hosek [Wed, 6 Apr 2022 07:01:06 +0000 (00:01 -0700)]
Revert "[CMake][compiler-rt] Make CRT separately buildable"
This reverts commit
b89b18e350e11efc599f6ce2bb55cbec89a0efe1 since
it broke the sanitizer bots.
Petr Hosek [Mon, 28 Feb 2022 20:21:11 +0000 (12:21 -0800)]
[CMake][compiler-rt] Make CRT separately buildable
This is useful when building a complete toolchain to ensure that CRT
is built after builtins but before the rest of the compiler-rt.
Differential Revision: https://reviews.llvm.org/D120682
Shengchen Kan [Wed, 6 Apr 2022 04:52:18 +0000 (12:52 +0800)]
[X86][tablgen] Consider the mnemonic when auto-generating memory folding table
Intuitively, the memory folding pair should have the same mnemonic.
This patch removes
```
{X86::SENDUIPI,X86::VMXON}
```
in the auto-generated table.
And `NotMemoryFoldable` for `TPAUSE` and `CLWB` can be saved.
```
{X86::MOVLHPSrr,X86::MOVHPSrm}
{X86::VMOVLHPSZrr,X86::VMOVHPSZ128rm}
{X86::VMOVLHPSrr,X86::VMOVHPSrm}
```
It seems the three pairs above are mistakenly killed.
But we can add them back manually later.
Reviewed By: Amir
Differential Revision: https://reviews.llvm.org/D122477
Argyrios Kyrtzidis [Wed, 6 Apr 2022 04:47:45 +0000 (21:47 -0700)]
[lldb/source/Utility/DataExtractor.cpp] Update for `llvm::MD5::MD5Result` API change
Argyrios Kyrtzidis [Mon, 4 Apr 2022 23:48:30 +0000 (16:48 -0700)]
[Support/Hash functions] Change the `final()` and `result()` of the hashing functions to return an array of bytes
Returning `std::array<uint8_t, N>` is better ergonomics for the hashing functions usage, instead of a `StringRef`:
* When returning `StringRef`, client code is "jumping through hoops" to do string manipulations instead of dealing with fixed array of bytes directly, which is more natural
* Returning `std::array<uint8_t, N>` avoids the need for the hasher classes to keep a field just for the purpose of wrapping it and returning it as a `StringRef`
As part of this patch also:
* Introduce `TruncatedBLAKE3` which is useful for using BLAKE3 as the hasher type for `HashBuilder` with non-default hash sizes.
* Make `MD5Result` inherit from `std::array<uint8_t, 16>` which improves & simplifies its API.
Differential Revision: https://reviews.llvm.org/D123100
Evgeniy Brevnov [Tue, 25 Jan 2022 06:17:57 +0000 (13:17 +0700)]
Preserve aliasing info during memory intrinsics lowering
By specification, source and destination of llvm.memcpy.* must either be equal or non-overlapping. This semantics is hard or impossible to figure out once lowered. This patch explicitly marks loads from source and stores to destination as not aliasing if source and destination is known to be not equal.
Reviewed By: arsenm
Differential Revision: https://reviews.llvm.org/D118441
Zi Xuan Wu [Wed, 6 Apr 2022 04:16:38 +0000 (12:16 +0800)]
[NFC][CSKY] Fix the test error in toolchain case in windows by add UNSUPPORTED: system-windows
Johannes Doerfert [Wed, 16 Mar 2022 20:53:32 +0000 (15:53 -0500)]
[Attributor] Introduce AAInstanceInfo
The Attributor, as many other parts in LLVM, uses pointer equivalence
for `llvm::Value`s. This only works as long as `llvm::Value`s are
dynamically unique, or, to be exact, we will never end up with the same
`llvm::Value` representing two dynamic instances. We already provided a
helper to check the former, namely `AA::isDynamicallyUnique`, however we
could not check the latter. In this patch we move the logic into a
separate AA which helps with the growing complexity and use cases. We
also extend the interface to answer the second question rather than the
first. So we do not determine dynamically uniqueness but if we might end
up with the `llvm::Value` describing a different dynamic instance. Note
that the latter is very much tied to the Attributor capabilities to look
through memory, recursion, etc. so we need to update the logic as we go.
Johannes Doerfert [Tue, 15 Mar 2022 17:32:28 +0000 (12:32 -0500)]
[Attributor] Keep loads feeding in `llvm.assume` if stores stays
If a load is only used by an `llvm.assume` and the stores feeding into
the load are not removable, keep the load.
LLVM GN Syncbot [Wed, 6 Apr 2022 03:38:24 +0000 (03:38 +0000)]
[gn build] Port
97e496054a37
Zi Xuan Wu [Tue, 29 Mar 2022 08:18:10 +0000 (16:18 +0800)]
[Clang][CSKY] Add the CSKY target and compiler driver
Add CSKY target toolchains to support csky in linux and elf environment.
It can leverage the basic universal Linux toolchain for linux environment, and only add some compile or link parameters.
For elf environment, add a CSKYToolChain to support compile and link.
Also add some parameters into basic codebase of clang driver.
Differential Revision: https://reviews.llvm.org/D121445