Fangrui Song [Wed, 21 Sep 2022 21:11:15 +0000 (14:11 -0700)]
[Driver] Add --gcc-install-dir=
This option specifies a GCC installation directory such as
/usr/lib/gcc/x86_64-linux-gnu/12, /usr/lib/gcc/x86_64-gentoo-linux-musl/11.2.0 .
It is intended to replace --gcc-toolchain=, which specifies a directory where
`lib/gcc{,-cross}` can be found. When --gcc-toolchain= is specified, the
selected `lib/gcc/$triple/$version` installation uses complex logic and the
largest GCC version is picked. There is no way to specify another version in the
presence of multiple GCC versions.
D25661 added gcc-config detection for Gentoo: `ScanGentooConfigs`.
The implementation may be simplified by using --gcc-install-dir=.
Reviewed By: mgorny
Differential Revision: https://reviews.llvm.org/D133329
Fangrui Song [Wed, 21 Sep 2022 21:09:04 +0000 (14:09 -0700)]
[GlobalISel] Fix std::max after D134380
Jay Foad [Tue, 20 Sep 2022 09:43:40 +0000 (10:43 +0100)]
AMDGPU: Stop validating earlyclobber operands in assembler
This validation was introduced in D34003 for v_qsad/v_mqsad instructions
but it applies to all instructions with earlyclobber operands, which now
includes v_mad_i64/v_mad_u64.
In all these cases I do not think there is documentation saying that the
destination must not overlap the sources. Rather there are *some* cases
where the instruction may not function correctly if there is an overlap,
and we are using earlyclobber as a conservative way of preventing
codegen from generating those cases.
I think it is unhelpful for the assembler to enforce the earlyclobber
restriction because it prevents assembling cases where the programmer
knows that in fact the overlap is safe.
See also: https://github.com/llvm/llvm-project/issues/57610
Differential Revision: https://reviews.llvm.org/D134272
Amara Emerson [Wed, 21 Sep 2022 19:37:31 +0000 (20:37 +0100)]
[GlobalISel] Fix known bits for G_ASSERT_ALIGN.
I don't know what was going on originally with these tests. It seems reasonable
to have the immediate be the same byte alignment unit as the IR, in which case
we need to take the log2 in order to set the right number of low bits.
This fixes a miscompile in chromium.
Differential Revision: https://reviews.llvm.org/D134380
owenca [Wed, 21 Sep 2022 20:17:28 +0000 (13:17 -0700)]
[clang-format][NFC] Reformat the clang/unittests/Format directory
Also add a .clang-format file to clang/include/clang/Format and
clang/unittests/Format to keep the directories formatted.
Leonard Chan [Wed, 21 Sep 2022 20:13:31 +0000 (20:13 +0000)]
Revert "[llvm] Support forward-referenced globals with dso_local_equivalent"
This reverts commit
411020ad1c15a5f8cdbf674a2a8f845000f761e3.
One of the tests here fails on some upstream builders:
https://lab.llvm.org/buildbot#builders/16/builds/35314
Evgeny Shulgin [Mon, 19 Sep 2022 19:26:03 +0000 (19:26 +0000)]
[Clang] Support case and default labels at end of compound statement
Direct continuation of https://reviews.llvm.org/D133887
Reviewed By: #clang-language-wg, aaron.ballman
Differential Revision: https://reviews.llvm.org/D134207
Aaron Ballman [Wed, 21 Sep 2022 19:31:53 +0000 (15:31 -0400)]
Add tests & update the C99 DR statuses for dr315 and dr316
Leonard Chan [Mon, 19 Sep 2022 23:22:14 +0000 (23:22 +0000)]
[llvm] Support forward-referenced globals with dso_local_equivalent
See https://github.com/llvm/llvm-project/issues/57815.
dso_local_equivalent would fail with an assertion on forward-referenced
globals. This is an issue that only comes up in textual IR, which is why
we've never seen this assertion with clang.
Differential Revision: https://reviews.llvm.org/D134234
Xiang Li [Tue, 20 Sep 2022 23:40:55 +0000 (16:40 -0700)]
[HLSL] Allow SV_GroupIndex for lib profile.
Lib profile could include all kind of entry functions.
Reviewed By: beanz
Differential Revision: https://reviews.llvm.org/D134326
Sanjay Patel [Wed, 21 Sep 2022 18:36:27 +0000 (14:36 -0400)]
[InstCombine] try to fold mul by neg-power-of-2 to shl
`(A * -2**C) + B --> B - (A << C)`
https://alive2.llvm.org/ce/z/A6BWkf
This inverts what Negator was doing before:
D134310 /
0f32a5dea0e9
Analysis and codegen are generally better without multiply,
so we should favor this form even if we trade add for sub
(because those are generally equivalent cost operations).
owenca [Wed, 21 Sep 2022 00:00:05 +0000 (17:00 -0700)]
[clang-format][NFC] Reformat clang/lib/Format using
6257832bf94f
Fix braces and add .clang-format to keep the directory formatted.
Differential Revision: https://reviews.llvm.org/D134329
Aaron Ballman [Wed, 21 Sep 2022 18:51:17 +0000 (14:51 -0400)]
Changing some strange code into an assert; NFC
This code was added in
b65b1f322bd88513586a4539d2b5f18aeb698f3f, but it
was not noticed that the [[fallthrough]] behavior was very wrong. In C
mode, we would set the ParenExprType to CompoundLiteral and then
promptly overwrite that information by falling through.
After some investigation, I convinced myself that it is not possible to
hit this code path in C, only in C++. I've switched it to be an
assertion; I don't expect to hit it, but if we do hit it, that will at
least give us a code example we can use to reason about the intent of
the original code.
Fangrui Song [Wed, 21 Sep 2022 18:55:14 +0000 (11:55 -0700)]
[libclang] Fix -Wswitch after D129883
Fangrui Song [Wed, 21 Sep 2022 18:50:15 +0000 (11:50 -0700)]
[ARM] Check target feature support for __builtin_arm_crc*
`__builtin_arm_crc*` requires the target feature crc which is available on armv8
and above. Calling the fuctions for armv7 leads to a SelectionDAG crash.
```
% clang -c --target=armv7-unknown-linux-gnueabi -c a.c
fatal error: error in backend: Cannot select: intrinsic %llvm.arm.crc32b
PLEASE submit a bug report to ...
```
Add `TARGET_BUILTIN` and define required features for these builtins to
report an error in `CodeGenFunction::checkTargetFeatures`. The problem is quite widespread.
I will add `TARGET_BUILTIN` for more builtins later.
Fix https://github.com/llvm/llvm-project/issues/57802
Differential Revision: https://reviews.llvm.org/D134127
Scott Linder [Wed, 21 Sep 2022 18:48:42 +0000 (18:48 +0000)]
Revert "[NFC][AMDGPU] Refactor AMDGPUDisassembler"
This reverts commit
f5831514612cd9e014e4fc7455b75411531fe6e1.
Fangrui Song [Wed, 21 Sep 2022 18:43:12 +0000 (11:43 -0700)]
[ELF] --pack-dyn-relocs=android: scan relocation serially after D133003
https://reviews.llvm.org/D133003#3806508 can reproduce a non-determinism with
--threads=4. Making the config serial fixes non-determinism (by running the link
many times and compare output).
Siva Chandra Reddy [Wed, 21 Sep 2022 08:13:14 +0000 (08:13 +0000)]
[libc] Add implementations of POSIX getpid, getppid, getuid, geteuid functions.
Reviewed By: lntue
Differential Revision: https://reviews.llvm.org/D134338
Siva Chandra Reddy [Fri, 9 Sep 2022 19:02:28 +0000 (19:02 +0000)]
[libc] Add implementation of functions stat, fstat and lstat.
All supporting type and macro definitions have also been added.
Reviewed By: lntue
Differential Revision: https://reviews.llvm.org/D134262
Krzysztof Parzyszek [Tue, 20 Sep 2022 17:47:55 +0000 (10:47 -0700)]
[Hexagon] Revamp type legalization of ext/trunc/sat in HVX
Resizing operations (e.g. sign extension) in DAG can go from any width
to any other width, e.g. i8 -> i32. If the input and the result differ
by a factor larger than 2, the operation cannot be legal in HVX, since
the only two legal vector sizes in HVX are a single vector and a pair
of vectors.
To simplify the legalization, such operations are expanded into steps
that only double/halve the type size, so that each such step can be fully
legalized on its own. The complication is that DAG will automatically
fold these steps back into one, e.g. sext(sext) -> sext. To prevent that
new HexagonISD nodes are introduced: TL_EXTEND and TL_TRUNCATE. Once
legalized, these nodes are replaced with the original opcodes.
The type legalization is now common to aext/sext/zext/trunc and Hexagon-
specific ssat/usat nodes.
Florian Hahn [Wed, 21 Sep 2022 18:15:39 +0000 (19:15 +0100)]
[AArch64] Try to fold shuffle (tbl2, tbl2) to tbl4.
shuffle (tbl2, tbl2) can be folded into a single tbl4 if the mask for
the selected elements is constant.
Reviewed By: t.p.northover
Differential Revision: https://reviews.llvm.org/D133491
Sanjay Patel [Wed, 21 Sep 2022 17:45:43 +0000 (13:45 -0400)]
[InstCombine] try multi-use demanded bits fold for 'sub'
This is similar to D133788 /
73919a87e9a6, but for sub
the transform is valid only for low zeros in operand 1.
https://alive2.llvm.org/ce/z/EmRsXC
Sanjay Patel [Wed, 21 Sep 2022 17:24:05 +0000 (13:24 -0400)]
[InstCombine] add tests for multi-use sub demanded bits: NFC
Sanjay Patel [Wed, 21 Sep 2022 16:41:54 +0000 (12:41 -0400)]
[InstCombine] add tests for (X * -2**C) + Y; NFC
Fangrui Song [Wed, 21 Sep 2022 18:13:02 +0000 (11:13 -0700)]
[ELF] Parallelize --compress-debug-sections=zstd
See D117853: compressing debug sections is a bottleneck and therefore it
has a large value parallizing the step.
zstd provides multi-threading API and the output is deterministic even with
different numbers of threads (see https://github.com/facebook/zstd/issues/2238).
Therefore we can leverage it instead of using the pigz-style sharding approach.
Also, switch to the default compression level 3. The current level 5
is significantly slower without providing justifying size benefit.
```
'dash b.sh 1' ran
1.05 ± 0.01 times faster than 'dash b.sh 3'
1.18 ± 0.01 times faster than 'dash b.sh 4'
1.29 ± 0.02 times faster than 'dash b.sh 5'
level=1 size:
358946945
level=3 size:
309002145
level=4 size:
307693204
level=5 size:
297828315
```
Reviewed By: andrewng, peter.smith
Differential Revision: https://reviews.llvm.org/D133679
Michael Jones [Tue, 20 Sep 2022 23:58:05 +0000 (16:58 -0700)]
[libc] add fputs and puts
add fputs, puts, and the EOF macro that they use.
Reviewed By: sivachandra
Differential Revision: https://reviews.llvm.org/D134328
Lang Hames [Wed, 21 Sep 2022 18:08:50 +0000 (11:08 -0700)]
[ORC-RT] Fix case on test file suffix.
Testcases expect this file to have an uppercase .S suffix.
Joel E. Denny [Wed, 21 Sep 2022 18:08:10 +0000 (14:08 -0400)]
[lit] Work around another windows issue in new test from
28412d1800e3
Based on result shown at:
<https://lab.llvm.org/buildbot/#/builders/216/builds/10123>
Xiang Li [Wed, 21 Sep 2022 17:55:51 +0000 (10:55 -0700)]
[NFC] Fix build error ignored by MSVC.
John McIver [Wed, 21 Sep 2022 17:55:33 +0000 (10:55 -0700)]
[Utils] Refactor update_cc_test_checks.py to use shutil
The package `distutils` is deprecated and removal is planned for Python 3.12. All calls to `distutils.spawn.find_executable` are replaced with local version of `find_executable` which makes use of `shutils.which`.
Reviewed By: arichardson, MaskRay
Differential Revision: https://reviews.llvm.org/D134015
Guozhi Wei [Wed, 21 Sep 2022 17:51:07 +0000 (17:51 +0000)]
[RegisterCoalescer] Use LiveRangeEdit to handle rematerialization
This patch uses the API provided by LiveRangeEdit to handle rematerialization.
It will make future maintenance and improvement more easier.
No functional change.
Differential Revision: https://reviews.llvm.org/D133610
Arthur Eubanks [Wed, 21 Sep 2022 03:37:49 +0000 (20:37 -0700)]
[gn build] Don't set LLVM_UNREACHABLE_OPTIMIZE when llvm_enable_assertions
llvm_unreachable should properly error out if assertions are enabled.
Reviewed By: thakis
Differential Revision: https://reviews.llvm.org/D134332
Joel E. Denny [Wed, 21 Sep 2022 17:27:41 +0000 (13:27 -0400)]
[lit] Work around windows issue in new test from
28412d1800e3
Based on result shown at:
<https://lab.llvm.org/buildbot/#/builders/216/builds/10120>
LLVM GN Syncbot [Wed, 21 Sep 2022 17:07:56 +0000 (17:07 +0000)]
[gn build] Port
782ac2182c2b
Xiang Li [Fri, 15 Jul 2022 17:45:57 +0000 (10:45 -0700)]
[HLSL] Support cbuffer/tbuffer for hlsl.
This is first part for support cbuffer/tbuffer.
The format for cbuffer/tbuffer is
BufferType [Name] [: register(b#)] { VariableDeclaration [: packoffset(c#.xyzw)]; ... };
More details at https://docs.microsoft.com/en-us/windows/win32/direct3dhlsl/dx-graphics-hlsl-constants
New keyword 'cbuffer' and 'tbuffer' are added.
New AST node HLSLBufferDecl is added.
Build AST for simple cbuffer/tbuffer without attribute support.
The special thing is variables declared inside cbuffer is exposed into global scope.
So isTransparentContext should return true for HLSLBuffer.
Reviewed By: aaron.ballman
Differential Revision: https://reviews.llvm.org/D129883
Thomas Symalla [Wed, 21 Sep 2022 17:01:33 +0000 (19:01 +0200)]
[NFC][AMDGPU] Add new v_bfi Codegen test.
Pre-commit a test for an upcoming change.
zhijian [Wed, 21 Sep 2022 16:51:38 +0000 (12:51 -0400)]
Refactor XCOFFObjectFile::getImportFileTable.
Summary:
1. Refactor with XCOFFObjectFile::getImportFileTable with function getSectionFileOffsetToRawData instead of getLoaderSectionAddress
2. Delete the function getLoaderSectionAddress.
Reviewers: James Henderson,Esme Yi
Differential Revision: https://reviews.llvm.org/D134280
Arthur Eubanks [Wed, 21 Sep 2022 16:04:06 +0000 (09:04 -0700)]
[CGSCC] Properly handle invalidating analyses for invalidated SCCs
Currently if we mark an SCC as invalid, if we haven't set UR.UpdatedC, we won't propagate the PreservedAnalyses up to the parent pass (adaptor/pass manager).
In the provided test case, we inline the function into itself then delete it as it has no users. The SCC is marked as invalid without providing a replacement UR.UpdatedC. Then the CGSCC pass manager and adaptor discard the PreservedAnalyses. Instead, handle PreservedAnalyses first before bailing due to the invalid SCC.
Fixes crashes due to out of date analyses.
Valentin Clement [Wed, 21 Sep 2022 16:47:41 +0000 (18:47 +0200)]
[flang] Avoid deallocation of intent(out) when dummy arg is not in entry stmt
In some case, the ENTRY statement in a procedure is including some
dummy argument. Until now, deallocation of intent(out) allocatable was
not checking for this and it could result in a segmentation fault.
This patch avoids deallocation when the value is not in the ENTRY stmt.
Reviewed By: jeanPerier, PeteSteinfeld
Differential Revision: https://reviews.llvm.org/D134342
Min-Yih Hsu [Mon, 19 Sep 2022 21:50:14 +0000 (14:50 -0700)]
[mlir][LLVMIR] Do not create pseudo debug file name using llvm::Instruction
Previously in mlir-translate, if debug info was absent in a
llvm::Instruction, we tried to create one using the name of its defined
value in a textual LLVM IR file as the (pseudo) debug file name.
However, in order to get that name, we need to call out to LLVM's
SlotTracker, which, surprisingly, took a lot of time. Judging from
the usefulness of such pseudo debug file name and the performance penalty
during translation, this patch simply use "imported-bitcode" as the
debug file name in these case. Eliminating the need of using (expensive)
LLVM value numbering.
Differential Revision: https://reviews.llvm.org/D134305
wlei [Tue, 20 Sep 2022 16:37:43 +0000 (09:37 -0700)]
[llvm-profgen] Remove CommaSeparated option from perf file cl
There could be comma in one perf file path, since at this point it only support one file as input, there is no need for the `llvm::cl::MiscFlags::CommaSeparated` option.
Reviewed By: hoy, wenlei
Differential Revision: https://reviews.llvm.org/D134287
natashaknk [Wed, 21 Sep 2022 16:29:17 +0000 (09:29 -0700)]
[mlir][tosa] Revert added support for dynamic height/weight for pooling in tosa-to-linalg
Partial rollback to D133389
Reviewed By: jpienaar
Differential Revision: https://reviews.llvm.org/D134370
Joel E. Denny [Wed, 21 Sep 2022 16:26:11 +0000 (12:26 -0400)]
[lit] Increase FileCheck verbosity temporarily
This is to help debug the failure
28412d1800e3 caused and
f47a5df92d48
failed to fix at:
<https://lab.llvm.org/buildbot/#/builders/216/builds/10117>
Konstantina [Mon, 1 Aug 2022 23:14:39 +0000 (16:14 -0700)]
[NFC][NewGVN] Remove OpIsSafeForPHIOfOpsHelper()
Reviewed By: asbirlea
Differential Revision: https://reviews.llvm.org/D130949
Ashay Rane [Mon, 19 Sep 2022 07:38:47 +0000 (02:38 -0500)]
[llvm] prefix linker flag on non-MSVC compilers with `-Wl,`
Prior to this patch, a Windows build of llvm-lto using clang failed with
the error: `LTO.def: unknown file type`. The reason for this failure is
that .DEF files are used by the linker not by the clang compiler. The
MSVC compiler+linker handles this transparently, but if we're using
clang (or gcc), then we need to tell the compiler to forward this flag
to the linker. This patch adds the necessary `-Wl` flag to fix the
problem.
Reviewed By: rnk, mstorsjo
Differential Revision: https://reviews.llvm.org/D134165
Akira Hatanaka [Sat, 25 Jun 2022 20:19:52 +0000 (13:19 -0700)]
[Sema] Reject array element types whose sizes aren't a multiple of their
alignments
In the following code, the first element is aligned on a 16-byte
boundary, but the remaining elements aren't:
```
typedef char int8_a16 __attribute__((aligned(16)));
int8_a16 array[4];
```
Currently clang doesn't reject the code, but it should since it can
cause crashes at runtime. This patch also fixes assertion failures in
CodeGen caused by the changes in https://reviews.llvm.org/D123649.
Differential Revision: https://reviews.llvm.org/D133711
Joel E. Denny [Wed, 21 Sep 2022 16:06:41 +0000 (12:06 -0400)]
[lit] Try to fix new test from
28412d1800e3 under Windows
`llvm/utils/lit/tests/Inputs/shtest-define/value-escaped.txt` broke at
least at <https://lab.llvm.org/buildbot/#/builders/216/builds/10114>.
The problem appears to be a non-portable `echo` command line.
Philip Reames [Wed, 21 Sep 2022 16:04:42 +0000 (09:04 -0700)]
[SDAG] Split handling of VPLoad/VPGather and VPStore/VPScatter [nfc]
The merged routines are not-idiomatic, and the code sharing that results is prettty minimal. The confusion factor is not justified.
J. Ryan Stinnett [Wed, 21 Sep 2022 15:52:44 +0000 (16:52 +0100)]
[LangRef][Docs] Fix RST header length for GC intrinsics
This fixes up the header length which regressed in
8c1a9e3cf37cb2aa6e67934e56796284efa42806.
Kazu Hirata [Wed, 21 Sep 2022 15:50:30 +0000 (08:50 -0700)]
[ModuleInliner] Factor out common code in InlineOrder.cpp (NFC)
This patch factors out common code in InlineOrder.cpp.
Without this patch, the model is to ask classes like SizePriority and
CostPriority to compare a pair of call sites:
bool hasLowerPriority(const CallBase *L, const CallBase *R) const override {
while these priority classes have their own caches of priorities:
DenseMap<const CallBase *, PriorityT> Priorities;
This model results in a lot of duplicate code like hasLowerPriority
and updateAndCheckDecreased.
This patch changes the model so that priority classes just have two
methods to compute a priority for a given call site and to compare two
previously computed priorities (as opposed to call sites).
Facilities like hasLowerPriority and updateAndCheckDecreased move to
PriorityInlineOrder along with the map from call sites to their
priorities. PriorityInlineOrder becomes a template class so that it
can accommodate different priority classes.
Differential Revision: https://reviews.llvm.org/D134149
J. Ryan Stinnett [Wed, 21 Sep 2022 15:44:58 +0000 (16:44 +0100)]
[LangRef][Docs] Align RST syntax for GC intrinsics
This changes the GC intrinsics to use the same header styling as the others.
Joel E. Denny [Wed, 21 Sep 2022 15:32:05 +0000 (11:32 -0400)]
[lit] Implement DEFINE and REDEFINE directives
These directives define per-test lit substitutions. The concept was
discussed at
<https://discourse.llvm.org/t/iterating-lit-run-lines/62596/10>.
For example, the following directives can be inserted into a test file
to define `%{cflags}` and `%{fcflags}` substitutions with empty
initial values, which serve as the parameters of another newly defined
`%{check}` substitution:
```
// DEFINE: %{cflags} =
// DEFINE: %{fcflags} =
// DEFINE: %{check} = %clang_cc1 %{cflags} -emit-llvm -o - %s | \
// DEFINE: FileCheck %{fcflags} %s
```
The following directives then redefine the parameters before each use
of `%{check}`:
```
// REDEFINE: %{cflags} = -foo
// REDEFINE: %{fcflags} = -check-prefix=FOO
// RUN: %{check}
// REDEFINE: %{cflags} = -bar
// REDEFINE: %{fcflags} = -check-prefix=BAR
// RUN: %{check}
```
Of course, `%{check}` would typically be more elaborate, increasing
the benefit of the reuse.
One issue is that the strings `DEFINE:` and `REDEFINE:` already appear
in 5 tests. This patch adjusts those tests not to use those strings.
Our prediction is that, in the vast majority of cases, if a test
author mistakenly uses one of those strings for another purpose, the
text appearing after the string will not happen to have the syntax
required for these directives. Thus, the test author will discover
the mistake immediately when lit reports the syntax error.
This patch also expands the documentation on existing lit substitution
behavior.
Reviewed By: jhenderson, MaskRay, awarzynski
Differential Revision: https://reviews.llvm.org/D132513
Chris Bieneman [Wed, 21 Sep 2022 15:29:26 +0000 (10:29 -0500)]
[NFC] Add GitHub issues to HLSL FIXME comments
In order to make this easier to track I've filed issues for each of the
HLSL FIXME comments that I can find. I may have missed some, but I want
this to be the new default mode.
Matt Arsenault [Wed, 21 Sep 2022 15:25:04 +0000 (11:25 -0400)]
AMDGPU: Move test to correct location
This is not a MIR printer/parser test, so it belongs with the ordinary
codegen tests.
rkayaith [Wed, 7 Sep 2022 16:42:52 +0000 (12:42 -0400)]
[mlir][llvm] Support pointer entries in data layout translation
This adds support for pointer DLTI entries in LLVMIR export, e.g.
```
// translated to: p0:32:64:128
#dlti.dl_entry<!llvm.ptr, dense<[32,64,128]> : vector<3xi32>>
// translated to: p1:32:32:32:64
#dlti.dl_entry<!llvm.ptr<1>, dense<[32,32,32,64]> : vector<4xi32>>
```
Reviewed By: ftynse
Differential Revision: https://reviews.llvm.org/D133434
Anders Langlands [Wed, 21 Sep 2022 15:12:48 +0000 (11:12 -0400)]
Add clang_CXXMethod_isDeleted function
Adds a function to check if a method has been deleted by copy-pasting
the existing implementation of clang_CXXMethod_isDefaulted and changing
it to call CXXMethod::isDeleted() instead.
Differential Revision: https://reviews.llvm.org/D133924
bixia1 [Wed, 21 Sep 2022 13:59:09 +0000 (06:59 -0700)]
[mlir][memref] Add realloc op.
Add memref.realloc and canonicalization of the op. Add conversion patterns for
lowering the op to LLVM using unaligned alloc or aligned alloc based on the
conversion option.
Add filecheck tests for parsing and converting the op. Add an integration test.
Reviewed By: ftynse
Differential Revision: https://reviews.llvm.org/D133424
Alexey Bataev [Wed, 21 Sep 2022 14:18:06 +0000 (07:18 -0700)]
[SLP]Fix write-after-bounds.
Mask might be larger than the NumElts-OffsetBeg, need to use actual
indices to avoid acces out of bounds.
Nikita Popov [Wed, 21 Sep 2022 14:52:25 +0000 (16:52 +0200)]
[InstSimplify] Add additional simplifyWithOpReplaced() vector tests (NFC)
Florian Hahn [Wed, 21 Sep 2022 14:50:29 +0000 (15:50 +0100)]
[llvm-reduce] Update NoChunks initializer to be in line with AllChunks.
Without this patch, the assertion triggers below on the test case,
because we are using different oracles for the verification.
Assertion failed: (Targets == NoChunksCounter.count() && "number of chunks changes when reducing"), function runDeltaPass, file Delta.cpp, line 272.
Graham Hunter [Tue, 20 Sep 2022 11:17:32 +0000 (12:17 +0100)]
[NFC][LV] Scalarizing test for masked vector calls
Simon Pilgrim [Wed, 21 Sep 2022 14:24:33 +0000 (15:24 +0100)]
[LoopVectorize] Fix test name - the test is for fshl not cttz intrinsic costs
zhijian [Wed, 21 Sep 2022 13:38:13 +0000 (09:38 -0400)]
[AIX] change "llvm-nm" to "env OBJECT_MODE=any llvm-nm" in clang/test for AIX OS
Summary:
since default object mode of llvm-nm is change to -X32 (from default -Xany) in patch https://reviews.llvm.org/D132494.In order not effect the test cases in clang/test we need to change "llvm-nm" to "env OBJECT_MODE=any llvm-nm" in clang/test for AIX OS
Reviewers: James Henderson,David Tenty, Hubert Tong
Differential Revision: https://reviews.llvm.org/D134284
Matt Arsenault [Mon, 19 Sep 2022 20:54:18 +0000 (16:54 -0400)]
LICM: Pass through AssumptionCache
Sanjay Patel [Wed, 21 Sep 2022 12:56:25 +0000 (08:56 -0400)]
[AArch64] add tests for fadd -> fma combines; NFC
The transform to create a final fma was added with:
D132837 /
c98a46fee6f4043276eac
These tests are intended to show the minimal fast-math-flags
necessary to enable the fold: currently only the final fadd
needs to have "reassoc".
Alex Richardson [Tue, 20 Sep 2022 13:42:32 +0000 (13:42 +0000)]
Add all constant physical registers to callee preserved masks
This allows MachineCopyPropagation to eliminate copies of constant registers
such as zero registers. They were previously not being eliminated as the
check for MO.clobbersPhysReg(AvailSrc) would return true for constant
registers such as MIPS $zero.
To avoid having to manually add the zero registers to all CalleeSavedRegs
instantiations in tablegen, I instead added a new isConstant bit to the
Register and set this for MIPS, RISC-V, and AArch64 zero registers.
RegisterInfoEmitter.cpp looks at this flag and adds all constant registers
to the preserved register mask.
This may also benefit other passes but so far I have only seen differences
in MachineCopyPropagation. In the future it might make sense to generate
`isConstantPhysReg()` from this information.
Original source: https://github.com/CTSRD-CHERI/llvm-project/commit/
8588d8b81458ed6d87b674893e7752e6a6915574
Reviewed By: arsenm
Differential Revision: https://reviews.llvm.org/D131958
Alex Richardson [Tue, 20 Sep 2022 13:40:37 +0000 (13:40 +0000)]
Add a baseline test for D131958
This test shows that the save of MIPS $zero to a callee-saved register
is not elided by the machine-cp pass.
Differential Revision: https://reviews.llvm.org/D131957
Oleg Shyshkov [Wed, 21 Sep 2022 12:47:21 +0000 (12:47 +0000)]
[mlir] Move getDimsOfType to StructuredOpsUtils.h.
Summary:
This change will bring all helpers that work with iterator types to one place.
Currently getDimsOfType is is declared in Linalg.h, but not directly included by
LinalgInterfaces. It worked so far only because all the places that include
LinalgInterfaces.h also include Linalg.h directly or indirectly.
Differential Revision: https://reviews.llvm.org/D134350
Simon Pilgrim [Wed, 21 Sep 2022 12:48:15 +0000 (13:48 +0100)]
[CostModel][X86] Add vbmi2 costs for funnelshift/rotate intrinsics
Add costs for the funnel shift instructions - fixes some discrepancies I was hitting with costs numbers from the 'cost-tables vs llvm-mca' script D103695
Sanjay Patel [Wed, 21 Sep 2022 12:03:48 +0000 (08:03 -0400)]
[InstCombine] don't canonicalize shl+sub to mul+add
This stops Negator from transforming:
`C1 - shl X, C2 --> mul X, (1<<C2) + C1`
...in the general case. There does not seem to be any analysis
benefit to using mul in IR, and there's definitely downside in
codegen (particularly when the multiply has to be expanded).
If `C1` is 0, then there's a stronger argument that the single
mul is a better canonicalization than negate-of-shl, but we may
want to remove that too.
This was noted as a potential conflict for D133667.
Differential Revision: https://reviews.llvm.org/D134310
Louis Dionne [Wed, 21 Sep 2022 12:38:00 +0000 (08:38 -0400)]
Revert "[llvm] Remove libcxx, libcxxabi and libunwind from supported LLVM_ENABLE_PROJECTS"
This reverts commit
887b8bd733ea36aaa5d9b0a2b45df16c6f6bb6a4 while we
work on resolving issues brought up in https://reviews.llvm.org/D132480.
Simon Pilgrim [Wed, 21 Sep 2022 12:34:32 +0000 (13:34 +0100)]
[CostModel][X86] Add vbmi2 test coverage for funnelshift/rotate intrinsics
vbmi2 has vector funnel shift support that we should be costing correctly
Simon Pilgrim [Wed, 21 Sep 2022 11:55:59 +0000 (12:55 +0100)]
[CostModel][X86] Remove out of date TODO
ROTR constant and uniform-constant tests were added some time ago by
2fe1076a0888b4cdc22abc33ef2e5d9a7d8de1b1
Matheus Izvekov [Sun, 28 Aug 2022 20:26:01 +0000 (22:26 +0200)]
[clang] AST: SubstTemplateTypeParmType support for non-canonical underlying type
This change allows us to represent in the AST some specific
circumstances where we substitute a template parameter type
which is part of the underlying type of a previous substitution.
This presently happens in some circumstances dealing with
substitution of defaulted parameters of template template
parameters, and in some other cases during concepts substitution.
The main motivation for this change is for the future use in the
implementation of template specialization resugaring, as this will
allow us to represent a substitution with sugared types.
Signed-off-by: Matheus Izvekov <mizvekov@gmail.com>
Differential Revision: https://reviews.llvm.org/D132816
Ivan Butygin [Sun, 18 Sep 2022 21:34:20 +0000 (23:34 +0200)]
[mlir] Allow negative strides and offset in StridedLayoutAttr
Negative strides are useful for creating reverse-view of array. We don't have specific example for negative offset yet but will add it for consistency.
Differential Revision: https://reviews.llvm.org/D134147
Michał Górny [Tue, 20 Sep 2022 09:04:06 +0000 (11:04 +0200)]
[clang] [Driver] Support multiple configuration files
Support specifying multiple configuration files via multiple `--config`
options. When multiple files are specified, the options from subsequent
files are appended to the options from the initial file.
While at it, remove the incorrect assertion about CfgFileName being
non-empty. It can be empty if `--config ""` is passed, and it makes
sense to report it as non-existing file rather than crash.
Differential Revision: https://reviews.llvm.org/D134270
Wei Yi Tee [Wed, 21 Sep 2022 10:37:52 +0000 (10:37 +0000)]
[clang][dataflow] Remove deprecated `transfer(const Stmt *, ...)` API.
Reviewed By: gribozavr2
Differential Revision: https://reviews.llvm.org/D134318
Simon Pilgrim [Wed, 21 Sep 2022 11:00:09 +0000 (12:00 +0100)]
[CostModel][X86] Add CostKinds test coverage for funnelshift/rotate intrinsics
Wei Yi Tee [Wed, 21 Sep 2022 09:01:00 +0000 (09:01 +0000)]
[clang][dataflow] Remove deprecated overloads of `checkDataflow` in `TestingSupport.h`.
Reviewed By: gribozavr2
Differential Revision: https://reviews.llvm.org/D134081
Kazushi (Jam) Marukawa [Sun, 18 Sep 2022 06:26:57 +0000 (15:26 +0900)]
[VE] Remove obsolete ANDrm patterns
Remove obsolete ANDrm patterns for MIMM operands. We add these
translations to optimize commonly used cast operations before
we support MIMM operands directly by each isntruction. Such
translations are obsolete now.
Reviewed By: efocht
Differential Revision: https://reviews.llvm.org/D134341
Nikita Popov [Wed, 21 Sep 2022 10:03:53 +0000 (12:03 +0200)]
[InstSimplify] Add vector tests for simplifyWithOpReplaced (NFC)
Thomas Symalla [Fri, 26 Aug 2022 07:14:10 +0000 (09:14 +0200)]
[ISel] Enable generating more fma instructions.
This patch changes a FADD / FMUL => FMA ISel pattern implemented
in D80801 so that it peeks through more than one FMA.
Reviewed By: foad
Differential Revision: https://reviews.llvm.org/D132837
David Green [Wed, 21 Sep 2022 09:46:43 +0000 (10:46 +0100)]
[AArch64] Lower scalar sqxtn intrinsics to use fp registers
The llvm.aarch64.neon.scalar.sqxtn.i32.i64 intrinsics take and return
integer types, but operate on fp registers. This can create some
inefficiencies in their lowering, where the registers are converted to
fp a little too late. This patch adds lowering for the intrinsics,
creating bitcasts to/from fp types to allow nicer folding later when the
instructions are selected, especially around insert/extracts.
Differential Revision: https://reviews.llvm.org/D134024
Jay Foad [Wed, 21 Sep 2022 09:42:23 +0000 (10:42 +0100)]
[AMDGPU] Update checks in mad_u64_u32.ll. NFC.
Matthias Springer [Wed, 21 Sep 2022 02:20:23 +0000 (11:20 +0900)]
[mlir][tensor][bufferize] Implement getBufferType for Expand/CollapseShapeOp
This function must be implemented for all ops, where the result memref type is different from the input memref type.
Differential Revision: https://reviews.llvm.org/D134331
Graham Hunter [Wed, 21 Sep 2022 08:54:14 +0000 (09:54 +0100)]
[LAA] Fix ICE with scAddExpr in forked pointers
The IR from https://github.com/llvm/llvm-project/issues/57368 results
in an assert firing when trying to create a runtime check for the
forked pointer. One of the forks is fine since it's loop invariant,
but the other is a scAddExpr (containing a scAddRecExpr, so not
invariant) when RtCheck::insert expects a scAddRecExpr.
This is a simple fix to just avoid forks which aren't AddRec or
loop invariant. We can allow it as a forked pointer later with
more work.
Reviewed By: fhahn
Differential Revision: https://reviews.llvm.org/D133020
Valentin Clement [Wed, 21 Sep 2022 09:19:13 +0000 (11:19 +0200)]
[flang] Handle parent component of extended derived-type
Parent component refers to the parent derived-type of an extended type.
The parent component is skipped when a specififc component is
referred to. This is fine since all the components in extended type
are available in the type itself. When the parent component is referred,
it need to be taken into account correctly.
This patch fixes the case when the parent component is referred. In a
box, an approriate slice is created or updated to point to the first
component of the parent component. For scalar, a simple conversion to
the parent component type is done.
Reviewed By: jeanPerier
Differential Revision: https://reviews.llvm.org/D134170
eopXD [Wed, 21 Sep 2022 09:04:27 +0000 (02:04 -0700)]
[NFC][Scalarizer] Let testcase be auto-generated from update_test_check
The current `CHECK` lines are hand-written. Changing them to auto-generated lines.
Reviewed By: nikic
Differential Revision: https://reviews.llvm.org/D134340
Kazushi (Jam) Marukawa [Sun, 18 Sep 2022 01:26:07 +0000 (10:26 +0900)]
[VE][NFC] Change to use l2i/i2l to simplify code
We previously added l2i/i2l macros to simpily EXTRACT_SUBREG/INSERT_SUBREG
conversions. This patch changes VEInstrInfo.td to use such macros to
simplify existing code.
Reviewed By: efocht
Differential Revision: https://reviews.llvm.org/D134118
Kazushi (Jam) Marukawa [Sat, 17 Sep 2022 09:04:06 +0000 (18:04 +0900)]
[VE] Add maxnum and minnum
Add maxnum and minnum for float and double. Lowering is already
implemented, so this patch changes them legal and adds regression
tests.
Reviewed By: efocht
Differential Revision: https://reviews.llvm.org/D134108
Kazushi (Jam) Marukawa [Sat, 17 Sep 2022 09:04:06 +0000 (18:04 +0900)]
[VE] Change to expand FMA
VE has fused multiply-add instruction for only vector calculations. This
patch forces to expand scalar FMA to multiply and add instructions.
This patch also adds regression test.
Reviewed By: efocht
Differential Revision: https://reviews.llvm.org/D134107
David Green [Wed, 21 Sep 2022 08:54:17 +0000 (09:54 +0100)]
[AArch64] Insert/Extract of bitcast patterns
This adds some quick tablegen patterns for vector_insert(bitcast(..))
and bitcast(vector_extract(..)), allowing us to avoid a round-trip
through GPRs.
Differential Revision: https://reviews.llvm.org/D134022
David Sherwood [Tue, 20 Sep 2022 15:28:34 +0000 (16:28 +0100)]
[AArch64][SME] Disable inlining when SME attributes require smstart/smstop or lazy-save.
Inlining must be disabled when the call-site needs to toggle PSTATE.SM or
when the callee's function body is executed in a different streaming mode than
its caller. This is needed because function calls are the boundaries for
streaming mode changes.
More details about the SME attributes and design can be found
in D131562.
Differential Revision: https://reviews.llvm.org/D131581
Nikita Popov [Wed, 7 Sep 2022 08:20:20 +0000 (10:20 +0200)]
[MemorySSA] Remove PerformedPhiTranslation flag
I believe this is no longer necessary, as the underlying problem
has been fixed in a different way: Nowadays, we will adjust the
location size to beforeOrAfterPointer() if the pointer is not loop
invariant. This makes merging results translated across loop
backedges safe.
The two tests in phi-translation.ll show an improvement while still
being correct: The loads in the loop no longer alias with noalias
pointers, but still alias with the store in the entry block (which
they originally did not -- this is the bug that
PerformedPhiTranslation originally fixed).
Differential Revision: https://reviews.llvm.org/D133404
Jean Perier [Wed, 21 Sep 2022 08:23:45 +0000 (10:23 +0200)]
[flang] Limit shape inquiries rewrite to associate construct entity
The previous code was rewriting all shape inquires on associate
construct entities to inquires on the associated expression or variable.
This is is incorrect because at the point of inquiry, some statement
between the association and the inquiry may have modified the expression
operands or variable in a way that changes its shapes or bounds.
For instance, in the example below, expression rewrites was previously
replacing `size(x, 1)` by `size(p, 1)` which is invalid if p is a
pointer.
```
associate(x => p + 1)
call call_that_may_modify_p_shape()
print *, size(x, 1)
end associate
```
This change restricts rewrites of shape inquiries on associate construct entity
to use the associated expression shape and bounds if and only if the
shape/bounds are compile time constant. Otherwise, this may be invalid.
Differential Revision: https://reviews.llvm.org/D133857
Thomas Symalla [Wed, 21 Sep 2022 08:15:55 +0000 (10:15 +0200)]
[NFC][AMDGPU] Pre-commit test for D132837.
Pre-commit an additional fmac test for D132837.
Bjorn Pettersson [Fri, 16 Sep 2022 12:54:40 +0000 (14:54 +0200)]
[SROA] Check typeSizeEqualsStoreSize in isVectorPromotionViable
Commit
de3445e0ef15c4209 (https://reviews.llvm.org/D132096) made
changes to isVectorPromotionViable basically doing
// Create Vector with size of V, and each element of type Ty
...
uint64_t ElementSize = DL.getTypeStoreSizeInBits(Ty).getFixedSize();
uint64_t VectorSize = DL.getTypeSizeInBits(V).getFixedSize();
...
VectorType *VTy = VectorType::get(Ty, VectorSize / ElementSize, false);
Not quite sure why it uses the TypeStoreSize for the ElementSize,
but the new vector would only match in size with the old vector in
situations when the TypeStoreSize equals the TypeSize for Ty.
Therefore this patch adds a typeSizeEqualsStoreSize check as yet
another condition for allowing the the new type as a promotion
candidate.
Without this fix the new @test15 test would fail with an assert
like this:
opt: ../lib/Transforms/Scalar/SROA.cpp:1966:
auto isVectorPromotionViable(llvm::sroa::Partition &,
const llvm::DataLayout &)
::(anonymous class)::operator()(llvm::VectorType *,
llvm::VectorType *) const:
Assertion `DL.getTypeSizeInBits(RHSTy).getFixedSize() ==
DL.getTypeSizeInBits(LHSTy).getFixedSize() &&
"Cannot have vector types of different sizes!"' failed.
...
#8 isVectorPromotionViable(...)::$_10::operator()...
#9 llvm::SROAPass::rewritePartition(...)
#10 llvm::SROAPass::splitAlloca(...)
#11 llvm::SROAPass::runOnAlloca(...)
#12 llvm::SROAPass::runImpl(...)
#13 llvm::SROAPass::run(...)
Reviewed By: MatzeB
Differential Revision: https://reviews.llvm.org/D134032
River Riddle [Wed, 21 Sep 2022 01:11:08 +0000 (18:11 -0700)]
[mlir] Update tests to use kEmitAccessorPrefix_Prefixed
These aren't user facing, so just flip them directly to prefixed.
River Riddle [Wed, 21 Sep 2022 01:12:32 +0000 (18:12 -0700)]
[mlir][NFC] Tidy up the doc comment on CastInfo for Types
This had quite a few grammatical errors and typos.
River Riddle [Tue, 20 Sep 2022 23:42:59 +0000 (16:42 -0700)]
[mlir] Update Attributes to use the new casting infra
This allows for using the llvm namespace cast methods instead
of the ones on the Attribute class. The Attribute class methods
are kept for now, but we'll want to remove these eventually
(with a really long lead time).
Differential Revision: https://reviews.llvm.org/D134327