LLVM GN Syncbot [Thu, 18 Nov 2021 03:43:59 +0000 (03:43 +0000)]
[gn build] Port
49682f14bf3f
Dmitry Vyukov [Wed, 17 Nov 2021 02:23:21 +0000 (18:23 -0800)]
tsan: remove quadratic behavior in pthread_join
pthread_join needs to map pthread_t of the joined thread to our Tid.
Currently we do this with linear search over all threads.
This has quadratic complexity and becomes much worse with the new
tsan runtime, which memorizes all threads that ever existed.
To resolve this add a hash map of live threads only (that are still
associated with pthread_t) and use it for the mapping.
With the new tsan runtime some programs spent 1/3 of time in this mapping.
After this change the mapping disappears from profiles.
Depends on D113996.
Reviewed By: vitalybuka, melver
Differential Revision: https://reviews.llvm.org/D113997
Henry Linjamäki [Wed, 17 Nov 2021 08:23:49 +0000 (11:23 +0300)]
[SPIR-V] Add translator tool
Add a tool for constructing commands for translating LLVM IR to
SPIR-V.
Used by HIPSPV tool chain (D110618).
Reviewed By: bader
Differential Revision: https://reviews.llvm.org/D112404
Kazu Hirata [Thu, 18 Nov 2021 03:40:48 +0000 (19:40 -0800)]
[clang] Use range-based for loops with llvm::reverse (NFC)
LLVM GN Syncbot [Thu, 18 Nov 2021 03:23:58 +0000 (03:23 +0000)]
[gn build] Port
24d1673c8b9b
Phoebe Wang [Thu, 18 Nov 2021 02:39:54 +0000 (10:39 +0800)]
[X86] Add -mskip-rax-setup support to align with GCC
AMD64 ABI mandates caller to specify the number of used SSE registers
when passing variable arguments.
GCC also provides option -mskip-rax-setup to skip the setup of rax when
SSE is disabled. This helps to reduce the code size, see pr23258.
Reviewed By: nickdesaulniers
Differential Revision: https://reviews.llvm.org/D112413
Zarko Todorovski [Thu, 18 Nov 2021 03:13:32 +0000 (22:13 -0500)]
[NFC][llvm] Inclusive language: remove uses of sanity in llvm/lib/ExecutionEngine/
Reworded and removed code comments to avoid using `sanity check` and `sanity
test`.
Zi Xuan Wu [Thu, 18 Nov 2021 02:22:21 +0000 (10:22 +0800)]
[llvm-tblgen][RISCV] Make llvm-tblgen RISCVCompressInstEmitter to be common infra across different targets
Not only RISCV but also other target such as CSKY, there are compressed instructions mixed with normal instructions.
To reuse the basic infra to compress/uncompress and predict instruction, we need reconstruct the RISCVCompressInstEmitter
and make it more general and suitable for other target.
Differential Revision: https://reviews.llvm.org/D113475
Vitaly Buka [Thu, 18 Nov 2021 02:18:15 +0000 (18:18 -0800)]
[sanitizer] Fix DenseMap for compiler-rt
Depends on D114047.
Differential Revision: https://reviews.llvm.org/D114048
Vitaly Buka [Tue, 16 Nov 2021 21:14:25 +0000 (13:14 -0800)]
[NFC][sanitizer] Fix headers of DenseMap
Depends on D114046.
Differential Revision: https://reviews.llvm.org/D114047
Vitaly Buka [Tue, 16 Nov 2021 20:41:06 +0000 (12:41 -0800)]
[NFC][sanitizer] Clang format copied code
Depends on D114045.
Differential Revision: https://reviews.llvm.org/D114046
Vitaly Buka [Tue, 16 Nov 2021 18:24:32 +0000 (10:24 -0800)]
[NFC][sanitizer] Add unchanged DenseMap
It's just a copy even without reformatting.
Reviewed By: dvyukov, melver
Differential Revision: https://reviews.llvm.org/D114045
Zarko Todorovski [Thu, 18 Nov 2021 02:59:00 +0000 (21:59 -0500)]
[NFC][llvm] Inclusive language: reword and remove uses of sanity in llvm/lib/Target
Reworded removed code comments that contain `sanity check` and `sanity
test`.
Richard Smith [Thu, 18 Nov 2021 02:13:25 +0000 (18:13 -0800)]
PR52537: When performing a no-op TreeTransform of a rewritten binary
operator, mark any functions it calls as referenced.
Fangrui Song [Thu, 18 Nov 2021 02:15:24 +0000 (18:15 -0800)]
[Driver][Android] Remove unneeded isNoExecStackDefault
ld.lld used by Android ignores .note.GNU-stack and defaults to noexecstack,
so the `-z noexecstack` linker option is unneeded.
The `--noexecstack` assembler option is unneeded because AsmPrinter.cpp
prints `.section .note.GNU-stack,"",@progbits` (when `llvm.init.trampoline` is unused),
so the assembler won't synthesize an executable .note.GNU-stack.
Reviewed By: danalbert
Differential Revision: https://reviews.llvm.org/D113840
Vitaly Buka [Thu, 18 Nov 2021 02:10:17 +0000 (18:10 -0800)]
[NFC][sanitizer] Fix veradic-macro warning in RAW_CHECK
Aart Bik [Tue, 16 Nov 2021 20:46:55 +0000 (12:46 -0800)]
[mlir][sparse] refine lexicographic insertion to any tensor
First version was vectors only. With some clever "path" insertion,
we now support any d-dimensional tensor. Up next: reductions too
Reviewed By: bixia, wrengr
Differential Revision: https://reviews.llvm.org/D114024
Greg Clayton [Thu, 18 Nov 2021 02:07:28 +0000 (18:07 -0800)]
Revert "[NFC] Refactor symbol table parsing."
This reverts commit
951b107eedab1829f18049443f03339dbb0db165.
Buildbots were failing, there is a deadlock in /Users/gclayton/Documents/src/llvm/clean/llvm-project/lldb/test/Shell/SymbolFile/DWARF/DW_AT_range-DW_FORM_sec_offset.s when ELF files try to relocate things.
Jim Ingham [Wed, 17 Nov 2021 22:49:55 +0000 (14:49 -0800)]
Revert "Revert "Make it possible for lldb to launch a remote binary with no local file.""
This reverts commit
dd5505a8f2c75a903ec944b6e46aed2042610673.
I picked the wrong class for the test, should have been GDBRemoteTestBase.
Vitaly Buka [Wed, 17 Nov 2021 23:05:16 +0000 (15:05 -0800)]
[sanitizer] Add a few of type_traits tools
For D114047
Chuanqi Xu [Thu, 18 Nov 2021 01:34:58 +0000 (09:34 +0800)]
[Coroutine] Warn deprecated 'std::experimental::coro' uses
Since we've decided the to not support std::experimental::coroutine*, we
should tell the user they need to update.
Reviewed By: Quuxplusone, ldionne, Mordante
Differential Revision: https://reviews.llvm.org/D113977
Robert Suderman [Thu, 18 Nov 2021 01:16:13 +0000 (17:16 -0800)]
[mlir][tosa] Revert add-0 canonicalization for floating-point
Floating point optimization can produce incorrect numerical resutls for
-0.0 + 0.0 optimization as result needs to be -0.0.
Reviewed By: eric-k256
Differential Revision: https://reviews.llvm.org/D114127
Luo, Yuanke [Wed, 17 Nov 2021 08:22:53 +0000 (16:22 +0800)]
[X86][AMX] Don't emit tilerelease for old AMX instrisic.
We should avoid mixing old AMX instrinsic with new AMX intrinsic. For
old AMX intrinsic, user is responsible for invoking tile release. This
patch is to check if there is any tile config generated by compiler. If
so it emit tilerelease instruction, otherwise it don't emit the
instruction.
Differential Revision: https://reviews.llvm.org/D114066
Philip Reames [Thu, 18 Nov 2021 01:20:57 +0000 (17:20 -0800)]
Autogen a test for ease of update
Freddy Ye [Thu, 18 Nov 2021 00:47:42 +0000 (08:47 +0800)]
[X86] add 3 missing intrinsics: _mm_(mask/maskz)_cvtpbh_ps
Reviewed By: craig.topper, pengfei
Differential Revision: https://reviews.llvm.org/D114059
Damian Rouson [Wed, 17 Nov 2021 23:15:10 +0000 (15:15 -0800)]
[flang] Add a semantics test for co_sum
Test a range of acceptable forms of co_sum calls, including
combinations of keyword and non-keyword actual arguments of
numeric types. Also test that several invalid forms of
co_sum call generate the correct error messages.
Reviewed By: kiranchandramohan, ktras
Differential Revision: https://reviews.llvm.org/D113076
Carl Ritson [Wed, 17 Nov 2021 23:47:14 +0000 (08:47 +0900)]
[AMDGPU] Update GFX10 memory model to account for MALL
Document memory attached last level (MALL) cache added in GFX10.3.
Reviewed By: t-tye
Differential Revision: https://reviews.llvm.org/D114076
Peter Klausler [Tue, 16 Nov 2021 00:04:02 +0000 (16:04 -0800)]
[flang] Fix INQUIRE(PAD=) and (POSITION=) for predefined units
The predefined units were not being initialized with FORM='FORMATTED',
so INQUIRE(PAD=) was failing if no I/O had already been done.
INQUIRE(POSITION=) was returning 'REWIND' on stdin/stdout (which
is somewhat defensible from the definition, and is what Intel Fortran
does), but most implementations return 'ASIS'. Change the runtime
to return 'REWIND' only for positionable external files, but 'ASIS'
for terminals, sockets, &c.
Differential Revision: https://reviews.llvm.org/D114028
Vincent Lee [Wed, 10 Nov 2021 02:10:28 +0000 (18:10 -0800)]
[lld-macho] Add warn flags to enable/disable warnings on -install_name
ld64 doesn't warn on builds using `-install_name` if it's a bundle. But, the
current warning is nice to have because `install_name` only works with dylib.
To prevent an overflow of warnings in build logs and have parity with ld64,
create a `--warn-dylib-install-name` and `--warn-no-dylib-install-name` flag
that enables this LLD specific warning.
Reviewed By: #lld-macho, thakis
Differential Revision: https://reviews.llvm.org/D113534
Daan De Meyer [Tue, 16 Nov 2021 15:46:34 +0000 (15:46 +0000)]
LiteralSupport: Don't assert() on invalid input
When using clangd, it's possible to trigger assertions in
NumericLiteralParser and CharLiteralParser when switching git branches.
This commit removes the initial asserts on invalid input and replaces
those asserts with the error handling mechanism from those respective
classes instead. This allows clangd to gracefully recover without
crashing.
See https://github.com/clangd/clangd/issues/888 for more information
on the clangd crashes.
Leonard Chan [Wed, 17 Nov 2021 23:47:40 +0000 (15:47 -0800)]
[compiler-rt][asan] Re-add `self`
We ran into errors where this wasn't defined in Fuchsia's asan implementation.
Vitaly Buka [Wed, 17 Nov 2021 23:45:45 +0000 (15:45 -0800)]
Revert "[sanitizer] Add a few of type_traits tools"
Does not work with GCC
This reverts commit
a82ee2be9c6378cd34deb3ab002d78acd2b04ff3.
J. Ryan Stinnett [Wed, 17 Nov 2021 23:37:29 +0000 (23:37 +0000)]
[MLIR][Docs] Fix link syntax in Rationale.md
Craig Topper [Wed, 17 Nov 2021 23:21:00 +0000 (15:21 -0800)]
[LegalizeTypes] Further limit expansion of CTTZ during type promotion.
Don't expand CTTZ if CTPOP or CTLZ is supported on the promoted type.
We have special handling for CTTZ expansion to use those ops with a
small conversion. The setup for that doesn't generate extra code or
large constants so we don't gain anything from expanding early and we
make CTTZ_ZERO_UNDEF codegen worse.
Follow up from post commit feedback on D112268. We don't seem to have
any in tree tests that care about this.
Greg Clayton [Tue, 16 Nov 2021 05:02:53 +0000 (21:02 -0800)]
[NFC] Refactor symbol table parsing.
Symbol table parsing has evolved over the years and many plug-ins contained duplicate code in the ObjectFile::GetSymtab() that used to be pure virtual. With this change, the "Symbtab *ObjectFile::GetSymtab()" is no longer virtual and will end up calling a new "void ObjectFile::ParseSymtab(Symtab &symtab)" pure virtual function to actually do the parsing. This helps centralize the code for parsing the symbol table and allows the ObjectFile base class to do all of the common work, like taking the necessary locks and creating the symbol table object itself. Plug-ins now just need to parse when they are asked to parse as the ParseSymtab function will only get called once.
Differential Revision: https://reviews.llvm.org/D113965
Vitaly Buka [Wed, 17 Nov 2021 23:05:16 +0000 (15:05 -0800)]
[sanitizer] Add a few of type_traits tools
For D114047
Rob Suderman [Wed, 17 Nov 2021 22:48:09 +0000 (14:48 -0800)]
[mlir][tosa] Fixed shape inference for tosa.transpose_conv2d
Transpose conv2d shape inference was incorrect, tests did not properly validate
that the shape inference was executing. Corrected shape inference, and extended
tests to actually execute.
Reviewed By: NatashaKnk
Differential Revision: https://reviews.llvm.org/D114026
James Farrell [Wed, 17 Nov 2021 22:44:06 +0000 (22:44 +0000)]
Add Android test case for -Wpartial-availability. Also update Android availability tests to match on the whole string, so we can distinguish between "Android 16" and "Android 16.0.0" at the end of warning messages.
Reviewed By: danalbert, srhines
Differential Revision: https://reviews.llvm.org/D114036
Peyton, Jonathan L [Thu, 21 Oct 2021 19:07:15 +0000 (14:07 -0500)]
[OpenMP][libomp] Enable HWLOC topology detection of multiple CPU kinds
Teach the HWLOC topology method how to detect Atom and Core
types so hybrid CPUs are properly detected and represented when using
the HWLOC topology method.
Differential Revision: https://reviews.llvm.org/D112270
River Riddle [Wed, 17 Nov 2021 21:50:28 +0000 (21:50 +0000)]
[mlir] Refactor AbstractOperation and OperationName
The current implementation is quite clunky; OperationName stores either an Identifier
or an AbstractOperation that corresponds to an operation. This has several problems:
* OperationNames created before and after an operation are registered are different
* Accessing the identifier name/dialect/etc. from an OperationName are overly branchy
- they need to dyn_cast a PointerUnion to check the state
This commit refactors this such that we create a single information struct for every
operation name, even operations that aren't registered yet. When an OperationName is
created for an unregistered operation, we only populate the name field. When the
operation is registered, we populate the remaining fields. With this we now have two
new classes: OperationName and RegisteredOperationName. These both point to the
same underlying operation information struct, but only RegisteredOperationName can
assume that the operation is actually registered. This leads to a much cleaner API, and
we can also move some AbstractOperation functionality directly to OperationName.
Differential Revision: https://reviews.llvm.org/D114049
Peyton, Jonathan L [Thu, 21 Oct 2021 21:28:00 +0000 (16:28 -0500)]
[OpenMP][libomp] Improve Windows Processor Group handling within topology
The current implementation of Windows Processor Groups has
a separate topology method to handle them. This patch deprecates
that specific method and uses the regular CPUID topology
method by default and inserts the Windows Processor Group objects
in the topology manually.
Notes:
* The preference for processor groups is lowered to a value less than
socket so that the user will see sockets in the KMP_AFFINITY=verbose
output instead of processor groups when sockets=processor groups.
* The topology's capacity is modified to handle additional topology layers
without the need for reallocation.
* If a user asks for a granularity setting that is "above" the processor
group layer, then the granularity is adjusted "down" to the processor
group since this is the coarsest layer available for threads.
Differential Revision: https://reviews.llvm.org/D112273
Peyton, Jonathan L [Thu, 21 Oct 2021 21:43:54 +0000 (16:43 -0500)]
[OpenMP][libomp] Add support for offline CPUs in Linux
If some CPUs are offline, then make sure they are not included in the
fullMask even if norespect is given to KMP_AFFINITY.
Differential Revision: https://reviews.llvm.org/D112274
Greg McGary [Mon, 15 Nov 2021 18:46:59 +0000 (11:46 -0700)]
[lld-macho][nfc] Factor-out NFC changes from main __eh_frame diff
In order to keep signal:noise high for the `__eh_frame` diff, I have teased-out the NFC changes and put them here.
Differential Revision: https://reviews.llvm.org/D114017
Jacques Pienaar [Wed, 17 Nov 2021 22:07:06 +0000 (14:07 -0800)]
[mlir] Improve documentation of shape dialect
Add small example of usage (brief which will be further refined).
Nathan Ridge [Mon, 18 Oct 2021 03:29:23 +0000 (23:29 -0400)]
[clang] Allocate 2 bits to store the constexpr specifier kind when serializing
Now that consteval and constinit are possible values, 1 bit
is no longer enough.
Fixes https://github.com/clangd/clangd/issues/887
Differential Revision: https://reviews.llvm.org/D111971
Alex Zinenko [Tue, 16 Nov 2021 16:09:08 +0000 (17:09 +0100)]
[mlir] Fix wrong variable name in Linalg OpDSL
The name seems to have been left over from a renaming effort on an unexercised
codepaths that are difficult to catch in Python. Fix it and add a test that
exercises the codepath.
Reviewed By: gysit
Differential Revision: https://reviews.llvm.org/D114004
owenca [Wed, 17 Nov 2021 09:46:22 +0000 (01:46 -0800)]
[clang-format][NFC] Add a default value to parseBlock()
Differential Revision: https://reviews.llvm.org/D114073
Louis Dionne [Wed, 17 Nov 2021 21:25:01 +0000 (16:25 -0500)]
[runtimes][NFC] Remove filenames at the top of the license notice
We've stopped doing it in libc++ for a while now because these names
would end up rotting as we move things around and copy/paste stuff.
This cleans up all the existing files so as to stop the spreading
as people copy-paste headers around.
Peyton, Jonathan L [Mon, 18 Oct 2021 18:58:38 +0000 (13:58 -0500)]
[OpenMP][libomp] Allow users to specify KMP_HW_SUBSET in any order
Remove restriction forcing users to specify the KMP_HW_SUBSET value in
topology order. This patch sorts the user KMP_HW_SUBSET value before
trying to apply it. For example: 1s,4c,2t is equivalent to 2t,1s,4c
Differential Revision: https://reviews.llvm.org/D112027
Lawrence D'Anna [Wed, 17 Nov 2021 21:14:10 +0000 (13:14 -0800)]
[lldb] remove usage of distutils, fix python path on debian/ubuntu
distutils is deprecated and will be removed, so we shouldn't be
using it.
We were using it to compute LLDB_PYTHON_RELATIVE_PATH.
Discussing a similar issue
[at python.org](https://bugs.python.org/issue41282), Filipe Laíns said:
If you are relying on the value of distutils.sysconfig.get_python_lib()
as you shown in your system, you probably don't want to. That
directory (dist-packages) should be for Debian provided packages
only, so moving to sysconfig.get_path() would be a good thing,
as it has the correct value for user installed packages on your
system.
So I propose using a relative path from `sys.prefix` to
`sysconfig.get_path("platlib")` instead.
On Mac and windows, this results in the same paths as we had before,
which are `lib/python3.9/site-packages` and `Lib\site-packages`,
respectively.
On ubuntu however, this will change the path from
`lib/python3/dist-packages` to `lib/python3.9/site-packages`.
This change seems to be correct, as Filipe said above, `dist-packages`
belongs to the distribution, not us.
Reviewed By: labath
Differential Revision: https://reviews.llvm.org/D114106
Louis Dionne [Wed, 17 Nov 2021 21:13:34 +0000 (16:13 -0500)]
[libc++][NFC] Re-indent and re-order includes in uses_alloc_types.h
Yitzhak Mandelbaum [Wed, 17 Nov 2021 21:07:44 +0000 (21:07 +0000)]
[NFC] Update comments to refer to unique_ptr instead of raw pointers.
Nico Weber [Wed, 17 Nov 2021 21:06:27 +0000 (16:06 -0500)]
[clang] Fix typo in
36873fb768dbe
Nico Weber [Wed, 17 Nov 2021 20:57:31 +0000 (15:57 -0500)]
[clang] Try to fix test more after
ae98182cf7341181e
We need to use the td-based marshalling instead of doing this manually,
else the setting gets lost on the way to codegen in most build configs.
Jonathan Peyton [Wed, 17 Nov 2021 20:46:23 +0000 (14:46 -0600)]
[OpenMP][libomp][NFC] Remove non-ASCII apostrophe in comment
Philip Reames [Wed, 17 Nov 2021 20:36:12 +0000 (12:36 -0800)]
[SCEVAA] Avoid forming malformed pointer diff expressions
This solves the same crash as in D104503, but with a different approach.
The test case test_non_dom demonstrates a case where scev-aa crashes today. (If exercised either by -eval-aa or -licm.) The basic problem is that SCEV-AA expects to be able to compute a pointer difference between two SCEVs for any two pair of pointers we do an alias query on. For (valid, but out of scope) reasons, we can end up asking whether expressions in different sub-loops can alias each other. This results in a subtraction expression being formed where neither operand dominates the other.
The approach this patch takes is to leverage the "defining scope" notion we introduced for flag semantics to detect and disallow the formation of the problematic SCEV. This ends up being relatively straight forward on that new infrastructure. This change does hint that we should probably be verifying a similar property for all SCEVs somewhere, but I'll leave that to a follow on change.
Differential Revision: D114112
Michael Liao [Wed, 17 Nov 2021 20:30:38 +0000 (15:30 -0500)]
Fix -Wparentheses warnings. NFC.
Jonas Paulsson [Wed, 10 Nov 2021 19:27:42 +0000 (20:27 +0100)]
[SystemZ] [Sanitizer] Bugfixes in internal_clone().
The __flags variable needs to be of type 'long' in order to get sign extended
properly.
internal_clone() uses an svc (Supervisor Call) directly (as opposed to
internal_syscall), and therefore needs to take care to set errno and return
-1 as needed.
Review: Ulrich Weigand
Simon Pilgrim [Wed, 17 Nov 2021 19:29:06 +0000 (19:29 +0000)]
[X86] splitVector - only extract lower half subvector from splats
If we're splitting a source vector that is a splat (with no undefs), just extract (for free) the lower half subvector and use it for both halfs.
Nico Weber [Wed, 17 Nov 2021 19:29:29 +0000 (14:29 -0500)]
[clang] Try to fix test after
ae98182cf7341181e
The test assumes an integrated assembler, so use a triple where
that's the default.
Pavel Labath [Mon, 15 Nov 2021 15:40:08 +0000 (16:40 +0100)]
[lldb] Port PlatformWindows, PlatformOpenBSD and PlatformRemoteGDBServer to GetSupportedArchitectures
Nico Weber [Wed, 17 Nov 2021 19:03:01 +0000 (14:03 -0500)]
[clang] Address review comments on https://reviews.llvm.org/D113707
- Drop a needless `l` size suffix on a mov instruction in AT&T mode
- Move varying bits of test flags to front
- Add a comment about MS mode test
Michael Jones [Fri, 12 Nov 2021 19:53:44 +0000 (11:53 -0800)]
[libc] fix strtof/d/ld NaN parsing
Fix the fact that previously strtof/d/ld would only accept a NaN as
having parentheses if the thing in the parentheses was a valid number,
now it will accept any combination of letters and numbers, but will only
put valid numbers in the mantissa.
Reviewed By: sivachandra
Differential Revision: https://reviews.llvm.org/D113790
Simon Pilgrim [Wed, 17 Nov 2021 18:47:45 +0000 (18:47 +0000)]
Fix MSVC signed/unsigned mismatch warning. NFC.
Simon Pilgrim [Wed, 17 Nov 2021 18:06:49 +0000 (18:06 +0000)]
[X86] LowerRotate - improve vXi8 rotate-by-scalar lowering with direct use of (extended) shift-by-scalar helpers.
If we're rotating vXi8 by a splatted amount, then unpack to vXi16, perform a SHL by the (extended) scalar, and then pack the results.
This is a vector equivalent to the "rotl(x,y) -> (((aext(x) << bw) | zext(x)) << (y & (bw-1))) >> bw" style expansion we do for scalars in LowerFunnelShift.
I think we can usefully use this for other vector types and vector funnel-shifts in the future, depending how we expand beyond D113192 for matching rotations/funnel-shifts for more type/ops.
Mike Rice [Wed, 17 Nov 2021 17:19:19 +0000 (09:19 -0800)]
[OpenMP] Add version macro support for 5.1 and 5.2
Differential Revision: https://reviews.llvm.org/D114102
Stanislav Mekhanoshin [Tue, 9 Nov 2021 21:06:15 +0000 (13:06 -0800)]
[InstCombine] Generalize complex OR patterns to AND
For every pattern with only NOT, OR, and AND operations there is
always a symmetrical attern with AND and OR swapped.
This adds 2 transformations: https://reviews.llvm.org/D113526
```
(~(a & b) | c) & (~(a & c) | b) --> ~((b ^ c) & a)
(~(a & b) | c) & ~(a & c) --> ~((b | c) & a)
```
```
----------------------------------------
define i4 @src(i4 %a, i4 %b, i4 %c) {
%0:
%and1 = and i4 %b, %a
%not1 = xor i4 %and1, 15
%and2 = and i4 %a, %c
%not2 = xor i4 %and2, 15
%or = or i4 %not2, %b
%r = and i4 %or, %not1
ret i4 %r
}
=>
define i4 @tgt(i4 %a, i4 %b, i4 %c) {
%0:
%or = or i4 %b, %c
%and = and i4 %or, %a
%r = xor i4 %and, 15
ret i4 %r
}
Transformation seems to be correct!
----------------------------------------
define i4 @src(i4 %a, i4 %b, i4 %c) {
%0:
%and1 = and i4 %a, %b
%not1 = xor i4 %and1, 15
%or1 = or i4 %not1, %c
%and2 = and i4 %a, %c
%not2 = xor i4 %and2, 15
%or2 = or i4 %not2, %b
%and3 = and i4 %or1, %or2
ret i4 %and3
}
=>
define i4 @tgt(i4 %a, i4 %b, i4 %c) {
%0:
%xor = xor i4 %b, %c
%and = and i4 %xor, %a
%not = xor i4 %and, 15
ret i4 %not
}
Transformation seems to be correct!
```
Differential Revision: https://reviews.llvm.org/D113526
Nico Weber [Wed, 17 Nov 2021 18:43:30 +0000 (13:43 -0500)]
[llvm-objcopy] Fix some comment typos
Nico Weber [Thu, 11 Nov 2021 19:20:02 +0000 (14:20 -0500)]
[clang] Make -masm=intel affect inline asm style
With this,
void f() { __asm__("mov eax, ebx"); }
now compiles with clang with -masm=intel.
This matches gcc.
The flag is not accepted in clang-cl mode. It has no effect on
MSVC-style `__asm {}` blocks, which are unconditionally in intel
mode both before and after this change.
One difference to gcc is that in clang, inline asm strings are
"local" while they're "global" in gcc. Building the following with
-masm=intel works with clang, but not with gcc where the ".att_syntax"
from the 2nd __asm__() is in effect until file end (or until a
".intel_syntax" somewhere later in the file):
__asm__("mov eax, ebx");
__asm__(".att_syntax\nmovl %ebx, %eax");
__asm__("mov eax, ebx");
This also updates clang's intrinsic headers to work both in
-masm=att (the default) and -masm=intel modes.
The official solution for this according to "Multiple assembler dialects in asm
templates" in gcc docs->Extensions->Inline Assembly->Extended Asm
is to write every inline asm snippet twice:
bt{l %[Offset],%[Base] | %[Base],%[Offset]}
This works in LLVM after D113932 and D113894, so use that.
(Just putting `.att_syntax` at the start of the snippet works in some but not
all cases: When LLVM interpolates in parameters like `%0`, it uses at&t or
intel syntax according to the inline asm snippet's flavor, so the `.att_syntax`
within the snippet happens to late: The interpolated-in parameter is already
in intel style, and then won't parse in the switched `.att_syntax`.)
It might be nice to invent a `#pragma clang asm_dialect push "att"` /
`#pragma clang asm_dialect pop` to be able to force asm style per snippet,
so that the inline asm string doesn't contain the same code in two variants,
but let's leave that for a follow-up.
Fixes PR21401 and PR20241.
Differential Revision: https://reviews.llvm.org/D113707
Keith Smiley [Fri, 12 Nov 2021 06:23:38 +0000 (22:23 -0800)]
[llvm-objcopy][MachO] Add llvm-strip support for newer load commands
Previously llvm-strip would fail because of unknown commands.
Fixes https://bugs.llvm.org/show_bug.cgi?id=50044
Differential Revision: https://reviews.llvm.org/D113734
Louis Dionne [Wed, 17 Nov 2021 16:09:55 +0000 (11:09 -0500)]
[libc++] Refactor tests for trivially copyable atomics
- Replace irrelevant synopsis by a comment
- Use a .verify.cpp test instead of .compile.fail.cpp
- Remove unnecessary includes in one of the tests (was a copy-paste error)
Differential Revision: https://reviews.llvm.org/D114094
Nico Weber [Mon, 15 Nov 2021 20:27:42 +0000 (15:27 -0500)]
[x86/asm] Let EmitMSInlineAsmStr() handle variants too
This is preparation for D113707, where I want to make `-masm=intel`
emit `asm inteldialect` instructions.
`{movq %rbx, %rax|mov rax, rbx}` is supposed to evaluate to the bit
between { and | for att and to the bit between | and } for intel.
Since intel will become `asm inteldialect`, which alls EmitMSInlineAsmStr(),
EmitMSInlineAsmStr() has to support variants as well.
(clang translates `{...|...}` to `$(...$|...$)`. I'm not sure why
it doesn't just send along only the first `...` or the second `...`
to LLVM, but given the notes in PR23933 let's not do a big
reorganization in this codepath.)
Differential Revision: https://reviews.llvm.org/D113932
Craig Topper [Wed, 17 Nov 2021 18:19:08 +0000 (10:19 -0800)]
[RISCV] Lower vector CTLZ_ZERO_UNDEF/CTTZ_ZERO_UNDEF by converting to FP and extracting the exponent.
If we have a large enough floating point type that can exactly
represent the integer value, we can convert the value to FP and
use the exponent to calculate the leading/trailing zeros.
The exponent will contain log2 of the value plus the exponent bias.
We can then remove the bias and convert from log2 to leading/trailing
zeros.
This doesn't work for zero since the exponent of zero is zero so we
can only do this for CTLZ_ZERO_UNDEF/CTTZ_ZERO_UNDEF. If we need
a value for zero we can use a vmseq and a vmerge to handle it.
We need to be careful to make sure the floating point type is legal.
If it isn't we'll continue using the integer expansion. We could split the vector
and concatenate the results but that needs some additional work and evaluation.
Differential Revision: https://reviews.llvm.org/D111904
Nico Weber [Mon, 15 Nov 2021 15:05:12 +0000 (10:05 -0500)]
[x86/asm] Make variants work when converting at&t inline asm input to intel asm output
`asm` always has AT&T-style input (`asm inteldialect` has Intel-style asm
input), so EmitGCCInlineAsmStr() always has to pick the same variant since it
cares about the input asm string, not the output asm string.
For PowerPC, that default variant is 1. For other targets, it's 0.
Without this, the included test case errors out with
error: unknown use of instruction mnemonic without a size suffix
mov rax, rbx
since it picks the intel branch and then tries to interpret it as AT&T
when selecting intel-style output with `-x86-asm-syntax=intel`.
Differential Revision: https://reviews.llvm.org/D113894
Kadir Cetinkaya [Mon, 8 Nov 2021 10:16:28 +0000 (11:16 +0100)]
[clangd] Dont include file version in task name
This will drop file version information from span names, reducing
overall cardinality and also effect logging when skipping actions in scheduler.
Differential Revision: https://reviews.llvm.org/D113390
Keith Smiley [Fri, 12 Nov 2021 06:16:39 +0000 (22:16 -0800)]
[llvm-objdump/mac] Add support for new load commands
Differential Revision: https://reviews.llvm.org/D113733
Peter Klausler [Mon, 15 Nov 2021 21:04:02 +0000 (13:04 -0800)]
[flang] Deal with negative character lengths in semantics
Fortran defines LEN(X) = 0 after CHARACTER(LEN=-1)::X so
apply MAX(0, ...) to character length expressions.
Differential Revision: https://reviews.llvm.org/D114030
DianQK [Wed, 17 Nov 2021 17:42:21 +0000 (09:42 -0800)]
Fix the side effect of outlined function when the register is implicit use and implicit-def in the same instruction.
This is the diff associated with {D95267}, and we need to mark $x0 as live whether or not $x0 is dead.
The compiler also needs to mark register $x0 as live in for the following case.
```
$x1 = ADDXri $sp, 16, 0
BL @spam, csr_darwin_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit $x0, implicit killed $x1, implicit-def $sp, implicit-def $x0
```
This change fixes an issue where the wrong registers were used when -machine-outliner-reruns>0.
As an example:
```
lang=c
typedef struct {
double v1;
double v2;
} D16;
typedef struct {
D16 v1;
D16 v2;
} D32;
typedef long long LL8;
typedef struct {
long long v1;
long long v2;
} LL16;
typedef struct {
LL16 v1;
LL16 v2;
} LL32;
typedef struct {
LL32 v1;
LL32 v2;
} LL64;
LL8 needx0(LL8 v0, LL8 v1);
void bar(LL64 v1, LL32 v2, LL16 v3, LL32 v4, LL8 v5, D16 v6, D16 v7, D16 v8);
LL8 foo(LL8 v0, LL64 v1, LL32 v2, LL16 v3, LL32 v4, LL8 v5, D16 v6, D16 v7, D16 v8)
{
LL8 result = needx0(v0, 0);
bar(v1, v2, v3, v4, v5, v6, v7, v8);
return result + 1;
}
```
As you can see from the `foo` function, we should not modify the value of `x0` until we call `needx0`.
This code is compiled to give the following instruction MIR code.
```
$sp = frame-setup SUBXri $sp, 256, 0
frame-setup STPDi killed $d13, killed $d12, $sp, 16
frame-setup STPDi killed $d11, killed $d10, $sp, 18
frame-setup STPDi killed $d9, killed $d8, $sp, 20
frame-setup STPXi killed $x26, killed $x25, $sp, 22
frame-setup STPXi killed $x24, killed $x23, $sp, 24
frame-setup STPXi killed $x22, killed $x21, $sp, 26
frame-setup STPXi killed $x20, killed $x19, $sp, 28
...
$x1 = MOVZXi 0, 0
BL @needx0, csr_darwin_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit $x0, implicit $x1, implicit-def $sp, implicit-def $x0
...
```
Since there are some other instruction sequences that duplicate `foo`, after the first execution of Machine Outliner you will get:
```
$sp = frame-setup SUBXri $sp, 256, 0
frame-setup STPDi killed $d13, killed $d12, $sp, 16
frame-setup STPDi killed $d11, killed $d10, $sp, 18
frame-setup STPDi killed $d9, killed $d8, $sp, 20
$x7 = ORRXrs $xzr, $lr, 0
BL @OUTLINED_FUNCTION_0, implicit-def $lr, implicit $sp, implicit-def $lr, implicit $sp, implicit $xzr, implicit $x7, implicit $x19, implicit $x20, implicit $x21, implicit $x22, implicit $x23, implicit $x24, implicit $x25, implicit $x26
$lr = ORRXrs $xzr, $x7, 0
...
BL @OUTLINED_FUNCTION_1, implicit-def $lr, implicit $sp, implicit-def $lr, implicit-def $sp, implicit-def $x0, implicit-def $x1, implicit $sp
...
```
For the first time we outlined the following sequence:
```
frame-setup STPXi killed $x26, killed $x25, $sp, 22
frame-setup STPXi killed $x24, killed $x23, $sp, 24
frame-setup STPXi killed $x22, killed $x21, $sp, 26
frame-setup STPXi killed $x20, killed $x19, $sp, 28
```
and
```
$x1 = MOVZXi 0, 0
BL @needx0, csr_darwin_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit $x0, implicit $x1, implicit-def $sp, implicit-def $x0
```
When we execute the outline again, we will get:
```
$x0 = ORRXrs $xzr, $lr, 0 <---- here
BL @OUTLINED_FUNCTION_2_0, implicit-def $lr, implicit $sp, implicit-def $sp, implicit-def $lr, implicit $sp, implicit $xzr, implicit $d8, implicit $d9, implicit $d10, implicit $d11, implicit $d12, implicit $d13, implicit $x0
$lr = ORRXrs $xzr, $x0, 0
$x7 = ORRXrs $xzr, $lr, 0
BL @OUTLINED_FUNCTION_0, implicit-def $lr, implicit $sp, implicit-def $lr, implicit $sp, implicit $xzr, implicit $x7, implicit $x19, implicit $x20, implicit $x21, implicit $x22, implicit $x23, implicit $x24, implicit $x25, implicit $x26
$lr = ORRXrs $xzr, $x7, 0
...
BL @OUTLINED_FUNCTION_1, implicit-def $lr, implicit $sp, implicit-def $lr, implicit-def $sp, implicit-def $x0, implicit-def $x1, implicit $sp
```
When calling `OUTLINED_FUNCTION_2_0`, we used `x0` to save the `lr` register.
The reason for the above error appears to be that:
```
BL @OUTLINED_FUNCTION_1, implicit-def $lr, implicit $sp, implicit-def $lr, implicit-def $sp, implicit-def $x0, implicit-def $x1, implicit $sp
```
should be:
```
BL @OUTLINED_FUNCTION_1, implicit-def $lr, implicit $sp, implicit-def $lr, implicit-def $sp, implicit-def $x0, implicit-def $x1, implicit $sp, implicit $x0
```
When processing the same instruction with both `implicit-def $x0` and `implicit $x0` we should keep `implicit $x0`.
A reproducible demo is available at: [https://github.com/DianQK/reproduce_outlined_function_use_live_x0](https://github.com/DianQK/reproduce_outlined_function_use_live_x0).
Reviewed By: jinlin
Differential Revision: https://reviews.llvm.org/D112911
Ben Langmuir [Wed, 17 Nov 2021 00:12:23 +0000 (16:12 -0800)]
[JITLink] Allow duplicate symbol names for locals
Local symbols can have the same name. I ran into this with JITLink
while working with an object file that had been run through `strip -S`
that had many "func.eh" symbols, but it can also happen using `ld -r`.
rdar://
85352156
Differential Revision: https://reviews.llvm.org/D114042
Lawrence D'Anna [Wed, 17 Nov 2021 17:16:50 +0000 (09:16 -0800)]
[lldb] build failure for LLDB_PYTHON_EXE_RELATIVE_PATH on greendragon
see: https://green.lab.llvm.org/green/view/LLDB/job/lldb-cmake/38387/console
```
Could not find a relative path to sys.executable under sys.prefix
tried: /usr/local/opt/python/bin/python3.7
tried: /usr/local/opt/python/bin/../Frameworks/Python.framework/Versions/3.7/bin/python3.7
sys.prefix: /usr/local/Cellar/python/3.7.1/Frameworks/Python.framework/Versions/3.7
```
It was unable to find LLDB_PYTHON_EXE_RELATIVE_PATH because it was not resolving
the real path of sys.prefix.
caused by: https://reviews.llvm.org/D113650
Jean Perier [Wed, 17 Nov 2021 17:18:05 +0000 (18:18 +0100)]
[flang] Check ArrayRef base for contiguity in IsSimplyContiguousHelper
Previous code was returning true for `x(:)` where x is a pointer without
the contiguous attribute.
In case the array ref is a whole array section, check the base for contiguity
to solve the issue.
Differential Revision: https://reviews.llvm.org/D114084
Arthur Eubanks [Wed, 17 Nov 2021 17:07:09 +0000 (09:07 -0800)]
[gn build] Add missed comma
Arthur Eubanks [Tue, 16 Nov 2021 20:58:13 +0000 (12:58 -0800)]
[NewPM] Add option to prevent rerunning function pipeline on functions in CGSCC adaptor
In a CGSCC pass manager, we may visit the same function multiple times
due to SCC mutations. In the inliner pipeline, this results in running
the function simplification pipeline on a function multiple times even
if it hasn't been changed since the last function simplification
pipeline run.
We use a newly introduced analysis to keep track of whether or not a
function has changed since the last time the function simplification
pipeline has run on it. If we see this analysis available for a function
in a CGSCCToFunctionPassAdaptor, we skip running the function passes on
the function. The analysis is queried at the end of the function passes
so that it's available after the first time the function simplification
pipeline runs on a function. This is a per-adaptor option so it doesn't
apply to every adaptor.
The goal of this is to improve compile times. However, currently we
can't turn this on by default at least for the higher optimization
levels since the function simplification pipeline is not robust enough
to be idempotent in many cases, resulting in performance regressions if
we stop running the function simplification pipeline on a function
multiple times. We may be able to turn this on for -O1 in the near
future, but turning this on for higher optimization levels would require
more investment in the function simplification pipeline.
Heavily inspired by D98103.
Example compile time improvements with flag turned on:
https://llvm-compile-time-tracker.com/compare.php?from=
998dc4a5d3491d2ae8cbe742d2e13bc1b0cacc5f&to=
5c27c913687d3d5559ef3ab42b5a3d513531d61c&stat=instructions
Reviewed By: asbirlea, nikic
Differential Revision: https://reviews.llvm.org/D113947
Alexey Bataev [Wed, 17 Nov 2021 17:02:24 +0000 (09:02 -0800)]
[SLP][NFC]Add a test for multiple alternate nodes with cost estimation,
NFC.
Kazu Hirata [Wed, 17 Nov 2021 16:52:35 +0000 (08:52 -0800)]
[Format, Sema] Use range-based for loops with llvm::reverse (NFC)
Martin Storsjö [Wed, 17 Nov 2021 08:49:44 +0000 (10:49 +0200)]
[OpenMP] Silence build warnings when built with MinGW
There's an attempt to upstream this change in
https://github.com/intel/ittapi/pull/25 too.
Differential Revision: https://reviews.llvm.org/D114069
Louis Dionne [Mon, 15 Nov 2021 21:47:58 +0000 (16:47 -0500)]
[libc++] Remove _LIBCPP_HAS_NO_SPACESHIP_OPERATOR
All supported compilers support spaceship in C++20 nowadays.
Differential Revision: https://reviews.llvm.org/D113938
Louis Dionne [Wed, 17 Nov 2021 15:49:53 +0000 (10:49 -0500)]
[libc++abi] Don't re-define _LIBCPP_HAS_NO_THREADS in single-threaded mode
Libc++ already defines the macro inside its __config_site header, so
libc++abi doesn't need to do it. Doing it just leads to -Wmacro-redefined
warnings when building libc++abi.
Quinn Pham [Mon, 15 Nov 2021 19:06:23 +0000 (13:06 -0600)]
[NFC][gn build] Inclusive language: replace master with main in sync_source_lists_from_cmake.py
[NFC] As part of using inclusive language within the llvm project and to
match the renamed master branch, this patch replaces master with main in
sync_source_lists_from_cmake.py.
Reviewed By: thakis
Differential Revision: https://reviews.llvm.org/D113926
Guillaume Chatelet [Wed, 17 Nov 2021 15:14:06 +0000 (15:14 +0000)]
[libc] Use more consistent if defined syntax
Guillaume Chatelet [Wed, 17 Nov 2021 15:11:53 +0000 (15:11 +0000)]
[libc] Fix missing restricts
Guillaume Chatelet [Wed, 17 Nov 2021 15:10:56 +0000 (15:10 +0000)]
[libc] Fix documentation typo
Michal Terepeta [Wed, 17 Nov 2021 14:57:55 +0000 (14:57 +0000)]
[mlir][Vector] First step for 0D vector type
There seems to be a consensus that we should allow 0D vectors:
https://llvm.discourse.group/t/should-we-have-0-d-vectors/3097
This commit is only the first step: it changes the verifier and the parser to
allow vectors like `vector<f32>` (but does not allow explicit 0 dimensions,
i.e., `vector<0xf32>` is not allowed).
Reviewed By: nicolasvasilache
Differential Revision: https://reviews.llvm.org/D114086
Balazs Benics [Wed, 17 Nov 2021 14:55:35 +0000 (15:55 +0100)]
[analyzer][NFC] Make the API of CallDescription safer slightly
The new //deleted// constructor overload makes sure that no implicit
conversion from `0` would happen to `ArrayRef<const char*>`.
Also adds nodiscard to the `CallDescriptionMap::lookup()`
Zarko Todorovski [Wed, 17 Nov 2021 12:40:55 +0000 (07:40 -0500)]
[NFC][clang] Inclusive terms: replace uses of blacklist in clang/test/
Replace filenames, variable names, check prefixes uses of blacklist with ignore list.
Reviewed By: jkorous
Differential Revision: https://reviews.llvm.org/D113211
Christian Kühnel [Mon, 15 Nov 2021 15:00:23 +0000 (15:00 +0000)]
[NFC][clangd] cleanup llvm-else-after-return findings
Cleanup of clang-tidy findings: removing "else" after a return statement
to improve readability of the code.
This patch was created by applying the clang-tidy fixes automatically.
Differential Revision: https://reviews.llvm.org/D113892
Haojian Wu [Tue, 16 Nov 2021 14:58:45 +0000 (15:58 +0100)]
[clangd] Fix assertion crashes on unmatched NOLINTBEGIN comments.
The overload shouldSuppressDiagnostic seems unnecessary, and it is only
used in clangd.
This patch removes it and use the real one (suppression diagnostics are
discarded in clangd at the moment).
Fixes https://github.com/clangd/clangd/issues/929
Differential Revision: https://reviews.llvm.org/D113999
Dmitry Vyukov [Mon, 15 Nov 2021 18:39:09 +0000 (19:39 +0100)]
asan: don't use thread user_id
asan does not use user_id for anything,
so don't pass it to ThreadCreate.
Passing a random uninitialized field of AsanThread
as user_id does not make much sense anyway.
Depends on D113921.
Reviewed By: vitalybuka
Differential Revision: https://reviews.llvm.org/D113922
Dmitry Vyukov [Mon, 15 Nov 2021 18:32:21 +0000 (19:32 +0100)]
memprof: don't use thread user_id
memprof does not use user_id for anything,
so don't pass it to ThreadCreate.
Passing a random field of MemprofThread as user_id
does not make much sense anyway.
Depends on D113920.
Reviewed By: vitalybuka
Differential Revision: https://reviews.llvm.org/D113921
Dmitry Vyukov [Mon, 15 Nov 2021 18:20:00 +0000 (19:20 +0100)]
lsan: remove pthread_detach/join interceptors
They don't seem to do anything useful in lsan.
They are needed only if a tools needs to execute
some custom logic during detach/join, or if it uses
thread registry quarantine. Lsan does none of this.
And if a tool cares then it would also need to intercept
pthread_tryjoin_np and pthread_timedjoin_np, otherwise
it will mess thread states.
Fwiw, asan does not intercept these functions either.
Reviewed By: vitalybuka
Differential Revision: https://reviews.llvm.org/D113920