Lang Hames [Wed, 12 Jan 2022 06:53:13 +0000 (17:53 +1100)]
[JITLink][AArch64] Use R-X permissions for the GOT.
This consistent with ld64's treatment of the GOT, but the main aim here is a
short-term workaround for a bad interaction between stub code sequences and
memory layout: Stubs use LDRLiteral19 relocations to reference the GOT, but
BasicLayout currently puts RW- segments between R-- and R-X segments -- a large
RW- segment (or a large R-- for that matter) can cause the relocation to fail
with an out-of-range error.
Putting the GOT in R-X fixes this efficiently in practice. A more robust fix
will be to use a longer code sequence to materialize the GOT pointer and then
rewrite the stub to use a shorter sequence where possible.
Lang Hames [Wed, 12 Jan 2022 04:42:10 +0000 (15:42 +1100)]
[ORC] Add an ostream operator for ExecutorAddrRange.
This makes it easier to print addr ranges in debugging output.
Lang Hames [Wed, 12 Jan 2022 04:41:11 +0000 (15:41 +1100)]
[JITLink] Use Section + Offset format for anon symbols in out-of-range errors.
The previous error message only provided the address of the anonymous symbol.
Knowing the containing section makes the error easier to diagnose at a glance.
Jez Ng [Wed, 12 Jan 2022 07:00:56 +0000 (23:00 -0800)]
[lld-macho] Try and fix map-file.s' flakiness
After {D117069}, map-file.s seems flaky. It seems that the "Total Write
map file" section always exists, but the "Write map file" sub-section
may or may not be emitted. So we check for the former.
William S. Moses [Wed, 12 Jan 2022 07:00:53 +0000 (02:00 -0500)]
Revert "[MLIR][Math] Enable constant folding of ops"
This reverts commit
2f8b956ab6e63e57fbaa60749c9ba7752b071993.
There is a linker error for mlir-nvidia as seen on
https://lab.llvm.org/buildbot/#/builders/61/builds/19939.
As it's late for me here, I'm oing to rever this for now to be
investigated later.
William S. Moses [Wed, 12 Jan 2022 05:26:41 +0000 (00:26 -0500)]
[MLIR][Math] Enable constant folding of ops
Enable constant folding of ops within the math dialect, and introduce constant folders for ceil and log2
Reviewed By: mehdi_amini
Differential Revision: https://reviews.llvm.org/D117085
William S. Moses [Wed, 12 Jan 2022 05:44:05 +0000 (00:44 -0500)]
[MLIR][LLVM] Add memoryeffect for alloca
Add memory effect for llvm.alloca op
Reviewed By: mehdi_amini
Differential Revision: https://reviews.llvm.org/D117086
zhongyunde [Wed, 12 Jan 2022 06:40:41 +0000 (14:40 +0800)]
[DAGCombiner][AArch64] precommit some tests for D116915 NFC
In working on D116915 I found that a few tests were needed. I've been
asked to pre-push the tests for that ticket. This should complete the tests
needed for now.
Austin Kerbow [Wed, 12 Jan 2022 06:11:17 +0000 (22:11 -0800)]
[AMDGPU] Do not reserve any VGPR for SGPR spills
After the split register allocation changes in
eebe841a47cb it is no
longer necessary to reserve a VGPR before RA. This can also create bugs
when IPRA is enabled since we cannot predict that a called function may
not reserve any register if it does not have any SGPR spills. If that
happens those functions may override reserved registers that are
normally callee saved. Added a test to show this.
Fixes: SWDEV-309900
Reviewed By: arsenm
Differential Revision: https://reviews.llvm.org/D115551
Chuanqi Xu [Wed, 12 Jan 2022 06:10:07 +0000 (14:10 +0800)]
[NFC] Remove invisible character in comments
Shoaib Meenai [Wed, 12 Jan 2022 06:02:59 +0000 (22:02 -0800)]
Revert "[llvm-libtool-darwin] Print a warning if object file names are repeated"
This reverts commit
4993eff3e253a1c04e1a1a2fa5d68f6b33423419.
Tests are failing on Windows: http://45.33.8.238/win/52360/step_11.txt.
We'll need to account for forward slashes vs. backslashes.
Amir Ayupov [Wed, 12 Jan 2022 05:26:01 +0000 (21:26 -0800)]
[BOLT] Update README build instructions
Mehdi spotted that our build instructions don't make sense in a monorepo:
https://github.com/facebookincubator/BOLT/pull/269.
Reviewed By: maksfb
Differential Revision: https://reviews.llvm.org/D117062
Saiyedul Islam [Tue, 11 Jan 2022 11:43:31 +0000 (11:43 +0000)]
[OpenMP][Clang] Allow passing target features in ISA trait for metadirective clause
Passing any feature in the device-isa trait which is not supported by the host
was causing a compilation failure.
Differential Revision: https://reviews.llvm.org/D116549
Amir Aupov [Wed, 12 Jan 2022 05:23:26 +0000 (21:23 -0800)]
[BOLT] README: address @apinski-cavium comment
Address the comment at:
https://github.com/llvm/llvm-project/commit/
4c106cfdf7cf7eec861ad3983a3dd9a9e8f3a8ae#r63658159
Reviewed By: maksfb
Differential Revision: https://reviews.llvm.org/D117083
Amir Ayupov [Wed, 12 Jan 2022 04:18:58 +0000 (20:18 -0800)]
Update LLVM CMakeFiles to include BOLT
Add BOLT to the project list enabling its build.
Differential Revision: https://reviews.llvm.org/D117063
Jim Lin [Wed, 12 Jan 2022 03:11:54 +0000 (11:11 +0800)]
[M68k][NFC] Rename header guard of M68kSubtarget.h
LLVM_LIB_TARGET_CPU0_M68KSUBTARGET_H -> LLVM_LIB_TARGET_M68K_M68KSUBTARGET_H
Jim Lin [Wed, 12 Jan 2022 03:09:38 +0000 (11:09 +0800)]
[M68k][NFC] Add missing #endif comment
Craig Topper [Wed, 12 Jan 2022 04:01:40 +0000 (20:01 -0800)]
[RISCV] Add strictfp support for compares.
This adds support for STRICT_FSETCC(quiet) and STRICT_FSETCCS(signaling).
FEQ matches well to STRICT_FSETCC oeq.
FLT/FLE matches well to STRICT_FSETCCS olt/ole.
Others require commuting operands or multiple instructions.
STRICT_FSETCC olt/ole/ogt/oge/ult/ule/ugt/uge uses FLT/FLE,
but we need to save/restore FFLAGS around them to avoid spurious
exceptions. I've implemented pseudo instructions with a
CustomInserter to insert the save/restore CSR instructions.
Unfortunately, this doesn't honor exceptions for signaling NANs
but I'm not sure if signaling nans are really supported by the
constrained intrinsics.
STRICT_FSETCC one and ueq expand to a pair of FLT instructions
with a save/restore of fflags around each. This could be improved
in the future.
There may be some opportunities to generate better code for strict
comparisons mixed with nonans fast math flags. I've left FIXMEs in
the .td files for that.
Co-Authored-by: ShihPo Hung <shihpo.hung@sifive.com>
Reviewed By: arcbbb
Differential Revision: https://reviews.llvm.org/D116694
Mircea Trofin [Mon, 10 Jan 2022 19:18:04 +0000 (11:18 -0800)]
[NFC][MLGO] Use LazyCallGraph::Node to track functions.
This avoids the InlineAdvisor carrying the responsibility of deleting
Function objects. We use LazyCallGraph::Node objects instead, which are
stable in memory for the duration of the Module-wide performance of CGSCC
passes started under the same ModuleToPostOrderCGSCCPassAdaptor (which
is the case here)
Differential Revision: https://reviews.llvm.org/D116964
Nico Weber [Wed, 12 Jan 2022 03:05:41 +0000 (22:05 -0500)]
[gn build] minor comment tweaks, no behavior change
Dave Lee [Wed, 12 Jan 2022 02:58:25 +0000 (18:58 -0800)]
[lldb] Specify LLVM target requirements in TestLaunchProcessPosixSpawn
Nico Weber [Wed, 12 Jan 2022 02:44:19 +0000 (21:44 -0500)]
[gn build] (manually) port
85e6e748d426 (llvm/lib/Target/X86/MCA)
Fangrui Song [Wed, 12 Jan 2022 02:31:25 +0000 (18:31 -0800)]
[lld-link] Change config and driver to unique_ptr
Similar to D116143. My x86-64 `lld` is ~5KiB smaller.
Reviewed By: mstorsjo
Differential Revision: https://reviews.llvm.org/D116996
Chuanqi Xu [Wed, 12 Jan 2022 02:14:37 +0000 (10:14 +0800)]
[Coroutines] Enhance symmetric transfer for constant CmpInst
This fixes bug52896.
Simply, some symmetric transfer optimization chances get invalided due
to we delete some inlined optimization passes in 822b92a. This would
cause stack-overflow in some situations which should be avoided by the
design of coroutine. This patch tries to fix this by transforming the
constant CmpInst instruction which was done in the deleted passes.
Reviewed By: rjmccall, junparser
Differential Revision: https://reviews.llvm.org/D116327
Duncan P. N. Exon Smith [Tue, 7 Dec 2021 20:42:13 +0000 (12:42 -0800)]
Support: Extract sys::fs::readNativeFileToEOF() from MemoryBuffer
Extract the `readNativeFile()` loop from
`MemoryBuffer::getMemoryBufferForStream()` into `readNativeFileToEOF()`
to allow reuse. The chunk size is configurable; the default of `4*4096`
is exposed as `sys::fs::DefaultReadChunkSize` to allow sizing of
SmallVectors.
There's somewhere I'd like to read a usually-small file without overhead
of a MemoryBuffer; extracting existing logic rather than duplicating it.
Differential Revision: https://reviews.llvm.org/D115397
Duncan P. N. Exon Smith [Wed, 8 Dec 2021 01:22:41 +0000 (17:22 -0800)]
Support: Avoid SmallVector::set_size() in Unix code
Replace a `reserve()`/`set_size()` pair with `resize_for_overwrite()`
and `truncate()`. The out parameter also needs a `clear()` call on the
error path.
Differential Revision: https://reviews.llvm.org/D115389
Duncan P. N. Exon Smith [Wed, 8 Dec 2021 01:22:42 +0000 (17:22 -0800)]
Support: Avoid SmallVector::set_size() in Windows code
Replace a few `reserve()` / `set_size()` pairs with
`resize_for_overwrite()` / `truncate()` in the platform-specific
code for Windows.
Differential Revision: https://reviews.llvm.org/D115390
Duncan P. N. Exon Smith [Wed, 8 Dec 2021 01:22:36 +0000 (17:22 -0800)]
AST: Avoid using SmallVector::set_size() in UnresolvedSet
Update UnresolvedSet to use (and expose) `SmallVector::truncate()` instead
of `SmallVector::set_size()`. The latter is going to made private in a
future commit to avoid misuse.
Differential Revision: https://reviews.llvm.org/D115386
Jez Ng [Wed, 12 Jan 2022 01:45:07 +0000 (17:45 -0800)]
[lld-macho] Initialize separate time trace profiler for mapfile worker
After {D115416}, the "Write map file" event no longer shows up
in the time trace. Each time trace profiler instance is thread-local,
but we had neglected to initialize a separate instance for the mapfile
worker thread.
Reviewed By: keith
Differential Revision: https://reviews.llvm.org/D117069
Duncan P. N. Exon Smith [Wed, 8 Dec 2021 01:22:29 +0000 (17:22 -0800)]
ADT: Avoid using SmallVector::set_size() in SmallString
Update `SmallString::append()` to use `resize_for_overwrite()` instead
of `reserve()` followed by `set_size()`.
Differential Revision: https://reviews.llvm.org/D115382
William S. Moses [Tue, 11 Jan 2022 23:45:17 +0000 (18:45 -0500)]
[MLIR][SCF] Remove unused arguments to whileop
Canonicalize away unused arguments to the before region of a whileOp
Reviewed By: mehdi_amini
Differential Revision: https://reviews.llvm.org/D117059
Duncan P. N. Exon Smith [Wed, 8 Dec 2021 01:22:34 +0000 (17:22 -0800)]
ASTMatchers: Avoid using SmallVector::set_size()
Update `variadicMatcherDescriptor` to assert on reserved capacity and
to call `emplace_back()` instead of calling `set_size()` and constructing
the element in-place.
Differential Revision: https://reviews.llvm.org/D115379
Joe Loser [Tue, 11 Jan 2022 05:43:25 +0000 (00:43 -0500)]
[libc++][test] Move iter_swap into iterator.cust.swap. NFC.
Move `iter_swap.pass.cpp` into a new subdirectory: `iterator.cust.swap`
for symmetry with the neighboring subdirectory `iterator.cust.move`.
Differential Revision: https://reviews.llvm.org/D116992
Fangrui Song [Wed, 12 Jan 2022 00:49:06 +0000 (16:49 -0800)]
[lld-macho] Rename LazySymbol to LazyArchive. NFC
D116913 will add LazyObject. Rename LazySymbol to LazyArchive to avoid confusion
and mirror ELF.
Reviewed By: #lld-macho, Jez Ng
Differential Revision: https://reviews.llvm.org/D116914
Mircea Trofin [Tue, 11 Jan 2022 02:16:04 +0000 (18:16 -0800)]
[MLGO] Add support for multiple training traces per module
This happens in e.g. regalloc, where we trace decisions per function,
but wouldn't want to spew N log files (i.e. one per function). So we
output a key-value association, where the key is an ID for the
sub-module object, and the value is the tensorflow::SequenceExample.
The current relation with protobuf is tenuous, so we're avoiding a
custom message type in favor of using the `Struct` message, but that
requires the values be wire-able strings, hence base64 encoding.
We plan on resolving the protobuf situation shortly, and improve the
encoding of such logs, but this is sufficient for now for setting up
regalloc training.
Differential Revision: https://reviews.llvm.org/D116985
Adam Magier [Thu, 16 Dec 2021 23:56:43 +0000 (00:56 +0100)]
[clang][CodeGen][UBSan] VLA size checking for unsigned integer parameter
The code generation for the UBSan VLA size check was qualified by a con-
dition that the parameter must be a signed integer, however the C spec
does not make any distinction that only signed integer parameters can be
used to declare a VLA, only qualifying that it must be greater than zero
if it is not a constant.
Reviewed By: rjmccall
Differential Revision: https://reviews.llvm.org/D116048
Mircea Trofin [Wed, 12 Jan 2022 00:10:02 +0000 (16:10 -0800)]
[NFC][MLGO] Use ASSERT_TRUE in TFUtilsTest, where appropriate.
Zequan Wu [Sat, 8 Jan 2022 00:32:14 +0000 (16:32 -0800)]
[LLDB][NativePDB] Add support for inlined functions
This adds inline function support to NativePDB by parsing S_INLINESITE records
to retrieve inlinee line info and add them into line table at `ParseLineTable`.
Differential Revision: https://reviews.llvm.org/D116845
Julian Lettner [Tue, 11 Jan 2022 23:34:46 +0000 (15:34 -0800)]
[NFC] Fixup for comment
William S. Moses [Tue, 11 Jan 2022 20:39:18 +0000 (15:39 -0500)]
[MLIR][SCF] Canonicalize while statement whose cmp condition is recomputed in the after region
Given a while loop whose condition is given by a cmp, don't recomputed the comparison (or its inverse) in the after region, instead use a constant since the original condition must be true if we branched to the after region.
Reviewed By: mehdi_amini
Differential Revision: https://reviews.llvm.org/D117047
Julian Lettner [Tue, 11 Jan 2022 23:30:17 +0000 (15:30 -0800)]
[TSan][Darwin] Enable Trace/TraceAlloc unit tests
These tests are now green:
```
Trace.MultiPart
Trace.RestoreAccess
Trace.RestoreMutexLock
TraceAlloc.FinishedThreadReuse
TraceAlloc.FinishedThreadReuse2
TraceAlloc.SingleThread
```
rdar://
82107856
Konstantin Varlamov [Tue, 11 Jan 2022 23:04:53 +0000 (15:04 -0800)]
[libc++] Temporarily disable the in_out_result test on Fuchsia.
Julian Lettner [Tue, 11 Jan 2022 22:59:52 +0000 (14:59 -0800)]
[TSan][Darwin] Mark test UNSUPPORTED for iOS simulator
Rainer Orth [Tue, 11 Jan 2022 22:50:37 +0000 (23:50 +0100)]
[sanitizer_common] Only use NT_GNU_BUILD_ID in sanitizer_linux_libcdep.cpp if supported
D114294 <https://reviews.llvm.org/D114294> broke the Solaris buildbots:
/opt/llvm-buildbot/home/solaris11-amd64/clang-solaris11-amd64/llvm/compiler-rt/lib/sanitizer_common/sanitizer_linux_libcdep.cpp:613:29: error: use of undeclared identifier 'NT_GNU_BUILD_ID'
if (nhdr->n_type == NT_GNU_BUILD_ID && nhdr->n_namesz == kGnuNamesz) {
^
Like D107556 <https://reviews.llvm.org/D107556>, it forgot that
`NT_GNU_BUILD_ID` is an unportable GNU extension.
Fixed by making the code conditional on the definition of the macro.
Tested on `amd64-pc-solaris2.11` and `sparcv9-sun-solaris2.11`.
Differential Revision: https://reviews.llvm.org/D117051
Roger Kim [Tue, 11 Jan 2022 22:38:25 +0000 (14:38 -0800)]
[llvm-libtool-darwin] Print a warning if object file names are repeated
Print a warning if `llvm-libtool-darwin` if any of the object
files provided by the user have the same file name.
The tool will now print a warning if there is a name collision across:
* Two object files
* An object file and an object file from within a static library
* Two object files from different static libraries
Here is an example of the error:
```
$ llvm-libtool-darwin -static -o archive.a out.o out.o
error: file 'out.o' was specified multiple times.
in: out.o
in: out.o
$ llvm-libtool-darwin -static -o archive.a out.o
$ llvm-libtool-darwin -static -o combined.a archive.a out.o
error: file 'out.o' was specified multiple times.
in: archive.a
in: out.o
```
This change mimics apple's cctools libtool's behavior which always shows a warning in such cases.
Reviewed By: smeenai
Differential Revision: https://reviews.llvm.org/D113130
Roger Kim [Tue, 11 Jan 2022 22:37:33 +0000 (14:37 -0800)]
[NFC][llvm-libtool-darwin] Encapsulate the process of adding a new member in a class
Here we are refactoring the code to encapsulate data into classes. This allows
us to avoid passing the same objects through many functions that don't directly
use them. Now, functions that need to access data can do so from the class
state.
Reviewed By: jhenderson, smeenai
Differential Revision: https://reviews.llvm.org/D113127
Kevin Athey [Tue, 11 Jan 2022 21:20:12 +0000 (13:20 -0800)]
Add 'eager-checks' as a module parameter to MSAN.
This creates a way to configure MSAN to for eager checks that will be leveraged
by the introduction of a clang flag (-fsanitize-memory-param-retval).
This is redundant with the existing flag: -mllvm -msan-eager-checks.
Reviewed By: vitalybuka
Differential Revision: https://reviews.llvm.org/D116855
Nikolas Klauser [Tue, 4 Jan 2022 16:24:03 +0000 (17:24 +0100)]
[libc++] Introduce __fits_in_sso()
Introduce `__fits_in_sso()` to put the constexpr tests into a central place.
Reviewed By: ldionne, #libc
Spies: libcxx-commits
Differential Revision: https://reviews.llvm.org/D116487
Nikolas Klauser [Thu, 6 Jan 2022 22:12:55 +0000 (23:12 +0100)]
[libc++] Add Status page for P2321R2 (Zip)
Add a status page for P2321R2
Reviewed By: ldionne, Mordante, #libc
Spies: jloser, libcxx-commits, arphaman
Differential Revision: https://reviews.llvm.org/D116691
Nikolas Klauser [Mon, 10 Jan 2022 23:33:35 +0000 (00:33 +0100)]
[libc++] Introduce __debug_db_insert_c()
There are a lot of
```
#if _LIBCPP_DEBUG_LEVEL == 2
__get_db()->__insert_c(this);
#endif
```
This patch introduces `__debug_db_insert_c()` to put the `#if` in one central place.
Reviewed By: ldionne, #libc
Spies: libcxx-commits
Differential Revision: https://reviews.llvm.org/D116947
Markus Böck [Mon, 10 Jan 2022 07:42:45 +0000 (08:42 +0100)]
[clang][#47272] Avoid suggesting deprecated version of a declaration over another in typo correction
Prior to this patch, clang might suggest a deprecated name of a declaration over another name as the only mechanism for resolving two typo corrections referring to the same underlying declaration has previously been an alphabetical sort.
This patch adjusts this resolve by also taking into account whether one of two declarations are deprecated. If the new one is deprecated it may not replace a previous correction with a non-deprecated correction and a previous deprecated correction always gets replaced by a non-deprecated new correction.
Fixes https://github.com/llvm/llvm-project/issues/47272
Differential Revision: https://reviews.llvm.org/D116775
Patrick Holland [Mon, 3 Jan 2022 00:37:14 +0000 (16:37 -0800)]
[MCA] Switching from conservatively guessing which instructions are
memory-barrier instructions to providing targets and developers a convenient
way to explicitly declare which instructions are memory-barriers.
Differential Revision: https://reviews.llvm.org/D116779
MaheshRavishankar [Tue, 11 Jan 2022 21:35:37 +0000 (13:35 -0800)]
[mlir][Linalg] Pattern to fuse pad operation with elementwise operations.
Most convolution operations need explicit padding of the input to
ensure all accesses are inbounds. In such cases, having a pad
operation can be a significant overhead. One way to reduce that
overhead is to try to fuse the pad operation with the producer of its
source.
A sequence
```
linalg.generic -> linalg.pad_tensor
```
can be replaced with
```
linalg.fill -> tensor.extract_slice -> linalg.generic ->
tensor.insert_slice.
```
if the `linalg.generic` has all parallel iterator types.
Differential Revision: https://reviews.llvm.org/D116418
zhijian [Tue, 11 Jan 2022 21:24:43 +0000 (16:24 -0500)]
[AIX] add the xcoff symbol size for the llvm-nm.
Summary:
add the xcoff symbol size for the llvm-nm.
Reviewers: James Henderson
Differential Revision: https://reviews.llvm.org/D113104
David Salinas [Wed, 5 Jan 2022 18:47:32 +0000 (18:47 +0000)]
Revert D109159 : Revert "[amdgpu] Enable selection of `s_cselect_b64`."
This reverts commit
640beb38e7710b939b3cfb3f4c54accc694b1d30.
That commit caused performance degradtion in Quicksilver test QS:sGPU and a functional test failure in (rocPRIM rocprim.device_segmented_radix_sort).
Reverting until we have a better solution to s_cselect_b64 codegen cleanup
Change-Id: Ifc167b3c2dae7a65920676f22a97ba76485f3456
Reviewed By: kzhuravl
Differential Revision: https://reviews.llvm.org/D116686
Change-Id: I1abf49b74a7e2ba0e0205f747a4154a468b9d7f2
Matt Arsenault [Tue, 11 Jan 2022 17:56:24 +0000 (12:56 -0500)]
GlobalISel: Use cloneVirtualRegister in localizer
Matt Arsenault [Tue, 11 Jan 2022 20:28:44 +0000 (15:28 -0500)]
AMDGPU/GlobalISel: Regenerate baseline checks to include -NEXT
Philip Reames [Tue, 11 Jan 2022 21:05:25 +0000 (13:05 -0800)]
[InstCombine] Pull out a helper function to simplify upcoming patch [NFC]
Philip Reames [Tue, 11 Jan 2022 20:33:44 +0000 (12:33 -0800)]
[DSE] Seperate malloc+memset -> calloc transform from noop store dedection [NFC]
This transformation has nothing to do with whether the store is a noop. The memset becomes a noop, but only after we replace the malloc with a calloc.
zhijian [Tue, 11 Jan 2022 20:53:25 +0000 (15:53 -0500)]
[AIX] support xcoff for llvm-nm
Summary:
add the xcoff symbol type functionality for llvm-nm.
Reviewers: James Henderson
Differential Revision: https://reviews.llvm.org/D112450
Mircea Trofin [Tue, 11 Jan 2022 20:36:16 +0000 (12:36 -0800)]
[NFC][MLGO] Remove the word "inliner" in a generic error message.
Maksim Panchenko [Tue, 11 Jan 2022 20:35:14 +0000 (12:35 -0800)]
Merge BOLT into LLVM monorepo
Details of the merge are available at llvm-dev.
Mailing-list: https://lists.llvm.org/pipermail/llvm-dev/2022-January/154638.html [llvm-dev] Preparing BOLT for LLVM monorepo
Co-authored-by: Rafael Auler <rafaelauler@fb.com>
Philip Reames [Tue, 11 Jan 2022 20:14:28 +0000 (12:14 -0800)]
[DSE] Minor style improvements to calloc formation code [NFC]
Nick Desaulniers [Tue, 11 Jan 2022 19:51:22 +0000 (11:51 -0800)]
[clang] number labels in asm goto strings after tied inputs
I noticed that the following case would compile in Clang but not GCC:
void *x(void) {
void *p = &&foo;
asm goto ("# %0\n\t# %l1":"+r"(p):::foo);
foo:;
return p;
}
Changing the output template above from %l2 would compile in GCC but not
Clang.
This demonstrates that when using tied outputs (say via the "+r" output
constraint), the hidden inputs occur or are numbered BEFORE the labels,
at least with GCC.
In fact, GCC does denote this in its documentation:
https://gcc.gnu.org/onlinedocs/gcc-11.2.0/gcc/Extended-Asm.html#Goto-Labels
> Output operand with constraint modifier ‘+’ is counted as two operands
> because it is considered as one output and one input operand.
For the sake of compatibility, I think it's worthwhile to just make this
change.
It's better to use symbolic names for compatibility (especially now
between released version of Clang that support asm goto with outputs).
ie. %l1 from the above would be %l[foo]. The GCC docs also make this
recommendation.
Also, I cleaned up some cruft in GCCAsmStmt::getNamedOperand. AFAICT,
NumPlusOperands was no longer used, though I couldn't find which commit
didn't clean that up correctly.
Link: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98096
Link: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103640
Link: https://gcc.gnu.org/onlinedocs/gcc-11.2.0/gcc/Extended-Asm.html#Goto-Labels
Reviewed By: void
Differential Revision: https://reviews.llvm.org/D115471
Elvis Stansvik [Tue, 11 Jan 2022 20:04:27 +0000 (15:04 -0500)]
Accept string literal decay in conditional operator
The cppcoreguidelines-pro-bounds-array-to-pointer-decay check currently
accepts:
const char *b = i ? "foo" : "foobar";
but not
const char *a = i ? "foo" : "bar";
This is because the AST is slightly different in the latter case (see
https://godbolt.org/z/MkHVvs).
This eliminates the inconsistency by making it accept the latter form
as well.
Fixes https://github.com/llvm/llvm-project/issues/31155.
Philip Reames [Tue, 11 Jan 2022 20:00:42 +0000 (12:00 -0800)]
[DSE] Generalize store null to calloc allocated memory [NFC-ish]
This change removes a direct check for calloc-like allocation functions, and instead handles the generic case where we're storing a constant to constant initialized memory. This is mostly to remove the call to isCallocLike, but if someone downstream happens to have an initialized alloc which initializes to e.g. -1, this will also kick in for them. (I don't know of such an example ftr.)
William S. Moses [Tue, 11 Jan 2022 18:33:43 +0000 (13:33 -0500)]
[MLIR][LLVM] Add MemRead/MemWrite behavior to llvm store/load/addressof ops
This patch adds corresponding memory effects to mlir llvm-dialect load/store/addressof ops, which thus enables canonicalizations of those ops (like dead code elimination) that rely on the effect interface
Reviewed By: mehdi_amini
Differential Revision: https://reviews.llvm.org/D117041
Yaxun (Sam) Liu [Mon, 10 Jan 2022 17:57:41 +0000 (12:57 -0500)]
[HIP] Fix device malloc/free
ROCm 4.5 device library introduced __ockl_dm_alloc and __ockl_dm_dealloc
for supporting device side malloc/free.
This patch redefines device malloc/free to use these functions.
It also fixes a bug in the wrapper header which incorrectly defines free
with return type void* instead of void.
Reviewed by: Artem Belevich
Differential Revision: https://reviews.llvm.org/D116967
Nico Weber [Tue, 11 Jan 2022 19:49:08 +0000 (14:49 -0500)]
[gn build] (manually) port
f77d115cc136 more
Nick Desaulniers [Tue, 11 Jan 2022 19:32:35 +0000 (11:32 -0800)]
[clang][CGStmt] emit i constraint rather than X for asm goto indirect dests
As suggested in:
https://reviews.llvm.org/D114895#3177794
X will be converted to i by SelectionDAGISEL anyways.
Reviewed By: void, jyknight
Differential Revision: https://reviews.llvm.org/D115311
Roman Lebedev [Tue, 11 Jan 2022 19:18:28 +0000 (22:18 +0300)]
[NFC][SimplifyCFG] Add some more tests for sinking into 'unreachable' block
James Y Knight [Tue, 11 Jan 2022 17:55:35 +0000 (17:55 +0000)]
Nick Desaulniers [Tue, 11 Jan 2022 19:08:48 +0000 (11:08 -0800)]
[llvm][test] rewrite callbr to use i rather than X constraint NFC
In D115311, we're looking to modify clang to emit i constraints rather
than X constraints for callbr's indirect destinations. Prior to doing
so, update all of the existing tests in llvm/ to match.
Reviewed By: void, jyknight
Differential Revision: https://reviews.llvm.org/D115410
Akira Hatanaka [Sat, 8 Jan 2022 21:27:28 +0000 (13:27 -0800)]
[CodeGen] Treat ObjC `__unsafe_unretained` and class types as trivial
when generating copy/dispose helper functions
Analyze the block captures just once before generating copy/dispose
block helper functions and honor the inert `__unsafe_unretained`
qualifier. This refactor fixes a bug where captures of ObjC
`__unsafe_unretained` and class types were needlessly retained/released
by the copy/dispose helper functions.
Differential Revision: https://reviews.llvm.org/D116948
Mehdi Amini [Tue, 11 Jan 2022 00:31:22 +0000 (00:31 +0000)]
Apply clang-tidy fixes for readability-redundant-control-flow in OpenMPDialect.cpp (NFC)
Shafik Yaghmour [Tue, 11 Jan 2022 18:30:32 +0000 (10:30 -0800)]
Fix clang-tidy bugprone-argument-comment that was mixed up
Several of the comments were annotating the wrong argument.
I caught this while reviewing this clean-up: https://github.com/llvm/llvm-project/commit/
8afcfbfb8fc1e53023ffac9d9bdc424248d6d2ff
which was changing booleans to use true and false and in the this case the comment and the type looked mismatched.
Differential Revision: https://reviews.llvm.org/D116982
Kazu Hirata [Tue, 11 Jan 2022 19:03:22 +0000 (11:03 -0800)]
[mlir] Fix a missing override warning
This patch fixes:
mlir/lib/Dialect/Tosa/Transforms/TosaOptionalDecompositions.cpp:28:8:
error: 'runOnFunction' overrides a member function but is not marked
'override' [-Werror,-Wsuggest-override]
Nick Desaulniers [Tue, 11 Jan 2022 18:16:33 +0000 (10:16 -0800)]
[SelectionDAG] treat X constrained labels as i for asm
Completely rework how we handle X constrained labels for inline asm.
X should really be treated as i. Then existing tests can be moved to use
i D115410 and clang can just emit i D115311. (D115410 and D115311 are
callbr, but this can be done for label inputs, too).
Coincidentally, this simplification solves an ICE uncovered by D87279
based on assumptions made during D69868.
This is the third approach considered. See also discussions v1 (D114895)
and v2 (D115409).
Reported-by: kernel test robot <lkp@intel.com>
Fixes: https://github.com/ClangBuiltLinux/linux/issues/1512
Reviewed By: void, jyknight
Differential Revision: https://reviews.llvm.org/D115688
Aaron DeBattista [Tue, 11 Jan 2022 18:16:01 +0000 (10:16 -0800)]
[mlir][tosa] Allow optional TOSA decompositions to be populated separately
Moved all TOSA decomposition patterns so that they can be optionally populated
and used by external rewrites. This avoids decomposing TOSa operations when
backends may benefit from the non-decomposed version.
Reviewed By: rsuderman, mehdi_amini
Differential Revision: https://reviews.llvm.org/D116526
John Ericson [Tue, 11 Jan 2022 03:03:21 +0000 (03:03 +0000)]
[libc++][libc++abi][libunwind] Dedup install path var definitions
In D116873 I did this for libunwind prior to defining a new install path
variable. But I think the change is good on its own, and libc++{,abi}
could also use it.
libc++ needed the base header var defined above the conditional part to
use it for the prefi+ed headers in the non-target-specific case. For
consistency, I therefore put the unconditional ones above for all 3
libs, which is why I touched the libunwind code (seeing that it had the
core change already)
Reviewed By: phosek, #libunwind, #libc, #libc_abi, ldionne
Differential Revision: https://reviews.llvm.org/D116988
Arthur Eubanks [Mon, 13 Dec 2021 21:59:47 +0000 (13:59 -0800)]
[NFC][LazyCallGraph] Remove check in removeDeadFunction() if graph is empty
If we're in removeDeadFunction(), we should have already constructed the call graph.
Differential Revision: https://reviews.llvm.org/D115676
Nick Desaulniers [Tue, 11 Jan 2022 18:01:25 +0000 (10:01 -0800)]
[ShrinkWrap] check for PPC's non-callee-saved LR
As pointed out in https://reviews.llvm.org/D115688#inline-1108193, we
don't want to sink the save point past an INLINEASM_BR, otherwise
prologepilog may incorrectly sink a prolog past the MBB containing an
INLINEASM_BR and into the wrong MBB.
ShrinkWrap is getting this wrong because LR is not in the list of callee
saved registers. Specifically, ShrinkWrap::useOrDefCSROrFI calls
RegisterClassInfo::getLastCalleeSavedAlias which reads
CalleeSavedAliases which was populated by
RegisterClassInfo::runOnMachineFunction by iterating the list of
MCPhysReg returned from MachineRegisterInfo::getCalleeSavedRegs.
Because PPC's LR is non-allocatable, it's NOT considered callee saved.
Add an interface to TargetRegisterInfo for such a case and use it in
Shrinkwrap to ensure we don't sink a prolog past an INLINEASM or
INLINEASM_BR that clobbers LR.
Reviewed By: jyknight, efriedma, nemanjai, #powerpc
Differential Revision: https://reviews.llvm.org/D116424
Rob Suderman [Tue, 11 Jan 2022 17:49:36 +0000 (09:49 -0800)]
[mlir][tosa] Relax tosa.apply_scale operations
Apply scale may operate on vectors, scalars, or tensors during
tiling. Relax the requirements to avoid failures.
Reviewed By: NatashaKnk
Differential Revision: https://reviews.llvm.org/D116981
William S. Moses [Tue, 11 Jan 2022 03:27:14 +0000 (22:27 -0500)]
[MLIR][SCF] Simplify scf.if by swapping regions if condition is a not
Given an if of the form, simplify it by eliminating the not and swapping the regions
scf.if not(c) {
yield origTrue
} else {
yield origFalse
}
becomes
scf.if c {
yield origFalse
} else {
yield origTrue
}
Reviewed By: mehdi_amini
Differential Revision: https://reviews.llvm.org/D116990
Fangrui Song [Tue, 11 Jan 2022 17:54:53 +0000 (09:54 -0800)]
[ELF] Add RelocationScanner. NFC
Currently the way some relocation-related static functions pass around
states is clumsy. Add a Resolver class to store some states as member
variables.
Advantages:
* Avoid the parameter `InputSectionBase &sec` (this offsets the cost passing around `this` paramemter)
* Avoid the parameter `end` (Mips and PowerPC hacks)
* `config` and `target` can be cached as member variables to reduce global state accesses. (potential speedup because the compiler didn't know `config`/`target` were not changed across function calls)
* If we ever want to reduce if-else costs (e.g. `config->emachine==EM_MIPS` for non-Mips) or introduce parallel relocation scan not handling some tricky arches (PPC/Mips), we can templatize Resolver
`target` isn't used as much as `config`, so I change it to a const reference
during the migration.
There is a minor performance inprovement for elf::scanRelocations.
Reviewed By: ikudrin, peter.smith
Differential Revision: https://reviews.llvm.org/D116881
Lei Zhang [Tue, 11 Jan 2022 17:04:39 +0000 (17:04 +0000)]
[mlir][linalg] Improve pooling op iterator order consistency
All named ops list iterators for accessing output first except
pooling ops. This commit made the pooling ops consistent with
the rest.
Reviewed By: nicolasvasilache
Differential Revision: https://reviews.llvm.org/D115520
James Y Knight [Tue, 11 Jan 2022 17:42:49 +0000 (17:42 +0000)]
Florian Hahn [Tue, 11 Jan 2022 17:30:48 +0000 (17:30 +0000)]
[IRBuilder] Introduce folder using inst-simplify, use for Or fold.
Alternative to D116817.
This introduces a new value-based folding interface for Or (FoldOr),
which takes 2 values and returns an existing Value or a constant if the
Or can be simplified. Otherwise nullptr is returned. This replaces the
more restrictive CreateOr which takes 2 constants.
This is the used to implement a folder that uses InstructionSimplify.
The logic to simplify `Or` instructions is moved there. Subsequent
patches are going to transition other CreateXXX to the more general
FoldXXX interface.
Reviewed By: nikic, lebedev.ri
Differential Revision: https://reviews.llvm.org/D116935
ksyx [Wed, 5 Jan 2022 15:20:16 +0000 (10:20 -0500)]
[clang-format] Fix SeparateDefinitionBlocks issues
Fixes https://github.com/llvm/llvm-project/issues/52976.
- Make no formatting for macros
- Attach comment with definition headers
- Make no change on use of empty lines at block start/end
- Fix misrecognition of keyword namespace
Differential Revision: https://reviews.llvm.org/D116663
Reviewed By: MyDeveloperDay, HazardyKnusperkeks, curdeius
Philip Reames [Tue, 11 Jan 2022 17:23:33 +0000 (09:23 -0800)]
[instsimplify] Add a comment and test for a highly confusing case
LLVM GN Syncbot [Tue, 11 Jan 2022 17:12:28 +0000 (17:12 +0000)]
[gn build] Port
f77d115cc136
Matthias Braun [Tue, 28 Sep 2021 00:57:22 +0000 (17:57 -0700)]
X86InstrInfo: Support immediates that are +1/-1 different in optimizeCompareInstr
This is a re-commit of
e2c7ee0743592e39274e28dbe0d0c213ba342317 which
was reverted in
a2a58d91e82db38fbdf88cc317dcb3753d79d492 and
ea81cea8163a1a0e54df42103ee1c657bbf03791. This includes a fix to
consistently check for EFLAGS being live-out. See phabricator
review.
Original Summary:
This extends `optimizeCompareInstr` to re-use previous comparison
results if the previous comparison was with an immediate that was 1
bigger or smaller. Example:
CMP x, 13
...
CMP x, 12 ; can be removed if we change the SETg
SETg ... ; x > 12 changed to `SETge` (x >= 13) removing CMP
Motivation: This often happens because SelectionDAG canonicalization
tends to add/subtract 1 often when optimizing for fallthrough blocks.
Example for `x > C` the fallthrough optimization switches true/false
blocks with `!(x > C)` --> `x <= C` and canonicalization turns this into
`x < C + 1`.
Differential Revision: https://reviews.llvm.org/D110867
Craig Topper [Tue, 11 Jan 2022 16:55:45 +0000 (08:55 -0800)]
[RISCV] Add DAG combine to fold (fp_to_int (ffloor X)) -> (fcvt X, rdn)
Similar for ceil, trunc, round, and roundeven. This allows us to use
static rounding modes to avoid a libcall.
This optimization is done for AArch64 as isel patterns.
RISCV doesn't have instructions for ceil/floor/trunc/round/roundeven
so the operations don't stick around until isel to enable a pattern
match. Thus I've implemented a DAG combine.
We only handle XLen types except i32 on RV64. i32 will be type
legalized to a RISCVISD node. All other types will be type legalized
to XLen and maintain the FP_TO_SINT/UINT ISD opcode.
Reviewed By: asb
Differential Revision: https://reviews.llvm.org/D116771
Sven van Haastregt [Tue, 11 Jan 2022 16:54:19 +0000 (16:54 +0000)]
[SPIR-V] Drop double quote from test pattern
When spirv-link is found, it won't match a leading `"`. This fixes
the test added by commit
dbb8d086377b ("[SPIR-V] Add linking using
spirv-link.", 2022-01-11).
Jan Svoboda [Tue, 11 Jan 2022 16:17:07 +0000 (17:17 +0100)]
[clang] Move `ApplyHeaderSearchOptions` from Frontend to Lex
In D116750, the `clangFrontend` library was added as a dependency of `LexTests` in order to make `clang::ApplyHeaderSearchOptions()` available. This increased the number of TUs the test depends on.
This patch moves the function into `clangLex` and removes dependency of `LexTests` on `clangFrontend`.
Reviewed By: thakis
Differential Revision: https://reviews.llvm.org/D117024
Siva Chandra Reddy [Tue, 11 Jan 2022 05:24:57 +0000 (05:24 +0000)]
[libc][NFC] Move sys/mman entrypoints to the default build configs.
Specifically, mmap and munmap have been moved to the default build list
of entrypoints. To support this, certain deps and includes have been
adjusted. The use of errno in some cases has been updated.
Christian Sigg [Tue, 11 Jan 2022 12:13:17 +0000 (13:13 +0100)]
Mark arith.minf, arith.maxf as commutative.
Reviewed By: herhut
Differential Revision: https://reviews.llvm.org/D117010
Philip Reames [Tue, 11 Jan 2022 16:40:03 +0000 (08:40 -0800)]
[GlobalsModRef] Apply indirect-global rule to all globals initialized from noalias calls
Extend the existing malloc-family specific optimization to all noalias calls. This allows us to handle allocation wrappers, and removes a dependency on a lib-func check in favor of generic attribute usage.
Differential Revision: https://reviews.llvm.org/D116980
Simon Pilgrim [Tue, 11 Jan 2022 16:40:24 +0000 (16:40 +0000)]
[X86] Apply clang-format to X86TargetLowering::isVectorShiftByScalarCheap
Fix indentation
Philip Reames [Tue, 11 Jan 2022 16:37:41 +0000 (08:37 -0800)]
[DSE] Style improvements after 3cef3cf - remove redundant dyn_casts [NFC]
I'd been working on exactly the same patch when Nikita landed his, so this patch is basically the style diff between the two. :)