409092 Commits

Author SHA1 Message Date
Sanjay Patel
0edf99950e [Analysis] allow caller to choose signed/unsigned when computing constant range
We should not lose analysis precision if an 'add' has both no-wrap
flags (nsw and nuw) compared to just one or the other.

This patch is modeled on a similar construct that was added with
D59386.

I don't think it is possible to expose a problem with an unsigned
compare because of the way this was coded (nuw is handled first).

InstCombine has an assert that fires with the example from:
https://github.com/llvm/llvm-project/issues/52884
...because it was expecting InstSimplify to handle this kind of
pattern with an smax.

Fixes #52884

Differential Revision: https://reviews.llvm.org/D116322
2021-12-28 09:45:37 -05:00
Sanjay Patel
aaeae842ef [InstSimplify] add tests for icmp with no-wrap add operand; NFC 2021-12-28 09:45:37 -05:00
Florian Hahn
c2275278c6
[VPlan] Add abstract base class for header phi recipes (NFC).
Not all header phis widen the phi, e.g. like the new
VPCanonicalIVPHIRecipe in D113223. To let those recipes also inherit
from a phi-like base class, add a more generic VPHeaderPHIRecipe
abstract base class.

Reviewed By: Ayal

Differential Revision: https://reviews.llvm.org/D116304
2021-12-28 15:37:47 +01:00
Nikita Popov
693b1f1e1b [InstCombine] Skip some GEP folds under opaque pointers
In their current form, these folds are fundamentally incompatible
with opaque pointers. We should add a separate set of folds for
the canonicalization of the GEP source type. For now, skip these
folds.
2021-12-28 15:32:11 +01:00
Nikita Popov
e6f31f4e51 [InstCombine] Use GEP type instead of pointee type
The GEP source type is independent of whether it is a scalar or
vector GEP, as such we can simply preserve it.
2021-12-28 14:57:43 +01:00
Nikita Popov
3bfe0962ba [ConstFold] Add another icmp of gep of global test (NFC)
This time with some complex arithmetic involving bitcasts.
2021-12-28 14:28:28 +01:00
Nikita Popov
054f8d86fc [Assembler] Regenerate test checks (NFC)
Switch this Assembler test to use utc by adding a dummy function
and opt run line.
2021-12-28 14:20:29 +01:00
Nikita Popov
23de66d163 [ConstFold] Don't fold signed comparison of gep of global
An inbounds GEP may still cross the sign boundary, so signed icmps
cannot be folded (https://alive2.llvm.org/ce/z/XSgi4D). This was
previously fixed for other folds in this function, but this one
was missed.
2021-12-28 14:13:33 +01:00
Nikita Popov
1bd11d34fe [ConstFold] Add additional icmp of gep of global tests (NFC)
The fold is incorrect for the sgt case, as gep inbounds is allowed
to cross the sign boundary.
2021-12-28 14:07:15 +01:00
Nikita Popov
7d850a0c4d [InstCombine] Make indexed compare fold opaque ptr compatible
We need to make sure that the GEP source element types match.

A caveat here is that the used GEP source element type can be
arbitrary if no offset is stripped from the original GEP -- the
transform is somewhat inconsistent in that it always starts from
a GEP, but might not actually look through it if it has multiple
indices.
2021-12-28 11:47:20 +01:00
Florian Hahn
c66286ed59
[LV] Use specific first-order recurrence recipe as arg type (NFC).
Required for further refactoring in D116304.
2021-12-28 10:58:21 +01:00
Kazu Hirata
d09a284dfb [CodeGen] Drop unnecessary const from return types (NFC)
Identified with readability-const-return-type.
2021-12-28 00:38:11 -08:00
Nikita Popov
30a12f3f63 [InstCombine] Fix GEP with same index comparison with opaque pointers
We need to also check that the source element type is the same,
otherwise the indices may have different meaning. The added
addrspacecast demonstrates that we do still need to check the
pointer type.
2021-12-28 09:23:28 +01:00
Chuanqi Xu
7c9fb58cac [NFC] [Coroutines] Add tests for coro-split-musttail
Add two tests to address the problems during marking coro.resume
calls as musttail. The two problems are bitcast instruction and unused
instruciton respectively.
2021-12-28 16:20:06 +08:00
LLVM GN Syncbot
0819234033 [gn build] Port b5c5d8912e07 2021-12-28 07:59:27 +00:00
Stanislav Gatev
b5c5d8912e [clang][dataflow] Add support for noreturn destructor calls
This is part of the implementation of the dataflow analysis framework.
See "[RFC] A dataflow analysis framework for Clang AST" on cfe-dev.

Reviewed By: xazax.hun, gribozavr2

Differential Revision: https://reviews.llvm.org/D116022
2021-12-28 07:04:39 +00:00
Fangrui Song
49f646a9ed [ELF] Change EhInputSection::pieces to SmallVector
The decreased size does not matter that much as one file contributes at most one EhInputSection.
2021-12-27 21:34:38 -08:00
Kazu Hirata
6c335b1a45 [clang] Remove unused "using" (NFC)
Identified by misc-unused-using-decls.
2021-12-27 20:48:21 -08:00
Fangrui Song
cb203f3f92 [ELF] Change InStruct/Partition pointers to unique_ptr
and remove associated make<XXX> calls.
gnuHash and sysvHash are unchanged, otherwise LinkerScript::discard would
destroy the objects which may be referenced by input section descriptions.

My x86-64 lld executable is 121+KiB smaller.
2021-12-27 18:15:23 -08:00
Hsiangkai Wang
a1c7ddf926 [RISCV] Support passing scalable vectur values through the stack.
After consuming all vector registers, the scalable vector values will be
passed indirectly. The pointer values will be saved in general
registers. If all general registers are used up, we will report an error to
notify users the compiler does not support passing scalable vector
values through the stack. In this patch, we remove the restriction. After
all general registers are used up, we use the stack to save the
pointers which point to the indirect passed scalable vector values.

Differential Revision: https://reviews.llvm.org/D116310
2021-12-28 09:26:36 +08:00
Fangrui Song
049cd480a0 [ELF] Use const reference. NFC 2021-12-27 17:05:48 -08:00
Kazu Hirata
8445883327 [llvm] Drop unnecessary const from return types (NFC)
Identified with readability-const-return-type.
2021-12-27 15:58:03 -08:00
Fangrui Song
3c94d5d9d2 [ELF] addOrphanSections: avoid std::function 2021-12-27 15:57:38 -08:00
Kazu Hirata
fb28d6fb5f [DebugInfo] Drop unnecessary const from return types (NFC)
Identified with readability-const-return-type.
2021-12-27 15:42:52 -08:00
Kazu Hirata
0c9a4da497 [ASTMatchers] Simplify string comparisons (NFC)
Identified with readability-string-compare.
2021-12-27 15:32:51 -08:00
Kazu Hirata
5161060559 [llvm] Fix header guards (NFC)
Identified with llvm-header-guard.
2021-12-27 15:20:12 -08:00
Fangrui Song
b8a4780032 [ELF] Simplify and optimize SymbolTableSection<ELFT>::writeTo 2021-12-27 15:16:14 -08:00
Craig Topper
10129fe861 [RISCV] Fix type in f16 and f64 version of lrint/llrint/lround/llround test cases. NFC
Due to a copy/paste mistake we were always testing float.

This required splitting up the f16 tests into separate files since
we don't have an appropriate libcall to use when the types involved
aren't legal.
2021-12-27 14:59:23 -08:00
Craig Topper
5c38b584e5 [RISCV] Rename two tests to reflect extension being tested. NFC 2021-12-27 14:44:34 -08:00
Joseph Huber
6e220296d7 [OpenMP] Use alignment information in HeapToShared
This patch uses the return alignment attribute now present in the
`__kmpc_alloc_shared` runtime call to set the alignment of the shared
memory global created to replace it.

Depends on D115971

Reviewed By: jdoerfert

Differential Revision: https://reviews.llvm.org/D116319
2021-12-27 16:58:27 -05:00
Joseph Huber
7cdaa5a94e [OpenMP][FIX] Change globalization alignment to 16
This patch changes the default aligntment from 8 to 16, and encodes this
information in the `__kmpc_alloc_shared` runtime call to communicate it
to the HeapToStack pass. The previous alignment of 8 was not sufficient
for the maximum size of primitive types on 64-bit systems, and needs to
be increaesd. This reduces the amount of space availible in the data
sharing stack, so this implementation will need to be improved later to
include the alignment requirements in the allocation call, and use it
properly in the data sharing stack in the runtime.

Depends on D115888

Reviewed By: jdoerfert

Differential Revision: https://reviews.llvm.org/D115971
2021-12-27 16:58:25 -05:00
Joseph Huber
38fc89623b [Attributor][Fix] Add alignment return attribute to HeapToStack
This patch changes the HeapToStack optimization to attach the return alignment
attribute information to the created alloca instruction. This would cause
problems when replacing the heap allocation with an alloca did not respect the
alignment of the original heap allocation, which would typically be aligned on
an 8 or 16 byte boundary. Malloc calls now contain alignment attributes,
so we can use that information here.

Reviewed By: jdoerfert

Differential Revision: https://reviews.llvm.org/D115888
2021-12-27 16:58:23 -05:00
Fangrui Song
80c14dcc0e [ELF] Delete stale declaration. NFC 2021-12-27 12:56:38 -08:00
Fangrui Song
e590c9bc73 [ELF] -r: move zero OutputSection::addr code into finalizeAddressDependentContent
Ensure addresses are unchanged after finalizeAddressDependentContent.
2021-12-27 12:10:23 -08:00
Gulfem Savrun Yeniceri
f261e258ec [profile] Fix writing binary id into profiles
This patch adds support to read all the PT_NOTE segments in the
executable to find the binary ids. Previously, it was only reading
the first PT_NOTE segment, and this was missing the cases where
binary id is in the following segments. As a result, binary-id.c
and binary-id-padding.c test were failing in the following cases:
1) sanitizer-x86_64-linux bot
   https://lab.llvm.org/staging/#/builders/97
2) OpenSuse Tumbleweed
   https://github.com/llvm/llvm-project/issues/52695

Differential Revision: https://reviews.llvm.org/D115830
2021-12-27 19:20:19 +00:00
Sanjay Patel
773ab3c665 [Analysis] remove unneeded casts; NFC
The callee does the casting too; this matches a plain call later in the same function for 'shl'.
2021-12-27 13:41:50 -05:00
Sanjay Patel
c49dcb4830 [InstCombine] add tests for shuffle + binop; NFC 2021-12-27 13:41:50 -05:00
Shilei Tian
a697a0a4b6 [OpenMP][Plugin] Introduce generic resource pool
Currently CUDA streams are managed by `StreamManagerTy`. It works very well. Now
we have the need that some resources, such as CUDA stream and event, will be
hold by `libomptarget`. It is always good to buffer those resources. What's more
important, given the way that `libomptarget` and plugins are connected, we cannot
make sure whether plugins are still alive when `libomptarget` is destroyed. That
leads to an issue that those resouces hold by `libomptarget` might not be
released correctly. As a result, we need an unified management of all the resources
that can be shared between `libomptarget` and plugins.

`ResourcePoolTy` is designed to manage the type of resource for one device.
It has to work with an allocator which is supposed to provide `create` and
`destroy`. In this way, when the plugin is destroyed, we can make sure that
all resources allocated from native runtime library will be released correctly,
no matter whether `libomptarget` starts its destroy.

Reviewed By: ye-luo

Differential Revision: https://reviews.llvm.org/D111954
2021-12-27 11:32:14 -05:00
Alexey Bataev
7171af7445 [SLP][NFC]Add a test for shuffled entries with different vector sizes,
NFC.
2021-12-27 07:35:35 -08:00
David Green
2ec3ca7477 [ARM] Extend IsCMPZCSINC to handle CMOV
A 'CMOV 1, 0, CC, %cpsr, Cmp' is the same as a 'CSINC 0, 0, CC, Cmp',
and can be treated the same in IsCMPZCSINC added in D114013. This allows
us to remove the unnecessary CMOV in the same way that we could remove a
CSINC.

Differential Revision: https://reviews.llvm.org/D115188
2021-12-27 14:15:03 +00:00
Nikita Popov
d122d91e37 [InstCombine] Fix GEP of GEP fold with opaque pointers
We need to check that result and source element types match, as
this is no longer automatically enforced with opaque pointers.
2021-12-27 14:56:41 +01:00
Nikita Popov
de2ed8e38e [InstCombine] Extract GEP of GEP fold into separate function
This change may not be entirely NFC, because a number of early
returns will now only early return from this particular fold,
rather than the whole visitGetElementPtr() implementation. This
is also the reason why I'm doing this change, as I don't think
this was intended.
2021-12-27 14:52:11 +01:00
Groverkss
5f22f248d8 [MLIR] Use IntegerPolyhedron in Simplex instead of FlatAffineConstraints
This patch replaces usage of FlatAffineConstraints in Simplex with
IntegerPolyhedron. This removes dependency of Simplex on FlatAffineConstraints
and puts it on IntegerPolyhedron, which is part of Presburger library.

Reviewed By: arjunp

Differential Revision: https://reviews.llvm.org/D116287
2021-12-27 19:06:35 +05:30
Simon Pilgrim
a0a0eb192e [X86] Use WriteVecMove scheduler classes for VPMOVM2* instructions
These match the port behaviour of reg-reg predicated xmm/ymm/zmm moves

Fixes #34958
2021-12-27 13:21:29 +00:00
Groverkss
3f22d492ac [MLIR] Move print() and dump() from FlatAffineConstraints to IntegerPolyhedron.
This patch moves `FlatAffineConstraints::print` and
`FlatAffineConstraints::dump()` to IntegerPolyhedron.

Reviewed By: arjunp

Differential Revision: https://reviews.llvm.org/D116289
2021-12-27 18:40:49 +05:30
Anton Daubert
ba89c6d505 Fix forward for "signed version of createExpression"
Fix forward for "signed version of createExpression" change in ec501f15a8

Reviewed By: bgraur, achieveartificialintelligence

Differential Revision: https://reviews.llvm.org/D116301
2021-12-27 13:51:59 +01:00
Chuanqi Xu
1ef3f83ef2 [NFC] [Coroutines] Add tests to address the problem for converting to musttail
call

Add two tests to address the problem for missing oppotunities to convert
calls to musttail call.
2021-12-27 20:27:31 +08:00
Simon Pilgrim
29475e0286 [X86] Add scheduler classes for zmm vector reg-reg move instructions
Basic zmm reg-reg moves (with predication) are more port limited than xmm/ymm moves, so we need to add a separate class for them.

We still appear to be missing move-elimination patterns for most of the intel models, which looks to be one of the main diffs for basic codegen analysis between llvm-mca and uops.info

Load/stores are a bit messier and might be better handled as overrides.
2021-12-27 12:13:42 +00:00
Nikita Popov
3e65861131 [CodeGen] Avoid one more pointer element type access
The number of elements is always a SizeTy here.
2021-12-27 12:58:22 +01:00
Simon Pilgrim
948ae472a6 [MCA][X86] Add AVX512 vector move instruction test coverage 2021-12-27 11:43:39 +00:00