Mats Petersson [Fri, 19 Aug 2022 16:45:35 +0000 (17:45 +0100)]
[FLANG][NFCI]De-duplicate code in SimplifyIntrinsics
This removes a bunch of duplicated code, by adding an intermediate
function simplifyReduction that takes a std::function argument
for the actual replacement of the code.
No functional change intended.
Reviewed By: vzakhari
Differential Revision: https://reviews.llvm.org/D132588
Nikita Popov [Fri, 2 Sep 2022 09:35:26 +0000 (11:35 +0200)]
[LICM] Add test for missed load promotion opportunity (NFC)
Chuanqi Xu [Fri, 2 Sep 2022 08:13:05 +0000 (16:13 +0800)]
[NFC] Cleanup lookup for coroutine allocation/deallocation
Nicolas Vasilache [Thu, 1 Sep 2022 12:47:32 +0000 (05:47 -0700)]
[mlir][Vector] Refactor vector distribution and fix an issue related to non-homogenous transfer indices.
Running: `mlir-opt -test-vector-warp-distribute=rewrite-warp-ops-to-scf-if -canonicalize -verify-each=0`.
Prior to this revision, IR resembling the following would be produced:
```
%4 = "vector.load"(%3, %arg0) : (memref<1x32xf32, 3>, index) -> vector<1x1xf32>
```
This fails verification since it needs 2 indices to load but only 1 is provided.
Differential Revision: https://reviews.llvm.org/D133106
Christian Sigg [Fri, 26 Aug 2022 10:04:32 +0000 (12:04 +0200)]
[MLIR] Remove unused config attributes from lit.site.cfg.py
Reviewed By: herhut
Differential Revision: https://reviews.llvm.org/D132726
Andrey Tretyakov [Sun, 28 Aug 2022 23:19:14 +0000 (02:19 +0300)]
[SPIRV] Add tests to improve test coverage
Differential Revision: https://reviews.llvm.org/D132817
Adrian Kuegel [Fri, 2 Sep 2022 08:57:28 +0000 (10:57 +0200)]
[mlir][Linalg] Apply ClangTidy performance finding.
Loop variable is copied but only used as const reference.
Sinan Lin [Fri, 2 Sep 2022 08:16:23 +0000 (16:16 +0800)]
[cmake] Append CLANG_LIBDIR_SUFFIX to scan-build-py installation destination
met this issue when building llvm with config LLVM_LIBDIR_SUFFIX=64, and
the installation destination of scan-build-py does not respect the given
suffix.
Reviewed By: phosek
Differential Revision: https://reviews.llvm.org/D133160
Freddy Ye [Fri, 2 Sep 2022 03:53:43 +0000 (11:53 +0800)]
[X86] Add missing key feature for core2
Reviewed By: erichkeane
Differential Revision: https://reviews.llvm.org/D133094
Valentin Clement [Fri, 2 Sep 2022 07:46:01 +0000 (09:46 +0200)]
[flang] Avoid copyin/copyout if the actual argument is contiguous at runtime
This patch adds contiguity check with the runtime to avoid copyin/copyout
in case the actual argument is actually contiguous.
Reviewed By: jeanPerier
Differential Revision: https://reviews.llvm.org/D133097
Nikita Popov [Fri, 2 Sep 2022 07:28:48 +0000 (09:28 +0200)]
Revert "[DSE] Eliminate noop store even through has clobbering between LoadI and StoreI"
This reverts commit
cd8f3e75813995c1d2da35370ffcf5af3aff9c2f.
As pointed out by Eli on the review, this is missing an alignment
check. The value might be written at an offset.
Nikita Popov [Thu, 1 Sep 2022 12:33:55 +0000 (14:33 +0200)]
[LICM] Allow load-only scalar promotion in the presence of unwinding
Currently, we bail out of scalar promotion if the loop may unwind
and the memory may be visible on unwind. This is because we can't
insert stores of the promoted value on unwind edges.
However, nowadays scalar promotion also has support for only
promoting loads, while leaving stores in place. This kind of
promotion is safe even in the presence of unwinding.
Differential Revision: https://reviews.llvm.org/D133111
luxufan [Wed, 24 Aug 2022 13:51:58 +0000 (13:51 +0000)]
[DSE] Eliminate noop store even through has clobbering between LoadI and StoreI
For noop store of the form of LoadI and StoreI,
An invariant should be kept is that the memory state of the related
MemoryLoc before LoadI is the same as before StoreI.
For this example:
```
define void @pr49927(i32* %q, i32* %p) {
%v = load i32, i32* %p, align 4
store i32 %v, i32* %q, align 4
store i32 %v, i32* %p, align 4
ret void
}
```
Here the definition of the store's destination is different with the
definition of the load's destination, which it seems that the
invariant mentioned above is broken. But the definition of the
store's destination would write a value that is LoadI, actually, the
invariant is still kept. So we can safely ignore it.
Differential Revision: https://reviews.llvm.org/D132657
Lang Hames [Fri, 2 Sep 2022 06:16:45 +0000 (23:16 -0700)]
[ORC-RT] Fix typo.
Removes the stray '$' that slipped in to
c1c585a065e5.
Lang Hames [Fri, 2 Sep 2022 05:42:39 +0000 (22:42 -0700)]
[ORC-RT] Don't unconditionally add dependence on llvm-jitlink.
Commit
4adc5bead4a moved a dependence on llvm-jitlink from
SANITIZER_COMMON_LIT_TEST_DEPS to ORC_TEST_DEPS, but in doing so it moved it
out from under a 'NOT COMPILER_RT_STANDALONE_BUILD ...' conditional. This led
to failures on standalone builds.
This commit adds the conditional to the ORC_TEST_DEPS assignment to work
around the issue while we look a longer term fix.
rdar://
99453446
Aart Bik [Fri, 2 Sep 2022 00:18:56 +0000 (17:18 -0700)]
[mlir][sparse] codegen for sparse dealloc
Reviewed By: bixia
Differential Revision: https://reviews.llvm.org/D133171
Craig Topper [Thu, 1 Sep 2022 23:22:57 +0000 (16:22 -0700)]
[RISCV] Rename some V extension multiclasses for consistency. NFC
Use "SDNode" in the name is the convention for the VLMax patterns
in RISCVInstrInfoVSDPatterns.td. This files use "VL".
Kazu Hirata [Fri, 2 Sep 2022 05:14:25 +0000 (22:14 -0700)]
[lldb] Fix a warning
This patch fixes:
lldb/source/Plugins/Instruction/RISCV/EmulateInstructionRISCV.h:51:5:
error: default label in switch which covers all enumeration values
[-Werror,-Wcovered-switch-default]
Aart Bik [Fri, 2 Sep 2022 01:44:48 +0000 (18:44 -0700)]
[mlir][sparse] codegen for trivial tensor cast
Reviewed By: bixia
Differential Revision: https://reviews.llvm.org/D133176
Fangrui Song [Fri, 2 Sep 2022 04:34:56 +0000 (21:34 -0700)]
[AArch64InstPrinter] Add some `<reg:...>` for llvm-mc --mdis output
Antonio Frighetto [Fri, 2 Sep 2022 04:04:34 +0000 (21:04 -0700)]
[X86InstPrinter] Introduce markup tags emission
x86 assembly syntax emission now leverages markup tags, if enabled.
Differential Revision: https://reviews.llvm.org/D129869
Antonio Frighetto [Fri, 2 Sep 2022 03:58:42 +0000 (20:58 -0700)]
[AArch64InstPrinter] Introduce immediate markup tags emission
AArch64 assembly syntax emission now leverages markup tags for immediates, if enabled.
Reviewed By: MaskRay
Differential Revision: https://reviews.llvm.org/D129871
Lang Hames [Thu, 1 Sep 2022 23:07:38 +0000 (16:07 -0700)]
[ORC][ORC-RT] Consistently use pointed-to type as template arg to wrap/unwrap.
Saves wrap/unwrap implementers from having to use std::remove_pointer_t to get
at the pointed-to type.
Antonio Frighetto [Fri, 2 Sep 2022 03:52:08 +0000 (20:52 -0700)]
[MipsInstPrinter] Introduce markup tags emission
MIPS assembly syntax emission now leverages markup tags, if enabled.
Reviewed By: MaskRay
Differential Revision: https://reviews.llvm.org/D129867
Chenbing Zheng [Fri, 2 Sep 2022 03:13:54 +0000 (11:13 +0800)]
[InstCombine] Precommit tests for umul_with_overflow. nfc
Vitaly Buka [Thu, 1 Sep 2022 04:49:15 +0000 (21:49 -0700)]
[msan] Fix debug info with getNextNode
When we want to add instrumentation after
an instruction, instrumentation still should
keep debug info of the instruction.
Reviewed By: kda, kstoimenov
Differential Revision: https://reviews.llvm.org/D133091
Chenbing Zheng [Fri, 2 Sep 2022 02:58:42 +0000 (10:58 +0800)]
[InstCombine] complete fold extractvalue (any_mul_with_overflow X, -1)
When we do extractvalue (any_mul_with_overflow X, -1) --> (-X and icmp),
which left partly failed to match vector constant with poison element.
This patch try to fix it.
Alive2: https://alive2.llvm.org/ce/z/2rGp_3
Reviewed By: spatel
Differential Revision: https://reviews.llvm.org/D132996
Vitaly Buka [Fri, 2 Sep 2022 02:02:25 +0000 (19:02 -0700)]
[msan] Use no-origin functions when possible
Saves 1.8% of .text size on CTMark
Reviewed By: kda
Differential Revision: https://reviews.llvm.org/D133077
Emmmer [Sat, 27 Aug 2022 14:40:02 +0000 (22:40 +0800)]
[LLDB][RISCV] Add more instruction decode and execute for EmulateInstructionRISCV
Add:
- most of instructions from RVI base instructions set.
- some instruction decode tests from objdump.
Further work:
- implement riscv imac extension.
Reviewed By: DavidSpickett
Differential Revision: https://reviews.llvm.org/D132789
Chenbing Zheng [Fri, 2 Sep 2022 02:04:52 +0000 (10:04 +0800)]
[NFC] fix typo
Vitaly Buka [Fri, 2 Sep 2022 02:00:28 +0000 (19:00 -0700)]
[test][msan] Add implicit-check-not rename some prefixes
Katherine Rasmussen [Sat, 14 May 2022 04:41:21 +0000 (21:41 -0700)]
[flang] Add lcobound and ucobound to the list of intrinsics
Add the coarray intrinsic functions, lcobound and ucobound, to the
list of intrinsics. For both of these functions, add a check to
ensure that if the optional dim argument is present and statically
checkable, its value is in the inclusive range of 1 and the corank
of the coarray argument. In the semantics tests for lcobound and
ucobound, remove the XFAIL directive, add the ERROR directives and
add additional standard-conforming and non-standard conforming
calls.
Reviewed By: klausler, craig.rasmussen
Differential Revision: https://reviews.llvm.org/D126721
Adrian Prantl [Wed, 31 Aug 2022 23:14:09 +0000 (16:14 -0700)]
Fix inconsistent target arch when attaching to arm64 binaries on
arm64e platforms.
On arm64e-capable Apple platforms, the system libraries are always
arm64e, but applications often are arm64. When a target is created
from file, LLDB recognizes it as an arm64 target, but debugserver will
still (technically correct) report the process as being arm64e. For
consistency, set the target to arm64 here.
rdar://
92248684
Differential Revision: https://reviews.llvm.org/D133069
Aart Bik [Thu, 1 Sep 2022 19:34:58 +0000 (12:34 -0700)]
[mlir][sparse] added codegen for dimop, pointers, indices, values
Demonstrates how sparse tensor type -> tuple -> getter
will eventually yield actual code on the memrefs directly
Reviewed By: Peiming
Differential Revision: https://reviews.llvm.org/D133143
Artem Belevich [Thu, 1 Sep 2022 18:24:35 +0000 (11:24 -0700)]
[CUDA] Allow using -o with -fsyntax-only
-fsyntax-only breaks down CUDA compilation pipeline and make it look like
multiple independent subcompilations and that trips the multiple arguments check
when -o is specified.
We do want to allow -fsyntax-only to be used with otherwise unmodified clang
options as it's commonly used by various tooling.
Differential Revision: https://reviews.llvm.org/D133133
Peiming Liu [Thu, 1 Sep 2022 17:06:31 +0000 (17:06 +0000)]
[mlir][sparse] Add SparseTensorStorageExpansion Pass to expand compounded sparse tensor tuples
This patch adds SparseTensorStorageExpansion pass, it flattens the tuple used to store a sparse
tensor handle.
Right now, it only set up the skeleton for the pass, more lowering rules for sparse tensor storage
operation need to be added.
Reviewed By: aartbik
Differential Revision: https://reviews.llvm.org/D133125
Slava Zakharin [Thu, 1 Sep 2022 19:33:39 +0000 (12:33 -0700)]
[flang] Make use of do variable more consistent.
Instead of using the IV block argument of the do-loop we will use
the do-variable value loaded from its location. This usage is consistent
with other uses of the do-variable inside the loop.
Differential Revision: https://reviews.llvm.org/D133140
Alex Brachet [Thu, 1 Sep 2022 22:35:42 +0000 (22:35 +0000)]
[clang] Give better message for unsupported no_sanitize on globals
Previously if you specified no_sanitize("known_sanitizer") on a global you
would yield a misleading error "'no_sanitize' attribute only applies to
functions and methods", but no_sanitize("unknown") would simply be a warning,
"unknown sanitizer 'unknown' ignored". This changes the former to a warning
"'no_sanitize' attribute argument not supported for globals: known_sanitizer".
Differential Revision: https://reviews.llvm.org/D133117
Arthur Eubanks [Wed, 31 Aug 2022 18:17:10 +0000 (11:17 -0700)]
[InstCombine] Treat passing undef to noundef params as UB
Reviewed By: nikic
Differential Revision: https://reviews.llvm.org/D133036
Rob Suderman [Thu, 1 Sep 2022 21:10:19 +0000 (14:10 -0700)]
[mlir][tosa] Add remaining tosa comparison folders
Added numerical splat folders for comparison operations and
equal of two identical int values.
Reviewed By: NatashaKnk
Differential Revision: https://reviews.llvm.org/D133138
Tue Ly [Thu, 1 Sep 2022 18:30:51 +0000 (14:30 -0400)]
[libc][NFC] Use cpp::optional for checking exceptional values of math functions.
Update the utility functions for checking exceptional values of math
functions to use cpp::optional return values.
Reviewed By: sivachandra
Differential Revision: https://reviews.llvm.org/D133134
Rong Xu [Thu, 1 Sep 2022 21:13:50 +0000 (14:13 -0700)]
[PGO] Support PGO annotation of CallBrInst
We currently instrument CallBrInst but do not annotate it with
the branch weight. This patch enables PGO annotation of CallBrInst.
Differential Revision: https://reviews.llvm.org/D133040
Arpad Borsos [Thu, 1 Sep 2022 21:05:13 +0000 (14:05 -0700)]
[llvm-objdump][COFF] Correctly decode `UOP_Epilog` opcodes
At least `ntdll` is using the undocumented version 2 unwind info, and opcode 6, which is already defined as `UOP_Epilog`.
Using `llvm-objdump --unwind` with `ntdll` would previously result in unreachable assertions because this code was missing from `getNumUsedSlots` and `getUnwindCodeTypeName`.
The slots of these codes comes from https://github.com/dotnet/runtime/blob/
57bfe474518ab5b7cfe6bf7424a79ce3af9d6657/src/coreclr/inc/win64unwind.h#L51-L52 which I would assume is a good authoritative source.
Reviewed By: MaskRay
Differential Revision: https://reviews.llvm.org/D107655
Kevin Athey [Wed, 19 Jan 2022 00:04:05 +0000 (16:04 -0800)]
[MSAN] removing redundant tests and parameters (NFC)
Reviewed By: vitalybuka
Differential Revision: https://reviews.llvm.org/D117622
Vitaly Buka [Wed, 31 Aug 2022 23:58:32 +0000 (16:58 -0700)]
[msan] Combine shadow check of the same instruction
Reduces .text size by 1% on our large binary.
On CTMark (-O2 -fsanitize=memory -fsanitize-memory-use-after-dtor -fsanitize-memory-param-retval)
Size -0.4%
Time -0.8%
Reviewed By: kda
Differential Revision: https://reviews.llvm.org/D133071
Aleksandr Platonov [Thu, 1 Sep 2022 18:51:25 +0000 (21:51 +0300)]
[clangd] Fix tests for implicit C function declaration
clangd code fixes at D122983 were not right.
We need to check that clangd provides IncludeFixer fixits for implicit function declaration even if this is not an error (e.g. implicit function declaration in C89).
Reviewed By: sammccall
Differential Revision: https://reviews.llvm.org/D133043
Lang Hames [Thu, 1 Sep 2022 19:26:47 +0000 (12:26 -0700)]
[JITLink] Sink ELFX86RelocationKind into implementation file (ELF_x86_64.cpp).
The ELF/x86-64 backend uses the generic x86_64 edges now, so the
ELFX86RelocationKind is just an implementation detail.
Sanjay Patel [Thu, 1 Sep 2022 19:58:20 +0000 (15:58 -0400)]
[SCCP][PhaseOrdering] add tests for sdiv/srem range transforms; NFC
issue #57472
Zequan Wu [Wed, 31 Aug 2022 21:45:27 +0000 (14:45 -0700)]
[LLDB][NativePDB] Fix a minor bug.
llvm::codeview::visitMemberRecordStream in CompleteTagDecl will call
GetOrCreateType create type if not seen before, which inserts new entries
into m_decl_to_status. This may invalidates status which is a reference to
std::pair::second from DenseMapIterator.
Vitaly Buka [Wed, 31 Aug 2022 22:55:18 +0000 (15:55 -0700)]
[nfc][msan] Group checks per instruction
It's a preparation of to combine shadow checks of the same instruction
Reviewed By: kda, kstoimenov
Differential Revision: https://reviews.llvm.org/D133065
Valentin Clement [Thu, 1 Sep 2022 20:04:29 +0000 (22:04 +0200)]
Revert "[flang] Avoid copyin/copyout if the actual argument is contiguous at runtime"
This reverts commit
6ab6f23b14d51d65bfe86df64d0e976ebb573429.
Simon Pilgrim [Thu, 1 Sep 2022 19:44:56 +0000 (20:44 +0100)]
[ADT] bit.h - replace <stdint.h> with <cstdint>
This is a C++ header after all.
River Riddle [Thu, 1 Sep 2022 02:21:50 +0000 (19:21 -0700)]
[mlir:PDLL] Actually run the integration tests
This revealed that the test was a bit out of date and failing, this
commit also tweaks the .mlir to actually test pdll properly.
Simon Pilgrim [Thu, 1 Sep 2022 19:25:52 +0000 (20:25 +0100)]
[X86] Fix reciprocal instruction throughput/uops counts
Matches numbers from AMD SoG + Agner - should always be on FPU Pipes 0+1, no additional uops for folded instructions and znver1 double pumps 256-bit vectors
Noticed while adding CostKinds support to the x86 cost models
Wei Yi Tee [Thu, 1 Sep 2022 17:34:22 +0000 (17:34 +0000)]
[clang][dataflow] Refactor `TypeErasedDataflowAnalysisTest` - replace usage of the deprecated overload of `checkDataflow`.
Reviewed By: gribozavr2, sgatev
Differential Revision: https://reviews.llvm.org/D132756
Valentin Clement [Thu, 1 Sep 2022 19:15:48 +0000 (21:15 +0200)]
[flang] Avoid copyin/copyout if the actual argument is contiguous at runtime
This patch adds contiguity check with the runtime to avoid copyin/copyout
in case the actual argument is actually contiguous.
Reviewed By: jeanPerier
Differential Revision: https://reviews.llvm.org/D133097
Mark de Wever [Sat, 27 Aug 2022 10:58:14 +0000 (12:58 +0200)]
[libc++] Avoids self references in transitive include test.
The output of --trace-includes starts with the header whose includes are
being processed. Since the sanitize script processed all lines this
include was added to the list of transitive includes. This looks odd
since it implies all headers have a cyclic dependency on themselves.
This change removes this self-include.
Instead of just dropping the first line extract that header and use it
to guard against cyclic dependencies in the header itself.
The regex used has a small improvement; don't capture groups that aren't
extracted.
Depends on D132284
Reviewed By: ldionne, #libc
Differential Revision: https://reviews.llvm.org/D132787
Michael Jones [Thu, 18 Aug 2022 18:46:58 +0000 (11:46 -0700)]
[libc] add division, modulo, and power to UInt
This adds division and power implementations to UInt. Modulo and
division are handled by the same function. These are necessary for some
higher order mathematics, often involving large floating point numbers.
Reviewed By: sivachandra, lntue
Differential Revision: https://reviews.llvm.org/D132184
Michael Jones [Wed, 31 Aug 2022 18:14:27 +0000 (11:14 -0700)]
[libc] move builtin_wrappers out of fputil
builtin_wrappers contains the wrappers for the clz builtins, which do
not depend on anything in fputil. This patch moves the file out of
FPUtil. The location is updated as appropriate.
Reviewed By: lntue
Differential Revision: https://reviews.llvm.org/D133035
Fangrui Song [Thu, 1 Sep 2022 18:06:06 +0000 (11:06 -0700)]
[MachineFunctionPass] Support -filter-passes for -print-changed
[MachineFunctionPass] Support -filter-passes for -print-changed
-filter-passes specifies a `PassID` (a lower-case dashed-separated pass name,
also used by -print-after, -stop-after, etc) instead of a CamelCasePass.
`-filter-passes=CamelCaseNewPMPass` seems like a workaround for new PM passes before
we can use lower-case dashed-separated pass names (as used by `-passes=`).
Example:
```
# getPassName() is "IRTranslator". PassID is "irtranslator"
llc -mtriple=aarch64 -print-changed -filter-passes=irtranslator < print-changed-machine.ll
```
Close https://github.com/llvm/llvm-project/issues/57453
Reviewed By: aeubanks
Differential Revision: https://reviews.llvm.org/D133055
LLVM GN Syncbot [Thu, 1 Sep 2022 18:01:38 +0000 (18:01 +0000)]
[gn build] Port
f6b66cbc7df1
Michael Jones [Thu, 1 Sep 2022 00:03:48 +0000 (17:03 -0700)]
[libc][bazel] split fputil into individual targets
This matches the change made to cmake, mostly. I've left the process of
splitting the inclusions for all the math functions for a later time.
Reviewed By: lntue, sivachandra
Differential Revision: https://reviews.llvm.org/D133073
Vitaly Buka [Thu, 1 Sep 2022 04:46:17 +0000 (21:46 -0700)]
[test][msan] Basic debug info test
Joseph Huber [Thu, 1 Sep 2022 17:26:26 +0000 (12:26 -0500)]
[libomptarget] Enable the device allocator for AMDGPU
This patch adds support for the device memory type, this is currently equivalent
to the default type so it should be treated as the same.
Reviewed By: JonChesterfield
Differential Revision: https://reviews.llvm.org/D133128
Wei Yi Tee [Thu, 1 Sep 2022 16:15:55 +0000 (16:15 +0000)]
[llvm][Testing/ADT] Implement `IsStringMapEntry` testing matcher for verifying the entries in a `StringMap`.
Reviewed By: gribozavr2, ymandel, sgatev
Differential Revision: https://reviews.llvm.org/D132753
Jeff Niu [Thu, 1 Sep 2022 16:49:53 +0000 (09:49 -0700)]
[mlir] fix ubsan when loading array<i0>
Aart Bik [Thu, 1 Sep 2022 03:31:24 +0000 (20:31 -0700)]
[mlir][sparse] refined doc of sparse tensor ops
Reviewed By: bixia
Differential Revision: https://reviews.llvm.org/D133086
Aart Bik [Thu, 1 Sep 2022 01:22:04 +0000 (18:22 -0700)]
[mlir][sparse] improved tensor type lowering
Also includes a first codegen example (although full support need tuple access)
Reviewed By: Peiming
Differential Revision: https://reviews.llvm.org/D133080
Jordan Rupprecht [Thu, 1 Sep 2022 16:15:57 +0000 (09:15 -0700)]
[MSan] Fix determinism issue when using msan-track-origins.
When instrumenting `alloca`s, we use a `SmallSet` (i.e. `SmallPtrSet`). When there are fewer elements than the `SmallSet` size, it behaves like a vector, offering stable iteration order. Once we have too many `alloca`s to instrument, the iteration order becomes unstable. This manifests as non-deterministic builds because of the global constant we create while instrumenting the alloca.
The test added is a simple IR file, but was discovered while building `libcxx/src/filesystem/operations.cpp` from libc++. A reduced C++ example from that:
```
// clang++ -fsanitize=memory -fsanitize-memory-track-origins \
// -fno-discard-value-names -S -emit-llvm \
// -c op.cpp -o op.ll
struct Foo {
~Foo();
};
bool func1(Foo);
void func2(Foo);
void func3(int) {
int f_st, t_st;
Foo f, t;
func1(f) || func1(f) || func1(t) || func1(f) && func1(t);
func2(f);
}
```
Reviewed By: kda
Differential Revision: https://reviews.llvm.org/D133034
Arthur Eubanks [Thu, 1 Sep 2022 16:06:30 +0000 (09:06 -0700)]
[test][InstCombine] Update precommitted test
Nuno Lopes [Thu, 1 Sep 2022 16:04:26 +0000 (17:04 +0100)]
Expand Div/Rem: consider the case where the dividend is zero
So we can't use ctlz in poison-producing mode
Arthur Eubanks [Thu, 1 Sep 2022 15:42:36 +0000 (08:42 -0700)]
Revert "[Pipelines] Introduce DAE after ArgumentPromotion"
This reverts commit
b10a341aa5b0b93b9175a8f11efc9a0955ab361e.
This commit exposes the pre-existing https://github.com/llvm/llvm-project/issues/56503 in some edge cases. Will fix that and then reland this.
Aaron Ballman [Thu, 1 Sep 2022 15:44:11 +0000 (11:44 -0400)]
Removing an accidentally duplicated heading; NFC
Matt Devereau [Thu, 1 Sep 2022 15:00:37 +0000 (15:00 +0000)]
[AArch64][SVE] Add floating-point repeated complex pattern llc tests
Mehdi Amini [Mon, 29 Aug 2022 10:44:12 +0000 (10:44 +0000)]
Apply clang-tidy fixes for performance-unnecessary-value-param in InferIntRangeInterfaceImpls.cpp (NFC)
Mehdi Amini [Mon, 29 Aug 2022 10:32:39 +0000 (10:32 +0000)]
Apply clang-tidy fixes for readability-identifier-naming in AffineOps.cpp (NFC)
Cole Kissane [Thu, 1 Sep 2022 14:49:42 +0000 (07:49 -0700)]
tweak zstd behavior in cmake and llvm config for better testing
add LLVM_PREFER_STATIC_ZSTD (default TRUE) cmake config flag
(compression test seems to fail for shared zstd on windows, note that zstd multithread is by default disabled in the static build so it may be a hidden variable)
propagate variable zstd_DIR in LLVMConfig.cmake.in
fix llvm-config CMakeLists.txt behavior for absolute libs windows
get zstd lib name
Reviewed By: phosek
Differential Revision: https://reviews.llvm.org/D132870
Nikita Popov [Thu, 1 Sep 2022 08:13:35 +0000 (10:13 +0200)]
[DwarfEhPrepare] Assign dummy debug location for inserted _Unwind_Resume calls (PR57469)
DwarfEhPrepare inserts calls to _Unwind_Resume into landing pads.
If _Unwind_Resume happens to be defined in the same module and
debug info is used, then this leads to a verifier error:
inlinable function call in a function with debug info must
have a !dbg location
call void @_Unwind_Resume(ptr %exn.obj) #0
Fix this by assigning a dummy location to the call. (As this
happens in the backend, inlining is not actually relevant here.)
Fixes https://github.com/llvm/llvm-project/issues/57469.
Differential Revision: https://reviews.llvm.org/D133095
Valentin Clement [Thu, 1 Sep 2022 14:27:51 +0000 (16:27 +0200)]
[flang] Handle special case for SHIFTA intrinsic
This patch update the lowering of the shifta intrinsic to match
the behvior of gfortran. When the SHIFT value is equal to the
integer bitwidth then we handle it differently.
This is due to the operation used in lowering (`mlir::arith::ShRSIOp`)
that lowers to `ashr`.
Before this patch we have the following results:
```
SHIFTA( -1, 8) = 0
SHIFTA( -2, 8) = 0
SHIFTA( -30, 8) = 0
SHIFTA( -31, 8) = 0
SHIFTA( -32, 8) = 0
SHIFTA( -33, 8) = 0
SHIFTA(-126, 8) = 0
SHIFTA(-127, 8) = 0
SHIFTA(-128, 8) = 0
```
While gfortran is giving this:
```
SHIFTA( -1, 8) = -1
SHIFTA( -2, 8) = -1
SHIFTA( -30, 8) = -1
SHIFTA( -31, 8) = -1
SHIFTA( -32, 8) = -1
SHIFTA( -33, 8) = -1
SHIFTA(-126, 8) = -1
SHIFTA(-127, 8) = -1
SHIFTA(-128, 8) = -1
```
With this patch flang and gfortran have the same behavior.
Reviewed By: jeanPerier
Differential Revision: https://reviews.llvm.org/D133104
Nikita Popov [Tue, 30 Aug 2022 12:26:36 +0000 (14:26 +0200)]
[PHITranslateAddr] Require dominance when searching for translated address (PR57025)
This is a fix for PR57025 and an alternative to D131776. The problem
in the phi-translation-to-wrong-context.ll test case is that phi
translation of %gep.j into if2 pick %gep.i as the result. While this
instruction has the correct pointer address, it occurs in a context
where %i != 0. As such, we get a NoAlias result for the store in
if2, even though they do alias for %i == 0 (which is legal in the
original context of the pointer).
PHITranslateValue already has a MustDominate option, which can be
used to restrict PHI translation results to values that dominate the
translated-into block. However, this is more aggressive than what we
need and would significantly regress GVN results. In particular, if
we have a pointer value that does not require any translation, then
it is fine to continue using that value in the predecessor, because
the context is still correct for the original query. We only run into
problems if PHITranslateSubExpr() picks a completely random
instruction in a context that may have preconditions that do not hold.
Fix this by always performing the dominance checks in
PHITranslateSubExpr(), without enabling the more general MustDominate
requirement.
Fixes https://github.com/llvm/llvm-project/issues/57025. This also
fixes the test case for https://github.com/llvm/llvm-project/issues/30999,
but I'm not sure whether that's just the particular test case,
or a general solution to the problem.
Differential Revision: https://reviews.llvm.org/D132935
Wei Yi Tee [Thu, 1 Sep 2022 13:50:38 +0000 (13:50 +0000)]
[clang][dataflow] Use `StringMap` for storing analysis states at annotated points instead of `vector<pair<string, StateT>>`.
Reviewed By: gribozavr2, sgatev, ymandel
Differential Revision: https://reviews.llvm.org/D132763
Nikita Popov [Thu, 1 Sep 2022 14:09:05 +0000 (16:09 +0200)]
[CombinerHelper] Avoid deprecated method (NFC)
Nikita Popov [Thu, 1 Sep 2022 14:06:26 +0000 (16:06 +0200)]
[LICM] Regenerate test checks (NFC)
Wei Yi Tee [Thu, 1 Sep 2022 13:23:39 +0000 (13:23 +0000)]
[clang][dataflow] Add `SetupTest` parameter for `AnalysisInputs`.
Moves the work required for retrieving annotation states into the `SetupTest` and `PostVisitCFG` callback to avoid having to run a separate pass over the CFG after analysis has completed.
Reviewed By: gribozavr2, sgatev, ymandel
Differential Revision: https://reviews.llvm.org/D132377
Nikita Popov [Thu, 1 Sep 2022 13:41:51 +0000 (15:41 +0200)]
[LICM] Remove unnecessary condition (NFC)
Nikita Popov [Thu, 1 Sep 2022 13:29:40 +0000 (15:29 +0200)]
[LICM] Fix thread safety checks for promotion of byval args
This code was relying on a very subtle contract: The expectation
was that for non-allocas, the unwind safety check would already
perform a capture check, so we don't need to perform it later.
This held true when this unwind safety was only handled for allocas
and noalias calls, but became incorrect when byval support was
added.
To avoid this kind of issue, just remove the dependency between the
unwind and thread-safety checks entirely. At worst, this means we
perform a redundant capture check. If this should turn out to be
problematic for compile-time, we can cache that query in a more
explicit way.
Wei Yi Tee [Thu, 1 Sep 2022 12:48:33 +0000 (12:48 +0000)]
[clang][dataflow] Refactor `TestingSupport.h`
- Add `AnalysisInputs` struct as the parameters for `checkDataflow`, and renamed `AnalysisData` struct to `AnalysisOutputs` which contains the data structures generated from a dataflow analysis run.
- Remove compulsory binding from statement to annotations. Instead, `checkDataflow` in the most general form takes a `VerifyResults` callback which takes as input an `AnalysisOutputs` struct. This struct contains the data structures generated by the analysis that can then be tested. We then introduce two overloads/wrappers of `checkDataflow` for different mechanisms of testing - one which exposes annotation line numbers and is not restricted to statements, and the other which exposes states computed after annotated statements. In the future, we should look at retrieving the analysis states for constructs other than statements.
Reviewed By: gribozavr2, sgatev
Differential Revision: https://reviews.llvm.org/D132147
Stephen Tozer [Tue, 30 Aug 2022 13:30:47 +0000 (14:30 +0100)]
Reapply "[DebugInfo] Extend the InstrRef LDV to support DbgValues with many Ops"
Re-landing with an erroneous assert removed.
This reverts commit
58d104b352a65bec3fb7a8fd23bf2d408b4c76f7.
Nikita Popov [Thu, 1 Sep 2022 13:16:08 +0000 (15:16 +0200)]
[LICM] Add another byval capture test (NFC)
Variant with capture after the loop, in which case promotion is
safe.
serge-sans-paille [Tue, 30 Aug 2022 14:49:53 +0000 (16:49 +0200)]
[clang] cleanup -fstrict-flex-arrays implementation
This is a follow up to https://reviews.llvm.org/D126864, addressing some remaining
comments.
It also considers union with a single zero-length array field as FAM for each
value of -fstrict-flex-arrays.
Differential Revision: https://reviews.llvm.org/D132944
Nikita Popov [Thu, 1 Sep 2022 13:02:55 +0000 (15:02 +0200)]
[LICM] Add test for byval scalar promotion miscompile (NFC)
Ilia Diachkov [Wed, 31 Aug 2022 11:53:02 +0000 (14:53 +0300)]
[SPIRV] support builtin types and ExtInsts selection
The patch adds the support of OpenCL and SPIR-V built-in types. It also
implements ExtInst selection and adds spv_unreachable and spv_alloca
intrinsics which improve the generation of the corresponding SPIR-V code.
Five LIT tests are included to demonstrate the improvement.
Differential Revision: https://reviews.llvm.org/D132648
Co-authored-by: Aleksandr Bezzubikov <zuban32s@gmail.com>
Co-authored-by: Michal Paszkowski <michal.paszkowski@outlook.com>
Co-authored-by: Andrey Tretyakov <andrey1.tretyakov@intel.com>
Co-authored-by: Konrad Trifunovic <konrad.trifunovic@intel.com>
Sanjay Patel [Thu, 1 Sep 2022 12:32:06 +0000 (08:32 -0400)]
[InstCombine] fix crash on type mismatch with fcmp fold
The existing predicate doesn't work for a single-element
vector, so make sure we are not crossing scalar/vector types.
Test (was crashing) based on the post-commit example for:
482777123427
Sanjay Patel [Wed, 31 Aug 2022 20:05:53 +0000 (16:05 -0400)]
[InstCombine] fold power-of-2 ctlz/cttz with inverted result
When X is a power-of-two or zero and zero input is poison:
ctlz(i32 X) ^ 31 --> cttz(X)
cttz(i32 X) ^ 31 --> ctlz(X)
https://alive2.llvm.org/ce/z/Cs7sFE
Alex Bradbury [Thu, 1 Sep 2022 12:49:55 +0000 (13:49 +0100)]
[RISCV][NFC] Fix typo in comment in RISCVInstrInfoZicbo.td
Zicbop->Zicbom typo.
Nikita Popov [Thu, 1 Sep 2022 08:48:49 +0000 (10:48 +0200)]
[LICM] Add some debug output to scalar promotion (NFC)
Bjorn Pettersson [Fri, 12 Aug 2022 12:56:23 +0000 (14:56 +0200)]
[GVN] Pre-commit test case showing miscompile in github issue #57025
This commit adds a reproducer for
https://github.com/llvm/llvm-project/issues/57025
showing a miscompile in GVN.
Not sure how likely this kind of faults would be in a normal pipeline,
considering that the input IR has some dead code in it. On the other
hand, GVN itself sometimes creates dead basic blocks when splitting
critical edges. Anyway, the fault was found when doing fuzzy testing
using random pass pipelines.
Differential Revision: https://reviews.llvm.org/D131775
Alexey Bataev [Wed, 1 Jun 2022 22:37:51 +0000 (15:37 -0700)]
[SLP]Fix PR55734: SLP vectorizer's reduce_and formation introduces poison.
Need either follow the original order of the operands for bool logical
ops, or emit freeze instruction to avoid poison propagation.
Differential Revision: https://reviews.llvm.org/D126877
Amara Emerson [Mon, 25 Jul 2022 21:21:40 +0000 (14:21 -0700)]
[GlobalISel] Add sdiv exact (X, constant) -> mul combine.
This port of the SDAG optimization is only for exact sdiv case.
Differential Revision: https://reviews.llvm.org/D130517
Yuanbo Li [Thu, 1 Sep 2022 10:03:48 +0000 (11:03 +0100)]
[DebugInfo] Missing debug location after replacement in processSRem function
This patch fixes an issue in which CorrelatedValuePropagation::processSRem
would create new instructions to represent the SRem instruction, but would not
correctly copy any existing debug location metadata to the new instruction.
Differential Revision: https://reviews.llvm.org/D132218