Chuanqi Xu [Wed, 25 May 2022 02:30:32 +0000 (10:30 +0800)]
[C++20] [Coroutines] Conform the updates for CWG issue 2585
According to the updates in CWG issue 2585
https://cplusplus.github.io/CWG/issues/2585.html, we shouldn't find an
allocation function with (size, p0, …, pn) in global scope.
Reviewed By: erichkeane
Differential Revision: https://reviews.llvm.org/D126187
Chenbing Zheng [Wed, 25 May 2022 02:21:39 +0000 (10:21 +0800)]
[InstCombine] [NFC] Move transforms for truncated shifts into narrowBinOp
Reviewed By: spatel
Differential Revision: https://reviews.llvm.org/D126056
Chenbing Zheng [Wed, 25 May 2022 02:09:58 +0000 (10:09 +0800)]
[InstCombine] add test for trunc-shl-trunc ; NFC
owenca [Sun, 22 May 2022 04:51:19 +0000 (21:51 -0700)]
[clang-format][NFC] Insert/remove braces in clang/lib/Format/
Differential Revision: https://reviews.llvm.org/D126157
Amir Ayupov [Wed, 25 May 2022 01:28:42 +0000 (18:28 -0700)]
[BOLT][NFC] Use ListSeparator in BinaryFunction print methods
Reviewed By: rafauler
Differential Revision: https://reviews.llvm.org/D126243
Amir Ayupov [Wed, 25 May 2022 01:25:40 +0000 (18:25 -0700)]
[BOLT][NFC] Customize endline character for printInstruction(s)
This would be used in `BF::dumpGraph` to dump left-justified text.
Reviewed By: rafauler
Differential Revision: https://reviews.llvm.org/D126232
Amir Ayupov [Wed, 25 May 2022 01:04:42 +0000 (18:04 -0700)]
[BOLT][NFC] Use for_each to simplify printLoopInfo
Reviewed By: rafauler
Differential Revision: https://reviews.llvm.org/D126242
Amir Ayupov [Wed, 25 May 2022 01:01:20 +0000 (18:01 -0700)]
[BOLT][NFC] Remove unused BF::computeLocalUDChain method definition
The function is only used inside AArch64MCPlusBuilder class, there are no uses
of it as a BinaryFunction method.
Reviewed By: rafauler
Differential Revision: https://reviews.llvm.org/D126220
Jonas Devlieghere [Wed, 25 May 2022 00:17:26 +0000 (17:17 -0700)]
[lldb] Improve TestAppleSimulatorOSType.py error message
This was inspired by D109336 which got reverted because we didn't want
the test to fail silently. This patch prints a more informative error
message when we fail to parse the simctl output while still failing the
test.
Differential revision: https://reviews.llvm.org/D126217
Jonas Devlieghere [Wed, 25 May 2022 00:07:36 +0000 (17:07 -0700)]
[lldb] Disable modules in Apple-lldb-base
The LLDB website recommends using the CMake caches to build on macOS.
Although modules result in a faster build, this configuration tends to
break occasionally because it's specific to our platform. I don't expect
newcomers to be able to deal with those kind of breakages so don't
enable them by default.
Salman Javed [Tue, 24 May 2022 22:15:12 +0000 (10:15 +1200)]
[clang-tidy] Fix #55134 (regression introduced by 5da7c04)
5da7c04 introduced a regression in the NOLINT macro checking loop, replacing the
call to `getImmediateExpansionRange().getBegin()` with
`getImmediateMacroCallerLoc()`, which has similar but subtly different
behaviour.
The consequence is that NOLINTs cannot suppress diagnostics when they are
attached to a token that came from a macro **argument**, rather than elsewhere
in the macro expansion.
Revert to pre-patch behaviour and add test cases to cover this issue.
Differential Revision: https://reviews.llvm.org/D126138
Andrew Browne [Tue, 24 May 2022 21:42:41 +0000 (14:42 -0700)]
[DFSan] Add option to specify individual library files, and an option to exit with an error code if any library file was not found.
Reviewed By: vitalybuka
Differential Revision: https://reviews.llvm.org/D126336
Paul Walker [Tue, 24 May 2022 22:49:59 +0000 (23:49 +0100)]
[LLVM][IR] Fix assert in ConstantExpr::getPtrToInt so all vector types are supported.
Fixes: #55410
Aart Bik [Tue, 24 May 2022 22:17:39 +0000 (15:17 -0700)]
[mlir][sparse] complex lowering
Reviewed By: bixia
Differential Revision: https://reviews.llvm.org/D126335
Martin Sebor [Tue, 24 May 2022 23:00:11 +0000 (17:00 -0600)]
[InstCombine] Fold memrchr calls with sequences of identical bytes.
Reviewed By: nikic
Differential Revision: https://reviews.llvm.org/D123631
Siva Chandra Reddy [Fri, 20 May 2022 06:44:35 +0000 (06:44 +0000)]
[libc] Add the pthread_mutex_t type.
Simple implementations of the functions pthread_mutex_init,
pthread_mutex_destroy, pthread_mutex_lock and pthread_mutex_unlock have
have also been added. Future patches will extend these functions to add
features required by the POSIX specification.
Reviewed By: lntue
Differential Revision: https://reviews.llvm.org/D126235
Mike Rice [Tue, 24 May 2022 18:48:42 +0000 (11:48 -0700)]
[OpenMP] Add codegen for 'omp_all_memory' reserved locator.
This creates an entry with address=nullptr and flag=0x80.
When an 'omp_all_memory' entry is specified any other 'out' or
'inout' entries are not needed and are not passed to the runtime.
Differential Revision: https://reviews.llvm.org/D126321
Philip Reames [Tue, 24 May 2022 21:58:09 +0000 (14:58 -0700)]
[RISCV] Ensure the forwarded AVL register is alive
When the AVL value does not fit in 5 bits, the register in which this value is stored may be dead when we want to forward it. This patch ensure the kill flags on the register are cleared before forwarding.
Patch by: loralb
Differential Revision: https://reviews.llvm.org/D125971
Aart Bik [Tue, 24 May 2022 18:49:47 +0000 (11:49 -0700)]
[mlir][sparse] add new complex ops to reduction recognition
Reviewed By: bixia
Differential Revision: https://reviews.llvm.org/D126318
Craig Topper [Tue, 24 May 2022 21:54:57 +0000 (14:54 -0700)]
[RISCV] Add an operand kind to the opcode/imm returned from RISCVMatInt.
Instead of matching opcodes to know the format to emit, use an
enum value that we can get from the RISCVMatInt::Inst class.
Change the consumers to use fully covered switches so that we get
a compiler warning if a new kind is added. With the opcode checks
it was easier to forget to update one of the 3 consumers.
Reviewed By: reames
Differential Revision: https://reviews.llvm.org/D126317
Philip Reames [Tue, 24 May 2022 21:55:42 +0000 (14:55 -0700)]
[riscv] Use getFirstInstrTerminator [nfc]
Philip Reames [Tue, 24 May 2022 21:17:43 +0000 (14:17 -0700)]
[RISCV] Hoist VSETVLI out of idiomatic fixed length vector loops
This patch teaches the VSETVLI insertion pass to perform a very limited form of partial redundancy elimination. The motivating example comes from the fixed length vectorization of a simple loop such as:
for (unsigned i = 0; i < a_len; i++)
a[i] += b;
Without this change, the core vector loop and preheader is as follows:
.LBB0_3: # %vector.ph
andi a1, a6, -8
addi a4, a0, 16
mv a5, a1
.LBB0_4: # %vector.body
# =>This Inner Loop Header: Depth=1
addi a3, a4, -16
vsetivli zero, 4, e32, m1, ta, mu
vle32.v v8, (a3)
vle32.v v9, (a4)
vadd.vx v8, v8, a2
vadd.vx v9, v9, a2
vse32.v v8, (a3)
vse32.v v9, (a4)
addi a5, a5, -8
addi a4, a4, 32
bnez a5, .LBB0_4
The key thing to note here is that, the execution of the vsetivli only needs to happen once. Since there's no tail folding happening here, the value of the vector configuration registers are invariant through the loop.
After this patch, we hoist the configuration into the preheader and perform it once.
.LBB0_3: # %vector.ph
andi a1, a6, -8
vsetivli zero, 4, e32, m1, ta, mu
addi a4, a0, 16
mv a5, a1
.LBB0_4: # %vector.body
# =>This Inner Loop Header: Depth=1
addi a3, a4, -16
vle32.v v8, (a3)
vle32.v v9, (a4)
vadd.vx v8, v8, a2
vadd.vx v9, v9, a2
vse32.v v8, (a3)
vse32.v v9, (a4)
addi a5, a5, -8
addi a4, a4, 32
bnez a5, .LBB0_4
Differential Revision: https://reviews.llvm.org/D124869
Paul Walker [Sun, 22 May 2022 12:49:01 +0000 (13:49 +0100)]
[SelectionDAG] Add support to widen ISD::STEP_VECTOR operations.
Fixes: #55165
Differential Revision: https://reviews.llvm.org/D126168
Kiran Chandramohan [Tue, 24 May 2022 21:31:57 +0000 (21:31 +0000)]
[Flang][OpenMP] Fixes for unstructured OpenMP code
Since the FIR operations are mostly structured, it is only the functions
that could contain multiple blocks inside an operation. This changes
with OpenMP since OpenMP regions can contain multiple blocks. For
unstructured code, the blocks are created in advance and belong to the
top-level function. This caused code in OpenMP region to be placed under
the function level.
In this fix, if the OpenMP region is unstructured then new blocks are
created inside it.
Note1: This is part of upstreaming from the fir-dev branch of
https://github.com/flang-compiler/f18-llvm-project. The code in this patch is a
subset of the changes in https://github.com/flang-compiler/f18-llvm-project/pull/1178.
Reviewed By: vdonaldson
Differential Revision: https://reviews.llvm.org/D126293
Co-authored-by: Val Donaldson <vdonaldson@nvidia.com>
Co-authored-by: Eric Schweitz <eschweitz@nvidia.com>
Co-authored-by: Valentin Clement <clementval@gmail.com>
Amy Kwan [Tue, 24 May 2022 21:11:23 +0000 (16:11 -0500)]
Fix build failure revealed by
c35ca3a1c78f693b749ad11742350b7fc6c5cd89
This commit resolves a Linux kernel build failure that was revealed by
c35ca3a1c78f693b749ad11742350b7fc6c5cd89. The patch introduces two new
intrinsics, which ultimately changes the intrinsic numbering of other PPC
intrinsics. This causes an issue introduced by
ff40fb07ad6309131c2448ca00572a078c7a2d59, as the patch checks for intrinsics
with particular values, but the addition of the fnabs/fnabss intrinsics updates
the original sqrt/sdiv intrinsic values.
Peter Klausler [Fri, 20 May 2022 23:16:09 +0000 (16:16 -0700)]
[flang][runtime] Catch decimal integer input overflow
B/O/Z input overflow is already caught, and real input overflow
is signalled as an IEEE arithmetic exception, but regular decimal
integer overflow was silent.
Differential Revision: https://reviews.llvm.org/D126155
Peter Klausler [Fri, 20 May 2022 21:21:59 +0000 (14:21 -0700)]
[flang] Replace crash and improve a semantics TODO message
The derived type information table construction code had a
crash whose root cause was replacing an expression with one
of its operands -- the deletion of the LHS of that assignment
led to the RHS being invalidated before it could be read.
Fix by cloning the RHS. Also update a TODO message to the
new "_todo_en_US" message class and add a comment about how
it should be resolved.
Differential Revision: https://reviews.llvm.org/D126154
Peter Klausler [Fri, 20 May 2022 20:31:14 +0000 (13:31 -0700)]
[flang] Process subprogram BIND(C,NAME=...) locally
The scalar-default-character-expression that defines the interoperable
name of a function or subroutine (or interface) must have its names
resolved within the context of the subprogram, despite its appearance
on a function-stmt or a subroutine-stmt. Failure to do so can lead
to bogus errors or to incorrect results.
The solution is to defer name resolution for function-stmt suffixes
(but not entry-stmt suffixes) and for subroutine-stmt language binding
specifications to EndSubprogram(). (Their resolution only need to be
deferred to the end of the specification part, but it's cleanest to
deal with it in EndSubprogram().)
Differential Revision: https://reviews.llvm.org/D126153
Yitzhak Mandelbaum [Tue, 24 May 2022 18:45:59 +0000 (18:45 +0000)]
[clang][dataflow] Relax `Environment` comparison operation.
Ignore `MemberLocToStruct` in environment comparison. As an ancillary data
structure, including it is redundant. We also can generate environments which
differ in their `MemberLocToStruct` but are otherwise equivalent.
Differential Revision: https://reviews.llvm.org/D126314
Peter Klausler [Fri, 20 May 2022 15:45:46 +0000 (08:45 -0700)]
[flang] Fix false error for multiple defined I/O subroutines
User-defined derived type I/O subroutines need to be unique for
a given type and operation in any scope, but it is acceptable
to have more than one defined I/O subroutine so long as only one
of them is visible.
Differential Revision: https://reviews.llvm.org/D126152
Peter Klausler [Thu, 19 May 2022 23:30:04 +0000 (16:30 -0700)]
[flang] Accept defined assignment with CLASS(*) RHS
A utility predicate in semantics was incorrectly determining that
an INTERFACE ASSIGNMENT(=) (or other form of generic) could not have
a specific procedure with an unlimited polymorphic second argument.
This led to a crash later in expression analysis. Fix, and
extend tests.
Differential Revision: https://reviews.llvm.org/D126151
Peter Klausler [Thu, 19 May 2022 22:32:06 +0000 (15:32 -0700)]
[flang] Fix purity testing for generic calls
The purity or impurity of a call to a generic interface
depends on the attributes of the specific procedure or specific
binding. Change expression analysis of calls to generic interfaces
to replace the symbol in the parse tree with the specific procedure
or binding; this ensures that later checking for purity in
DO CONCURRENT and other contexts will be accurate.
Remove an "XFAIL" from a test that now passes again with this fix.
Differential Revision: https://reviews.llvm.org/D126150
Alex Lorenz [Tue, 24 May 2022 20:38:04 +0000 (13:38 -0700)]
[clang][test] mark tests added in
ee8524087c78 as unsupported on AIX
These tests are failing on the PPC64 AIX CI bot, but it's unclear why,
as they pass on other CI jobs.
I marked them as unsupported on AIX for now while investigating the failure.
Peter Klausler [Thu, 19 May 2022 21:17:17 +0000 (14:17 -0700)]
[flang] Don't prematurely resolve subprogram names
Name resolution for subprograms checks whether the name is already
present in the enclosing scope as a generic interface, so that the
case of a generic with the same name as one of its specifics can be
handled. The particular means by which the enclosing scope is searched
for the name would resolve the name (bind a symbol to it) as a side
effect. This turns out to be the wrong thing to do when the subprogram
is going to have its symbol created in another scope to cope with its
BIND(C,NAME="name") name, and its Fortran name is already present in the
enclosing scope for a subprogram of the same name but without
BIND(C,NAME="name").
A very long explanation for a one-line fix, sorry. In short, change
the code to look up the name but not resolve it at that point.
Differential Revision: https://reviews.llvm.org/D126149
Yitzhak Mandelbaum [Tue, 24 May 2022 19:04:54 +0000 (19:04 +0000)]
[clang][dataflow] Make limit on fixpoint-algorithm iterations proportional to size of CFG.
Currently, the maximum number of iterations of the loop for finding the fixpoint
of the dataflow analysis is set at 2^16. When things go wrong in an analysis,
this can be far too large. This patch changes the limit to be proportional to
the size of the CFG, which will generally be far smaller than 2^16 (while still
maintaining 2^16 as the absolute limit).
Differential Revision: https://reviews.llvm.org/D126316
Mariusz Borsa [Mon, 23 May 2022 21:35:42 +0000 (14:35 -0700)]
[Sanitizers][Darwin] Replace SANITIZER_MAC with SANITIZER_APPLE in source files
This is a follow up to [Sanitizers][Darwin] Rename Apple macro SANITIZER_MAC -> SANITIZER_APPLE (D125816)
Performed a global search/replace as in title against LLVM sources
Differential Revision: https://reviews.llvm.org/D126263
Peter Klausler [Wed, 18 May 2022 22:44:01 +0000 (15:44 -0700)]
[flang] Catch calls to assumed-length character functions
Semantics was allowing calls to CHARACTER(*) functions, which are odd
things -- they can be declared, and passed around, but can never actually
be called as such. They must be redeclared with an explicit length that
ends up being passed as a hidden argument. So check for these calls
and diagnose them, add tests, and clean up some existing tests that
were in error and now get caught.
Possible TODO for lowering: there were some test cases that used
bad calls to assumed-length CHARACTER*(*) functions and validated
their implementations. I've removed some, and adjusted another,
but the code that somehow implemented these calls may need to be
removed and replaced with an assert about bad semantics.
Differential Revision: https://reviews.llvm.org/D126148
Vasileios Porpodas [Tue, 24 May 2022 16:16:30 +0000 (09:16 -0700)]
[SLP] Fix crash caused by reorderBottomToTop().
The crash is caused by incorrect order set by reorderBottomToTop(), which
happens when it is reordering a TreeEntry which has a user that has already been
reordered earlier. Please see the detailed description in the lit test.
Differential Revision: https://reviews.llvm.org/D126099
Sanjay Patel [Tue, 24 May 2022 19:07:24 +0000 (15:07 -0400)]
[InstCombine] fold more shuffles with FP<->Int cast operands
shuffle (cast X), (cast Y), Mask --> cast (shuffle X, Y, Mask)
This extends the transform added with
0353c2c996c5.
If the shuffle reduces vector length, the transform
reduces the width of the cast, so that should be a
win for most codegen (if not, it can be inverted).
Leonard Chan [Tue, 24 May 2022 18:29:44 +0000 (11:29 -0700)]
Revert "[compiler-rt][scudo] Add missing preprocessor token" and "[compiler-rt][scudo] Simplify TBI checks"
This reverts commit
676eaa2ca967ca6ad4a84d31d6f0ebabdcf3e44b
and
f6038cdca03115da22b9e6ada5c25de4df5f42d2 since builders are still
broken.
Leonard Chan [Tue, 24 May 2022 18:11:31 +0000 (11:11 -0700)]
[compiler-rt][scudo] Add missing preprocessor token
This should fix build errors seen on bots like
https://lab.llvm.org/buildbot/#/builders/57/builds/18263.
Sotiris Apostolakis [Tue, 24 May 2022 03:04:20 +0000 (23:04 -0400)]
Recommit "[SelectOpti][5/5] Optimize select-to-branch transformation"
Use container::size_type directly to avoid type mismatch causing build failures in Windows.
Original commit message:
This patch optimizes the transformation of selects to a branch when the heuristics deemed it profitable.
It aggressively sinks eligible instructions to the newly created true/false blocks to prevent their
execution on the common path and interleaves dependence slices to maximize ILP.
Depends on D120232
Reviewed By: davidxl
Differential Revision: https://reviews.llvm.org/D120233
Peter Klausler [Thu, 19 May 2022 00:48:34 +0000 (17:48 -0700)]
[flang] Fix crash in semantics after PDT instantiation
The code in semantics that reinitializes symbol table pointers in
the parse tree of a parameterized derived type prior to a new
instantiation of the type was processing the symbols of the
derived type instantiation scope in arbitrary address order,
which could fail if a reference to a type parameter inherited from
an ancestor type was processed prior to the parent component sequence.
Fix by instantiating components of PDT instantiations in declaration
order.
Differential Revision: https://reviews.llvm.org/D126147
V Donaldson [Tue, 24 May 2022 17:06:24 +0000 (10:06 -0700)]
[flang] Alternate entry points with unused arguments
A dummy argument in an entry point of a subprogram with multiple
entry points need not be defined in other entry points. It is only
legal to reference such an argument when calling an entry point that
does have a definition. An entry point without such a definition
needs a local "substitute" definition sufficient to generate code.
It is nonconformant to reference such a definition at runtime.
Most such definitions and associated code will be deleted as dead
code at compile time. However, that is not always possible, as in
the following code. This code is conformant if all calls to entry
point ss set m=3, and all calls to entry point ee set n=3.
subroutine ss(a, b, m, d, k) ! no x, y, n
integer :: a(m), b(a(m)), m, d(k)
integer :: x(n), y(x(n)), n
integer :: k
1 print*, m, k
print*, a
print*, b
print*, d
if (m == 3) return
entry ee(x, y, n, d, k) ! no a, b, m
print*, n, k
print*, x
print*, y
print*, d
if (n /= 3) goto 1
end
integer :: xx(3), yy(5), zz(3)
xx = 5
yy = 7
zz = 9
call ss(xx, yy, 3, zz, 3)
call ss(xx, yy, 3, zz, 3)
end
Lowering currently generates fir::UndefOp's for all unused arguments.
This is usually ok, but cases such as the one here incorrectly access
unused UndefOp arguments for m and n from an entry point that doesn't
have a proper definition.
The problem is addressed by creating a more complete definition of an
unused argument in most cases. This is implemented in large part by
moving the definition of an unused argument from mapDummiesAndResults
to mapSymbolAttributes. The code in mapSymbolAttributes then chooses
one of three code generation options, depending on information
available there.
This patch deals with dummy procedures in alternate entries, and adds
a TODO for procedure pointers (the PFTBuilder is modified to analyze
procedure pointer symbol so that they are not silently ignored, and
instead hits proper TODOs).
BoxAnalyzer is also changed because assumed-sized arrays were wrongfully
categorized as constant shape arrays. This had no impact, except when
there were unused entry points.
Co-authored-by: jeanPerier <jperier@nvidia.com>
Differential Revision: https://reviews.llvm.org/D125867
Stanislav Mekhanoshin [Tue, 24 May 2022 17:47:18 +0000 (10:47 -0700)]
[AMDGPU] Disable newly added gfx90a global isel image tests. NFC.
This fixed build failure with expensive checks after D126009.
The change has added new run lines for Global ISel which has
uncovered a pre-existing problem: it does not select a correct
flavor of these image instructions.
Leonard Chan [Tue, 24 May 2022 17:51:42 +0000 (10:51 -0700)]
[compiler-rt][scudo] Simplify TBI checks
Differential Revision: https://reviews.llvm.org/D111080
Saleem Abdulrasool [Fri, 20 May 2022 20:35:28 +0000 (20:35 +0000)]
Sema: adjust assertion to account for deduced types
Previous changes for the BTF attributes introduced a new sub-tree
visitation. That uncovered that when accessing the typespec location we
would assert that the type specification is either a type declaration or
`typename`. However, `typename` was explicitly permitted. This change
predates the introduction of newer deduced type representations such as
`__underlying_type` from C++ and the addition of the GNU `__typeof__`
expression.
Thanks to aaron.ballman for the valuable discussion and pointer to
`isTypeRep`.
Differential Revision: https://reviews.llvm.org/D126093
Reviewed By: aaron.ballman, yonghong-song
Joseph Huber [Tue, 24 May 2022 17:43:52 +0000 (13:43 -0400)]
[OpenMP] Fix file arguments for embedding bitcode in the linker wrapper
Summary:
The linker wrapper supports embedding bitcode images instead of linked
device images to facilitate JIT in the device runtime. However, we were
incorrectly passing in the file twice when this option was set. This
patch makes sure we only use the intermediate result of the LTO pass and
don't add the final output to the full job.
In the future we will want to add both of these andle handle that
accoridngly to allow the runtime to either use the AoT compiled version
or JIT compile the bitcode version if availible.
Mike Rice [Tue, 17 May 2022 17:11:00 +0000 (10:11 -0700)]
[OpenMP] Add parsing/sema support for omp_all_memory reserved locator
Adds support for the reserved locator 'omp_all_memory' for use
in depend clauses with 'out' or 'inout' dependence-types.
Differential Revision: https://reviews.llvm.org/D125828
Peter Klausler [Wed, 18 May 2022 20:40:33 +0000 (13:40 -0700)]
[flang][runtime] Handle BACKSPACE after reading past EOF
An external READ(END=) that hits the end of the file must
also note the virtual position of the endfile record that
has just been discovered, so that a later BACKSPACE statement
won't end up at the wrong record.
Differential Revision: https://reviews.llvm.org/D126146
Leonard Chan [Tue, 24 May 2022 17:22:46 +0000 (10:22 -0700)]
[compiler-rt][lsan] Update CanBeAHeapPointer for AArch64
While attempting to get the 64-bit lsan allocator working for Fuchsia, I
noticed this function would incorrectly return false for pointers returned
by the 64-bit allocator. On AArch64, this function attempts to get the VMA
size dynamically by counting the number of leading zeros from the function
frame address. This will fail if the frame address is significantly below an
allocated pointer (that is, the frame address has more leading zeros than an
allocated pointer). This is possible on Fuchsia and linux (when not called
from the initial thread stack).
It seems the intended use of this function is to speed up pointer scanning by
filtering out addresses that user code might not be able to access. Other
platforms this check is done on seem to hardcode the VMA size/shift, so it
seems appropriate to do this for aarch64 as well. This implies pointers on
aarch64 where the VMA size is <64 will pass through, but bad pointers will
still be caught by subsequent scan checks.
This patch also renames the function to something more fitting of what it's
trying to do.
Differential Revision: https://reviews.llvm.org/D123814
Nathan Ridge [Tue, 24 May 2022 06:12:53 +0000 (02:12 -0400)]
[clangd] Handle '--' in QueryDriverDatabase
Fixes https://github.com/clangd/clangd/issues/1100,
a regression from D116721.
Differential Revision: https://reviews.llvm.org/D126274
Paul Robinson [Tue, 24 May 2022 17:03:20 +0000 (10:03 -0700)]
Reland "[PS5] Verify defaults to -fno-stack-size-section"
This reverts commit
efebb27b745a0d677ad2ea9aefff242c12aef29c.
Fixes typos (accidentally omitted %s from some RUN lines).
Stanislav Mekhanoshin [Wed, 18 May 2022 19:22:38 +0000 (12:22 -0700)]
[AMDGPU] Enforce alignment of image vaddr on gfx90a
Even though single address image instructions only use a single VGPR
HW accesses 4 or 5 which creates alignment requirement.
Fixes: SWDEV-316648
Differential Revision: https://reviews.llvm.org/D126009
Alex Lorenz [Thu, 19 May 2022 23:09:36 +0000 (16:09 -0700)]
[libclang] add supporting for indexing/visiting C++ concepts
This commit builds upon recently added indexing support for C++ concepts
from https://reviews.llvm.org/D124441 by extending libclang to
support indexing and visiting concepts, constraints and requires
expressions as well.
Differential Revision: https://reviews.llvm.org/D126031
Paul Robinson [Tue, 24 May 2022 16:59:57 +0000 (09:59 -0700)]
Revert "[PS5] Verify defaults to -fno-stack-size-section"
This reverts commit
28432b0f655641df7f9d079cf69ba235038d6340.
Caused some unexpected buildbot failures.
Chris Bieneman [Tue, 24 May 2022 16:51:00 +0000 (11:51 -0500)]
NFC. Clang-formatting.
Since the rest of the DirectX backend is pretty well clang-format
clean, this file should be too.
Peter Klausler [Wed, 18 May 2022 20:23:39 +0000 (13:23 -0700)]
[flang][runtime] INQUIRE(UNIT=666,NUMBER=n) must set n=666
Whether a unit number in an inquire-by-unit statement is valid or not,
it should be the value to which the NUMBER= variable is set, not -1.
-1 should be returned to NUMBER= only for an inquire-by-file statement
when the FILE= is not connected to any unit.
Differential Revision: https://reviews.llvm.org/D126145
Paul Robinson [Tue, 24 May 2022 16:47:22 +0000 (09:47 -0700)]
[PS5] Verify defaults to -fno-stack-size-section
Craig Topper [Tue, 24 May 2022 16:41:04 +0000 (09:41 -0700)]
Recommit "[RISCV] Use selectShiftMaskXLen ComplexPattern for isel of rotates."
This reverts commit
dfe513ae1bb6e788ead93b850d80d77d54cf29d3.
Tests have been changed to avoid the type legalization bug being
fixed in D126036.
Original commit message:
This will remove masks on the shift amount. We usually get this with
SimplifyDemandedBits in DAGCombine, but that's restricted to cases
where the AND has a single use. selectShiftMaskXLen does not have
that restriction.
Craig Topper [Tue, 24 May 2022 16:41:00 +0000 (09:41 -0700)]
[RISCV] Add test cases showing failure to remove mask on rotate amounts.
This is similar to tests I added in
e2f410feeab27a8bb2c015fc02bb8527702e401f that had to be reverted.
I've modified them to avoid the bug that is being fixed by D126036.
Nico Weber [Tue, 24 May 2022 15:42:34 +0000 (11:42 -0400)]
[gn build] Reformat all build files
Ran:
git ls-files '*.gn' '*.gni' | xargs llvm/utils/gn/gn.py format
Peter Klausler [Thu, 19 May 2022 16:55:29 +0000 (09:55 -0700)]
[flang] Extension: Accept Hollerith actual arguments as if they were BOZ
When a Hollerith (or short character) literal is presented as an actual
argument that corresponds to a dummy argument for which a BOZ literal
would be acceptable, treat the Hollerith as if it had been a BOZ
literal in the same way -- and with the same code -- as f18 already
does for the similar extension in DATA statements.
Differential Revision: https://reviews.llvm.org/D126144
Cyndy Ishida [Tue, 24 May 2022 13:24:02 +0000 (06:24 -0700)]
[Clang] Avoid misleading 'conflicting types' diagnostic with no-prototype decls.
Clang has recently started diagnosing prototype redeclaration errors like [rG385e7df33046](https://reviews.llvm.org/rG385e7df33046d7292612ee1e3ac00a59d8bc0441)
This flagged legitimate issues in a codebase but was confusing to resolve because it actually conflicted with a function declaration from a system header and not from the one emitted with "note: ".
This patch updates the error handling to use the canonical declaration's source location instead to avoid misleading errors like the one described.
Reviewed By: aaron.ballman
Differential Revision: https://reviews.llvm.org/D126258
Nico Weber [Tue, 24 May 2022 15:40:40 +0000 (11:40 -0400)]
[gn build] (semi-automatically) port
0360b9f1599b
Louis Dionne [Tue, 24 May 2022 15:31:31 +0000 (11:31 -0400)]
[libc++][NFC] Whitespace refactoring of string.cpp for consistency and legibility
Louis Dionne [Tue, 24 May 2022 15:22:43 +0000 (11:22 -0400)]
[libc++][NFC] Move definitions around in string.cpp to reduce _LIBCPP_HAS_NO_WIDE_CHARACTERS blocks
Mogball [Tue, 24 May 2022 15:03:12 +0000 (15:03 +0000)]
[mlir] Rename mlir::SmallVector -> llvm::SmallVector
Logan Chien [Wed, 18 May 2022 20:59:08 +0000 (13:59 -0700)]
[mlir] Breakdown diagnostic string literals
This commit breaks down diagnostic string literals so that the attribute
name and enumurator names can be shared with the stringify utility
function and the "expected ", " to be one of ", and ", " can be shared
between different enum-related diagnostic.
Differential Revision: https://reviews.llvm.org/D125938
Peter Klausler [Thu, 12 May 2022 00:08:21 +0000 (17:08 -0700)]
[flang][runtime] Clean up asynchronous I/O APIs
Now that the requirements and implementation of asynchronous I/O are
better understood, adjust their I/O runtime APIs. In particular:
1) Remove the BeginAsynchronousOutput/Input APIs; they're not needed,
since any data transfer statement might have ASYNCHRONOUS= and
(if ASYNCHRONOUS='YES') ID= control list specifiers that need to
at least be checked.
2) Add implementations for BeginWait(All) to check for the error
case of a bad unit number and nonzero ID=.
3) Rearrange and comment SetAsynchronous so that it's clear that
it can be called for READ/WRITE as well as for OPEN.
The implementation remains completely synchronous, but should be conforming.
Where opportunities make sense for true asynchronous implementations of
some big block transfers without SIZE= in the future, we'll need to add
a GetAsynchronousId API to capture ID= on a READ or WRITE; add sourceFile
and sourceLine arguments to BeginWait(All) for good error reporting;
track pending operations in unit.h; and add code to force synchronization
to non-asynchronous I/O operations.
Lowering should call SetAsynchronous when ASYNCHRONOUS= appears as
a control list specifier. It should also set ID=x variables to 0
until such time as we support asynchronous operations, if ever.
This patch only removes the removed APIs from lowering.
Differential Revision: https://reviews.llvm.org/D126143
Serge Pavlov [Tue, 24 May 2022 11:30:13 +0000 (18:30 +0700)]
Fix behavior of is_fp_class on empty class set
The second argument to is_fp_class specifies the set of floating-point
class to test against. It can be zero, in this case the intrinsic is
expected to return zero value.
Differential Revision: https://reviews.llvm.org/D112025
Simon Pilgrim [Tue, 24 May 2022 14:44:44 +0000 (15:44 +0100)]
[DAG] Unroll vectorized FPOW instructions before widening that will scalarize to libcalls anyway
Followup to D125988 - FPOW is similar to FREM and will most likely scalarize to libcalls, so unroll before widening to prevent use making additional libcalls with UNDEF args.
Hans Wennborg [Tue, 24 May 2022 13:47:41 +0000 (15:47 +0200)]
[libcxx] Add sort.bench.cpp to libcxx/benchmarks/CMakeLists.txt
It was forgotten in D124740.
Differential revision: https://reviews.llvm.org/D126297
Sam Parker [Tue, 24 May 2022 14:33:21 +0000 (15:33 +0100)]
[TypePromotion] Avoid unnecessary trunc zext pairs
Any zext 'sink' should already have an operand that is in the legal
value, so avoid using a trunc and just use the trunc operand instead.
Differential Revision: https://reviews.llvm.org/D118905
Thomas Raoux [Tue, 24 May 2022 14:16:00 +0000 (14:16 +0000)]
[mlir][vector] Add new lowering mode to vector.contractionOp
Add lowering for cases where the reduction dimension is fully unrolled.
It is common to unroll the reduction dimension, therefore we would want
to lower the contractions to an elementwise vector op in this case.
Differential Revision: https://reviews.llvm.org/D126120
Simon Pilgrim [Tue, 24 May 2022 14:17:59 +0000 (15:17 +0100)]
[CostModel][X86] getScalarizationOverhead - improve extraction costs for > 128-bit vectors
We were using the default getScalarizationOverhead expansion for extraction costs, which adds up all the individual element extraction costs.
This is fine for 128-bit vectors, but for 256/512-bit vectors each element extraction also has to account for extracting the upper 128-bit subvector extraction before it can handle the element. For scalarization costs we only need to extract each demanded subvector once.
Differential Revision: https://reviews.llvm.org/D125527
Ivan Kosarev [Tue, 24 May 2022 14:12:45 +0000 (15:12 +0100)]
[AMDGPU][MC][GFX11] Support base+soffset+offset SMEM loads.
Reviewed By: dp
Differential Revision: https://reviews.llvm.org/D126207
Nikita Popov [Tue, 24 May 2022 14:08:21 +0000 (16:08 +0200)]
[InstCombine] Strip bitcasts in GEP diff fold
Bitcasts were stripped in one case, but not the other. Of course,
this no longer really matters with opaque pointers, but as I went
through the trouble of tracking this down, we may as well remove
one typed vs opaque pointer optimization discrepancy.
Nikita Popov [Tue, 24 May 2022 14:09:26 +0000 (16:09 +0200)]
[InstCombine] Add test for GEP difference with bitcasts (NFC)
Louis Dionne [Tue, 24 May 2022 13:58:04 +0000 (09:58 -0400)]
[libc++] Rename the generic-singlethreaded CI job to generic-no-threads for consistency
Nikita Popov [Tue, 24 May 2022 13:48:28 +0000 (15:48 +0200)]
[InstCombine] Use IRBuilder in freeze pushing transform (PR55619)
Use IRBuilder so that the newly created freeze instructions
automatically gets inserted back into the IC worklist.
The changed worklist processing order leads to some cosmetic
differences in tests.
Fixes https://github.com/llvm/llvm-project/issues/55619.
Nikita Popov [Tue, 24 May 2022 13:17:19 +0000 (15:17 +0200)]
[InstCombine] Add tests for freeze of load with metadata (NFC)
Sam McCall [Wed, 18 May 2022 17:24:07 +0000 (19:24 +0200)]
[pseudo] (trivial) bracket-matching
Error-tolerant bracket matching enables our error-tolerant parsing strategies.
The implementation here is *not* yet error tolerant: this patch sets up the APIs
and plumbing, and describes the planned approach.
Differential Revision: https://reviews.llvm.org/D125911
Joseph Huber [Mon, 23 May 2022 21:51:30 +0000 (17:51 -0400)]
[OpenMP] Add `-Xoffload-linker` to forward input to the device linker
We use the clang-linker-wrapper to perform device linking of embedded
offloading object files. This is done by generating those jobs inside of
the linker-wrapper itself. This patch adds an argument in Clang and the
linker-wrapper that allows users to forward input to the device linking
phase. This can either be done for every device linker, or for a
specific target triple. We use the `-Xoffload-linker <arg>` and the
`-Xoffload-linker-<triple> <arg>` syntax to accomplish this.
Reviewed By: markdewing, tra
Differential Revision: https://reviews.llvm.org/D126226
Alexey Bataev [Tue, 24 May 2022 13:01:17 +0000 (06:01 -0700)]
[SLP][NFC]Make isFirstInsertElement a weak strict ordering comparator.
To be used correctly in a sort-like function, isFirstInsertElement
function must follow weak strict ordering rule, i.e.
isFirstInsertElement(IE1, IE1) should return false.
Nabeel Omer [Tue, 24 May 2022 12:30:47 +0000 (13:30 +0100)]
[x86][DAG] Unroll vectorized FREMs that will become libcalls
Currently, two element vectors produced as the result of a binary op are
widened to four element vectors on x86 by
DAGTypeLegalizer::WidenVecRes_BinaryCanTrap. If the op still isn't legal
after widening it is unrolled into 4 scalar ops in SelectionDAG before
being converted into a libcall. This way we end up with 4 libcalls (two of
them on known undef elements) instead of the original two libcalls.
This patch modifies DAGTypeLegalizer::WidenVectorResult to ensure that if
it is known that a binary op will be tunred into a libcall, it is unrolled
instead of being widened. This prevents the creation of the extra scalar
instructions on known undef elements and (eventually) libacalls with known
undef parameters which would otherwise be created when the op gets expanded
post widening.
Differential Revision: https://reviews.llvm.org/D125988
Sylvestre Ledru [Tue, 24 May 2022 12:17:49 +0000 (14:17 +0200)]
Revert "[TableGen] Remove code beads"
It is breaking the build with:
/build/llvm-toolchain-snapshot-15~++
20220524114008+
96323c9f4c10/llvm/lib/Target/M68k/MCTargetDesc/M68kMCCodeEmitter.cpp:478:10: fatal error: 'M68kGenMCCodeBeads.inc' file not found
^~~~~~~~~~~~~~~~~~~~~~~~
1 error generated.
Remove the #include causes:
error: undefined reference to 'llvm::M68k::getMCInstrBeads(unsigned int)'
This reverts commit
f50be3d21808ae113c40a68a9ac6581f203d92d2.
Ivan Kosarev [Tue, 24 May 2022 11:32:48 +0000 (12:32 +0100)]
[Clang][CodeGen] Fix the cmse-clear-return.c test.
Caught with D125604.
Reviewed By: nikic
Differential Revision: https://reviews.llvm.org/D126191
Kristof Beyls [Tue, 24 May 2022 11:46:08 +0000 (13:46 +0200)]
Minutes for security group sync-ups have moved to Discourse.
Simon Pilgrim [Tue, 24 May 2022 10:55:36 +0000 (11:55 +0100)]
[X86] scalar_widen_div.ll - remove non-generated CHECKs
These were left over from when we converted to the update_llc_test_checks script and were just matching some asm/cfi directives - we have CHECK-LABEL to do this properly now.
Anastasia Stulova [Tue, 24 May 2022 10:26:43 +0000 (11:26 +0100)]
[OpenCL] Make -cl-ext a driver option.
For generic targets such as SPIR-V clang sets all OpenCL
extensions/features as supported by default. However
concrete targets are unlikely to support all extensions
features, which creates a problem when such generic SPIR-V
binary is compiled for a specific target later on.
To allow compile time diagnostics for unsupported features
this flag is now being exposed in the clang driver.
Differential Revision: https://reviews.llvm.org/D125243
Max Kazantsev [Tue, 24 May 2022 10:22:16 +0000 (17:22 +0700)]
Fix comment in test. NFC
Max Kazantsev [Tue, 24 May 2022 10:17:05 +0000 (17:17 +0700)]
[Test] Add LICM test for PR55672 showing problem with freeze instruction
Luo, Yuanke [Tue, 24 May 2022 08:46:27 +0000 (16:46 +0800)]
[X86][AMX] Reduce the compiling time for non-amx code.
Differential Revision: https://reviews.llvm.org/D126280
Simon Pilgrim [Tue, 24 May 2022 09:45:12 +0000 (10:45 +0100)]
[X86] Add test showing failure to expand <2 x float> fpow without widening to <4 x float>
Similar to D125988 (and I have a pending follow up patch to handle fpow).
Sheng [Tue, 24 May 2022 02:53:48 +0000 (10:53 +0800)]
[TableGen] Remove code beads
Code beads is useless since the only user, M68k, has moved on to
a new encoding/decoding infrastructure.
Kito Cheng [Fri, 20 May 2022 08:24:37 +0000 (16:24 +0800)]
[RISCV][NFC] Change interface of RVVIntrinsic::getSuffixStr
This NFC patch is splited from D111617.
Using llvm::ArrayRef rather than llvm::SmallVector, ArrayRef is more generic
interface that could accept both llvm::ArrayRef and llvm::SmallVector.
Reviewed By: reames
Differential Revision: https://reviews.llvm.org/D125893
Nikita Popov [Tue, 24 May 2022 08:45:29 +0000 (10:45 +0200)]
[InstCombine] Support logical and in masked icmp fold
Most of the folds implemented in this function work fine with
logical operations. We only need to be careful for the cases that
work on non-constant masks, where the RHS operand shouldn't be
poison.
This is a conservative implementation that bails out of illegal
transforms, but we could also change these to insert freeze instead.
Nikita Popov [Tue, 24 May 2022 09:10:36 +0000 (11:10 +0200)]
[InstCombine] Add tests for masked icmps with bitwise+logical and (NFC)
Nikita Popov [Tue, 24 May 2022 08:56:16 +0000 (10:56 +0200)]
[InstCombine] Use m_APInt() in asymmetric masked icmp fold
This is mostly intended as code cleanup, but it does also add
support for splat vectors to this fold.