Vitaly Buka [Tue, 15 Jun 2021 04:58:59 +0000 (21:58 -0700)]
[NFC][hwasan] Fix "implicitly declaring library function"
Vitaly Buka [Tue, 15 Jun 2021 04:15:54 +0000 (21:15 -0700)]
[lld][MachO] Fix UB after D103006
ubsan detected:
lld/MachO/SyntheticSections.cpp:636:15: runtime error: null pointer
passed as argument 2, which is declared to never be null
Yaxun (Sam) Liu [Tue, 8 Jun 2021 20:32:03 +0000 (16:32 -0400)]
Do not merge LocalInstantiationScope for template specialization
A lambda in a function template may be recursively instantiated. The recursive
lambda will cause a lambda function instantiated multiple times, one inside another.
The inner LocalInstantiationScope should not be marked as MergeWithParentScope
since it already has references to locals properly substituted, otherwise it causes
assertion due to the check for duplicate locals in merged LocalInstantiationScope.
Reviewed by: Richard Smith
Differential Revision: https://reviews.llvm.org/D98068
Louis Dionne [Mon, 14 Jun 2021 18:36:13 +0000 (14:36 -0400)]
[libc++][ci] Enable modules in the Runtimes build
The runtimes build has assertions enabled, which is necessary to catch
some of the modules-related issues we've been seeing recently. This
patch enables testing with modules in the runtimes build so as to cover
those cases.
In the future, a better solution would be to systematically use versions
of Clang that have assertions enabled. However, the Clangs we release
currently don't have assertions enabled by default, which causes a
challenge for the CI (we could try to build our own Clang from ToT with
assertions in the CI, but that poses some problems).
Differential Revision: https://reviews.llvm.org/D104252
Alexander Shaposhnikov [Tue, 15 Jun 2021 02:21:43 +0000 (19:21 -0700)]
[lld][MachO] Add support for LC_DATA_IN_CODE
Add first bits for emitting LC_DATA_IN_CODE.
Test plan: make check-lld-macho
Differential revision: https://reviews.llvm.org/D103006
Kai Luo [Tue, 15 Jun 2021 01:55:37 +0000 (01:55 +0000)]
[PowerPC] Export 16 byte load-store instructions
Export `lq`, `stq`, `lqarx` and `stqcx.` in preparation for implementing 16-byte lock free atomic operations on AIX.
Add a new register class `g8prc` for these instructions, since these instructions require even-odd register pair.
Reviewed By: nemanjai, jsji, #powerpc
Differential Revision: https://reviews.llvm.org/D103010
Vitaly Buka [Tue, 15 Jun 2021 00:46:48 +0000 (17:46 -0700)]
[NFC][sanitizer] clang-format some code
Sean Silva [Tue, 15 Jun 2021 00:28:01 +0000 (17:28 -0700)]
[mlir:OpFormatGen] Add Support for `$_ctxt` in the transformer.
This is useful for "build tuple" type ops. In my case, in npcomp, I have
an op:
```
// Result type is `!torch.tuple<!torch.tensor, !torch.tensor>`.
torch.prim.TupleConstruct %0, %1 : !torch.tensor, !torch.tensor
```
and the context is required for the `Torch::TupleType::get` call (for
the case of an empty tuple).
The handling of these FmtContext's in the code is pretty ad-hoc -- I didn't
attempt to rationalize it and just made a targeted fix. As someone
unfamiliar with the code I had a hard time seeing how to more broadly fix
the situation.
Differential Revision: https://reviews.llvm.org/D104274
Leonard Chan [Mon, 7 Jun 2021 22:12:44 +0000 (15:12 -0700)]
[compiler-rt][hwasan] Add newline between record_addr lines on frame record dumps
If SymbolizePC failes, it's possible for the newline to not be emitted.
Differential Revision: https://reviews.llvm.org/D103845
Jacob Hegna [Mon, 14 Jun 2021 23:21:39 +0000 (23:21 +0000)]
Remove redundant environment variable XLA_FLAGS.
If the flag is not set, the script saved_model_aot_compile.py in tensorflow will
default it to the correct value. However, in TF 2.5, the way the value is set in
TensorFlowCompile.cmake file triggers a build error.
Reviewed By: mtrofin
Differential Revision: https://reviews.llvm.org/D103972
Adrian Prantl [Fri, 11 Jun 2021 22:18:25 +0000 (15:18 -0700)]
Allow signposts to take advantage of deferred string substitution
One nice feature of the os_signpost API is that format string
substitutions happen in the consumer, not the logging
application. LLVM's current Signpost class doesn't take advantage of
this though and instead always uses a static "Begin/End %s" format
string.
This patch uses variadic macros to allow the API to be used as
intended. Unfortunately, the primary use-case I had in mind (the
LLDB_SCOPED_TIMER() macro) does not get much better from this, because
__PRETTY_FUNCTION__ is *not* a macro, but a static string, so
signposts created by LLDB_SCOPED_TIMER() still use a static "%s"
format string. At least LLDB_SCOPED_TIMERF() works as intended.
This reapplies the previously reverted patch with additional include
order fixes for non-modular builds of LLDB.
Differential Revision: https://reviews.llvm.org/D103575
Huihui Zhang [Mon, 14 Jun 2021 23:21:24 +0000 (16:21 -0700)]
[SVE][LSR] Teach LSR to enable simple scaled-index addressing mode generation for SVE.
Currently, Loop strengh reduce is not handling loops with scalable stride very well.
Take loop vectorized with scalable vector type <vscale x 8 x i16> for instance,
(refer to test/CodeGen/AArch64/sve-lsr-scaled-index-addressing-mode.ll added).
Memory accesses are incremented by "16*vscale", while induction variable is incremented
by "8*vscale". The scaling factor "2" needs to be extracted to build candidate formula
i.e., "reg(%in) + 2*reg({0,+,(8 * %vscale)}". So that addrec register reg({0,+,(8*vscale)})
can be reused among Address and ICmpZero LSRUses to enable optimal solution selection.
This patch allow LSR getExactSDiv to recognize special cases like "C1*X*Y /s C2*X*Y",
and pull out "C1 /s C2" as scaling factor whenever possible. Without this change, LSR
is missing candidate formula with proper scaled factor to leverage target scaled-index
addressing mode.
Note: This patch doesn't fully fix AArch64 isLegalAddressingMode for scalable
vector. But allow simple valid scale to pass through.
Reviewed By: sdesmalen
Differential Revision: https://reviews.llvm.org/D103939
Adrian Prantl [Mon, 14 Jun 2021 23:04:43 +0000 (16:04 -0700)]
Revert "Allow signposts to take advantage of deferred string substitution"
This reverts commit
03841edde7eee21d1d450041ab9a113a7e1be869.
Unfortunately this still breaks the LLDB standalone bot.
Krzysztof Parzyszek [Mon, 14 Jun 2021 22:12:35 +0000 (17:12 -0500)]
[Hexagon] Add HVX and control register names to Hexagon target
Siva Chandra Reddy [Mon, 14 Jun 2021 21:24:57 +0000 (21:24 +0000)]
[libc] Add hardware implementations of x86_64 sqrt functions.
Matt Morehouse [Mon, 14 Jun 2021 21:18:19 +0000 (14:18 -0700)]
[HWASan] Enable globals support for LAM.
Reviewed By: vitalybuka
Differential Revision: https://reviews.llvm.org/D104265
Adrian Prantl [Fri, 11 Jun 2021 22:18:25 +0000 (15:18 -0700)]
Allow signposts to take advantage of deferred string substitution
One nice feature of the os_signpost API is that format string
substitutions happen in the consumer, not the logging
application. LLVM's current Signpost class doesn't take advantage of
this though and instead always uses a static "Begin/End %s" format
string.
This patch uses variadic macros to allow the API to be used as
intended. Unfortunately, the primary use-case I had in mind (the
LLDB_SCOPED_TIMER() macro) does not get much better from this, because
__PRETTY_FUNCTION__ is *not* a macro, but a static string, so
signposts created by LLDB_SCOPED_TIMER() still use a static "%s"
format string. At least LLDB_SCOPED_TIMERF() works as intended.
This reapplies the previsously reverted patch with additional MachO.h
macro #undefs.
Differential Revision: https://reviews.llvm.org/D103575
George Balatsouras [Sat, 12 Jun 2021 00:54:19 +0000 (17:54 -0700)]
[dfsan] Add stack-trace printing functions to dfsan interface
Reviewed By: stephan.yichao.zhao
Differential Revision: https://reviews.llvm.org/D104165
Roman Lebedev [Mon, 14 Jun 2021 20:52:53 +0000 (23:52 +0300)]
[TLI] SimplifyDemandedVectorElts(): handle SCALAR_TO_VECTOR(EXTRACT_VECTOR_ELT(?, 0))
Iff we have `SCALAR_TO_VECTOR` (and we demand it's only defined 0'th element),
and said scalar was produced by `EXTRACT_VECTOR_ELT` from the 0'th element
of some vector, then we can just continue traversal into said source vector.
This comes up in X86 vector uniform shift lowering.
Reviewed By: RKSimon
Differential Revision: https://reviews.llvm.org/D104250
Aaron Ballman [Mon, 14 Jun 2021 20:42:56 +0000 (16:42 -0400)]
Adding some of the documents for C11.
This is not the complete set of language-related documents for C11, but
is about 75% complete.
Hanhan Wang [Mon, 14 Jun 2021 20:38:21 +0000 (13:38 -0700)]
[mlir][Linalg] Make printer/parser have the same behavior.
The parser of generic op did not recognize the output from mlir-opt when there
are multiple outputs. One would wrap the result types with braces, and one would
not. The patch makes the behavior the same.
Reviewed By: mravishankar
Differential Revision: https://reviews.llvm.org/D104256
Piotr Sobczak [Mon, 14 Jun 2021 10:17:35 +0000 (12:17 +0200)]
[AMDGPU] Limit runs of fixLdsBranchVmemWARHazard
The code in fixLdsBranchVmemWARHazard looks for patterns of a vmem/lds
access followed by a branch, followed by an lds/vmem access.
The handling of the hazard requires an arbitrary number of instructions
to process. In the worst case where a function has a vmem access, but no lds
accesses, all instructions are examined only to conclude that the hazard
cannot occur.
Add the pre-processing stage which detects if there is both lds and vmem
present in the function and only then does the more costly search.
This patch significantly improves compilation time in the cases the hazard
cannot happen. In one pathological case I looked at IsHazardInst is needlesly
called 88.6 milions times.
The numbers could also be improved by introducing a map around the
inner calls to ::getWaitStatesSince in fixLdsBranchVmemWARHazard, but
nothing will beat not running fixLdsBranchVmemWARHazard at all in the cases
detected by shouldRunLdsBranchVmemWARHazardFixup().
Differential Revision: https://reviews.llvm.org/D104219
Xing Xue [Mon, 14 Jun 2021 20:04:02 +0000 (16:04 -0400)]
[libc++abi] NFC: avoid a -Wunused-parameter warning
Summary:
A -Wunused-parameter warning was introduced by patch rG7f0244afa828 [libc++abi] NFC: adding a new parameter base to functions for calculating… (authored by xingxue). The unused parameter base will be used in a follow-on patch D101298. This patch is to avoid the warning before D101298 is landed.
Reviewers: ldionne, sfertile, compnerd, libc++abi
Reviewed by: ldionne
Differential Revision: https://reviews.llvm.org/D104235
Louis Dionne [Mon, 14 Jun 2021 19:55:36 +0000 (15:55 -0400)]
[libc++] Clean up scripts to setup CI on macOS
Alexey Bataev [Mon, 14 Jun 2021 13:03:42 +0000 (06:03 -0700)]
[OPENMP][C++20]Add support for CXXRewrittenBinaryOperator in ranged for loops.
Added support for CXXRewrittenBinaryOperator as a condition in ranged
for loops. This is a new kind of expression, need to extend support for
C++20 constructs.
It fixes PR49970: range-based for compilation fails for libstdc++ vector
with -std=c++20.
Differential Revision: https://reviews.llvm.org/D104240
Chris Lattner [Mon, 14 Jun 2021 17:31:00 +0000 (10:31 -0700)]
[PassManager] Save compile time by not running the verifier unnecessarily. NFC
This changes the pass manager to not rerun the verifier when a pass says it
didn't change anything or after an OpToOpPassAdaptor, since neither of those
cases need verification (and if the pass lied, then there will be much larger
semantic problems than will be caught by the verifier).
This maintains behavior in EXPENSIVE_CHECKS mode.
Differential Revision: https://reviews.llvm.org/D104243
Arthur Eubanks [Mon, 14 Jun 2021 18:39:12 +0000 (11:39 -0700)]
Move some code under NDEBUG from D103135
River Riddle [Mon, 14 Jun 2021 18:09:43 +0000 (11:09 -0700)]
[mlir:Linalg] Populate LinalgOp patterns on LinalgDialect as opposed to each op
Interface patterns are unique in that they get added to every operation that also implements that interface, given that they aren't tied to individual operations. When the same interface pattern gets added to multiple operations (such as the current behavior with Linalg), an reference to each of these patterns is added to every op (meaning that an operation will now have N references to effectively the same pattern). This revision fixes this problematic behavior in Linalg, and can bring upwards of a 25% reduction in compile time in Linalg based workloads.
Differential Revision: https://reviews.llvm.org/D104160
Arthur Eubanks [Mon, 14 Jun 2021 18:09:41 +0000 (11:09 -0700)]
Remove accidentally added debugging code from D103135
Saleem Abdulrasool [Mon, 14 Jun 2021 01:22:59 +0000 (18:22 -0700)]
X86: pass swift_async context in R14 on Win64
Pass swift_async context in a callee-saved register rather than as a
regular parameter. This is similar to the Swift `self` and `error`
parameters.
Arthur Eubanks [Fri, 11 Jun 2021 20:34:42 +0000 (13:34 -0700)]
[docs][OpaquePtr] Shuffle around the transition plan section
Emphasize that this is basically an attempt to remove
``PointerType::getElementType`` and ``Type::getPointerElementType()``.
Add a couple more subtasks.
Differential Revision: https://reviews.llvm.org/D104151
Vitaly Buka [Mon, 14 Jun 2021 17:56:40 +0000 (10:56 -0700)]
[NFC] Remove unused variable
To fix 'set but not used' warning on sanitizer-x86_64-linux-android bot.
Arthur Eubanks [Wed, 26 May 2021 03:04:00 +0000 (20:04 -0700)]
[OpaquePtr] Remove existing support for forward compatibility
It assumes that PointerType will keep having an optional pointee type,
but we'd like to remove the pointee type in PointerType at some point.
I feel like the current implementation could be simplified anyway,
although perhaps I'm underestimating the amount of work needed
throughout BitcodeReader.
We will still need a side table to keep track of pointee types. This
will be reimplemented at some point.
This is essentially a revert of
a4771e9d (which doesn't look like it was
reviewed anyway).
Reviewed By: dblaikie
Differential Revision: https://reviews.llvm.org/D103135
Jez Ng [Mon, 14 Jun 2021 03:20:30 +0000 (23:20 -0400)]
[lld-macho] Fix "shift exponent too large" UBSAN error
UBSAN seems to have added this check somewhere along the way...
This might also fix the PPC buildbot, which is failing on the same test
Jez Ng [Sat, 12 Jun 2021 00:30:12 +0000 (20:30 -0400)]
[lld-macho] Reword comment for clarity
Alexey Bataev [Mon, 14 Jun 2021 17:04:59 +0000 (10:04 -0700)]
[OpenMP] Fix C-only clang assert on parsing use_allocator clause of target directive
The parser code assumes building with C++ compiler and asserts when using clang (not clang++) on C file. I made the code dependent on input language. This shows up for amdgpu target.
Reviewed By: ABataev
Differential Revision: https://reviews.llvm.org/D103899
wlei [Fri, 11 Jun 2021 07:35:45 +0000 (00:35 -0700)]
[CSSPGO] Aggregation by the last K context frames for cold profiles
This change provides the option to merge and aggregate cold context by the last k frames instead of context-less name. By default K = 1 means the context-less one.
This is for better perf tuning. The more selective merging and trimming will rely on llvm-profgen's preinliner.
Reviewed By: wenlei, hoy
Differential Revision: https://reviews.llvm.org/D104131
Michael Benfield [Mon, 14 Jun 2021 17:15:55 +0000 (10:15 -0700)]
[Clang] Test case for -Wunused-but-set-variable, warn for volatile.
Differential Revision: https://reviews.llvm.org/D103623
Fraser Cormack [Wed, 9 Jun 2021 14:17:21 +0000 (15:17 +0100)]
[RISCV] Transform unaligned RVV vector loads/stores to aligned ones
This patch adds support for loading and storing unaligned vectors via an
equivalently-sized i8 vector type, which has support in the RVV
specification for byte-aligned access.
This offers a more optimal path for handling of unaligned fixed-length
vector accesses, which are currently scalarized. It also prevents
crashing when `LegalizeDAG` sees an unaligned scalable-vector load/store
operation.
Future work could be to investigate loading/storing via the largest
vector element type for the given alignment, in case that would be more
optimal on hardware. For instance, a 4-byte-aligned nxv2i64 vector load
could loaded as nxv4i32 instead of as nxv16i8.
Reviewed By: craig.topper
Differential Revision: https://reviews.llvm.org/D104032
Asher Mancinelli [Mon, 14 Jun 2021 16:16:46 +0000 (09:16 -0700)]
[flang] Move buffer runtime test to GTest
Move buffer unit test from Runtime directory to RuntimeGtest
directory and use GTest. Test coverage is only maintained.
Differential Revision: https://reviews.llvm.org/D102335
Reviewed By: awarzynski, klausler
Chris Lattner [Mon, 14 Jun 2021 04:42:06 +0000 (21:42 -0700)]
[Verifier] Parallelize verification and dom checking. NFC.
This changes the outer verification loop to not recurse into
IsolatedFromAbove operations - instead return them up to a place
where a parallel for loop can process them all in parallel. This
also changes Dominance checking to happen on IsolatedFromAbove
chunks of the region tree, which makes it easy to fold operation
and dominance verification into a single simple parallel regime.
This speeds up firtool in CIRCT from ~40s to 31s on a large
testcase in -verify-each mode (the default). The .fir parser and
module passes in particular benefit from this - FModule passes
(roughly analogous to function passes) were already running the
verifier in parallel as part of the pass manager. This allows
the whole-module passes to verify their enclosed functions /
FModules in parallel.
-verify-each mode is still faster (26.3s on the same testcase),
but we do expect the verifier to take *some* time.
Differential Revision: https://reviews.llvm.org/D104207
Sanjay Patel [Mon, 14 Jun 2021 16:10:48 +0000 (12:10 -0400)]
[InstCombine] add DeMorgan folds for logical ops in select form
We canonicalized to these select patterns (poison-safe logic)
with D101191, so we need to reduce 'not' ops when possible
as we would with 'and'/'or' instructions.
This is shown in a secondary example in:
https://llvm.org/PR50389
https://alive2.llvm.org/ce/z/BvsESh
Sanjay Patel [Mon, 14 Jun 2021 14:47:36 +0000 (10:47 -0400)]
[InstCombine] add tests for logical and/or with not ops; NFC
Florian Hahn [Mon, 14 Jun 2021 16:15:32 +0000 (17:15 +0100)]
[LoopDeletion] Add test with irreducible control flow in loop.
Currently the irreducible cycles in the loops are ignored. The
irreducible cycle may loop infinitely in
irreducible_subloop_no_mustprogress, which is allowed and the loop
should not be removed.
Discussed in D103382.
Christian Sigg [Mon, 14 Jun 2021 07:14:30 +0000 (09:14 +0200)]
[mlir] Mark gpu dialect illegal in gpu-to-llvm conversion
Reviewed By: herhut, bondhugula
Differential Revision: https://reviews.llvm.org/D104208
Florian Hahn [Mon, 14 Jun 2021 15:38:27 +0000 (16:38 +0100)]
[VectorCombine] Limit scalarization to non-poison indices for now.
As Eli mentioned post-commit in D103378, the result of the freeze may
still be out-of-range according to Alive2. So for now, just limit the
transform to indices that are non-poison.
Saleem Abdulrasool [Mon, 14 Jun 2021 15:23:51 +0000 (08:23 -0700)]
SelectionDAG: repair the Windows build
6e5628354e22f3ca40b04295bac540843b8e6482 regressed the Windows build as
the return type no longer matched in both branches for the return value
type deduction. This uses a bit more compiler magic to deal with that.
zhijian [Mon, 14 Jun 2021 15:15:22 +0000 (11:15 -0400)]
[AIX][XCOFF] emit vector info of traceback table.
Summary:
emit vector info of traceback table.
Reviewers: Jason Liu,Hubert Tong
Differential Revision: https://reviews.llvm.org/D93659
Florian Hahn [Mon, 14 Jun 2021 14:27:22 +0000 (15:27 +0100)]
[ADT] Use unnamed argument for unused arg in StringMapEntryStorage.
This silences an 'unsused argument' warning.
Similar to
c2006f857d80f54b90ed7d911d3e7acf4f46001b.
Jingu Kang [Thu, 10 Jun 2021 15:02:57 +0000 (16:02 +0100)]
[AArch64] Improve SAD pattern
Given a vecreduce_add node, detect the below pattern and convert it to the node
sequence with UABDL, [S|U]ADB and UADDLP.
i32 vecreduce_add(
v16i32 abs(
v16i32 sub(
v16i32 [sign|zero]_extend(v16i8 a), v16i32 [sign|zero]_extend(v16i8 b))))
=================>
i32 vecreduce_add(
v4i32 UADDLP(
v8i16 add(
v8i16 zext(
v8i8 [S|U]ABD low8:v16i8 a, low8:v16i8 b
v8i16 zext(
v8i8 [S|U]ABD high8:v16i8 a, high8:v16i8 b
Differential Revision: https://reviews.llvm.org/D104042
Hans Wennborg [Mon, 14 Jun 2021 14:39:32 +0000 (16:39 +0200)]
Revert "[clang] NRVO: Improvements and handling of more cases."
This change caused build errors related to move-only __block variables,
see discussion on https://reviews.llvm.org/D99696
> This expands NRVO propagation for more cases:
>
> Parse analysis improvement:
> * Lambdas and Blocks with dependent return type can have their variables
> marked as NRVO Candidates.
>
> Variable instantiation improvements:
> * Fixes crash when instantiating NRVO variables in Blocks.
> * Functions, Lambdas, and Blocks which have auto return type have their
> variables' NRVO status propagated. For Blocks with non-auto return type,
> as a limitation, this propagation does not consider the actual return
> type.
>
> This also implements exclusion of VarDecls which are references to
> dependent types.
>
> Signed-off-by: Matheus Izvekov <mizvekov@gmail.com>
>
> Reviewed By: Quuxplusone
>
> Differential Revision: https://reviews.llvm.org/D99696
This also reverts the follow-on change which was hard to tease apart
form the one above:
> "[clang] Implement P2266 Simpler implicit move"
>
> This Implements [[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p2266r1.html|P2266 Simpler implicit move]].
>
> Signed-off-by: Matheus Izvekov <mizvekov@gmail.com>
>
> Reviewed By: Quuxplusone
>
> Differential Revision: https://reviews.llvm.org/D99005
This reverts commits
1e50c3d785f4563873ab1ce86559f2a1285b5678 and
bf20631782183cd19e0bb7219e908c2bbb01a75f.
LLVM GN Syncbot [Mon, 14 Jun 2021 14:41:33 +0000 (14:41 +0000)]
[gn build] Port
c820b494d6e1
zoecarver [Thu, 6 May 2021 22:31:45 +0000 (15:31 -0700)]
[libcxx][ranges] Implement views::all.
Differential Revision: https://reviews.llvm.org/D102028
Raphael Isemann [Mon, 14 Jun 2021 14:31:28 +0000 (16:31 +0200)]
[lldb][docs] Add the missing rst anchors to the Python enum docs
Raphael Isemann [Mon, 14 Jun 2021 14:21:27 +0000 (16:21 +0200)]
[lldb][docs] Fix section name for InputReaderGranularity
Arthur O'Dwyer [Sat, 12 Jun 2021 01:05:17 +0000 (21:05 -0400)]
[libc++] [test] No longer rely on std::hash<T>::argument_type.
Differential Revision: https://reviews.llvm.org/D104166
Denys Shabalin [Mon, 14 Jun 2021 14:07:40 +0000 (16:07 +0200)]
Add AutomaticAllocationScope to memref.alloca_scope
This change adds `AutomaticAllocationScope` to the
memref.alloca_scope op. Additionally, it also clarifies
that alloca_scope is is conceptually a passthrough operation.
Reviewed By: ftynse, bondhugula
Differential Revision: https://reviews.llvm.org/D104227
Peter Steinfeld [Mon, 14 Jun 2021 13:21:37 +0000 (06:21 -0700)]
[flang] Fix compilation problem with rename of "MemRefDataFlow"
Revision https://reviews.llvm.org/D104190 renamed MemRefDataFlow -> AffineScalarReplacement. After this rename, mlir failed to build. With this change, all of clang, mlir, and flang build and test correctly.
Differential Revision: https://reviews.llvm.org/D104223
David Spickett [Mon, 14 Jun 2021 12:11:58 +0000 (13:11 +0100)]
Reland "[lldb] Set return status to failed when adding a command error"
This reverts commit
ac031c8db2ce454a9b08f23192ce698e8bde4447.
SB API usage has been corrected.
Roman Lebedev [Mon, 14 Jun 2021 13:25:59 +0000 (16:25 +0300)]
[NFC][DAGCombine] Extract getFirstIndexOf() lambda back into a function
Not all supported compilers like such lambdas, at least one buildbot is unhappy.
Roman Lebedev [Mon, 14 Jun 2021 12:59:03 +0000 (15:59 +0300)]
[DAGCombine] reduceBuildVecToShuffle(): sort input vectors by decreasing size
The sorting, obviously, must be stable, else we will have random assembly fluctuations.
Apparently there was no test coverage that would benefit from that,
so i've added one test.
The sorting consists of two parts - just sort the input vectors,
and recompute the shuffle mask -> input vector mapping.
I don't believe we need to do anything else.
Reviewed By: RKSimon
Differential Revision: https://reviews.llvm.org/D104187
Jan Svoboda [Mon, 14 Jun 2021 13:08:02 +0000 (15:08 +0200)]
[clang][deps] NFC: Stop using moved-from object
The dependency scanning worker uses `std::move` to "reset" `DependencyOutputOptions` in the `CompilerInstance` that performs the implicit build. It's probably preferable to replace the object with value-initialized instance, rather than depending on the behavior of a moved-from object.
Reviewed By: dexonsmith
Differential Revision: https://reviews.llvm.org/D104106
Jan Svoboda [Mon, 14 Jun 2021 13:06:13 +0000 (15:06 +0200)]
[clang][deps] NFC: Handle `DependencyOutputOptions` only once
There's no need to pass `DependencyOutputOptions` to each call of `handleFileDependency`, since the options don't ever change.
This patch adds new `handleDependencyOutputOpts` method to the `DependencyConsumer` interface and the dependency scanner uses it to report the options only once.
Reviewed By: dexonsmith
Differential Revision: https://reviews.llvm.org/D104104
Jeroen Dobbelaere [Mon, 14 Jun 2021 12:52:29 +0000 (14:52 +0200)]
Intrinsic::getName: require a Module argument
Ensure that we provide a `Module` when checking if a rename of an intrinsic is necessary.
This fixes the issue that was detected by https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=32288
(as mentioned by @fhahn), after committing D91250.
Note that the `LLVMIntrinsicCopyOverloadedName` is being deprecated in favor of `LLVMIntrinsicCopyOverloadedName2`.
Reviewed By: nikic
Differential Revision: https://reviews.llvm.org/D99173
Louis Dionne [Mon, 14 Jun 2021 12:41:56 +0000 (08:41 -0400)]
[libc++] NFC: More refactoring in the prev/next/advance tests per review comments
Jan Svoboda [Fri, 11 Jun 2021 11:52:38 +0000 (13:52 +0200)]
[clang][deps] NFC: Fix an XFAIL test on Windows
The `sed` command ensures Windows-specific path separators (single and double backslashes) are replaced by forward slashes in the output file. FileCheck can continue using forward slashes in paths this way.
Uday Bondhugula [Sat, 12 Jun 2021 23:19:20 +0000 (04:49 +0530)]
[MLIR][NFC] Rename MemRefDataFlow -> AffineScalarReplacement
NFC. Rename MemRefDataFlow -> AffineScalarReplacement and move to
AffineTransforms library. Pass command line rename: -memref-dataflow-opt
-> affine-scalrep. Update outdated pass documentation.
Rationale:
https://llvm.discourse.group/t/move-and-rename-memref-dataflow-opt-lib-transforms-lib-affine-dialect-transforms/3640
Differential Revision: https://reviews.llvm.org/D104190
Louis Dionne [Thu, 27 May 2021 18:15:11 +0000 (14:15 -0400)]
[libc++] Refactor the tests for std::prev, next and advance
This started as an attempt to fix a GCC 11 warning of misplaced parentheses.
I then noticed that trying to fix the parentheses warning actually triggered
errors in the tests, showing that we were incorrectly assuming that the
implementation of ranges::advance was using operator+= or operator-=.
This commit fixes that issue and makes the tests easier to follow by
localizing the assertions it makes.
Differential Revision: https://reviews.llvm.org/D103272
David Spickett [Mon, 14 Jun 2021 12:08:40 +0000 (12:08 +0000)]
Revert "[lldb] Set return status to failed when adding a command error" (and fixups)
This reverts commit
f583029da3d6dbabe82f48b160227eb0120abd33,
0f94d68a2e15d50796439f20bcb508b95931d2ae and
a2363c0cf9b6a9a81c76ac652da667f73845d38b.
Due to test failures from incorrect SB API usage.
Jan Svoboda [Mon, 14 Jun 2021 10:24:54 +0000 (12:24 +0200)]
[clang][deps] Prevent unintended modifications of the original TU command-line
One of the goals of the dependency scanner is to generate command-lines that can be used to explicitly build modular dependencies of a translation unit. The only modifications to these command-lines should be for the purposes of explicit modular build.
However, the current version of dependency scanner leaks its implementation details into the command-lines.
The first problem is that the `clang-scan-deps` tool adjusts the original textual command-line (adding `-Eonly -M -MT <target> -sys-header-deps -Wno-error -o /dev/null `, removing `--serialize-diagnostics`) in order to set up the `DependencyScanning` library. This has been addressed in D103461, D104012, D104030, D104031, D104033. With these patches, the `DependencyScanning` library receives the unmodified `CompilerInvocation`, sets it up and uses it for the implicit modular build.
Finally, to prevent leaking the implementation details to the resulting command-lines, this patch generates them from the **original** unmodified `CompilerInvocation` rather than from the one that drives the implicit build.
Reviewed By: dexonsmith
Differential Revision: https://reviews.llvm.org/D104036
Jan Svoboda [Thu, 10 Jun 2021 12:13:25 +0000 (14:13 +0200)]
[clang][deps] NFC: Check the correct context hashes in tests
The `clang-scan-deps` tests for the full output format were written under the assumption that most TUs/modules have the same context hash. This is no longer true, since we're changing the original compilation options. This patch updates the tests, which no longer conflate multiple context hashes into a single FileCheck variable.
Raphael Isemann [Mon, 14 Jun 2021 11:03:02 +0000 (13:03 +0200)]
[lldb][docs] Document SBType
This documents the behaviour of the different SBType functions with notes for
the language-specific behaviour for C/C++/Objective-C. All of this reflects the
current behaviour of LLDB (even though that also means some functions behave
kinda weird but at least they are now documented to be weird)
Reviewed By: #lldb, mib
Differential Revision: https://reviews.llvm.org/D103454
Jan Svoboda [Mon, 14 Jun 2021 10:55:32 +0000 (12:55 +0200)]
[clang][deps] Fix failing modules.cpp test
Commit
d8bab69ead22a10dc4cdb2e36f6ea6fdfe774e2e updated the ClangScanDeps/modules.cpp test. The new `{{.*}}` regex is supposed to only match `modules_cdb_input.o`, `a.o` or `b.o`. However, due to non-determinism, this can sometimes also match `modules_cdb_input2.o`, causing match failure on the next line. This commit changes the regex to only match one of the three valid cases.
Buildbot failure: https://lab.llvm.org/buildbot/#/builders/109/builds/16675
Florian Hahn [Sun, 13 Jun 2021 15:29:18 +0000 (16:29 +0100)]
[VPlan] Add additional tests for region merging.
Add additional tests suggested in D100260.
Also drop the unneeded `indvars.` prefix from induction phi name.
Jan Svoboda [Mon, 14 Jun 2021 10:12:23 +0000 (12:12 +0200)]
[clang][deps] Move enabling system header deps from `clang-scan-deps` to `DependencyScanning` library
This patch moves enabling system header deps from `clang-scan-deps` into the `DependencyScanning` library. This will make it easier to preserve semantics of the original TU command-line for modular dependencies (see D104036).
Reviewed By: arphaman
Differential Revision: https://reviews.llvm.org/D104033
Jan Svoboda [Mon, 14 Jun 2021 10:09:54 +0000 (12:09 +0200)]
[clang][deps] Move injection of `-Wno-error` from `clang-scan-deps` to `DependencyScanning` library
This moves another piece of logic specific to `clang-scan-deps` into the `DependencyScanning` library. This makes it easier to check how the original command-line looked like in the library and will enable the library to stop inventing `-Wno-error` for modular dependencies (see D104036).
Reviewed By: arphaman
Differential Revision: https://reviews.llvm.org/D104031
Jan Svoboda [Mon, 14 Jun 2021 10:06:08 +0000 (12:06 +0200)]
[clang][deps] Move invocation adjustments from `clang-scan-deps` to `DependencyScanning` library
The `clang-scan-deps` tool has some logic that parses and modifies the original Clang command-line. The goal is to setup `DependencyOutputOptions` by injecting `-M -MT <target>` and prevent the creation of output files.
This patch moves the logic into the `DependencyScanning` library, and uses the parsed `CompilerInvocation` instead of the raw command-line. The code simpler and can be used from the C++ API as well.
The `-o /dev/null` arguments are not necessary, since the `DependencyScanning` library only runs a preprocessing action, so there's no way it'll produce an actual object file.
Related: The `-M` argument implies `-w`, which would appear on the command-line of modular dependencies even though it was not on the original TU command line (see D104036).
Some related tests were updated.
Reviewed By: arphaman
Differential Revision: https://reviews.llvm.org/D104030
Jan Svoboda [Mon, 14 Jun 2021 10:02:19 +0000 (12:02 +0200)]
[clang][deps] Move stripping of diagnostic serialization from `clang-scan-deps` to `DependencyScanning` library
To prevent the creation of diagnostics file, `clang-scan-deps` strips the corresponding command-line argument. This behavior is useful even when using the C++ `DependencyScanner` library.
This patch transforms stripping of command-line in `clang-scan-deps` into stripping of `CompilerInvocation` in `DependencyScanning`.
AFAIK, the `clang-cl` driver doesn't even accept `--serialize-diagnostics`, so I've removed the test. (It would fail with an unknown command-line argument otherwise.)
Note: Since we're generating command-lines for modular dependencies from `CompilerInvocation`, the `--serialize-diagnostics` will be dropped. This was already happening in `clang-scan-deps` before this patch, but it will now happen also when using `DependencyScanning` library directly. This is resolved in D104036.
Reviewed By: dexonsmith, arphaman
Differential Revision: https://reviews.llvm.org/D104012
Gabor Marton [Fri, 28 May 2021 13:18:28 +0000 (15:18 +0200)]
[Analyzer][solver] Simplify existing eq classes and constraints when a new constraint is added
Update `setConstraint` to simplify existing equivalence classes when a
new constraint is added. In this patch we iterate over all existing
equivalence classes and constraints and try to simplfy them with
simplifySVal. This solves problematic cases where we have two symbols in
the tree, e.g.:
```
int test_rhs_further_constrained(int x, int y) {
if (x + y != 0)
return 0;
if (y != 0)
return 0;
clang_analyzer_eval(x + y == 0); // expected-warning{{TRUE}}
clang_analyzer_eval(y == 0); // expected-warning{{TRUE}}
return 0;
}
```
Differential Revision: https://reviews.llvm.org/D103314
Jan Svoboda [Mon, 14 Jun 2021 09:30:26 +0000 (11:30 +0200)]
[clang][deps] Handle modular dependencies present in PCH
When a translation unit uses a PCH and imports the same modules as the PCH, we'd prefer to resolve to those modules instead of inventing new modules and reporting them as modular dependencies. Since the PCH modules have already been built nudge the compiler to reuse them when deciding whether to build a new module and don't report them as regular modular dependencies.
Depends on D103524 & D103802.
Reviewed By: dexonsmith
Differential Revision: https://reviews.llvm.org/D103526
Haojian Wu [Mon, 14 Jun 2021 09:51:00 +0000 (11:51 +0200)]
Diana Picus [Wed, 9 Jun 2021 09:47:10 +0000 (09:47 +0000)]
[flang] Add POSIX implementation for CPU_TIME
Add an implementation for CPU_TIME using the POSIX function
clock_gettime. I think on most POSIX systems this will be included for
free via <ctime>, which corresponds to "time.h" (YMMV, we can fix the
code if the need arises).
Detecting that clock_gettime is available is tricky. For instance, commit
827407a86aa07 used the following incantation in f18-parse-demo.cpp:
#if _POSIX_C_SOURCE >= 199309L && _POSIX_TIMERS > 0 && _POSIX_CPUTIME && \
defined CLOCK_PROCESS_CPUTIME_ID
This doesn't work on my AArch64 Ubuntu system, which provides
clock_gettime but doesn't define _POSIX_TIMERS. Since finding the right
combination of macros requires infinite time, patience and access to
sundry POSIX systems, we should probably try a different approach.
This patch attempts to use SFINAE instead of the preprocessor to choose
an implementation for CPU_TIME. We define a helper function template
which helps us check if clock_gettime is available (and has the
interface we expect). I hope the comments explain it well enough.
This approach has the advantage that it keeps the detection of
clock_gettime close to the code that uses it. An alternative would be to
use CMake to check for the symbol (I personally haven't used this before
so I don't know if there are any quirks).
Differential Revision: https://reviews.llvm.org/D104020
David Spickett [Mon, 14 Jun 2021 09:35:14 +0000 (09:35 +0000)]
[lldb] Correct "else if" to "elif" in TestRegisters
Guillaume Chatelet [Mon, 14 Jun 2021 09:33:39 +0000 (09:33 +0000)]
Revert "[libc] Add a set of elementary operations"
This reverts commit
e63f27a3cf8129cb66b8350ad50bf19633554a6b.
Jan Svoboda [Mon, 14 Jun 2021 09:15:03 +0000 (11:15 +0200)]
[clang][deps] Handle precompiled headers' AST files
The `PreprocessOnlyAction` doesn't support loading the AST file of a precompiled header. This is problematic for dependency scanning, since the `#include` manufactured for the PCH is treated as textual. This means the PCH contents get scanned with each TU, which is redundant. Moreover, dependencies of the PCH end up being considered dependency of the TU.
To handle AST file of PCH properly, this patch creates new `FrontendAction` that behaves the same way `PreprocessorOnlyAction` does, but treats the manufactured PCH `#include` as a normal compilation would (by not claiming it only uses a preprocessor and creating the default AST consumer).
The AST file is now reported as a file dependency of the TU.
Depends on D103519.
Reviewed By: Bigcheese
Differential Revision: https://reviews.llvm.org/D103524
David Spickett [Mon, 14 Jun 2021 09:23:05 +0000 (09:23 +0000)]
[lldb] Add missing changes to
a2363c0cf9b6a9a81c76ac652da667f73845d38b
Completely forgot to actually update the change before relanding it.
This adds the Darwin AVX changes.
David Spickett [Mon, 14 Jun 2021 09:19:25 +0000 (09:19 +0000)]
Reland "[lldb] Set return status to failed when adding a command error"
This reverts commit
db93e4e70aa453e5ba04ba0d9e01f581882b6c81.
This modifies TestRegsters.py to account for Darwin showing
AVX registers as part of "Floating Point Registers" instead
of in a separate "Advanced Vector Extensions" category.
Jan Svoboda [Mon, 14 Jun 2021 08:51:04 +0000 (10:51 +0200)]
[clang][modules][pch] Allow loading PCH with different modules cache path
It's useful to be able to load explicitly-built PCH files into an implicit build (e.g. during dependency scanning). That's currently impossible, since the explicitly-built PCH has an empty modules cache path, while the current compilation has (and needs to have) a valid path, triggering an error in the `PCHValidator`.
This patch adds a preprocessor option and command-line flag that can be used to omit this check.
Reviewed By: dexonsmith
Differential Revision: https://reviews.llvm.org/D103802
Guillaume Chatelet [Mon, 14 Jun 2021 09:01:06 +0000 (09:01 +0000)]
[libc] Add a set of elementary operations
Each of these elementary operations can be assembled to support higher order constructs (Overlapping access, Loop, Aligned Loop).
The patch does not compile yet as it depends on other ones (D100571, D100631) but it allows to get the conversation started.
Differential Revision: https://reviews.llvm.org/D100646
Jan Svoboda [Mon, 14 Jun 2021 08:32:48 +0000 (10:32 +0200)]
[clang][deps] NFC: Preserve the original frontend action
This patch stops adjusting the frontend action when `clang-scan-deps` is configured to use the full output format.
In a future patch, the dependency scanner needs to check whether the original compiler invocation builds a PCH. That's impossible when `-Eonly` et al. override `-emit-pch`.
The `-Eonly` flag is not needed - the dependency scanner explicitly sets up its own frontend action anyways.
Reviewed By: dexonsmith
Differential Revision: https://reviews.llvm.org/D103461
Guillaume Chatelet [Mon, 14 Jun 2021 08:27:41 +0000 (08:27 +0000)]
[llvm] remove Sequence::asSmallVector()
There's no need for `toSmallVector()` as `SmallVector.h` already provides a `to_vector` free function that takes a range.
Reviewed By: Quuxplusone
Differential Revision: https://reviews.llvm.org/D104024
Diana Picus [Wed, 9 Jun 2021 08:19:43 +0000 (08:19 +0000)]
[flang] Add initial implementation for CPU_TIME
Add an implementation for CPU_TIME based on std::clock(), which should
be available on all the platforms that we support.
Also add a test that's basically just a sanity check to make sure we
return positive values and that the value returned at the start of some
amount of work is larger than the one returned after the end.
Differential Revision: https://reviews.llvm.org/D104019
Simon Moll [Mon, 14 Jun 2021 06:51:24 +0000 (08:51 +0200)]
[VP] Binary floating-point intrinsics.
This patch implements vector-predicated intrinsics on IR level for fadd,
fsub, fmul, fdiv and frem. There operate in the default floating-point
environment. We will use constrained fp operand bundles for constrained
vector-predicated fp math (D93455).
Reviewed By: craig.topper
Differential Revision: https://reviews.llvm.org/D93470
Adrian Kuegel [Fri, 11 Jun 2021 10:24:40 +0000 (12:24 +0200)]
[mlir] Remove traits that require vector type support from ops in Complex dialect.
Actually, no vector types are supported so far. We should add the traits once
the vector types are supported (e.g. ElementwiseMappable.traits).
Instead add Elementwise trait to each op.
Differential Revision: https://reviews.llvm.org/D104103
Tobias Gysi [Mon, 14 Jun 2021 05:59:33 +0000 (05:59 +0000)]
[mlir][linalg] Add support for scalar input operands.
Up to now all structured op operands are assumed to be shaped. The patch relaxes this assumption and allows scalar input operands. In contrast to shaped operands scalar operands are not indexed and directly forwarded to the body of the operation. As all other operands, scalar operands are associated to an indexing map that in case of a scalar or a 0D-operand has an empty range.
We will use scalar operands as a replacement for the capture mechanism. In contrast to captures, the approach ensures we can generate the function signature from the operand list and it prevents outdated capture values in case a transformation updates only the capture operand but not the hidden body of a named operation.
Removing captures and updating existing operations such as linalg.fill is left for a later patch.
The patch depends on https://reviews.llvm.org/D103891 and https://reviews.llvm.org/D103890.
Differential Revision: https://reviews.llvm.org/D104109
Matthias Springer [Mon, 14 Jun 2021 06:00:30 +0000 (15:00 +0900)]
[mlir][linalg] Lower PadTensorOps with non-constant pad value
The padding of such ops is not generated in a vectorized way. Instead, emit a tensor::GenerateOp.
We may vectorize GenerateOps in the future.
Differential Revision: https://reviews.llvm.org/D103879
Adrian Kuegel [Fri, 11 Jun 2021 11:37:51 +0000 (13:37 +0200)]
[mlir] Add ExpOp to Complex dialect.
Also add a conversion pattern from Complex to Standard/Math dialect.
Differential Revision: https://reviews.llvm.org/D104108
Stephan Bergmann [Mon, 14 Jun 2021 05:57:22 +0000 (07:57 +0200)]
Only consider built-in compound assignment operators for -Wunused-but-set-*
At least LibreOffice has, for mainly historic reasons that would be hard to
change now, a class Any with an overloaded operator >>= that semantically does
not assign to the LHS but rather extracts into the (by-reference) RHS. Which
thus caused false positive -Wunused-but-set-parameter and
-Wunused-but-set-variable after those have been introduced recently.
This change is more conservative about the assumed semantics of overloaded
operators, excluding compound assignment operators but keeping plain operator =
ones. At least for LibreOffice, that strikes a good balance of not producing
false positives but still finding lots of true ones.
(The change to the BinaryOperator case in MaybeDecrementCount is necessary
because e.g. the template f4 test code in warn-unused-but-set-variables-cpp.cpp
turns the += into a BinaryOperator.)
Differential Revision: https://reviews.llvm.org/D103949
Mindong Chen [Mon, 14 Jun 2021 05:55:14 +0000 (13:55 +0800)]
[LoopVectorize] precommit pr50686.ll for D104148
Matthias Springer [Mon, 14 Jun 2021 05:41:07 +0000 (14:41 +0900)]
[mlir][linalg] Vectorize linalg.pad_op source copying (improved)
Vectorize linalg.pad_op source copying if source or result shape are static.
Differential Revision: https://reviews.llvm.org/D103791