Valentin Clement [Tue, 22 Mar 2022 15:11:42 +0000 (16:11 +0100)]
[flang][NFC] Remove unused variable
Fix for buildbot failure shown after
fe252f8ed6369acdb13d4e290d3b9dfe2ec4eb8e
Kiran Chandramohan [Tue, 22 Mar 2022 14:13:52 +0000 (14:13 +0000)]
[Flang] Lower the sqrt intrinsics
The intrinsic computes the square root for real and complex numbers. By
default they are lowered to runtime calls to libpgmath. With the llvm
option, it can be lowered to llvm intrinsics (not all types .eg. complex
are supported for llvm lowering).
This is part of the upstreaming effort from the fir-dev branch in [1].
[1] https://github.com/flang-compiler/f18-llvm-project
Reviewed By: schweitz
Differential Revision: https://reviews.llvm.org/D122018
Co-authored-by: Eric Schweitz <eschweitz@nvidia.com>
Co-authored-by: Jean Perier <jperier@nvidia.com>
Zakk Chen [Thu, 17 Mar 2022 03:17:06 +0000 (20:17 -0700)]
[RISCV] Add policy operand for masked compare and vmsbf/vmsif/vmsof IR
intrinsics.
Those operations are updated under a tail agnostic policy, but they
could have mask agnostic or undisturbed.
Reviewed By: rogfer01
Differential Revision: https://reviews.llvm.org/D120228
Sanjay Patel [Tue, 22 Mar 2022 14:40:05 +0000 (10:40 -0400)]
[InstCombine] add test for abs with dominating condition; NFC
There's a potential miscompile or missed optimization with
propagating 'nsw' in the transform proposed in D122013, so
we need at least one more test for coverage.
Valentin Clement [Tue, 22 Mar 2022 14:40:32 +0000 (15:40 +0100)]
[flang] Lower boxed procedure
In FIR, we want to wrap function pointers in a special box known as a
boxproc value. Fortran has a limited form of dynamic scoping
[https://tinyurl.com/2p8v2hw7] between "host procedures" and "internal
procedures". There are a number of implementations possible.
Boxproc typed values abstract away the implementation details of when a
function pointer can be passed directly (as a raw address) and when a
function pointer has to account for the presence of a dynamic scope.
When lowering Fortran syntax to FIR, all function pointers are emboxed
as boxproc values.
When creating LLVM IR, we must strip away the abstraction and produce
low-level LLVM "assembly" code. This patch implements that
transformation as converting the boxproc values to either raw function
pointers or executable trampolines on the stack as needed. The
trampoline then captures the dynamic scope context within an executable
thunk that can be passed instead of the function's raw address.
Some extra handling is required for Fortran functions that return a
character value to deal with LEN values here.
Some of the code in Bridge.cpp and ConvertExpr.cpp and be re-arranged to
faciliate the upstreaming effort.
This patch is part of the upstreaming effort from fir-dev branch.
Reviewed By: jeanPerier, PeteSteinfeld
Differential Revision: https://reviews.llvm.org/D122223
Co-authored-by: mleair <leairmark@gmail.com>
Co-authored-by: Jean Perier <jperier@nvidia.com>
Co-authored-by: Eric Schweitz <eschweitz@nvidia.com>
Co-authored-by: V Donaldson <vdonaldson@nvidia.com>
Co-authored-by: Kiran Chandramohan <kiran.chandramohan@arm.com>
chenglin.bi [Tue, 22 Mar 2022 14:34:21 +0000 (10:34 -0400)]
[InstCombine] add tests for abs with dominating condition; NFC
Baseline tests for D122013 (issue #54132).
Nikita Popov [Tue, 22 Mar 2022 14:10:33 +0000 (15:10 +0100)]
[CGOpenMPRuntime] Remove some uses of deprecated Address ctor
Krasimir Georgiev [Tue, 22 Mar 2022 14:28:34 +0000 (15:28 +0100)]
[clang-format] don't break up #-style comment sections
Follow-up from https://github.com/llvm/llvm-project/commit/
36d13d3f8adb3d1a6bae71370afa23d11a94dc78; https://reviews.llvm.org/D121451.
Restore the old behavior in situations where we use # as comments and long strings of #'s for comment sections.
Reviewed By: MyDeveloperDay
Differential Revision: https://reviews.llvm.org/D122230
Florian Hahn [Tue, 22 Mar 2022 14:23:11 +0000 (14:23 +0000)]
[LV] Remove Loop argument from createInductionResumeValues (NFCI).
createInductionResumeValues only uses its loop argument only to get the
pre-header, but the pre-header is already known (we created/cached it
earlier). Remove the unneeded loop argument.
Pavel Labath [Tue, 22 Mar 2022 13:52:02 +0000 (14:52 +0100)]
[lldb/test] Increase pexpect termination timeouts
By default these timeouts are extremely small (0.1s). This means that
100ms after sending an EOF, pexpect will start sending the process
increasingly aggressive signals, but the small timeouts mean that (on a
loaded machine) the kernel may not have enough time to process the
signal even if the overall effect of the signal is to kill the
application.
It turns out we were already relying on this signals (instead of regular
EOF quits) in our tests. In my experiments it was sufficient to block
SIGINT and SIGHUP to cause some test to become flaky. This was most
likely the reason of a couple of flakes on the lldb-x86_64-debian bot,
and is probably the reason why the pexpect tests are flaky on several
other (e.g. asan) bots.
This patch increses the timeout to 6 seconds (60-fold increase), which
is hopefully sufficient to avoid flakes even in the most extreme
situations.
Kiran Chandramohan [Tue, 22 Mar 2022 14:04:02 +0000 (14:04 +0000)]
[Flang] Lower the exp, log, log10 intrinsics
The intrinsic computes the exponent, log real and complex numbers and
log10 for real numbers. By default they are lowered to runtime calls to
libpgmath. kind=10 and 16 are not supported. With the llvm option, it
can be lowered to llvm intrinsics (not all types .eg. complex are
supported for llvm lowering).
This is part of the upstreaming effort from the fir-dev branch in [1].
[1] https://github.com/flang-compiler/f18-llvm-project
Reviewed By: PeteSteinfeld
Differential Revision: https://reviews.llvm.org/D122132
Co-authored-by: Eric Schweitz <eschweitz@nvidia.com>
Co-authored-by: William S Moses <gh@wsmoses.com>
Nikita Popov [Tue, 22 Mar 2022 13:38:27 +0000 (14:38 +0100)]
[CGOpenMPRuntimeGPU] Remove uses of deprecated address constructor
Worth noting that the code marked with FIXME is dead and would
produce invalid IR if hit. Someone familiar with this code should
probably look into that.
Aaron Ballman [Tue, 22 Mar 2022 14:00:05 +0000 (10:00 -0400)]
Fix _BitInt suffix width calculation
@mgehre-amd pointed out the following post-commit review feedback on
the changes in
8cba72177dcd8de5d37177dbaf2347e5c1f0f1e8:
As an example, the paper says 3wb /* Yields an _BitInt(3); two value
bits, one sign bit */.
So I would expect that 0xFwb gives _BitInt(5); four value bits, one
sign bit, but with this implementation I get _BitInt(2).
This is because ResultVal as 4 bits, and getMinSignedBits() inteprets
it as negative and thus says that 1 bit is enough to represent -1.
This corrects the behavior for calculating the bit-width and adds some
test coverage.
Joseph Huber [Tue, 22 Mar 2022 13:28:12 +0000 (09:28 -0400)]
[LTO] Add configuartion option to use default optimization pipeline
This patch adds a configuration option to simply use the default pass
pipeline in favor of the LTO-specific one. We observed some severe
performance penalties when uding device-side LTO for OpenMP offloading
applications caused by the LTO-pass pipeline. This is primarily because
OpenMP uses an LLVM bitcode library to implement a GPU runtime library.
In a standard compilation we link this bitcode library into each source
file and optimize it with the default pipeline. When performing LTO we
link it late with all the files, but the bitcode library never has the
regular optimization pipeline applied to it so we miss a few
optimizations just using the LTO pipeline to optimize it.
I'm not committed to this solution, but it's the easiest method to solve
this performance regression when using LTO without changing the
optimizatin pipeline for other users.
Reviewed By: tianshilei1992
Differential Revision: https://reviews.llvm.org/D122133
Arjun P [Thu, 17 Mar 2022 22:25:40 +0000 (22:25 +0000)]
[MLIR][Prebsurger] Add IntegerRelation::intersect supporting locals properly
Reviewed By: Groverkss
Differential Revision: https://reviews.llvm.org/D122149
Arjun P [Mon, 21 Mar 2022 17:13:19 +0000 (17:13 +0000)]
[MLIR][Presburger] MultiAffineFunction::removeIdRange: fix bug where kind wasn't passed on to IntegerPolyhedron::removeIdRange
Reviewed By: Groverkss
Differential Revision: https://reviews.llvm.org/D122158
Arjun P [Fri, 18 Mar 2022 12:29:29 +0000 (12:29 +0000)]
[MLIR][Presburger] fix bug where Simplex::addZeroRow was not undoable
Previously, an UndoLogEntry was added by addRow but not by addZeroRow. So
calling directly into addZeroRow, as LexSimplex::addCut does, was not an
undoable operation. In the current usage of addCut this could never
lead to an incorrect result, and addZeroRow is protected, so it is not
currently possible to add a regression test for this. This bug needs to be
fixed for the symbolic integer lexmin algorithm.
Reviewed By: Groverkss
Differential Revision: https://reviews.llvm.org/D122162
Sanjay Patel [Tue, 22 Mar 2022 13:02:28 +0000 (09:02 -0400)]
[InstCombine] try to canonicalize logical shift after bswap
When shifting by a byte-multiple:
bswap (shl X, C) --> lshr (bswap X), C
bswap (lshr X, C) --> shl (bswap X), C
This is an IR implementation of a transform suggested in D120648.
The "swaps cancel" test models the motivating optimization from
that proposal.
Alive2 checks (as noted in the other review, we could use
knownbits to handle shift-by-variable-amount, but that can be an
enhancement patch):
https://alive2.llvm.org/ce/z/pXUaRf
https://alive2.llvm.org/ce/z/ZnaMLf
Differential Revision: https://reviews.llvm.org/D122010
Djordje Todorovic [Tue, 22 Mar 2022 11:16:30 +0000 (12:16 +0100)]
[Debugify] Use DebugifyLevel in Debugify original mode
Before this patch the DebugifyLevel option was used for
the synthetic mode, so after this, it will be used in
the original mode as well.
Differential Revision: https://reviews.llvm.org/D115623
Nikita Popov [Tue, 22 Mar 2022 12:57:54 +0000 (13:57 +0100)]
[LICM] Handle store of pointer to itself (PR54495)
Rather than iterating over users and comparing operands, iterate
over uses and check operand number. Otherwise, we'll end up
promoting a store twice if it has two equal operands.
This can only happen with opaque pointers, as otherwise both
operands differ by a level of indirection, so a bitcast would have
to be involved.
Fixes https://github.com/llvm/llvm-project/issues/54495.
Igor Kudrin [Tue, 22 Mar 2022 10:14:56 +0000 (14:14 +0400)]
[NVPTX][tests] Do not run tests that require direct object generation
NVPTX does not support generating binary files, which is required for
these tests.
The majority of tests in 'DebugInfo/Generic' also require emitting
object files, so they all are disabled for NVPTX.
Differential Revision: https://reviews.llvm.org/D121996
Igor Kudrin [Tue, 22 Mar 2022 10:14:25 +0000 (14:14 +0400)]
[tests] Make 'object-emission' imply 'default_triple'
If 'config.target_triple' is empty, there is no sense to define the
'object-emission' tag.
Differential Revision: https://reviews.llvm.org/D121994
Igor Kudrin [Tue, 22 Mar 2022 10:13:48 +0000 (14:13 +0400)]
[NVPTX] Avoid a crash when 'llc' is called with '-filetype=null'
For '-filetype=null', 'NVPTXTargetStreamer' is not created, so the
return value of 'OutStreamer->getTargetStreamer()' should be checked
before calling the methods.
Differential Revision: https://reviews.llvm.org/D122001
Igor Kudrin [Tue, 22 Mar 2022 10:13:37 +0000 (14:13 +0400)]
[tests] Force (some) X86-specific tests to use an explicit triple
These tests are located in 'X86' subfolders which means that they should
be compiled for that target. As they did not have the target specified
explicitly, they in fact were compiled for a default target triple. Not
all targets support all required features for these tests; for example,
if NVPTX is used as a default triple, the tests fail. The patch makes the
tests run for 'x86_64', thus they pass regardless of the default target.
Differential Revision: https://reviews.llvm.org/D121998
Bryan Chan [Tue, 22 Mar 2022 12:36:42 +0000 (08:36 -0400)]
[ThinLTO] Work around buggy FileCheck pattern; NFC
Update the FileCheck patterns in a test case to prevent a path name
containing the `@` character from causing it to fail unnecessarily,
e.g. during a Jenkins CI job.
Vince Bridgers [Wed, 9 Feb 2022 00:22:32 +0000 (18:22 -0600)]
[analyzer] Refactor makeNull to makeNullWithWidth (NFC)
Usages of makeNull need to be deprecated in favor of makeNullWithWidth
for architectures where the pointer size should not be assumed. This can
occur when pointer sizes can be of different sizes, depending on address
space for example. See https://reviews.llvm.org/D118050 as an example.
This was uncovered initially in a downstream compiler project, and
tested through those systems tests.
steakhal performed systems testing across a large set of open source
projects.
Co-authored-by: steakhal
Resolves: https://github.com/llvm/llvm-project/issues/53664
Reviewed By: NoQ, steakhal
Differential Revision: https://reviews.llvm.org/D119601
Sanjay Patel [Tue, 22 Mar 2022 11:52:39 +0000 (07:52 -0400)]
[InstCombine] try to narrow shifted bswap-of-zext
This is the IR counterpart to
370ebc9d9a573d6
which provided a bswap narrowing fix for issue #53867.
Here we can be more general (although I'm not sure yet
what would happen for illegal types in codegen - too
rare to worry about?):
https://alive2.llvm.org/ce/z/3-CPfo
This will be more effective if we have moved the shift
after the bswap as proposed in D122010, but it is
independent of that patch.
Differential Revision: https://reviews.llvm.org/D122166
Sanjay Patel [Fri, 18 Mar 2022 20:08:37 +0000 (16:08 -0400)]
[InstCombine] add tests for shift-of-bswap; NFC
David Green [Tue, 22 Mar 2022 12:20:19 +0000 (12:20 +0000)]
[AArch64] Add extra insert subvector cost model tests. NFC
alex-t [Tue, 22 Mar 2022 12:13:15 +0000 (13:13 +0100)]
[AMDGPU] use scalar shift for SALU users in frame index elimination
In the frame index lowering we have to insert shift and add
instructions to adjust stack object access. We need to take care of the stack
object user kind and use scalar shift/add for scalar users.
Reviewed By: rampitec
Differential Revision: https://reviews.llvm.org/D121524
Djordje Todorovic [Tue, 22 Mar 2022 09:14:36 +0000 (10:14 +0100)]
[Debugify] Optimize debugify original mode
Before we start addressing the issue with having
a lot of false positives when using debugify in
the original mode, we have made a few patches that
should speed up the execution of the testing
utility Passes.
For example, when testing a large project
(let's say LLVM project itself), we can face
a lot of potential DI issues. Usually, we use
-verify-each-debuginfo-preserve (that is very
similar to -debugify-each) -- it collects
DI metadata before each Pass, and after the Pass
it checks if the Pass preserved the DI metadata.
However, we can speed up this process, since we
don't need to collect DI metadata before each
Pass -- we could use the DI metadata that are
collected after the previous Pass from
the pipeline as an input for the next Pass.
This patch speeds up the utility for ~2x.
Differential Revision: https://reviews.llvm.org/D115622
Shraiysh Vaishay [Tue, 22 Mar 2022 09:47:52 +0000 (15:17 +0530)]
[flang][OpenMP] Lowering critical construct
This patch adds translation from PFT to FIR for critical construct.
This is part of the upstreaming effort from the fir-dev branch in [1].
[1] https://github.com/flang-compiler/f18-llvm-project
Co-authored-by: kiranchandramohan <kiranchandramohan@gmail.com>
Reviewed By: kiranchandramohan
Differential Revision: https://reviews.llvm.org/D122218
Simon Pilgrim [Tue, 22 Mar 2022 10:48:19 +0000 (10:48 +0000)]
[X86][SandyBridge] Remove superfluous mmx store from vector load schedule model group
Noticed by D122216
alex-t [Sat, 12 Mar 2022 14:38:11 +0000 (17:38 +0300)]
[AMDGPU] use scalar shift for SALU users in frame index elimination
In the frame index lowering we have to insert shift and add
instructions to adjust stack object access. We need to take care of the stack
object user kind and use scalar shift/add for scalar users.
Reviewed By: rampitec
Differential Revision: https://reviews.llvm.org/D121524
Simon Moll [Tue, 22 Mar 2022 10:41:14 +0000 (11:41 +0100)]
[VP] Fix VPintrinsic::getStaticVectorLength for vp.merge|select
VPIntrinsic::getStaticVectorLength infers the operational vector length
of a VPIntrinsic instance from a type that is used with the intrinsic.
The function used the mask operand before. Yet, vp.merge|select do not
have a mask operand (in the predicating sense that the other VP
intrinsics are using them - it is a selection mask for them). Fallback
to the return type to fix this.
Reviewed By: kaz7
Differential Revision: https://reviews.llvm.org/D121913
Nikita Popov [Tue, 22 Mar 2022 09:25:35 +0000 (10:25 +0100)]
[CGStmtOpenMP] Remove uses of deprecated Address constructor
Shengchen Kan [Tue, 22 Mar 2022 08:49:45 +0000 (16:49 +0800)]
[X86] Rename MMX_MOVD64from64rm to MMX_MOVD64from64mr b/c it stores sth, NFC
Reviewed By: pengfei, RKSimon
Differential Revision: https://reviews.llvm.org/D122216
serge-sans-paille [Tue, 22 Mar 2022 09:37:17 +0000 (10:37 +0100)]
Fix missing include under -DEXPENSIVE_CHECK
Regression introduced by
f1985a3f855d3676c5aad0e5c258d2ea38598f44
Zakk Chen [Mon, 21 Feb 2022 08:54:46 +0000 (00:54 -0800)]
[RISCV] Add policy operand for masked vid and viota IR intrinsics.
Reviewed By: rogfer01
Differential Revision: https://reviews.llvm.org/D120227
Haojian Wu [Mon, 21 Mar 2022 14:55:46 +0000 (15:55 +0100)]
Reland "[pseudo] Split greatergreater token."
It was reverted, because the test had a lift-time issue.
Reland
f66d3758bda99e9f57bfdad168212feda18792ae with a fix.
Alex Bradbury [Tue, 22 Mar 2022 09:11:46 +0000 (09:11 +0000)]
[WebAssembly] Always emit functype directives for defined functions
This fixes bug <https://github.com/llvm/llvm-project/issues/54022>. For
now this means that defined functions will have two .functype directives
emitted. Given discussion in that bug has suggested interest in moving
towards using something other than .functype to mark the beginning of a
function (which would, as a side-effect, solve this issue), this patch
doesn't attempt to avoid that duplication.
Some test cases that used CHECK-LABEL: foo rather than CHECK-LABEL: foo:
are broken by this change. This patch updates those test cases to always
have a colon at the end of the CHECK-LABEL string.
Differential Revision: https://reviews.llvm.org/D122134
Nikita Popov [Tue, 22 Mar 2022 09:08:04 +0000 (10:08 +0100)]
[CodeGen][RISCV] Avoid deprecated address constructor
Martin Storsjö [Tue, 15 Mar 2022 11:30:35 +0000 (13:30 +0200)]
[clang-tidy] Don't try to build CTTestTidyModule for Windows with dylibs
In MinGW mode, it's possible to build LLVM/Clang with
LLVM_LINK_LLVM_DYLIB (which implicitly enables plugins too). Other
existing ways of building plugins on Windows is to build with
LLVM_EXPORT_SYMBOLS_FOR_PLUGINS, where each executable exports its
symbols.
With LLVM_LINK_LLVM_DYLIB, we can't generally skip building plugins
even if they are set up with PLUGIN_TOOL, as some plugins (e.g.
under clang/examples) set up that way do build properly (as
they manually call clang_target_link_libraries, which links in the
libclang-cpp.dll dylib).
For CTTestTidyModule, there's no corresponding dylib that would
provide the same exports.
Differential Revision: https://reviews.llvm.org/D121687
serge-sans-paille [Mon, 21 Mar 2022 20:53:28 +0000 (21:53 +0100)]
Cleanup includes: Transforms/IPO
Preprocessor output diff: -238205 lines
Discourse thread: https://discourse.llvm.org/t/include-what-you-use-include-cleanup
Differential Revision: https://reviews.llvm.org/D122183
Nikita Popov [Tue, 22 Mar 2022 08:52:12 +0000 (09:52 +0100)]
[CodeGen] Remove some uses of deprecated Address constructor
Remove two stray uses in CodeGenModule and CGCUDANV.
serge-sans-paille [Mon, 21 Mar 2022 20:52:58 +0000 (21:52 +0100)]
Cleanup includes: Linker
Preprocessor output diff: -7300 lines
Discourse thread: https://discourse.llvm.org/t/include-what-you-use-include-cleanup
Differential Revision: https://reviews.llvm.org/D122182
Nikita Popov [Fri, 18 Mar 2022 12:06:42 +0000 (13:06 +0100)]
[CodeGen] Avoid deprecated Address ctor in EmitLoadOfPointer()
This requires some adjustment in caller code, because there was
a confusion regarding the meaning of the PtrTy argument: This
argument is the type of the pointer being loaded, not the addresses
being loaded from.
Nikita Popov [Mon, 21 Mar 2022 16:52:40 +0000 (17:52 +0100)]
[CodeGen][OpenMP] Make EmitLoadOfPointer() type consistent
If necessary insert a bitcast beforehand, so the LLVM-level pointer
type and the Clang-level pointer type line up.
Stanislav Gatev [Mon, 21 Mar 2022 12:06:16 +0000 (12:06 +0000)]
[clang][dataflow] Model the behavior of optional and std swap
Differential Revision: https://reviews.llvm.org/D122129
Reviewed-by: ymandel, xazax.hun
Zakk Chen [Sat, 19 Feb 2022 06:19:15 +0000 (22:19 -0800)]
[RISCV] Support mask policy for RVV IR intrinsics.
Add the UsesMaskPolicy flag to indicate the operations result
would be effected by the mask policy. (ex. mask operations).
It means RISCVInsertVSETVLI should decide the mask policy according
by mask policy operand or passthru operand.
If UsesMaskPolicy is false (ex. unmasked, store, and reduction operations),
the mask policy could be either mask undisturbed or agnostic.
Currently, RISCVInsertVSETVLI sets UsesMaskPolicy operations default to
MA, otherwise to MU to keep the current mask policy would not be changed
for unmasked operations.
Add masked-tama, masked-tamu, masked-tuma and masked-tumu test cases.
I didn't add all operations because most of implementations are using
the same pseudo multiclass. Some tests maybe be duplicated in different
tests. (ex. masked vmacc with tumu shows in vmacc-rv32.ll and masked-tumu)
I think having different tests only for policy would make the testing
clear.
Reviewed By: craig.topper
Differential Revision: https://reviews.llvm.org/D120226
Lian Wang [Tue, 22 Mar 2022 07:32:18 +0000 (07:32 +0000)]
[RISCV][NFC] Add some check prefixes to remove redundant checks in some IR tests
Reviewed By: frasercrmck, jacquesguan
Differential Revision: https://reviews.llvm.org/D122211
Petr Hosek [Fri, 18 Mar 2022 23:07:35 +0000 (16:07 -0700)]
[CMake][Fuchsia] Switch to lld on Apple platforms
lld Mach-O backend supports all our use cases now.
Differential Revision: https://reviews.llvm.org/D122047
Shengchen Kan [Tue, 22 Mar 2022 07:58:52 +0000 (15:58 +0800)]
[X86] Simplify attributes of the generated memory folding table (NFCI)
This reduces the gaps between tables in X86GenFoldTables.inc and X86InstrFoldTables.cpp
gysit [Tue, 22 Mar 2022 06:57:02 +0000 (06:57 +0000)]
[mlir][affine] Add affine.min / affine.max canonicalization.
The revision introduces a affine.min and affine.max canonicalization pattern that orders the result expressions. It flattens the result expressions to arrays of dimension and symbol coefficients plus one constant coefficient and rearranges them in lexicographic order.
Without the pattern, CSE will not eliminate two affine.min / affine.max operation if the results are ordered differently. For example, the operations
```
%1 = affine.min affine_map<(d0) -> (8, -d0 + 27)>(%arg4)
%2 = affine.min affine_map<(d0) -> (-d0 + 27, 8)>(%arg4)
```
doe not CSE. After applying the pattern, the two operations are equivalent
```
%1 = affine.min affine_map<(d0) -> (8, -d0 + 27)>(%arg4)
%2 = affine.min affine_map<(d0) -> (8, -d0 + 27)>(%arg4)
```
which enables CSE.
Reviewed By: nicolasvasilache
Differential Revision: https://reviews.llvm.org/D121819
Siva Chandra Reddy [Tue, 22 Mar 2022 07:04:21 +0000 (07:04 +0000)]
[libc][Obvious] Remove an unnecessary dep and use inline_memcpy.
An unnecessary dep of the getenv function is removed. From the x86_64
loader, a call to __llvm_libc::memcpy is replaced with call to
__llvm_libc::inline_memcpy.
Chuanqi Xu [Tue, 22 Mar 2022 06:20:38 +0000 (14:20 +0800)]
[NFC] [Coroutines] Remove unnecessary check and constraints on SmallVector
The CoroSplit pass would check the existence of coroutine intrinsic
before starting work. It is not necessary and wasteful since it would
iterate over the Module.
This patch also removes the constraint on the corresponding of the
SmallVector for the possible coroutines in the Modules. The original
value is 4. Given coroutines is used actually in practice. 4 is really
relatively a low threshold.
Yeting Kuo [Wed, 16 Mar 2022 05:09:12 +0000 (13:09 +0800)]
[RISCV] Add basic cost model for vector casting
To perform the cost model of vector casting, the patch consider most vector
casts as their scalar form and consider those vector form of free scalr castings
as 1.
Reviewed By: craig.topper
Differential Revision: https://reviews.llvm.org/D121771
Sheng [Tue, 22 Mar 2022 05:47:18 +0000 (05:47 +0000)]
[TableGen] Fix a misuse of getValueAsBitsInit
`getValueAsBitsInit` will assert when the "SoftFail" isn't presented.
But given the 'if' statement below, we should've allowed this situation.
This patch fix this.
Petr Hosek [Tue, 22 Mar 2022 01:34:59 +0000 (18:34 -0700)]
Revert "[bootstrap] Allow passing options to sub-builds for all targets"
This reverts commit
240e06dfe77feabe38a03cbb1c94875639d0f9ff.
Shraiysh Vaishay [Tue, 22 Mar 2022 04:38:33 +0000 (10:08 +0530)]
[mlir] Printing oilist element
This patch attempts to deduce when the oilist element must be printed
based on the optional arguments to it. This especially helps creating
an operation accurately because with the current implementation, the
inferred unit attributes must be manually added to print the clauses
appropriately.
Reviewed By: Mogball
Differential Revision: https://reviews.llvm.org/D121579
jacquesguan [Mon, 21 Mar 2022 09:29:16 +0000 (17:29 +0800)]
[RISCV][NFC] Add common check prefix to reduce duplicate check lines.
Differential Revision: https://reviews.llvm.org/D122120
Ella Ma [Tue, 18 May 2021 06:22:46 +0000 (14:22 +0800)]
[analyzer][ctu] Fix wrong 'multiple definitions' errors caused by space characters in lookup names when parsing the ctu index file
This error was found when analyzing MySQL with CTU enabled.
When there are space characters in the lookup name, the current
delimiter searching strategy will make the file path wrongly parsed.
And when two lookup names have the same prefix before their first space
characters, a 'multiple definitions' error will be wrongly reported.
e.g. The lookup names for the two lambda exprs in the test case are
`c:@S@G@F@G#@Sa@F@operator int (*)(char)#1` and
`c:@S@G@F@G#@Sa@F@operator bool (*)(char)#1` respectively. And their
prefixes are both `c:@S@G@F@G#@Sa@F@operator` when using the first space
character as the delimiter.
Solving the problem by adding a length for the lookup name, making the
index items in the format of `<USR-Length>:<USR File> <Path>`.
---
In the test case of this patch, we found that it will trigger a "triple
mismatch" warning when using `clang -cc1` to analyze the source file
with CTU using the on-demand-parsing strategy in Darwin systems. And
this problem is also encountered in D75665, which is the patch
introducing the on-demand parsing strategy.
We temporarily bypass this problem by using the loading-ast-file
strategy.
Refer to the [discourse topic](https://discourse.llvm.org/t/60762) for
more details.
Differential Revision: https://reviews.llvm.org/D102669
jacquesguan [Mon, 21 Mar 2022 07:43:40 +0000 (15:43 +0800)]
[mlir][Math] Add more constant folder for Math ops.
This revision add constant folder for abs, copysign, ctlz, cttz and
ctpop.
Differential Revision: https://reviews.llvm.org/D122115
Carl Ritson [Tue, 22 Mar 2022 02:13:13 +0000 (11:13 +0900)]
[MachineSink] Check block prologue interference
Sinking must check for interference between the block prologue
and the instruction being sunk.
Specifically check for clobbering of uses by the prologue, and
overwrites to prologue defined registers by the sunk instruction.
Reviewed By: rampitec, ruiling
Differential Revision: https://reviews.llvm.org/D121277
Louis Dionne [Mon, 21 Mar 2022 21:05:06 +0000 (17:05 -0400)]
[libc++] Re-enable workaround for pre-ranges CTAD in std::span
See https://reviews.llvm.org/D121626 for details -- this re-enables the
CTAD we removed, since it does break some stuff as well (even though it's
not nearly as bad as the removed constructors fixed by D121626).
Differential Revision: https://reviews.llvm.org/D122184
Louis Dionne [Mon, 21 Mar 2022 17:43:02 +0000 (13:43 -0400)]
[cmake] Handle iOS, watchOS and tvOS when finding compiler-rt on Apple
This patch uses CMAKE_OSX_SYSROOT, which should contain the SDK path
that we're building against on Apple platforms, to determine which
platform we are compiling for and set the compiler-rt suffix accordingly.
Differential Revision: https://reviews.llvm.org/D122161
Petr Hosek [Tue, 22 Mar 2022 01:33:50 +0000 (18:33 -0700)]
[Clang] Set -mlinker-version explicitly in the lto test
This test assumes that the driver will set -object_path_lto linker
flag and it requests the platform linker with -fuse-ld=. When lld is
used as the host linker, the host linker version is unset and so
Clang won't set -object_path_lto since that flag is set conditionally
only when linker version is at least 116. We set the linker version
explicitly to make sure that -object_path_lto is set. That approach
is already used elsewhere in the test.
Differential Revision: https://reviews.llvm.org/D122110
Petr Hosek [Tue, 22 Mar 2022 01:32:03 +0000 (18:32 -0700)]
[CMake][Clang] Skip host link version detection for lld on Darwin
When lld is being used as host linker, skip version detection since
lld version cannot be used interchangeably with ld64 version and lld
is already handled specially in Clang driver.
Differential Revision: https://reviews.llvm.org/D122109
Joseph Huber [Mon, 21 Mar 2022 23:53:05 +0000 (19:53 -0400)]
[OpenMP] Manually unroll the argument copy loop
The unroll pragma did not properly work as the loop bound was not known
when we optimize the runtime and we then added a "unroll disable"
metadata which prevented unrolling later when the bounds were known.
For now we manually unroll to make sure up to 16 elements are handled
nicely. This helps optimizations to look through the argument passing.
Reviewed By: jdoerfert
Differential Revision: https://reviews.llvm.org/D109164
Arthur Eubanks [Tue, 22 Mar 2022 00:11:35 +0000 (17:11 -0700)]
Revert "Revert "[OpaquePtr][LLParser] Automatically detect opaque pointers in .ll files""
This reverts commit
9c96a6bbfdde665b5c2389100a15acdeea0f4145.
Issues were already fixed at head.
Arthur Eubanks [Tue, 22 Mar 2022 00:11:14 +0000 (17:11 -0700)]
Revert "Revert "[OpaquePointers][BitcodeReader] Enable -opaque-pointers if we see an opaque pointer type""
This reverts commit
80ec0ebfdc5692a58e0832125f2c6a991df9d63f.
Issues were already fixed at head.
wren romano [Mon, 21 Mar 2022 23:37:11 +0000 (16:37 -0700)]
[mlir][sparse] Marking several things const/static
This is (tangential) work towards fixing: https://github.com/llvm/llvm-project/issues/51652
Reviewed By: aartbik
Differential Revision: https://reviews.llvm.org/D122059
Mitch Phillips [Mon, 21 Mar 2022 23:17:11 +0000 (16:17 -0700)]
Revert "[OpaquePointers][BitcodeReader] Enable -opaque-pointers if we see an opaque pointer type"
This reverts commit
46216aa97729aa994dce79e75cd25707fb4b7874.
Dependency https://reviews.llvm.org/D119482 broke the ASan buildbot.
Mitch Phillips [Mon, 21 Mar 2022 23:03:48 +0000 (16:03 -0700)]
Revert "[OpaquePtr][LLParser] Automatically detect opaque pointers in .ll files"
This reverts commit
295172ef51c6b9a73bc0fdcfd25f8c41ead9034a.
Reason: Broke the ASan buildbot. More details are available on the
original Phab review at https://reviews.llvm.org/D119482.
Walter Erquinigo [Mon, 21 Mar 2022 20:26:57 +0000 (13:26 -0700)]
[trace] clear any existing tracing sessions before relaunching the binary
There's a bug caused when a process is relaunched: the target, which
doesn't change, keeps the Trace object from the previous process, which
is already defunct, and causes segmentation faults when it's attempted
to be used.
A fix is to clean up the Trace object when the target is disposing of
the previous process during relaunches.
A way to reproduce this:
```
lldb a.out
b main
r
process trace start
c
r
process trace start
```
Differential Revision: https://reviews.llvm.org/D122176
Walter Erquinigo [Mon, 21 Mar 2022 22:46:19 +0000 (15:46 -0700)]
[trace] Use vector instead of ArrayRef when reading data
I incorrectly returned an ArrayRef when the underlying object didn't own
the data. Instead, returning a vector<uint8_t> is what we should do.
This fixes an issue when trying to access an intel-pt trace buffer
larger than 16 MB.
repro
```
go to a breakpoint
thread trace start -s
16777216
n
thread trace dump instructions # this doesn't fail anymore
```
Differential Revision: https://reviews.llvm.org/D122192
Mitch Phillips [Mon, 21 Mar 2022 22:58:38 +0000 (15:58 -0700)]
Revert "[memprof] Store callsite metadata with memprof records."
This reverts commit
0d362c90d335509c57c0fbd01ae1829e2b9c3765.
Reason: Causes the MSan buildbot to fail (see comments on
https://reviews.llvm.org/D121179 for more information
Vasileios Porpodas [Fri, 18 Mar 2022 01:28:28 +0000 (18:28 -0700)]
Recommit "[SLP] Fix lookahead operand reordering for splat loads."
Original review: https://reviews.llvm.org/D121354
The original commit
9136145eb019e1d18c966d4d06a3df349b88cc14 broke the build on several targets.
Differential Revision: https://reviews.llvm.org/D121973
Walter Erquinigo [Mon, 21 Mar 2022 22:56:53 +0000 (15:56 -0700)]
[simple] fix formatting in the intel-pt doc
A list needs to be properly formatted.
Jonas Devlieghere [Mon, 21 Mar 2022 22:21:10 +0000 (15:21 -0700)]
[lldb] Fix log & progress report for in-memory binaries
Fix the log and progress report message for in-memory binaries. If
there's no object file, use the name from the Module. With this patch we
correctly show the library name when attaching to a remote process
without an expanded shared cache.
Differential revision: https://reviews.llvm.org/D122177
Nathan James [Mon, 21 Mar 2022 22:29:22 +0000 (22:29 +0000)]
Revert "[ASTMatchers] Output currently processing match and nodes on crash"
This reverts commit
d89f9e963e4979466193dc6a15fe091bf7ca5c47.
Jakob Johnson [Mon, 21 Mar 2022 21:58:06 +0000 (14:58 -0700)]
Fix
e6c84f82b87576a57d1fa1c7e8c289d3d4fa7ab1
Failed buildbot: https://lab.llvm.org/buildbot/#/builders/17/builds/19490
Only run perf event tsc conversion test on x86_64.
Yonghong Song [Sat, 12 Mar 2022 19:05:40 +0000 (11:05 -0800)]
[Clang] Fix an unused-but-set-variable warning with volatile variable
For the following code,
void test() {
volatile int j = 0;
for (int i = 0; i < 1000; i++)
j += 1;
return;
}
If compiled with
clang -g -Wall -Werror -S -emit-llvm test.c
we will see the following error:
test.c:2:6: error: variable 'j' set but not used [-Werror,-Wunused-but-set-variable]
volatile int j = 0;
^
This is not quite right since 'j' is indeed used due to '+=' operator.
gcc doesn't emit error either in this case.
Also if we change 'j += 1' to 'j++', the warning will disappear
with latest clang.
Note that clang will issue the warning if the volatile declaration
involves only simple assignment (var = ...).
To fix the issue, in function MaybeDecrementCount(), if the
operator is a compound assignment (i.e., +=, -=, etc.) and the
variable is volatile, the count for RefsMinusAssignments will be
decremented, similar to 'j++' case.
Differential Revision: https://reviews.llvm.org/D121715
Craig Topper [Mon, 21 Mar 2022 21:55:39 +0000 (14:55 -0700)]
Revert "[RISCV] Special case sign extended scalars when type legalizing nxvXi64 .vx instrinsics on RV32."
This reverts commit
8c4937b33fe9090546f6dc834e174177075b5084.
Committed by mistake.
sstwcw [Mon, 21 Mar 2022 21:47:51 +0000 (21:47 +0000)]
[clang-format] Use an enum for context types. NFC
We currently have all those fields in AnnotatingParser::Context. They
are not inherited from the Context object for the parent scope. They
are exclusive. Now they are replaced with an enum.
`InCpp11AttributeSpecifier` and `InCSharpAttributeSpecifier` are not
handled like the rest in ContextType because they are not exclusive.
Reviewed By: curdeius, MyDeveloperDay, HazardyKnusperkeks, owenpan
Differential Revision: https://reviews.llvm.org/D121907
Craig Topper [Mon, 21 Mar 2022 21:50:05 +0000 (14:50 -0700)]
[RISCV] Simplify some code. NFC
Craig Topper [Mon, 21 Mar 2022 21:37:52 +0000 (14:37 -0700)]
[RISCV] Remove stray slash from comment. NFC
Craig Topper [Mon, 21 Mar 2022 21:27:09 +0000 (14:27 -0700)]
[RISCV] Special case sign extended scalars when type legalizing nxvXi64 .vx instrinsics on RV32.
On RV32, we need to type legalize i64 scalar arguments to intrinsics.
We usually do this by splatting the value into a vector separately.
If the scalar happens to be sign extended, we can continue using a .vx
intrinsic.
We already special cased sign extended constants, this extends it
to any sign extended value.
I've only added tests for one case of vadd. Most intrinsics go
through the same check. I can add more tests if we're concerned.
Differential Revision: https://reviews.llvm.org/D122186
Mahesh Ravishankar [Fri, 18 Mar 2022 16:36:16 +0000 (16:36 +0000)]
[mlir][MemRef] Add early exit for computing dropped unit-dims.
Computing dropped unit-dims when all the unit dims are dropped, does
not need to check for strides being dropped.
This also enables canonicalization of reduced-rank subviews.
Reviewed By: gysit
Differential Revision: https://reviews.llvm.org/D121766
Jorge Gorbe Moya [Mon, 21 Mar 2022 21:22:15 +0000 (14:22 -0700)]
Revert "[clang-format] Handle attributes before case label."
This reverts commit
596fa2d90044841c33b9a0e6b17406c2a45077a2.
Simon Pilgrim [Mon, 21 Mar 2022 21:37:37 +0000 (21:37 +0000)]
[X86] combineAddOrSubToADCOrSBB - Fold ADD/SUB + (AND(SRL(X,Y),1) -> ADC/SBB+BT(X,Y) (REAPPLIED)
As suggested on PR35908, if we are adding/subtracting an extracted bit, attempt to use BT instead to fold the op and use a ADC/SBB op.
Reapply with extra type legality checks - LowerAndToBT was originally only used during lowering, now that it can occur earlier we might encounter illegal types that we can either promote to i32 or just bail.
Differential Revision: https://reviews.llvm.org/D122084
Jakob Johnson [Mon, 21 Mar 2022 21:19:11 +0000 (14:19 -0700)]
Fix
e6c84f82b87576a57d1fa1c7e8c289d3d4fa7ab1
Failed buildbot: https://lab.llvm.org/buildbot/#/builders/68/builds/29250
Use toString() to consume the Error
Konrad Kleine [Mon, 21 Mar 2022 21:16:35 +0000 (21:16 +0000)]
[format] Use int8_t as the underlying type of all enums in FormatStyle
It was requested here (https://reviews.llvm.org/D120398#3353053) to make
the underlying type of all enums in `FormatStyle` an `int8_t`.
Originally the type was changed in https://reviews.llvm.org/D93758.
Reviewed By: HazardyKnusperkeks, curdeius, owenpan
Differential Revision: https://reviews.llvm.org/D120884
Maksim Panchenko [Tue, 15 Mar 2022 19:48:53 +0000 (12:48 -0700)]
[X86][NFCI] Remove redundant functions
Reviewed By: skan
Differential Revision: https://reviews.llvm.org/D121731
Nikita Popov [Mon, 21 Mar 2022 21:12:51 +0000 (22:12 +0100)]
[X86] Regenerate test checks
Update test checks after the revert in
15336828395792bfc818e6fcd3d951cba1b8477b.
Frederic Cambus [Mon, 21 Mar 2022 21:05:58 +0000 (22:05 +0100)]
[compiler-rt] Remove mentions of AuroraUX in code comments and docs.
AuroraUX was an operating system project based on an OpenSolaris kernel
and an Ada userland.
There appear to be no public code or release available online anymore.
The project page on Wikipedia [1] was deleted in January 2012, and a news
item [2] from November 2012 has more details.
[1] https://en.wikipedia.org/w/index.php?title=Special:Log/delete&page=AuroraUX
[2] https://www.phoronix.com/scan.php?page=news_item&px=MTIyMTI
Daniel Grumberg [Thu, 17 Mar 2022 10:50:55 +0000 (10:50 +0000)]
Ensure -extract-api handles multiple headers correctly
clang -extract-api should accept multiple headers and forward them to a
single CC1 instance. This change introduces a new ExtractAPIJobAction.
Currently API Extraction is done during the Precompile phase as this is
the current phase that matches the requirements the most. Adding a new
phase would need to change some logic in how phases are scheduled. If
the headers scheduled for API extraction are of different types the
driver emits a diagnostic.
Differential Revision: https://reviews.llvm.org/D121936
Jakob Johnson [Mon, 21 Mar 2022 20:54:32 +0000 (13:54 -0700)]
Fix
e6c84f82b87576a57d1fa1c7e8c289d3d4fa7ab1
Failed buildbot: https://lab.llvm.org/buildbot/#/builders/17/builds/19480
The fix seems to be simply be adding some type casts to make the compiler happy
Snehasish Kumar [Wed, 2 Mar 2022 22:06:06 +0000 (14:06 -0800)]
[memprof] Store callsite metadata with memprof records.
To ease profile annotation, each of the callsites in a function can be
annotated with profile data - "IR metadata format for MemProf" [1]. This
patch extends the on-disk serialized record format to store the debug
information for allocation callsites incl inline frames. This change is
incompatible with the existing format i.e. indexed profiles must be
regenerated, raw profiles are unaffected.
[1] https://groups.google.com/g/llvm-dev/c/aWHsdMxKAfE/m/WtEmRqyhAgAJ
Reviewed By: tejohnson
Differential Revision: https://reviews.llvm.org/D121179
Arthur Eubanks [Mon, 21 Mar 2022 20:54:47 +0000 (13:54 -0700)]
[llvm-stress] Remove global LLVMContext
Can cause initialization order fiasco issues.