Jianzhou Zhao [Fri, 5 Feb 2021 18:06:14 +0000 (18:06 +0000)]
[dfsan] Add origin chain utils
This is a part of https://reviews.llvm.org/D95835.
The design is based on MSan origin chains.
An 4-byte origin is a hash of an origin chain. An origin chain is a
pair of a stack hash id and a hash to its previous origin chain. 0 means
no previous origin chains exist. We limit the length of a chain to be
16. With origin_history_size = 0, the limit is removed.
The change does not have any test cases yet. The following change
will be adding test cases when the APIs are used.
Reviewed-by: morehouse
Differential Revision: https://reviews.llvm.org/D96160
Matt Arsenault [Thu, 14 Jan 2021 15:30:55 +0000 (10:30 -0500)]
AMDGPU: Restrict soft clause bundling at half of the available regs
Fixes a testcase that was overcommitting large register tuples to a
bundle, which the register allocator could not possibly satisfy. This
was producing a bundle which used nearly all of the available SGPRs
with a series of 16-dword loads (not all of which are freely available
to use).
This is a quick hack for some deeper issues with how the clause
bundler tracks register pressure.
Overall the pressure tracking used here doesn't make sense and is too
imprecise for what it needs to avoid the allocator failing. The
pressure estimate does not account for the alignment requirements of
large SGPR tuples, so this was really underestimating the pressure
impact. This also ignores the impact of the extended live range of the
use registers after the bundle is introduced. Additionally, it didn't
account for some wide tuples not being available due to reserved
registers.
This regresses a few cases. These end up introducing more
spilling. This is also a function of the global pressure being used in
the decision to bundle, not the local pressure impact of the bundle
itself.
peter klausler [Thu, 11 Feb 2021 00:20:59 +0000 (16:20 -0800)]
[flang] Improve "Error reading module file" error message
Instead of using a message attachment with further details,
emit the details as part of a single message.
Differential Revision: https://reviews.llvm.org/D96465
Sam Clegg [Wed, 10 Feb 2021 18:11:52 +0000 (10:11 -0800)]
[lld][WebAssembly] Delay the merging of data section when dynamic linking
With dynamic linking we have the current limitation that there can be
only a single active data segment (since we use __memory_base as the
load address and we can't do arithmetic in constant expresions).
This change delays the merging of active segments until a little later
in the linking process which means that the grouping of data by section,
and the magic __start/__end symbols work as expected under dynamic
linking.
Differential Revision: https://reviews.llvm.org/D96453
Nick Desaulniers [Thu, 11 Feb 2021 17:00:11 +0000 (09:00 -0800)]
[clang][Arm] Fix handling of -Wa,-implicit-it=
Similiar to D95872, this flag can be set for the assembler directly.
Move validation code into a reusable helper function.
Link: https://bugs.llvm.org/show_bug.cgi?id=49023
Link: https://github.com/ClangBuiltLinux/linux/issues/1270
Reported-by: Arnd Bergmann <arnd@kernel.org>
Signed-off-by: Nick Desaulniers <ndesaulniers@google.com>
Reviewed By: DavidSpickett
Differential Revision: https://reviews.llvm.org/D96285
Philip Reames [Thu, 11 Feb 2021 18:47:35 +0000 (10:47 -0800)]
[tests] Precommit tests for D96440
Sanjay Patel [Thu, 11 Feb 2021 15:35:17 +0000 (10:35 -0500)]
[InstCombine] add tests for disguised mul ops; NFC
Yonghong Song [Thu, 11 Feb 2021 18:00:32 +0000 (10:00 -0800)]
BPF: Add LLVMAnalysis in CMakefile LINK_COMPONENTS
buildbot reported a build error like below:
BPFTargetMachine.cpp:(.text._ZN4llvm19TargetTransformInfo5ModelINS_10BPFTTIImplEED2Ev
[_ZN4llvm19TargetTransformInfo5ModelINS_10BPFTTIImplEED2Ev]+0x14):
undefined reference to `llvm::TargetTransformInfo::Concept::~Concept()'
lib/Target/BPF/CMakeFiles/LLVMBPFCodeGen.dir/BPFTargetMachine.cpp.o:
In function `llvm::TargetTransformInfo::Model<llvm::BPFTTIImpl>::~Model()':
Commit
a260ae716030 ("BPF: Implement TTI.IntImmCost() properly")
added TargetTransformInfo to BPF, which requires LLVMAnalysis
dependence. In certain cmake configurations, lacking explicit
LLVMAnalysis dependency may cause compilation error.
Similar to other targets, this patch added LLVMAnalysis
in CMakefile LINK_COMPONENTS explicitly.
Michael Kruse [Thu, 11 Feb 2021 18:03:20 +0000 (12:03 -0600)]
Revert "[AssumptionCache] Avoid dangling llvm.assume calls in the cache"
This reverts commit
b7d870eae7fdadcf10d0f177faa7409c2e37d776 and the
subsequent fix "[Polly] Fix build after AssumptionCache change (D96168)"
(commit
e6810cab09fcbc87b6e5e4d226de0810e2f2ea38).
It caused indeterminism in the output, such that e.g. the
polly-x86_64-linux buildbot failed accasionally.
Mark de Wever [Thu, 11 Feb 2021 18:11:20 +0000 (19:11 +0100)]
[libc++][format] Enable format_error on older compilers.
It seems like modifying the header doesn't cause libc++ to be rebuild.
So the breakage of the previous commit didn't happen on my system.
This should fix the build of https://buildkite.com/mlir/mlir-core
Leandro Vaz [Thu, 11 Feb 2021 18:08:42 +0000 (18:08 +0000)]
[flang] Fix typo in FlangConfig.cmake.in.
`find_package(Flang)` does not work as there is a missing `@` in the
FlangConfig.cmake.in file. This patch fixes the issue.
Reviewed By: thopre
Differential Revision: https://reviews.llvm.org/D96484
Mark de Wever [Thu, 11 Feb 2021 17:52:47 +0000 (18:52 +0100)]
[libc++][format] Improve Add basic_format_parse_context.
Add an additional guard to prevent building on older clang versions.
This should fix the build of https://buildkite.com/mlir/mlir-core
Fangrui Song [Thu, 11 Feb 2021 17:53:48 +0000 (09:53 -0800)]
[asan][test] Fix Linux/odr-violation.cpp on gcc
David Green [Thu, 11 Feb 2021 17:50:11 +0000 (17:50 +0000)]
[ARM] Single source vmovnt tests. NFC
Jay Foad [Tue, 9 Feb 2021 18:11:10 +0000 (18:11 +0000)]
[AMDGPU] Better selection of base offset when merging DS reads/writes
When merging a pair of DS reads or writes needs to materialize the base
offset in a vgpr, choose a value that is aligned to as high a power of
two as possible. This maximises the chance that different pairs can use
the same base offset, in which case the base offset registers can be
commoned up by MachineCSE.
Differential Revision: https://reviews.llvm.org/D96421
Craig Topper [Thu, 11 Feb 2021 17:22:25 +0000 (09:22 -0800)]
[TargetLowering][RISCV][AArch64][PowerPC] Enable BuildUDIV/BuildSDIV on illegal types before type legalization if we can find a larger legal type that supports MUL.
If we wait until the type is legalized, we'll lose information
about the orginal type and need to use larger magic constants.
This gets especially bad on RISCV64 where i64 is the only legal
type.
I've limited this to simple scalar types so it only works for
i8/i16/i32 which are most likely to occur. For more odd types
we might want to do a small promotion to a type where MULH is legal
instead.
Unfortunately, this does prevent some urem/srem+seteq matching since
that still require legal types.
Reviewed By: RKSimon
Differential Revision: https://reviews.llvm.org/D96210
Fangrui Song [Thu, 11 Feb 2021 17:41:46 +0000 (09:41 -0800)]
[ELF] Resolve defined symbols before undefined symbols
When parsing an object file, LLD interleaves undefined symbol resolution (which
may recursively fetch other lazy objects) with defined symbol resolution.
This may lead to surprising results, e.g. if an object file defines currently
undefined symbols and references another lazy symbol, we may interleave defined
symbols with the lazy fetch, potentially leading to the defined symbols
resolving to different files.
As an example, if both `a.a(a.o)` and `a.a(b.o)` define `foo` (not in COMDAT
group, or in different COMDAT groups) and `__profd_foo` (in COMDAT group
`__profd_foo`). LLD may resolve `foo` to `a.a(a.o)` and `__profd_foo` to
`b.a(b.o)`, i.e. different files.
```
parse ArchiveFile a.a
entry fetches a.a(a.o)
parse ObjectFile a.o
define entry
define foo
reference b
b fetches a.a(b.o)
parse ObjectFile b.o
define prevailing __profd_foo
define (ignored) non-prevailing __profd_foo
```
Assuming a set of interconnected symbols are defined all or none in several lazy
objects. Arguably making them resolve to the same file is preferable than making
them resolve to different files (some are lazy objects).
The main argument favoring the new behavior is the stability. The relative order
between a defined symbol and an undefined symbol does not change the symbol
resolution behavior. Only the relative order between two undefined symbols can
affect fetching behaviors.
---
The real world case is reduced from a Fuchsia PGO usage: `a.a(a.o)` has a
constructor within COMDAT group C5 while `a.a(b.o)` has a constructor within
COMDAT group C2. Because they use different group signatures, they are not
de-duplicated. It is not entirely whether Clang behavior is entirely conforming.
LLD selects the PGO counter section (`__profd_*`) from `a.a(b.o)` and the
constructor section from `a.a(a.o)`. The `__profd_*` is a SHF_LINK_ORDER section
linking to its own non-prevailing constructor section, so LLD errors
`sh_link points to discarded section`. This patch fixes the error.
Differential Revision: https://reviews.llvm.org/D95985
Nico Weber [Thu, 11 Feb 2021 17:41:29 +0000 (12:41 -0500)]
[gn build] port
ed98676fa483
Stella Stamenova [Thu, 11 Feb 2021 17:32:20 +0000 (09:32 -0800)]
Support multi-configuration generators correctly in several config files
Multi-configuration generators (such as Visual Studio and Xcode) allow the specification of a build flavor at build time instead of config time, so the lit configuration files need to support that - and they do for the most part. There are several places that had one of two issues (or both!):
1) Paths had %(build_mode)s set up, but then not configured, resulting in values that would not work correctly e.g. D:/llvm-build/%(build_mode)s/bin/dsymutil.exe
2) Paths did not have %(build_mode)s set up, but instead contained $(Configuration) (which is the value for Visual Studio at configuration time, for Xcode they would have had the equivalent) e.g. "D:/llvm-build/$(Configuration)/lib".
This seems to indicate that we still have a lot of fragility in the configurations, but also that a number of these paths are never used (at least on Windows) since the errors appear to have been there a while.
This patch fixes the configurations and it has been tested with Ninja and Visual Studio to generate the correct paths. We should consider removing some of these settings altogether.
Reviewed By: JDevlieghere, mehdi_amini
Differential Revision: https://reviews.llvm.org/D96427
Adhemerval Zanella [Thu, 11 Feb 2021 17:24:14 +0000 (14:24 -0300)]
[sanitizer] Fix suffix-log-path_test.c on arm-linux-gnu
The recent suffix-log-path_test.c checks for a full stacktrace and
since on some arm-linux-gnu configuration the slow unwinder is used
on default (when the compiler emits thumb code as default), it
requires -funwind-tables on tests.
It also seems to fix the issues disable by
d025df3c1de.
Reviewed By: ostannard
Differential Revision: https://reviews.llvm.org/D96337
Florian Hahn [Thu, 11 Feb 2021 16:42:35 +0000 (16:42 +0000)]
[LV] Add tests showing suboptimal vectorization for narrow types.
This patch adds additional test cases showing missing/sub-optimal
vectorization for loops which contain small and wider memory ops on
AArch64.
Sourabh Singh Tomar [Wed, 10 Feb 2021 12:53:10 +0000 (18:23 +0530)]
[flang] Remove `LINK_WITH_FIR` cmake switch
Most components required for this are already there.
Build and Testing clean.
ninja check-flang
Reviewed By: clementval, tskeith
Differential Revision: https://reviews.llvm.org/D96411
Craig Topper [Thu, 11 Feb 2021 17:13:15 +0000 (09:13 -0800)]
[RISCV] Add support loads, stores, and splats of vXi1 fixed vectors.
This refines how we determine which masks types are legal and adds
support for loads, stores, and all ones/zeros splats.
I left a fixme in store handling where I think we need to zero
extra bits if the type isn't a multiple of a byte. If I remember
right from X86 there was some case we could have a store of a
1, 2, or 4 bit mask and have a scalar zextload that then expected the
bits to be 0. Its tricky to zero the bits with RVV. We need to do
something like round VL up, zero a register, lower the VL back down,
then do a tail undisturbed move into the zero register. Another
option might be to generate a mask of 1/2/4 bits set with a VL of 8
and use that to mask off the bits.
Reviewed By: frasercrmck
Differential Revision: https://reviews.llvm.org/D96468
Simon Pilgrim [Thu, 11 Feb 2021 16:32:00 +0000 (16:32 +0000)]
[DAG] foldLogicOfSetCCs - Generalize and/or (setcc X, CMax, ne), (setcc X, CMin, ne/eq) fold. NFCI.
Prep work to add support for non-uniform vectors - replace APInt values with using the SDValue ops directly.
Mark de Wever [Tue, 2 Feb 2021 17:10:33 +0000 (18:10 +0100)]
[libc++][format] Add basic_format_parse_context.
Implements parts of:
- P0645 Text Formatting
Depends on D92214
Reland with changes:
The format header will only be compiled if the compiler used has support
for concepts. This should fix the issues with the initial version.
Differential Revision: https://reviews.llvm.org/D93166
Nico Weber [Thu, 11 Feb 2021 16:54:51 +0000 (11:54 -0500)]
[gn build] Port
7e3b9aba609f
clementval [Thu, 11 Feb 2021 16:36:35 +0000 (11:36 -0500)]
Revert "[flang][fir][NFC] Move BoxType to TableGen type definition"
This reverts commit
d96bb48f7874d636ffd0ee233e2d66fff0614b8f.
Yonghong Song [Wed, 10 Feb 2021 20:17:37 +0000 (12:17 -0800)]
BPF: Implement TTI.IntImmCost() properly
This patch implemented TTI.IntImmCost() properly.
Each BPF insn has 32bit immediate space, so for any immediate
which can be represented as 32bit signed int, the cost
is technically free. If an int cannot be presented as
a 32bit signed int, a ld_imm64 instruction is needed
and a TCC_Basic is returned.
This change is motivated when we observed that
several bpf selftests failed with latest llvm trunk, e.g.,
#10/16 strobemeta.o:FAIL
#10/17 strobemeta_nounroll1.o:FAIL
#10/18 strobemeta_nounroll2.o:FAIL
#10/19 strobemeta_subprogs.o:FAIL
#96 snprintf_btf:FAIL
The reason of the failure is due to that
SpeculateAroundPHIsPass did aggressive transformation
which alters control flow for which currently verifer
cannot handle well. In llvm12, SpeculateAroundPHIsPass
is not called.
SpeculateAroundPHIsPass relied on TTI.getIntImmCost()
and TTI.getIntImmCostInst() for profitability
analysis. This patch implemented TTI.getIntImmCost()
properly for BPF backend which also prevented
transformation which caused the above test failures.
Differential Revision: https://reviews.llvm.org/D96448
Alex Hoppen [Thu, 11 Feb 2021 16:25:27 +0000 (17:25 +0100)]
[Timer] On macOS count number of executed instructions
In addition to wall time etc. this should allow us to get less noisy
values for time measurements.
Reviewed By: JDevlieghere
Differential Revision: https://reviews.llvm.org/D96049
Valentin Clement [Thu, 11 Feb 2021 16:09:35 +0000 (11:09 -0500)]
[flang][fir][NFC] Move BoxType to TableGen type definition
This patch is a follow up of D96422 and move BoxType to TableGen.
Reviewed By: mehdi_amini
Differential Revision: https://reviews.llvm.org/D96476
Raphael Isemann [Thu, 11 Feb 2021 16:00:17 +0000 (17:00 +0100)]
[lldb] Fix that running a top level expression without a process fails with a cryptic error
Right now when running `expr --top-level -- void foo() {}`, LLDB just prints a cryptic
`error: Couldn't find $__lldb_expr() in the module` error. The reason for that is
that if we don't have a running process, we try to set our execution policy to always use the
IR interpreter (ExecutionPolicyNever) which works even without a process. However
that code didn't consider the special ExecutionPolicyTopLevel which we use for
top-level expressions. By changing the execution policy to ExecutionPolicyNever,
LLDB thinks we're actually trying to interpret a normal expression inside our
`$__lldb_expr` function and then fails when looking for it.
This just adds an exception for top-level expressions to that code and a bunch of tests.
Reviewed By: shafik
Differential Revision: https://reviews.llvm.org/D91723
Nicolas Vasilache [Thu, 11 Feb 2021 15:30:39 +0000 (15:30 +0000)]
[mlir][LLVM] NFC - Refactor a lookupOrCreateFn to reuse common function creation.
Differential revision: https://reviews.llvm.org/D96488
Raphael Isemann [Thu, 11 Feb 2021 15:17:44 +0000 (16:17 +0100)]
[lldb] Don't emit a warning when using Objective-C getters in expressions
Clang emits a warning when accessing an Objective-C getter but not using the result.
This gets triggered when just trying to print a getter value in the expression parser (where
Clang just sees a normal expression like `obj.getter` while parsing).
This patch just disables the warning in the expression parser (similar to what we do with
the C++ equivalent of just accessing a member variable but not doing anything with it).
Reviewed By: kastiglione
Differential Revision: https://reviews.llvm.org/D94307
David Green [Thu, 11 Feb 2021 15:33:59 +0000 (15:33 +0000)]
[ARM] Add CostKind to getMVEVectorCostFactor.
This adds the CostKind to getMVEVectorCostFactor, so that it can
automatically account for CodeSize costs, where it returns a cost of 1
not the MVEFactor used for Throughput/Latency. This helps simplify the
caller code and allows us to get the codesize cost more correct in more
cases.
Aaron Ballman [Thu, 11 Feb 2021 15:12:38 +0000 (10:12 -0500)]
Store the calculated constant expression value into the ConstantExpr object
With https://reviews.llvm.org/D63376, we began storing the APValue
directly into the ConstantExpr object so that we could reuse the
calculated value later. However, it missed a case when not in C++11
mode but the expression is known to be constant.
Raphael Isemann [Thu, 11 Feb 2021 15:05:14 +0000 (16:05 +0100)]
[lldb] Log the actual expression result in UserExpression::Evaluate
This used to be a LLDB_LOGF call that used the printf %s syntax.
0ab109d43d9d8389fe686ee8df4a82634f246b55 changed it to LLDB_LOG but didn't
update this format string to use formatv's syntax so this just printed '%s'.
Thomas Preud'homme [Thu, 19 Nov 2020 23:38:42 +0000 (23:38 +0000)]
Improve STRICT_FSETCC codegen in absence of no NaN
As for SETCC, use a less expensive condition code when generating
STRICT_FSETCC if the node is known not to have Nan.
Reviewed By: SjoerdMeijer
Differential Revision: https://reviews.llvm.org/D91972
Andy Wingo [Thu, 11 Feb 2021 11:15:24 +0000 (12:15 +0100)]
[lld][WebAssembly] Common superclass for input globals/events/tables
This commit regroups commonalities among InputGlobal, InputEvent, and
InputTable into the new InputElement. The subclasses are defined
inline in the new InputElement.h. NFC.
Reviewed By: sbc100
Differential Revision: https://reviews.llvm.org/D94677
Joe Ellis [Thu, 11 Feb 2021 09:53:54 +0000 (09:53 +0000)]
[DebugInfo] Only perform TypeSize -> unsigned cast when necessary
This commit moves a line in SelectionDAGBuilder::handleDebugValue to
avoid implicitly casting a TypeSize object to an unsigned earlier than
necessary. It was possible that we bail out of the loop before the value
is ever used, which means we could create a superfluous TypeSize
warning.
Reviewed By: DavidTruby
Differential Revision: https://reviews.llvm.org/D96423
Alex Zinenko [Wed, 10 Feb 2021 18:21:45 +0000 (19:21 +0100)]
[mlir] make ModuleTranslation mapping fields private
ModuleTranslation contains multiple fields that keep track of the mappings
between various MLIR and LLVM IR components. The original ModuleTranslation
extension model was based on inheritance, with these fields being protected and
thus accessible in the ModuleTranslation and derived classes. The
inheritance-based model doesn't scale to translation of more than one derived
dialect and will be progressively replaced with a more flexible one based on
dialect interfaces and a translation state that is separate from
ModuleTranslation. This change prepares the replacement by making the mappings
private and providing public methods to access them.
Depends On D96436
Reviewed By: mehdi_amini
Differential Revision: https://reviews.llvm.org/D96437
Alex Zinenko [Wed, 10 Feb 2021 18:21:16 +0000 (19:21 +0100)]
[mlir] Make JitRunnerMain main take a DialectRegistry
Historically, JitRunner has been registering all available dialects with the
context and depending on them without the real need. Make it take a registry
that contains only the dialects that are expected in the input and stop linking
in all dialects.
Reviewed By: mehdi_amini
Differential Revision: https://reviews.llvm.org/D96436
Valeriy Savchenko [Mon, 21 Dec 2020 09:05:14 +0000 (12:05 +0300)]
[Attr] Apply GNU-style attributes to expression statements
Before this commit, expression statements could not be annotated
with statement attributes. Whenever parser found attribute, it
unconditionally assumed that it was followed by a declaration.
This not only doesn't allow expression attributes to have attributes,
but also produces spurious error diagnostics.
In order to maintain all previously compiled code, we still assume
that GNU attributes are followed by declarations unless ALL of those
are statement attributes. And even in this case we are not forcing
the parser to think that it should parse a statement, but rather
let it proceed as if no attributes were found.
Differential Revision: https://reviews.llvm.org/D93630
Pavel Labath [Thu, 4 Feb 2021 19:53:15 +0000 (20:53 +0100)]
[lldb/test] Automatically find debug servers to test
Our test configuration logic assumes that the tests can be run either
with debugserver or with lldb-server. This is not entirely correct,
since lldb server has two "personalities" (platform server and debug
server) and debugserver is only a replacement for the latter.
A consequence of this is that it's not possible to test the platform
behavior of lldb-server on macos, as it is not possible to get a hold of
the lldb-server binary.
One solution to that would be to duplicate the server configuration
logic to be able to specify both executables. However, that seems
excessively redundant.
A well-behaved lldb should be able to find the debug server on its own,
and testing lldb with a different (lldb-|debug)server does not seem very
useful (even in the out-of-tree debugserver setup, we copy the server
into the build tree to make it appear "real").
Therefore, this patch deletes the configuration altogether and changes
the low-level server retrieval functions to be able to both lldb-server
and debugserver paths. They do this by consulting the "support
executable" directory of the lldb under test.
Differential Revision: https://reviews.llvm.org/D96202
Simon Tatham [Thu, 11 Feb 2021 13:35:55 +0000 (13:35 +0000)]
[ARM] Copy-paste error in ARMv87a architecture definition.
In the tablegen architecture definition, the Name field for the
ARMv87a record read "ARMv86a". All the other records contain their own
names.
Corrected it to "ARMv87a", and added the necessary value in
ARMArchEnum for that to refer to.
Reviewed By: pratlucas
Differential Revision: https://reviews.llvm.org/D96493
Sven van Haastregt [Thu, 11 Feb 2021 13:05:26 +0000 (13:05 +0000)]
[OpenCL] Fix missing const attributes for get_image_ builtins
Various get_image builtin function declarations did not have the const
attribute. Bring the const attributes of `-fdeclare-opencl-builtins`
more in sync with `opencl-c.h`.
Max Kazantsev [Thu, 11 Feb 2021 12:25:30 +0000 (19:25 +0700)]
Return "[Codegenprepare][X86] Use usub with overflow opt for IV increment"
The patch did not account for one corner case where cmp does not dominate
the loop latch. This patch adds this check, hopefully it's cheap because
the CFG does not change during the transform, so DT queries should be
executed quickly.
If you see compile time slowness from this, please revert.
Differential Revision: https://reviews.llvm.org/D96119
Nico Weber [Thu, 11 Feb 2021 12:20:21 +0000 (07:20 -0500)]
[gn build] Port
b4993cf54d7f
Max Kazantsev [Thu, 11 Feb 2021 12:08:55 +0000 (19:08 +0700)]
[Test] Add test that exposed failure on reverted patch in codegen
Aaron Ballman [Thu, 11 Feb 2021 12:11:27 +0000 (07:11 -0500)]
Correct swift_bridge duplicate attribute warning logic
The swift_bridge attribute warns when the attribute is applied multiple
times to the same declaration. However, it warns about the arguments
being different to the attribute without ever checking if the arguments
actually are different. If the arguments are different, diagnose,
otherwise silently accept the code. Either way, drop the duplicated
attribute.
David Green [Thu, 11 Feb 2021 11:58:55 +0000 (11:58 +0000)]
[ARM] Change getScalarizationOverhead overload used in gather costs. NFC
This changes which of the getScalarizationOverhead overloads is used in
the gather/scatter cost to use the base variant directly, not relying on
the version using heuristics on the number of args with no args
provided. It should still produce the same costs for scalarized
gathers/scatters.
James Henderson [Wed, 10 Feb 2021 15:14:32 +0000 (15:14 +0000)]
[test][Dexter] Fix test failure if space in python path
The '%dexter_regression_test' substitution was missing quotes around the
python executable, unlike other substitutions of a similar nature in the
file. This changes fixes the issue.
Differential Revision: https://reviews.llvm.org/D96420
Reviewed by: jmorse, aganea
Andrzej Warzynski [Thu, 11 Feb 2021 11:37:24 +0000 (11:37 +0000)]
[flang][driver] Move standard macro predefs to a dedicated method (nfc)
This patch just addresses one of the outstanding TODOs. More
specifically, it moves all the outstanding standard macro predefinitions
from `SetDefaultFortranOpts` to `setDefaultPredefinitions`. This
dedicated method for standard macro predefs was introduced in:
* https://reviews.llvm.org/D96032
Carl Ritson [Wed, 10 Feb 2021 03:56:45 +0000 (12:56 +0900)]
[AMDGPU] Move kill lowering to WQM pass and add live mask tracking
Move implementation of kill intrinsics to WQM pass. Add live lane
tracking by updating a stored exec mask when lanes are killed.
Use live lane tracking to enable early termination of shader
at any point in control flow.
Reviewed By: piotr
Differential Revision: https://reviews.llvm.org/D94746
Sander de Smalen [Thu, 11 Feb 2021 10:25:14 +0000 (10:25 +0000)]
NFC: Migrate CodeMetrics to work on InstructionCost
This patch migrates cost values and arithmetic to work on InstructionCost.
When the interfaces to TargetTransformInfo are changed, any InstructionCost
state will propagate naturally.
See this patch for the introduction of the type: https://reviews.llvm.org/D91174
See this thread for context: http://lists.llvm.org/pipermail/llvm-dev/2020-November/146408.html
Reviewed By: david-arm
Differential Revision: https://reviews.llvm.org/D96030
Max Kazantsev [Thu, 11 Feb 2021 10:51:40 +0000 (17:51 +0700)]
Revert "[Codegenprepare][X86] Use usub with overflow opt for IV increment"
This reverts commit
3d15b7e7dfc3e2cefc47791d1e8d95909e937842.
We've found an internal failure, need to analyze.
David Green [Thu, 11 Feb 2021 10:48:20 +0000 (10:48 +0000)]
[ARM] Remove dead mov's in preheader of tail predicated loops
With t2DoLoopDec we can be left with some extra MOV's in the preheaders
of tail predicated loops. This removes them, in the same way we remove
other dead variables.
Differential Revision: https://reviews.llvm.org/D91857
Haojian Wu [Fri, 29 Jan 2021 13:09:14 +0000 (14:09 +0100)]
[clang][index] report references from unreslovedLookupExpr.
Fix https://github.com/clangd/clangd/issues/675
Differential Revision: https://reviews.llvm.org/D96262
Sam McCall [Tue, 9 Feb 2021 23:11:35 +0000 (00:11 +0100)]
[CodeComplete] Member completion: heuristically resolve some dependent base exprs
Today, inside a template, you can get completion for:
Foo<T> t;
t.^
t has dependent type Foo<T>, and we use the primary template to find its members.
However we also want this to work:
t.foo.bar().^
The type of t.foo.bar() is DependentTy, so we attempt to resolve using similar
heuristics (e.g. primary template).
Differential Revision: https://reviews.llvm.org/D96376
Raphael Isemann [Thu, 11 Feb 2021 09:31:15 +0000 (10:31 +0100)]
[DebugInfo] Prevent inlining in NRVO-string test cases
Since the new pass manager has been enabled by default these tests had their
-O1 variations failing due to the tested functions being inlined. This just
adds no_inline to the respective code similar to what we did in other
tests (e.g.
aa56b30014d96700b2fc945be11866789f341d38 ).
Sven van Haastregt [Thu, 11 Feb 2021 09:32:42 +0000 (09:32 +0000)]
[OpenCL] Add cl_khr_subgroup_extended_types to TableGen BIFs
Add the builtin functions brought by the
cl_khr_subgroup_extended_types extension to
`-fdeclare-opencl-builtins`.
Differential Revision: https://reviews.llvm.org/D96279
Sander de Smalen [Thu, 11 Feb 2021 08:50:08 +0000 (08:50 +0000)]
[TTI] Change TargetTransformInfo::getMinimumVF to return ElementCount
This will be needed in the loop-vectorizer where the minimum VF
requested may be a scalable VF. getMinimumVF now takes an additional
operand 'IsScalableVF' that indicates whether a scalable VF is required.
Reviewed By: kparzysz, rampitec
Differential Revision: https://reviews.llvm.org/D96020
Stephan Herhut [Thu, 11 Feb 2021 08:41:47 +0000 (09:41 +0100)]
[mlir][gpu] Allow all dialects in SCF to GPU conversion.
With the standard dialect being split up, the set of dialects that are
used when converting to GPU is growing. This change modifies the
SCFToGpu pass to allow all operations inside launch bodies.
Differential Revision: https://reviews.llvm.org/D96480
Markus Lavin [Thu, 11 Feb 2021 08:59:52 +0000 (08:59 +0000)]
Expand masked mem intrinsics correctly wrt big-endian
Need to take endianness into account when doing vector to scalar casts
such as %bc = bitcast <8 x i1> %v to i8
Companion commit for https://reviews.llvm.org/D94867
Upload in response to
https://lists.llvm.org/pipermail/llvm-dev/2021-January/147862.html
Attempting to document the actual memory layout rules for vectors in
https://reviews.llvm.org/D94964
Differential Revision: https://reviews.llvm.org/D94765
David Green [Mon, 8 Feb 2021 11:37:17 +0000 (11:37 +0000)]
[ARM] Make a BE predicate bitcast consistent with the rest of llvm
We were storing predicate registers, such as a <8 x i1>, in the opposite
order to how the rest of llvm expects. This actually turns out to be
correct for the one place that usually uses it - the
ScalarizeMaskedMemIntrin pass, but only because the pass was incorrect
itself. This fixes the order so that bits are stored in the opposite
order and bitcasts work as expected. This allows the Scalarization pass
to be fixed, as in https://reviews.llvm.org/D94765.
Differential Revision: https://reviews.llvm.org/D94867
Haojian Wu [Mon, 8 Feb 2021 14:04:48 +0000 (15:04 +0100)]
[Syntax] Remove a strict valid source location assertion for TypeLoc.
The EndLoc of a type loc can be invalid for broken code.
Also extend the existing test to support error code with `error-ok`
annotation.
Differential Revision: https://reviews.llvm.org/D96261
Haojian Wu [Mon, 8 Feb 2021 13:44:02 +0000 (14:44 +0100)]
[Syntax] NFC, Simplify a test with annotations
Sander de Smalen [Thu, 11 Feb 2021 08:37:55 +0000 (08:37 +0000)]
[LoopVectorize] NFC: Change selectVectorizationFactor to work on ElementCount.
This patch is NFC and changes occurrences of `unsigned Width`
and `unsigned i` to work on type ElementCount instead.
This patch is a preparatory patch with the ultimate goal of making
`computeMaxVF()` return both a max fixed VF and a max scalable VF,
so that `selectVectorizationFactor()` can pick the most cost-effective
vectorization factor.
Reviewed By: david-arm
Differential Revision: https://reviews.llvm.org/D96019
Haojian Wu [Thu, 11 Feb 2021 08:25:17 +0000 (09:25 +0100)]
[clang-check] Add tokens-dump in clang-check.
It is useful for syntax-tree developement.
Reviewed By: kbobyrev
Differential Revision: https://reviews.llvm.org/D96017
Sander de Smalen [Thu, 11 Feb 2021 08:14:15 +0000 (08:14 +0000)]
[AArch64][SVE] Asm: Fix supported immediates for DUP/CPY
This patch fixes an issue in the implementation of DUP/CPY where certain
immediates were not accepted. Immediates should be interpreted as a two's
complement encoding of a value that fits the number of bits of the element
type.
mov z0.b, p0/z, #127
<=> mov z0.b, p0/z, #-129
<=> mov z0.b, p0/z, #0xffffffffffffff7f
This behaviour is in line with the GNU assembler.
Reviewed By: c-rhodes
Differential Revision: https://reviews.llvm.org/D94776
Hanhan Wang [Thu, 11 Feb 2021 06:58:58 +0000 (22:58 -0800)]
[mlir][Linalg] Add conv ops with TF definition.
The dimension order of a filter in tensorflow is
[filter_height, filter_width, in_channels, out_channels], which is different
from current definition. The current definition follows TOSA spec. Add TF
version conv ops to .tc, so we do not have to insert a transpose op around a
conv op.
Reviewed By: antiagainst
Differential Revision: https://reviews.llvm.org/D96038
Arthur Eubanks [Thu, 11 Feb 2021 06:06:49 +0000 (22:06 -0800)]
[NFC] Don't pass redundant arguments
Some parameters were already part of the Config passed in.
Sanjoy Das [Thu, 11 Feb 2021 05:34:29 +0000 (21:34 -0800)]
NFC; fix typo in comment
This should have gone in with
a76761cf0deeb223ca1c0b0e5ee68cfcd436e0c4.
Sanjoy Das [Thu, 11 Feb 2021 05:18:37 +0000 (21:18 -0800)]
NFC comment-only cleanups
- Remove leftover comment from
de2568aab819f
- Fix a typo in a comment
Max Kazantsev [Thu, 11 Feb 2021 04:57:23 +0000 (11:57 +0700)]
[Codegenprepare][X86] Use usub with overflow opt for IV increment
Function `replaceMathCmpWithIntrinsic` artificially limits the scope
of the optimization, setting a requirement of two instructions be in
the same block, due to two reasons:
- usage of DT for more general check is costly in terms of compile time;
- risk of creating a new value that lives through multiple blocks.
Because of this, two semantically equivalent tests may be or not be the
subject of this opt depending on where the binary operation is located.
See `test/CodeGen/X86/usub_inc_iv.ll` for motivation
There is one important particular case where this limitation is too strict:
it is when the binary operation is the increment of the induction variable.
As result, the application of this opt becomes fragile and highly reliant on
where other passes decide to place IV increment. In most cases, they place
it in the end of the latch block, killing the opt opportunity (when in fact it
does not matter where to insert the actual instruction).
This patch handles this particular case separately.
- The detector does not use dom tree and has constant cost;
- The value of IV or IV.next lives through all loop in any case, so this should not
create a new unexpected long-living value.
As result, the transform becomes more robust. It also seems to lead to
better code generation in some cases (see `test/CodeGen/X86/lsr-loop-exit-cond.ll`).
Differential Revision: https://reviews.llvm.org/D96119
Reviewed By: spatel, reames
Max Kazantsev [Thu, 11 Feb 2021 04:41:31 +0000 (11:41 +0700)]
[Test] Add negative tests where usub optimization should not apply
Yang Fan [Thu, 11 Feb 2021 03:03:46 +0000 (11:03 +0800)]
[clang][cli] Fix gcc warning (NFC)
GCC warning:
```
/llvm-project/clang/lib/Frontend/TestModuleFileExtension.cpp:131:20: warning: ‘llvm::raw_ostream& clang::operator<<(llvm::raw_ostream&, const clang::TestModuleFileExtension&)’ has not been declared within ‘clang’
131 | llvm::raw_ostream &clang::operator<<(llvm::raw_ostream &OS,
| ^~~~~
In file included from /llvm-project/clang/lib/Frontend/TestModuleFileExtension.cpp:8:
/llvm-project/clang/lib/Frontend/TestModuleFileExtension.h:75:3: note: only here as a ‘friend’
75 | operator<<(llvm::raw_ostream &OS, const TestModuleFileExtension &Extension);
| ^~~~~~~~
```
Carl Ritson [Thu, 11 Feb 2021 02:18:44 +0000 (11:18 +0900)]
[AMDGPU] Refactor MIMG tables to better handle hardware variants
Add mimgopc object to represent the opcode allowing different
opcodes for different hardware variants.
This enables image_atomic_fcmpswap, image_atomic_fmin, and
image_atomic_fmax on GFX10
Reviewed By: foad, rampitec
Differential Revision: https://reviews.llvm.org/D96309
Michael Kruse [Thu, 11 Feb 2021 03:59:25 +0000 (21:59 -0600)]
[Polly] Hide Simplify implementation from header. NFC.
Move SimplifiyVisitor from Simplify.h to Simplify.cpp. It is not
relevant for applying the pass in either the NewPM or the legacyPM.
Rename it to SimplifyImpl to account for that.
This is possible due its state not being necessary to be preserved
between runs and thefore SimplifyImpl not needed to be held in the
pass object. Instead, SimplifyImpl is only instatiated for the
current Scop. In the NewPM as a function-local variable, and in the
legacy PM inside a llvm::Optional object because the state must be
preserved between the printScop (invoked by opt -analyze) and the most
recent runOnScop calls.
Kazu Hirata [Thu, 11 Feb 2021 04:01:21 +0000 (20:01 -0800)]
[AsmPrinter] Use range-based for loops (NFC)
Kazu Hirata [Thu, 11 Feb 2021 04:01:20 +0000 (20:01 -0800)]
[TableGen] Use ListSeparator (NFC)
Kazu Hirata [Thu, 11 Feb 2021 04:01:18 +0000 (20:01 -0800)]
[GCOV] Drop unnecessary const from return types (NFC)
Identified with readability-const-return-type.
Craig Topper [Thu, 11 Feb 2021 02:57:13 +0000 (18:57 -0800)]
[X86] Simplify patterns for avx512 vpcmp. NFC
This removes the commuted PatFrags that only existed to carry
an SDNodeXForm in its OperandTransform field. We know all the places
that need to use the commuted SDNodeXForm and there is one transform
shared by signed and unsigned compares. So just hardcode the
the SDNodeXForm where it is needed and use the non commuted PatFrag
in the pattern.
I think when I wrote this I thought the SDNodeXForm name had to
match what is in the PatFrag that is being used. But that's not
true. The OperandTransform is only used when the PatFrag is used
in an instruction pattern and not a separate Pat pattern. All
the commuted cases are Pat patterns.
Michael Kruse [Thu, 11 Feb 2021 02:07:58 +0000 (20:07 -0600)]
[Polly] Avoid "using namespace llvm" in public headers. NFC.
"using namespace" pollutes the namespace of every file that includes
such a header and universally considered a bad thing. Even the variant
namespace polly {
using namespace llvm;
}
(previously used by LoopGenerators.h) imports more symbols than the file
is in control of. The header may include a fixed set of files from LLVM,
but the header itself may by be included together with other headers
from LLVM. For instance, LLVM's MemorySSA.h and Polly's ScopInfo.h both
declare a class 'MemoryAccess' which may conflict.
Instead of prefixing everything in Polly's header files, this patch adds
'using' statements to import only the symbols that are actually
referenced in Polly. This approach is also used by MLIR to import
commonly used symbols into the mlir namespace.
This patch also puts the symbols declared in IslNodeBuilder.h into the
Polly namespace to also be able to use the imported symbols.
Valentin Clement [Thu, 11 Feb 2021 02:42:50 +0000 (21:42 -0500)]
[flang][fir] Fix Werror build failure after D96422
Daniel Hwang [Thu, 11 Feb 2021 02:24:37 +0000 (18:24 -0800)]
[analyzer] Update static analyzer to be support sarif-html
Updates static analyzer to be able to generate both sarif and html
output in a single run similar to plist-html.
Differential Revision: https://reviews.llvm.org/D96389
Jessica Clarke [Thu, 11 Feb 2021 02:23:09 +0000 (02:23 +0000)]
[RISCV] More whitespace and comment typo fixes in RISCVInstrInfoC.td
Jessica Clarke [Thu, 11 Feb 2021 02:23:09 +0000 (02:23 +0000)]
[RISCV] Fix whitespace in RISCVInstrInfoC.td
Aart Bik [Thu, 11 Feb 2021 01:56:17 +0000 (17:56 -0800)]
[mlir][sparse] reduce tensor dimensions in sparse test
Rationale:
BuiltinTypes.cpp observed overflow when computing size of
tensor<100x200x300x400x500x600x700x800xf32>.
Reviewed By: stellaraccident
Differential Revision: https://reviews.llvm.org/D96475
Craig Topper [Thu, 11 Feb 2021 01:34:05 +0000 (17:34 -0800)]
[RISCV] Use OperandTransform field of ImmLeaf to slightly simplify a couple bitmanip patterns. NFC
This binds the SDNodeXForm to the ImmLeaf so we only need to mention
the ImmLeaf in both the input and output pattern.
Mehdi Amini [Thu, 11 Feb 2021 01:36:40 +0000 (01:36 +0000)]
Enable `Pass::initialize()` to fail by returning a LogicalResult
Differential Revision: https://reviews.llvm.org/D96474
Valentin Clement [Thu, 11 Feb 2021 01:32:16 +0000 (20:32 -0500)]
[flang][fir][NFC] Move ShapeShiftType to TableGen type definition
This patch is a follow up of D96422 and move the ShapeShiftType to
TableGen.
Reviewed By: mehdi_amini
Differential Revision: https://reviews.llvm.org/D96442
peter klausler [Thu, 11 Feb 2021 00:28:34 +0000 (16:28 -0800)]
[flang] Cope with specific procedures with same name as generic
When accessing a specific procedure of a USE-associated generic
interface, we need to allow for the case in which that specific
procedure has the same name as the generic when testing for
its availability in the current scope.
Differential Revision: https://reviews.llvm.org/D96467
Adrian Prantl [Wed, 10 Feb 2021 23:50:52 +0000 (15:50 -0800)]
Diagnose unhandled cases in DW_OP_deref
Jianzhou Zhao [Tue, 9 Feb 2021 05:47:12 +0000 (05:47 +0000)]
[sanitizer] Move MSan's chained_origin_depot to sanitizer_common
https://reviews.llvm.org/D95835 implements origin tracking for DFSan.
It reuses the chained origin depot of MSan.
This change moves the utility to sanitizer_common to share between
MSan and DFSan.
Reviewed-by: eugenis, morehouse
Differential Revision: https://reviews.llvm.org/D96319
peter klausler [Thu, 11 Feb 2021 00:25:11 +0000 (16:25 -0800)]
[flang] Manage per-specification-part state better
Some state in name resolution is stored in the DeclarationVisitor
instance and processed at the end of the specification part.
This state needs to accommodate nested specification parts, namely
the ones that can be nested in a subroutine or function interface
body.
Differential Revision: https://reviews.llvm.org/D96466
xgupta [Thu, 11 Feb 2021 01:19:13 +0000 (06:49 +0530)]
[NFC][libunbind] Fix Sphinx error during CMake invocation
An error has occurred when I build libunwind with -DLLVM_BUILD_DOCS=ON.
Reviewed By: #libunwind, compnerd
Differential Revision: https://reviews.llvm.org/D96107
xgupta [Mon, 8 Feb 2021 22:50:02 +0000 (04:20 +0530)]
[Draft] [examples] Move llvm/examples/OCaml-Kaleidoscope/ to llvm-archive
Mehdi Amini [Thu, 11 Feb 2021 01:17:24 +0000 (01:17 +0000)]
Fix CMake configuration for MLIR unittests
The CMake changes in
2aa1af9b1da to make it possible to build MLIR as a
standalone project unfortunately disabled all unit-tests from the
regular in-tree build.
Duncan P. N. Exon Smith [Wed, 10 Feb 2021 23:23:53 +0000 (15:23 -0800)]
ValueMapper: Rename RF_MoveDistinctMDs => RF_ReuseAndMutateDistinctMDs, NFC
Rename the `RF_MoveDistinctMDs` flag passed into `MapValue` and
`MapMetadata` to `RF_ReuseAndMutateDistinctMDs` in order to more
precisely describe its effect and clarify the header documentation.
Found this while helping to investigate PR48841, which pointed out an
unsound use of the flag in `CloneModule()`. For now I've just added a
FIXME there, but I'm hopeful that the new (more precise) name will
prevent other similar errors.
Valentin Clement [Thu, 11 Feb 2021 00:25:35 +0000 (19:25 -0500)]
[flang][fir][NFC] Move ShapeType to TableGen type definition
This is the first patch of a serie to move FIR types to TableGen format as suggested in D96172.
This patch is setting up the files for FIR types and move the ShapeType to TableGen.
As discussed with @schweitz, I'm taking over this task to help the FIR upstreaming effort.
Reviewed By: mehdi_amini
Differential Revision: https://reviews.llvm.org/D96422