serge-sans-paille [Fri, 5 Mar 2021 09:23:28 +0000 (10:23 +0100)]
[NFC] Use ranged loop iteration instead of explicit looping
Jeremy Morse [Mon, 8 Mar 2021 09:48:11 +0000 (09:48 +0000)]
Revert "[tsan] Use large address space mapping on Apple Silicon Macs"
This reverts commit
bde2e5607167f3e9fd8c6b51275fc8ac654230a2.
This patch produces a compile failure on linux amd64 environments, when
running:
ninja GotsanRuntimeCheck
I get various build errors:
../rtl/tsan_platform.h:608: error: use of undeclared identifier 'Mapping'
return MappingImpl<Mapping, Type>();
Here's a buildbot with the same failure during stage "check-tsan in gcc
build", there are other unrelated failures in there.
http://lab.llvm.org:8011/#/builders/37/builds/2831
Frederik Gossen [Wed, 3 Mar 2021 09:18:33 +0000 (10:18 +0100)]
Clarify documentation for `Elementwise`, `Scalarizable`, `Vectorizable`, and
`Tensorizable` traits.
Differential Revision: https://reviews.llvm.org/D97841
Fraser Cormack [Thu, 4 Mar 2021 09:55:14 +0000 (09:55 +0000)]
[RISCV] Add new entry points to getContainerForFixedLengthVector
While working on adding fixed-length vectors to the calling convention,
it was necessary to be able to query for a fixed-length vector container
type without access to an instance of SelectionDAG.
This patch modifies the "main" getContainerForFixedLengthVector function
to use an instance of TargetLowering rather than SelectionDAG, and
preserves the SelectionDAG overload as a wrapper.
An additional non-static version of the function was also added to
simplify the common case in RISCVTargetLowering.
Reviewed By: craig.topper
Differential Revision: https://reviews.llvm.org/D97925
Saurabh Jha [Mon, 8 Mar 2021 09:25:22 +0000 (09:25 +0000)]
[Matrix] Implement += and -= for MatrixType.
Make sure CompLHSTy is set correctly for += and -= and matrix type
operands.
Bugzilla ticket is here https://bugs.llvm.org/show_bug.cgi?id=46164
Patch by Saurabh Jha <saurabh.jhaa@gmail.com>
Reviewed By: fhahn
Differential Revision: https://reviews.llvm.org/D98075
David Sherwood [Fri, 5 Mar 2021 13:49:50 +0000 (13:49 +0000)]
[LoopVectorize][SVE] Add tests for vectorising conditional loads of invariant addresses
For loops of the form:
void foo(int *a, int *cond, short *inv, long long n) {
for (long long i=0; i<n; ++i) {
if (cond[i])
a[i] = *inv;
}
}
we can vectorise for SVE using masked gather loads where the array
of pointers is simply a vector splat of 'inv' and the mask comes
from the condition 'cond[i] != 0'.
This patch simply adds tests upstream to defend this capability.
Differential Revision: https://reviews.llvm.org/D98043
Raul Tambre [Sat, 6 Mar 2021 09:45:57 +0000 (11:45 +0200)]
[CMake][compiler-rt] Use copying instead of symlinking for LSE builtins on non-Unix-likes
As reported in D93278 post-review symlinking requires privilege escalation on Windows.
Copying is functionally same, so fallback to it for systems that aren't Unix-like.
This is similar to the solution in AddLLVM.cmake.
Reviewed By: ikudrin
Differential Revision: https://reviews.llvm.org/D98111
Freddy Ye [Wed, 3 Mar 2021 08:17:37 +0000 (16:17 +0800)]
[X86] Refine "Support -march=alderlake"
Refine "Support -march=alderlake"
Compare with tremont, it includes 25 more new features. They are
adx, aes, avx, avx2, avxvnni, bmi, bmi2, cldemote, f16c, fma, hreset, invpcid,
kl, lzcnt, movdir64b, movdiri, pclmulqdq, pconfig, pku, serialize, shstk, vaes,
vpclmulqdq, waitpkg, widekl.
Reviewed By: pengfei
Differential Revision: https://reviews.llvm.org/D97832
Mehdi Amini [Mon, 8 Mar 2021 05:06:33 +0000 (05:06 +0000)]
Forward the `LLVM_ENABLE_LIBCXX` CMake parameter to the mlir standalone test
This allows to build and test MLIR with `-DLLVM_ENABLE_LIBCXX=ON`.
Ta-Wei Tu [Mon, 8 Mar 2021 03:35:35 +0000 (11:35 +0800)]
[LoopInterchange] Replace tightly-nesting-ness check with the one from `LoopNest`
The check `tightlyNested()` in `LoopInterchange` is similar to the one in `LoopNest`.
In fact, the former misses some cases where loop-interchange is not feasible and results in incorrect behaviour.
Replacing it with the much robust version provided by `LoopNest` reduces code duplications and fixes https://bugs.llvm.org/show_bug.cgi?id=48113.
`LoopInterchange` has a weaker definition of tightly or perfectly nesting-ness than the one implemented in `LoopNest::arePerfectlyNested()`.
Therefore, `tightlyNested()` is instead implemented with `LoopNest::checkLoopsStructure` and additional checks for unsafe instructions.
Reviewed By: Whitney
Differential Revision: https://reviews.llvm.org/D97290
Petr Hosek [Sun, 7 Mar 2021 23:08:11 +0000 (15:08 -0800)]
[Driver] Pass --unwindlib=platform to tests that check unwinder
There are two additional cases that were missed in D98131.
Differential Revision: https://reviews.llvm.org/D98158
Arthur O'Dwyer [Mon, 8 Mar 2021 01:22:03 +0000 (20:22 -0500)]
[libc++] Fix typos in the synopsis of bit_xor, bit_not, etc. NFC.
Mehdi Amini [Mon, 8 Mar 2021 00:57:36 +0000 (00:57 +0000)]
Fix build post-revert in
8d5a981a135a
One commit introduced after the reverted change was using an API
introduced there, this is reintroducing the API, but not the original
broken change.
Keith Smiley [Tue, 9 Feb 2021 16:35:25 +0000 (08:35 -0800)]
llvm-nm: add flag to suppress no symbols warning
This spelling matches binutils https://sourceware.org/bugzilla/show_bug.cgi?id=27408
Differential Revision: https://reviews.llvm.org/D83152
Mehdi Amini [Mon, 8 Mar 2021 00:13:26 +0000 (00:13 +0000)]
Revert "[SimplifyCFG] Update FoldBranchToCommonDest to be poison-safe"
This reverts commit
99108c791de0285ee726a10e8274772b18cee73c.
Clang is miscompiling LLVM with this change, a stage-2 build hits
multiple failures.
As a repro, I built clang in a stage1 directory and used it this way:
cmake -G Ninja ../llvm \
-DCMAKE_CXX_COMPILER=`pwd`/../build-stage1/bin/clang++ \
-DCMAKE_C_COMPILER=`pwd`/../build-stage1/bin/clang \
-DLLVM_TARGETS_TO_BUILD="X86;NVPTX;AMDGPU" \
-DLLVM_ENABLE_PROJECTS=mlir \
-DLLVM_BUILD_EXAMPLES=ON \
-DCMAKE_BUILD_TYPE=Release \
-DLLVM_ENABLE_ASSERTIONS=On
ninja check-mlir
Whitney Tsang [Sun, 7 Mar 2021 23:51:09 +0000 (23:51 +0000)]
[NFC][LoopUnroll] Add `-unroll-runtime-other-exit-predictable=false` in
`runtime-multiexit-heuristic.ll`
Added -unroll-runtime-other-exit-predictable=false in
runtime-multiexit-heuristic.ll to make it more robust.
runtime-multiexit-heuristic.ll intention is to test
-unroll-runtime-multi-exit=false, so the default value of
-unroll-runtime-other-exit-predictable should not impact the result.
Reviewed By: Meinersbur
Differential Revision: https://reviews.llvm.org/D98098
Whitney Tsang [Sun, 7 Mar 2021 23:48:00 +0000 (23:48 +0000)]
[LoopUnrollRuntime] Add option to assume the non latch exit block to be
predictable. (Add LIT)
Reviewed By: Meinersbur, bmahjour
Differential Revision: https://reviews.llvm.org/D97747
Martin Storsjö [Fri, 26 Feb 2021 13:12:37 +0000 (15:12 +0200)]
[libcxx] [test] Don't test CharFile (/dev/null) on windows
Also clarify a nearby comment regarding block devices.
Differential Revision: https://reviews.llvm.org/D98138
Martin Storsjö [Fri, 26 Feb 2021 14:29:16 +0000 (16:29 +0200)]
[libcxx] [test] Fix building create_directory in MSVC configurations
Don't use the mode_t type - the official windows sdk doesn't have that type.
(Mingw headers does have such a typedef though.) The umask function returns
int on windows, in both header variants.
Thus just use auto to deduce the umask return type automatically.
Differential Revision: https://reviews.llvm.org/D98140
Martin Storsjö [Sat, 6 Mar 2021 17:40:51 +0000 (19:40 +0200)]
[libcxx] [test] Clarify and improve consistency in lexically_relative_and_proximate.pass.cpp. NFC.
Use "expect" instead of "output" for generating "proximate_expected",
pass the arguments to PathEq in the same order as above, rename the
"proximate_expected" variable to be consistent with the naming of the
earlier "expect", use .empty() instead of .native().empty().
Differential Revision: https://reviews.llvm.org/D98127
Kuba Mracek [Sun, 7 Mar 2021 20:45:30 +0000 (12:45 -0800)]
[tsan] Use large address space mapping on Apple Silicon Macs
Differential Revision: https://reviews.llvm.org/D86377
Sanjay Patel [Sun, 7 Mar 2021 19:02:10 +0000 (14:02 -0500)]
[ConstProp] add tests for cmp with null and constexpr; NFC
Tony [Sun, 7 Mar 2021 08:49:18 +0000 (08:49 +0000)]
[NFC][AMDGPU] DWARF Extensions For Heterogeneous Debugging clarifications
Clarify that the base type endianity is used when creating implicit
location storage.
Remove duplicate definition of the generic type.
Reviewed By: scott.linder
Differential Revision: https://reviews.llvm.org/D98137
Matt Arsenault [Sun, 7 Mar 2021 14:56:45 +0000 (09:56 -0500)]
OpaquePtr: Record byref types in bitcode writer
I missed this case when adding byref. I believe this is NFC until
pointee types are really removed.
Matt Arsenault [Sun, 7 Mar 2021 14:59:11 +0000 (09:59 -0500)]
IR: Fix assert string message referring to the wrong attribute
Craig Topper [Sun, 7 Mar 2021 17:48:40 +0000 (09:48 -0800)]
[SelectionDAG] Add computeKnownBits support for ISD::USUBSAT.
The result of ISD::USUBSAT will never be larger than the LHS. We
can use this to put a bound on the number of leading zeros.
Reviewed By: RKSimon
Differential Revision: https://reviews.llvm.org/D98133
Craig Topper [Sun, 7 Mar 2021 17:36:53 +0000 (09:36 -0800)]
[RISCV] Fold (select_cc (setlt X, Y), 0, ne, trueV, falseV) -> (select_cc X, Y, lt, trueV, falseV)
A setcc can be created during LegalizeDAG after select_cc has been
created. This combine will enable us to fold these late setccs.
Reviewed By: luismarques
Differential Revision: https://reviews.llvm.org/D98132
Roman Lebedev [Sun, 7 Mar 2021 17:41:57 +0000 (20:41 +0300)]
[NFCI] Fix polly tests after
b46c085d2b6d15873fb53718f0a70b3848e19e4a
That commit changed SCEVExpander to emit intrinsics instead of icmp+select,
but i forgot about polly, and i'm not sure if any bots complained.
Juneyoung Lee [Sun, 7 Mar 2021 11:27:44 +0000 (20:27 +0900)]
[InstCombine] Add simplification of two logical and/ors
This is a patch that adds folding of two logical and/ors that share one variable:
a && (a && b) -> a && b
a && (a & b) -> a && b
...
This is towards removing the poison-unsafe select optimization (D93065 has more context).
Reviewed By: nikic
Differential Revision: https://reviews.llvm.org/D96945
Craig Topper [Sun, 7 Mar 2021 17:29:54 +0000 (09:29 -0800)]
[RISCV] Fold (select_cc (xor X, Y), 0, eq/ne, trueV, falseV) -> (select_cc X, Y, eq/ne, trueV, falseV)
This pattern occurs when lowering for overflow operations
introduce an xor after select_cc has already been formed.
I had to rework another combine that looked for select_cc of an xor
with 1. That xor will now get combined away so we just need to
look for the RHS of the select_cc being 1.
Reviewed By: luismarques
Differential Revision: https://reviews.llvm.org/D98130
Juneyoung Lee [Sun, 7 Mar 2021 17:25:27 +0000 (02:25 +0900)]
[InstCombine] use safe transformation by default
.. since it will be folded into and/or anyway
Nikita Popov [Sun, 7 Mar 2021 17:19:31 +0000 (18:19 +0100)]
[CVP] Remove -cvp-dont-add-nowrap-flags option
This option was originally added to work around a bug in LFTR.
The bug has long since been fixed.
Nikita Popov [Wed, 3 Mar 2021 19:38:50 +0000 (20:38 +0100)]
[DSE] Remove MemDep-based implementation
The MemorySSA-based implementation has been enabled without issue
for a while now, so keeping the old implementation around doesn't
seem useful anymore. This drops the MemDep-based implementation.
Differential Revision: https://reviews.llvm.org/D97877
Juneyoung Lee [Sun, 7 Mar 2021 17:11:01 +0000 (02:11 +0900)]
[InstCombine] fix another poison-unsafe select transformation
This fixes another unsafe select folding by disabling it if
EnableUnsafeSelectTransform is set to false.
EnableUnsafeSelectTransform's default value is true, hence it won't
affect generated code (unless the flag is explicitly set to false).
Juneyoung Lee [Sun, 7 Mar 2021 16:23:04 +0000 (01:23 +0900)]
[SimplifyCFG] Update FoldBranchToCommonDest to be poison-safe
This patch makes FoldBranchToCommonDest merge branch conditions into `select i1` rather than `and/or i1` when it is called by SimplifyCFG.
It is known that merging conditions into and/or is poison-unsafe, and this is towards making things *more* correct by removing possible miscompilations.
Currently, InstCombine simply consumes these selects into and/or of i1 (which is also unsafe), so the visible effect would be very small. The unsafe select -> and/or transformation will be removed in the future.
There has been efforts for updating optimizations to support the select form as well, and they are linked to D93065.
The safe transformation is fired when it is called by SimplifyCFG only. This is done by setting the new `PoisonSafe` argument as true.
Another place that calls FoldBranchToCommonDest is LoopSimplify. `PoisonSafe` flag is set to false in this case because enabling it has a nontrivial impact in performance because SCEV is more conservative with select form and InductiveRangeCheckElimination isn't aware of select form of and/or i1.
Reviewed By: nikic
Differential Revision: https://reviews.llvm.org/D95026
Juneyoung Lee [Sun, 7 Mar 2021 16:05:31 +0000 (01:05 +0900)]
[LoopUnswitch] unswitch if cond is in select form of and/or as well
Hello all,
I'm trying to fix unsafe propagation of poison values in and/or conditions by using
equivalent select forms (`select i1 A, i1 B, i1 false` and `select i1 A, i1 true, i1 false`)
instead.
D93065 has links to patches for this.
This patch allows unswitch to happen if the condition is in this form as well.
`collectHomogenousInstGraphLoopInvariants` is updated to keep traversal if
Root and the visiting I matches both m_LogicalOr()/m_LogicalAnd().
Other than this, the remaining changes are almost straightforward and simply replaces
Instruction::And/Or check with match(m_LogicalOr()/m_LogicalAnd()).
Reviewed By: nikic
Differential Revision: https://reviews.llvm.org/D97756
Juneyoung Lee [Sun, 7 Mar 2021 15:01:05 +0000 (00:01 +0900)]
[InstCombine] enrich select-safe-bool-transforms.ll test (NFC)
for https://reviews.llvm.org/D96945
Juneyoung Lee [Sun, 7 Mar 2021 14:16:39 +0000 (23:16 +0900)]
[ValueTracking] update directlyImpliesPoison to look into select's condition
This is a minor update in directlyImpliesPoison and makes it look into select's
condition.
Splitted from https://reviews.llvm.org/D96945
Simon Pilgrim [Sun, 7 Mar 2021 12:56:35 +0000 (12:56 +0000)]
[X86] canonicalizeShuffleWithBinOps - add X86ISD::PSHUFB handling.
Simon Pilgrim [Sun, 7 Mar 2021 11:17:03 +0000 (11:17 +0000)]
[X86] canonicalizeShuffleWithBinOps - shuffle oneuse constants.
We can freely shuffle all ones/zeros constants but we can also freely shuffle other constants as long as they only have one use.
Martin Storsjö [Thu, 15 Oct 2020 10:47:36 +0000 (13:47 +0300)]
[libcxx] [test] Fix path.modifiers remove_filename and replace_filename for windows
Also fix the synopsis in the replace_filename test, while touching
that file.
Differential Revision: https://reviews.llvm.org/D98108
Martin Storsjö [Thu, 4 Mar 2021 20:48:41 +0000 (22:48 +0200)]
[libunwind] Install the DLL when doing "ninja install"
This matches how install(... RUNTIME) is used in e.g. libcxx.
Differential Revision: https://reviews.llvm.org/D98020
Petr Hosek [Sun, 7 Mar 2021 01:42:36 +0000 (17:42 -0800)]
[Driver] Pass --unwindlib=platform to tests that check unwinder
This addresses an issue which was revealed by D98022.
Differential Revision: https://reviews.llvm.org/D98131
Tony [Sat, 6 Mar 2021 20:12:22 +0000 (20:12 +0000)]
[NFC][AMDGPU]DWARF Extensions For Heterogeneous Debugging generic type endianity
In "DWARF Extensions For Heterogeneous Debugging" document that the
DWARF generic type has a target architecture defined endianity.
Reviewed By: scott.linder
Differential Revision: https://reviews.llvm.org/D98126
Fangrui Song [Sun, 7 Mar 2021 03:25:22 +0000 (19:25 -0800)]
[MC] Migrate some parseToken(AsmToken::EndOfStatement, ...) to parseEOL()
Fangrui Song [Sun, 7 Mar 2021 01:45:23 +0000 (17:45 -0800)]
[MC] Add parseEOL() overload and migrate some parseToken(AsmToken::EndOfStatement) to parseEOL()
For many directives, the following diagnostics
* `error: unexpected token`
* `error: unexpected token in '.abort' directive"`
are replaced with `error: expected newline`.
`unexpected token` may make the user think a different token is needed.
`expected newline` is clearer about the expected token.
For `in '...' directive`, the directive name is not useful because the next line
replicates the error line which includes the directive.
Fangrui Song [Sun, 7 Mar 2021 00:26:27 +0000 (16:26 -0800)]
[MC] Parse end-of-line for .addrsig & .addrsig_sym
Fangrui Song [Sun, 7 Mar 2021 00:20:55 +0000 (16:20 -0800)]
[MC] Parse end-of-line for .cfi_* directives
Otherwise MCAsmStreamer will emit duplicate newlines.
Kazu Hirata [Sat, 6 Mar 2021 23:52:55 +0000 (15:52 -0800)]
[TableGen] Use range-based for loops (NFC)
Kazu Hirata [Sat, 6 Mar 2021 23:52:54 +0000 (15:52 -0800)]
[objdump] Use ListSeparator (NFC)
Kazu Hirata [Sat, 6 Mar 2021 23:52:52 +0000 (15:52 -0800)]
[clang] Fix typos in documentation (NFC)
Fangrui Song [Sat, 6 Mar 2021 23:23:02 +0000 (15:23 -0800)]
[MC] Support .symver *, *, remove
As a resolution to https://sourceware.org/bugzilla/show_bug.cgi?id=25295 , GNU as
from binutils 2.35 supports the optional third argument for the .symver directive.
'remove' for a non-default version is useful:
`.symver def_v1, def@v1, remove` => def_v1 is not retained in the symbol table.
Previously the user has to strip the original symbol or specify a `local:`
version node in a version script to localize the symbol.
`.symver def, def@@v1, remove` and `.symver def, def@@@v1, remove` are supported
as well, though they are identical to `.symver def, def@@@v1`.
local/hidden are not useful so this patch does not implement them.
Nikita Popov [Sat, 6 Mar 2021 22:28:38 +0000 (23:28 +0100)]
[GVN] Don't explicitly materialize undefs from dead blocks
When materializing an available load value, do not explicitly
materialize the undef values from dead blocks. Doing so will
will force creation of a phi with an undef operand, even if there
is a dominating definition. The phi will be folded away on
subsequent GVN iterations, but by then we may have already
poisoned MDA cache slots.
Simply don't register these values in the first place, and let
SSAUpdater do its thing.
Nikita Popov [Sat, 6 Mar 2021 22:17:28 +0000 (23:17 +0100)]
[GVN] Add test for load GVN with dead block (NFC)
What this test illustrates is that GVN inserts an unnecessary
phi node initially, which prevents alias analysis from establishing
NoAlias, and MDA caches that result. We would be able to fully fold
this after another -gvn run with clean MDA.
Fangrui Song [Sat, 6 Mar 2021 22:19:22 +0000 (14:19 -0800)]
[ModuleSummaryAnalysis] Avoid duplicate elements in Worklist. NFC
Fangrui Song [Sat, 6 Mar 2021 22:09:54 +0000 (14:09 -0800)]
[FunctionImport] Delete unneeded setLive. NFC
ValueInfo's in Worklist are guaranteed to be live.
Mauri Mustonen [Sat, 6 Mar 2021 21:45:50 +0000 (21:45 +0000)]
[VPlan] Support to widen call intructions in VPlan native path
Add support to widen call instructions in VPlan native path by using a correct recipe when such instructions are encountered. This is already used by inner loop vectorizer.
Previously call instructions got handled by wrong recipes and resulted in unreachable instruction errors like this one: https://bugs.llvm.org/show_bug.cgi?id=48139.
Patch by Mauri Mustonen <mauri.mustonen@tuni.fi>
Reviewed By: fhahn
Differential Revision: https://reviews.llvm.org/D97278
Martin Storsjö [Thu, 15 Oct 2020 10:58:32 +0000 (13:58 +0300)]
[libcxx] [test] Fix lexically_normal and lexically_relative_and_proximate for windows
Convert the expected result path to preferred separators, add exceptions
to the test results where needed (due to some cases being interpreted
as a root name).
Differential Revision: https://reviews.llvm.org/D98106
Roman Lebedev [Sat, 6 Mar 2021 19:58:53 +0000 (22:58 +0300)]
[InstCombine] Don't canonicalize (gep i8* X, -(ptrtoint Y)) as (inttoptr (sub (ptrtoint X), (ptrtoint Y)))
It's just a wrong thing to do.
We introduce inttoptr where there were none, which results in
loosing all provenance information because we no longer have a GEP{i,},
and pessimize all future optimizations,
because we are basically not allowed to look past `inttoptr`.
(gep i8* X, -(ptrtoint Y)) *is* the canonical form.
So just drop this fold.
Noticed while reviewing D98120.
Roman Lebedev [Sat, 6 Mar 2021 19:53:30 +0000 (22:53 +0300)]
[NFC][InstCombine] Add plain GEP test for (gep i8* X, -(ptrtoint Y)) --> (inttoptr (sub (ptrtoint X), (ptrtoint Y))) fold
Fangrui Song [Sat, 6 Mar 2021 19:42:27 +0000 (11:42 -0800)]
[rs4gc] Fix -Wunused-variable in -DLLVM_ENABLE_ASSERTIONS=off builds
Roman Lebedev [Fri, 26 Feb 2021 13:48:58 +0000 (16:48 +0300)]
[NFCI] SCEVExpander: emit intrinsics for integral {u,s}{min,max} SCEV expressions
These intrinsics, not the icmp+select are the canonical form nowadays,
so we might as well directly emit them.
This should not cause any regressions, but if it does,
then then they would needed to be fixed regardless.
Note that this doesn't deal with `SCEVExpander::isHighCostExpansion()`,
but that is a pessimization, not a correctness issue.
Additionally, the non-intrinsic form has issues with undef,
see https://reviews.llvm.org/D88287#2587863
Sean Fertile [Sat, 6 Mar 2021 16:33:35 +0000 (11:33 -0500)]
[PowePC][AIX] Handle variadic vector call operands.
Patch adds support for passing vector call operands to variadic
functions. Arguments which are fixed shadow GPRs and stack space even
when they are passed in vector registers, while arguments passed through
ellipses are passed in properly aligned GPRs if available and on the
stack once all GPR arguments registers are consumed.
Differential Revision: https://reviews.llvm.org/D97956
Ta-Wei Tu [Sat, 6 Mar 2021 18:37:54 +0000 (02:37 +0800)]
[NPM] Add -enable-loopinterchange option to NPM
We have the `enable-loopinterchange` option in legacy pass manager but not in NPM.
Add `LoopInterchange` pass to the optimization pipeline (at the same position as before)
when `enable-loopinterchange` is turned on.
Reviewed By: aeubanks, fhahn
Differential Revision: https://reviews.llvm.org/D98116
Elia Geretto [Sat, 6 Mar 2021 18:38:27 +0000 (10:38 -0800)]
[XRay][compiler-rt][x86_64] Fix CFI directives in assembly trampolines
This patch modifies the x86_64 XRay trampolines to fix the CFI information
generated by the assembler. One of the main issues in correcting the CFI
directives is the `ALIGNED_CALL_RAX` macro, which makes the CFA dependent on
the alignment of the stack. However, this macro is not really necessary because
some additional assumptions can be made on the alignment of the stack when the
trampolines are called. The code has been written as if the stack is guaranteed
to be 8-bytes aligned; however, it is instead guaranteed to be misaligned by 8
bytes with respect to a 16-bytes alignment. For this reason, always moving the
stack pointer by 8 bytes is sufficient to restore the appropriate alignment.
Trampolines that are called from within a function as a result of the builtins
`__xray_typedevent` and `__xray_customevent` are necessarely called with the
stack properly aligned so, in this case too, `ALIGNED_CALL_RAX` can be
eliminated.
Fixes https://bugs.llvm.org/show_bug.cgi?id=49060
Reviewed By: MaskRay
Differential Revision: https://reviews.llvm.org/D96785
Fangrui Song [Sat, 6 Mar 2021 18:32:27 +0000 (10:32 -0800)]
[sanitizer] Restrict clock_gettime workaround to glibc
The hackery is due to glibc clock_gettime crashing from preinit_array (D40679).
32-bit musl architectures do not define `__NR_clock_gettime` so the code causes a compile error.
Tested on Alpine Linux x86-64 (musl) and FreeBSD x86-64.
Reviewed By: vitalybuka
Differential Revision: https://reviews.llvm.org/D96925
William S. Moses [Tue, 2 Mar 2021 19:41:43 +0000 (14:41 -0500)]
[Attributor] Enable heap-to-stack of any size
Enable Attributor's heap-to-stack to lower unbounded allocations given a max size of -1
Differential Revision: https://reviews.llvm.org/D97873
Philip Reames [Sat, 6 Mar 2021 17:49:27 +0000 (09:49 -0800)]
[tests] Update an autogen test for format change
Philip Reames [Sat, 6 Mar 2021 17:27:19 +0000 (09:27 -0800)]
[gvn] Handle simply phi equivalence cases
GVN basically doesn't handle phi nodes at all. This is for a reason - we can't value number their inputs since the predecessor blocks have probably not been visited yet.
However, it also creates a significant pass ordering problem. As it stands, instcombine and simplifycfg ends up implementing CSE of phi nodes. This means that for any series of CSE opportunities intermixed with phi nodes, we end up having to alternate instcombine/simplifycfg and gvn to make progress.
This patch handles the simplest case by simply preprocessing the phi instructions in a block, and CSEing them if they are syntactically identical. This turns out to be powerful enough to handle many cases in a single invocation of GVN since blocks which use the cse'd phi results are visited after the block containing the phi. If there's a CSE opportunity in one the phi predecessors required to recognize the phi CSE opportunity, that will require a second iteration on the function. (Still within a single run of gvn though.)
Compile time wise, this could go either way. On one hand, we're potentially causing GVN to iterate over the function more. On the other, we're cutting down on iterations between two passes and potentially shrinking the IR aggressively. So, a bit unclear what to expect.
Note that this does still rely on instcombine to canonicalize block order of the phis, but that's a one time transformation independent of the values incoming to the phi.
Differential Revision: https://reviews.llvm.org/D98080
Martin Storsjö [Wed, 4 Nov 2020 09:06:45 +0000 (11:06 +0200)]
[libcxx] [test] Fix path.itr/iterator.pass.cpp for windows
Differential Revision: https://reviews.llvm.org/D98107
Philip Reames [Sat, 6 Mar 2021 17:20:02 +0000 (09:20 -0800)]
[rs4gc/tests] Remove use of internal debug flags
As a pragmatic tradeoff, the ease of updating the tests outweighs the slightly easier to understand test conditions. Where revevant, debug output was converted to comments to help human understanding.
Philip Reames [Sat, 6 Mar 2021 17:04:00 +0000 (09:04 -0800)]
[rs4gc] autogen a bunch of tests for ease of update
Philip Reames [Sat, 6 Mar 2021 02:05:21 +0000 (18:05 -0800)]
[rs4gc] track the original value in the state use for base pointer rewriting
I'd originally intended to build on this for another purpose and have decided not to, but at a minimum, the stronger asserts are useful.
Philip Reames [Sat, 6 Mar 2021 00:51:53 +0000 (16:51 -0800)]
[rs4gc] minor code style improvement
Vy Nguyen [Sat, 6 Mar 2021 16:31:16 +0000 (11:31 -0500)]
[lld-macho][NFC] Replace config param with a global in hasCompatVersion() helper.
Differential Revision: https://reviews.llvm.org/D98115
Nikita Popov [Sat, 6 Mar 2021 14:58:18 +0000 (15:58 +0100)]
[Loads] Restructure getAvailableLoadStore implementation (NFC)
Separate out some conditions with early exits, to make it easier to
support additional cases.
Nikita Popov [Sat, 6 Mar 2021 15:49:25 +0000 (16:49 +0100)]
[InstCombine] Add tests for non-trivial store to load forward (NFC)
Examples of things we mostly don't handle.
KareemErgawy-TomTom [Sat, 6 Mar 2021 14:40:14 +0000 (15:40 +0100)]
[MLIR][SPIRV] Rename `spv.selection` to `spv.mlir.selection`.
To unify the naming scheme across all ops in the SPIR-V dialect, we are
moving from spv.camelCase to spv.CamelCase everywhere. For ops that
don't have a SPIR-V spec counterpart, we use spv.mlir.snake_case.
Reviewed By: antiagainst
Differential Revision: https://reviews.llvm.org/D98014
Yaxun (Sam) Liu [Mon, 22 Feb 2021 23:17:20 +0000 (18:17 -0500)]
[HIP] Support Spack packages
Spack is a package management tool extensively used by HPC community.
As ROCm packages are built by Spack by HPC community, we need to teach
clang driver to detect ROCm installation built by Spack.
Reviewed by: Artem Belevich
Differential Revision: https://reviews.llvm.org/D97340
Lei Zhang [Sat, 6 Mar 2021 13:03:27 +0000 (08:03 -0500)]
[mlir][spirv] Convert tensor.extract for very small tensors
Normally tensors will be stored in buffers before converting to SPIR-V,
given that is how a large amount of data is sent to the GPU. However,
SPIR-V supports converting from tensors directly too. This is for the
cases where the tensor just contains a small amount of elements and it
makes sense to directly inline them as a small data array in the shader.
To handle this, internally the conversion might create new local
variables. SPIR-V consumers in GPU drivers may or may not optimize that
away. So this has implications over register pressure. Therefore, a
threshold is used to control when the patterns should kick in.
Reviewed By: ThomasRaoux
Differential Revision: https://reviews.llvm.org/D98052
Alexey Lapshin [Sun, 14 Feb 2021 15:34:19 +0000 (18:34 +0300)]
[X86][VARARG] Avoid spilling xmm registers for va_start.
That review is extracted from D69372.
It fixes https://bugs.llvm.org/show_bug.cgi?id=42219 bug.
For the noimplicitfloat mode, the compiler mustn't generate
floating-point code if it was not asked directly to do so.
This rule does not work with variable function arguments currently.
Though compiler correctly guards block of code, which copies xmm vararg
parameters with a check for %al, it does not protect spills for xmm registers.
Thus, such spills are generated in non-protected areas and could break code,
which does not expect floating-point data. The problem happens in -O0
optimization mode. With this optimization level there is used
FastRegisterAllocator, which spills virtual registers at basic block boundaries.
Register Allocator does not protect spills with additional control-flow modifications.
Thus to resolve that problem, it is suggested to not copy incoming physical
registers into virtual registers. Instead, store incoming physical xmm registers
into the memory from scratch.
Differential Revision: https://reviews.llvm.org/D80163
Nikita Popov [Sat, 6 Mar 2021 11:14:48 +0000 (12:14 +0100)]
[ConstantFold] Handle vectors in ConstantFoldLoadThroughBitcast()
There seems to be an impedance mismatch between what the type
system considers an aggregate (structs and arrays) and what
constants consider an aggregate (structs, arrays and vectors).
Rather than adjusting the type check, simply drop it entirely,
as getAggregateElement() is well-defined for non-aggregates: It
simply returns null in that case.
Nikita Popov [Sat, 6 Mar 2021 11:10:52 +0000 (12:10 +0100)]
[GVN] Regenerate test checks (NFC)
David Zarzycki [Sat, 6 Mar 2021 11:06:55 +0000 (06:06 -0500)]
Partially revert "[runtimes] Use add_lit_testsuite to register lit testsuites"
This partially reverts commit
e1173c8794f4942d2cdddb090489ba5a6cc193e8
until we find out why libcxx tests are failing under runtimes build.
Juneyoung Lee [Sat, 6 Mar 2021 09:42:17 +0000 (18:42 +0900)]
[LangRef] dos2unix (NFC)
Nikita Popov [Sat, 6 Mar 2021 09:24:34 +0000 (10:24 +0100)]
[LVI] Simplify and generalize handling of clamp patterns
Instead of handling a number of special cases for selects, handle
this generally when inferring ranges from conditions. We already
infer ranges from `x + C pred C2` to `x`, so doing the same for
`x pred C2` to `x + C` is straightforward.
Nikita Popov [Sat, 6 Mar 2021 09:35:30 +0000 (10:35 +0100)]
[CVP] Add additional tests for clamp patterns (NFC)
These are the same as the existing tests, but using different
predicates that are not handled by the current code.
Raul Tambre [Wed, 3 Mar 2021 14:25:25 +0000 (16:25 +0200)]
[runtimes] Fix crosscompiling after
a7cad6680b4087eff8994f1f99ac40c661a6621f (D97451)
It moved the logic for CMake target arguments into llvm_ExternalProject_Add().
No handling was added for CMAKE_CROSSCOMPILING, which has a separate set of compiler_args.
This broke crosscompiling, as now the runtimes builds defaulted to the compiler's default.
I've also added passing of CMAKE_ASM_COMPILER, which was missing before although we were passing the triple for it.
Reviewed By: zero9178
Differential Revision: https://reviews.llvm.org/D97855
Nikita Popov [Sat, 6 Mar 2021 09:18:07 +0000 (10:18 +0100)]
[LVI] Pass offset by reference (NFC)
Instead of by pointer. This allows us to use offsets that are not
materialized in the IR.
Nikita Popov [Sat, 6 Mar 2021 09:12:17 +0000 (10:12 +0100)]
[CVP] Fix tests for clamp patterns (NFC)
These tests didn't test the pattern they were supposed to, because
%a instead of %add was used in the select, which turned this into
a normal min/max).
Noticed this when commenting out the clamp handling code did not
result in any test failures...
Jay Foad [Sat, 6 Mar 2021 08:52:23 +0000 (08:52 +0000)]
Revert "Revert "[AMDGPU] Restore the s_memtime instruction in gfx1030""
This reverts commit
e58d68fcd06ddc7743e0419c0b364df3d44121b6.
This reinstates commit
fc28f600e558c1344618bda149a068d6162b6f0b
with a fix to initialize HasShaderCyclesRegister. See
https://reviews.llvm.org/D97928.
Aleksandr Platonov [Sat, 6 Mar 2021 07:44:05 +0000 (10:44 +0300)]
[clangd] Use URIs instead of paths in the index file list
Without this patch the file list of the preamble index contains URIs, but other indexes file lists contain file paths.
This makes `indexedFiles()` always returns `IndexContents::None` for the preamble index, because current implementation expects file paths inside the file list of the index.
This patch fixes this problem and also helps to avoid a lot of URI to path conversions during indexes merge.
Reviewed By: kadircet
Differential Revision: https://reviews.llvm.org/D97535
Martin Storsjö [Fri, 5 Mar 2021 15:27:55 +0000 (17:27 +0200)]
[libcxx] [test] Move the is_<platform> functions down to subclasses
If cross testing (and manually specifying a LIBCXX_TARGET_INFO in the
cmake configuration, as the default is to match the build platform),
we want the accessors for querying the target platform, is_windows,
is_darwin, to return the right value depending on which target info
class is used, not based on what platform is running the build and
driving the tests.
When LIBCXX_TARGET_INFO isn't defined, the right target info class
is chosen automatically based on the platform one is running on, so
this shouldn't make any practical difference for such setups.
Differential Revision: https://reviews.llvm.org/D98045
Martin Storsjö [Thu, 4 Mar 2021 20:19:47 +0000 (22:19 +0200)]
[clang] Don't default to a specifically shared libunwind on mingw with a g++ driver
For MinGW targets, we distinguish between an explicitly shared unwinder
library (requested via -shared-libgcc), an explicitly static one
(requested via -static-libgcc or -static) and the default case (which
just passes -lunwind to the linker, which will pick either shared or
static depending on what's available, with the normal linker logic).
This makes the implicit default case (as added in D79995) actually work as
it was intended, when using the g++ driver (which is the main usecase for
libunwind as far as I know).
Differential Revision: https://reviews.llvm.org/D98023
Martin Storsjö [Thu, 4 Mar 2021 20:33:11 +0000 (22:33 +0200)]
[clang] Fix typos in the default logic for CLANG_DEFAULT_UNWINDLIB
CLANG_DEFAULT_RTLIB had a typo, and libunwind isn't a valid
option for it.
This keeps the actual behaviour from before, defaulting to none if
using compiler-rt as rtlib.
Differential Revision: https://reviews.llvm.org/D98022
Fangrui Song [Sat, 6 Mar 2021 05:45:11 +0000 (21:45 -0800)]
[MC][RISCV] Support .reloc *, BFD_RELOC_{NONE,32,64}, *
BFD_RELOC_NONE is useful for ld --gc-sections: it provides a generic way indicating a dependency between two sections.
Fangrui Song [Sat, 6 Mar 2021 05:39:15 +0000 (21:39 -0800)]
[MC][ARM] Support .reloc *, BFD_RELOC_{NONE,8,16,32}, *
BFD_RELOC_NONE is useful for ld --gc-sections: it provides a generic way indicating a dependency between two sections.
Fangrui Song [Sat, 6 Mar 2021 05:37:29 +0000 (21:37 -0800)]
[MC][test] Fix reloc-directive-elf-*.s
Mehdi Amini [Sat, 6 Mar 2021 05:31:51 +0000 (05:31 +0000)]
Use gen-dialect-doc instead of gen-op-doc for the Builtin dialect
This is fixing the missing title and menu entry on the MLIR website.
Fangrui Song [Sat, 6 Mar 2021 05:31:45 +0000 (21:31 -0800)]
[MC][PowerPC] Support .reloc *, BFD_RELOC_{NONE,16,32,64}, *
BFD_RELOC_NONE is useful for ld --gc-sections: it provides a generic way indicating a dependency between two sections.