Luo, Yuanke [Sat, 12 Dec 2020 12:21:43 +0000 (20:21 +0800)]
[X86] Add chain in ISel for x86_tdpbssd_internal intrinsic.
Nathan James [Sat, 12 Dec 2020 12:50:33 +0000 (12:50 +0000)]
[YAML] Support extended spellings when parsing bools.
Support all the spellings of boolean datatypes according to https://yaml.org/type/bool.html
Reviewed By: silvas
Differential Revision: https://reviews.llvm.org/D92755
David Green [Sat, 12 Dec 2020 11:43:14 +0000 (11:43 +0000)]
[ARM] Test for showing scalar vector costs. NFC
Jan Svoboda [Fri, 11 Dec 2020 14:43:05 +0000 (15:43 +0100)]
[clang][cli] Revert accidental access-control flag rename
This commit <https://reviews.llvm.org/rGe5158b52730d323bb8cd2cba6dc6c89b90cba452> introduced an accidental change, which renames `-faccess-control` and `-fno-access-control` to `-fno-access-control` and `-fno-no-access-control`.
Reviewed By: dexonsmith, MaskRay
Differential Revision: https://reviews.llvm.org/D93104
Jan Svoboda [Tue, 8 Dec 2020 17:15:21 +0000 (18:15 +0100)]
[clang][cli] Add flexible TableGen multiclass for boolean options
This introduces more flexible multiclass for declaring two flags controlling the same boolean keypath.
Compared to existing Opt{In,Out}FFlag multiclasses, the new syntax makes it easier to read option declarations and reason about the keypath.
This also makes specifying common properties of both flags possible.
I'm open to suggestions on the class names. Not 100% sure the benefits are worth the added complexity.
Depends on D92774.
Reviewed By: dexonsmith
Differential Revision: https://reviews.llvm.org/D92775
Jan Svoboda [Tue, 8 Dec 2020 17:15:21 +0000 (18:15 +0100)]
[clang][cli] Don't always emit -f[no-]legacy-pass-manager
We don't need to always generate `-f[no-]experimental-new-pass-manager`.
This patch does not change the behavior of any other command line flag. (For example `-triple` is still being always generated.)
Reviewed By: dexonsmith, Bigcheese
Differential Revision: https://reviews.llvm.org/D92857
Jan Svoboda [Fri, 11 Dec 2020 13:22:21 +0000 (14:22 +0100)]
Reland "[clang][cli] CompilerInvocationTest: add tests for boolean options"
Add more tests of the command line marshalling infrastructure.
The new tests now make a "round-trip": from arguments, to CompilerInvocation instance to arguments again in a single test case.
The TODOs are resolved in a follow-up patch.
Depends on D92830.
Reviewed By: dexonsmith
Differential Revision: https://reviews.llvm.org/D92774
Kazu Hirata [Sat, 12 Dec 2020 05:19:31 +0000 (21:19 -0800)]
[Analysis] Use is_contained (NFC)
Mircea Trofin [Sat, 12 Dec 2020 04:28:39 +0000 (20:28 -0800)]
[MLGO] Fix build break as result of new InstructionCost (D91174)
Giorgis Georgakoudis [Thu, 10 Dec 2020 19:24:27 +0000 (11:24 -0800)]
[OpenMP] Add time profiling for libomptarget
Reviewed By: jdoerfert
Differential Revision: https://reviews.llvm.org/D93055
Fangrui Song [Sat, 12 Dec 2020 02:28:16 +0000 (18:28 -0800)]
[llvm-cov gcov] Replace Donald B. Johnson's cycle enumeration with iterative cycle finding
gcov computes the line execution count as the sum of (a) counts from
predecessors on other lines and (b) the sum of loop execution counts of blocks
on the same line (think of loops on one line).
For (b), we use Donald B. Johnson's cycle enumeration algorithm and perform
cycle cancelling for each cycle. This number of candidate cycles were
exponential and D93036 made it polynomial by skipping zero count cycles. The
time complexity is high (O(V*E^2) (it could be O(E^2) but the linear `Blocks`
check made it higher) and the implementation is complex.
We could just identify loops and sum all back edges. However, this requires a
dominator tree construction which is more complex. The time complexity can be
decreased to almost linear, though.
This patch just performs cycle cancelling iteratively. Add two members
`traversable` and `incoming` to GCOVArc. There are 3 states:
* `!traversable`: blocks not on this line or explored blocks
* `traversable && incoming == nullptr`: unexplored blocks
* `traversable && incoming != nullptr`: blocks which are being explored (on the stack)
If an arc points to a block being explored, a cycle has been found.
Let E be the number of arcs. Every time a cycle is found, at least one arc is
saturated (`edgeCount` reduced to 0), so there are at most E cycles. Finding one
cycle takes O(E) time, so the overall time complexity is O(E^2). Note that we
always augment through a back edge and never need to augment its reverse edge so
reverse edges in traditional flow networks are not needed.
Reviewed By: xinhaoyuan
Differential Revision: https://reviews.llvm.org/D93073
Fangrui Song [Sat, 12 Dec 2020 02:01:04 +0000 (18:01 -0800)]
[Kaleidoscope] Migrate DebugInfo::get to DILocation::get
River Riddle [Sat, 12 Dec 2020 01:52:56 +0000 (17:52 -0800)]
[mlir][docs] Tidy up the pass infrastructure documentation
The doc has grown stale and is missing some recent changes to the infrastructure.
Differential Revision: https://reviews.llvm.org/D93081
Duncan P. N. Exon Smith [Sat, 12 Dec 2020 01:33:07 +0000 (17:33 -0800)]
Fixup for
8c86197de3cba4257f26133e837d64e5f8ece210 to avoid making it platform-dependent
Duncan P. N. Exon Smith [Wed, 9 Dec 2020 21:54:56 +0000 (13:54 -0800)]
clang-import-test: Clean up error output for files that cannot be found
Pass on the filesystem error string `FileManager::getFileRef` in
`clang-import-test`'s `ParseSource` function. Also include "error:" and
a newline in the output. As a side effect, migrate to the `FileEntryRef`
overload of `SourceManager::createFileID`.
No real functionality change here, just slightly better output on error.
Differential Revision: https://reviews.llvm.org/D92971
Duncan P. N. Exon Smith [Wed, 9 Dec 2020 21:41:17 +0000 (13:41 -0800)]
Frontend: Migrate to FileEntryRef in TextDiagnosticTest, NFC
Migrate over to the `FileEntryRef` overloads of
`SourceManager::createFileID` and `overrideFileContents` (using
`getVirtualFileRef`) in `TextDiagnostic`'s `ShowLine` test.
No functionality change.
Differential Revision: https://reviews.llvm.org/D92968
Jonas Paulsson [Fri, 11 Dec 2020 00:26:16 +0000 (01:26 +0100)]
Reapply "[SystemZFrameLowering] Don't overrwrite R1D (backchain) when probing."
Fixed to properly compute the live-in lists of new blocks.
Review: Ulrich Weigand
Differential Revision: https://reviews.llvm.org/D92803
Jonas Paulsson [Thu, 10 Dec 2020 00:56:45 +0000 (01:56 +0100)]
[SystemZTTIImpl] Allow some non-prefetched accesses in getMinPrefetchStride().
The performance improvement on LBM previously achieved with improved software
prefetching (36d4421) have gone lost recently with e00f189. There now is one
memory access in the loop that LoopDataPrefetch cannot handle (while before
there was none) which the heuristic rejects.
This patch adds a small margin by allowing 1 non-prefetched memory access for
every 32 prefetched ones, so that the heuristic doesn't bail in this type of
case.
Review: Ulrich Weigand
Differential Revision: https://reviews.llvm.org/D92985
diggerlin [Fri, 11 Dec 2020 23:53:10 +0000 (18:53 -0500)]
[AIX] Fixed a link error.
Summary:
link: http://lab.llvm.org:8011/#/builders/57/builds/2307/steps/6/logs/stdio".
PPCAsmPrinter.cpp:(.text._ZN12_GLOBAL__N_116PPCAIXAsmPrinter19emitFunctionBodyEndEv+0x2f8): undefined reference to `llvm::XCOFF::getNameForTracebackTableLanguageId(llvm::XCOFF::TracebackTable::LanguageID)'
PPCAsmPrinter.cpp:(.text._ZN12_GLOBAL__N_116PPCAIXAsmPrinter19emitFunctionBodyEndEv+0x2170): undefined reference to `llvm::XCOFF::parseParmsType(unsigned int, unsigned int)'
Craig Topper [Fri, 11 Dec 2020 23:24:18 +0000 (15:24 -0800)]
[LoopIdiomRecognize] Autogenerate complete checks for the X86 ctlz/cttz tests. NFC
Preparation for D92745 which will add more tests to these files.
Nikita Popov [Fri, 11 Dec 2020 23:04:10 +0000 (00:04 +0100)]
Revert "Consider reference, pointer, and pointer-to-member TemplateArguments to be different if they have different types."
This reverts commit
7b3470baf8bab1919e3ad4c18e2b776c1f7be2d5.
Causes a crash while building tramp3d-v4 from test-suite.
diggerlin [Fri, 11 Dec 2020 22:50:25 +0000 (17:50 -0500)]
[AIX][XCOFF] emit traceback table for function in aix
SUMMARY:
1. added a new option -xcoff-traceback-table to control whether generate traceback table for function.
2. implement the functionality of emit traceback table of a function.
Reviewers: hubert.reinterpretcast, Jason Liu
Differential Revision: https://reviews.llvm.org/D92398
Mehdi Amini [Fri, 11 Dec 2020 18:50:04 +0000 (18:50 +0000)]
Store a MlirIdentifier instead of a MlirStringRef in MlirNameAttribute
This mirror the C++ API for NamedAttribute, and has the advantage or
internalizing earlier in the Context and not requiring the caller to
keep the StringRef alive beyong this call.
Differential Revision: https://reviews.llvm.org/D93133
Siva Chandra Reddy [Fri, 11 Dec 2020 21:17:33 +0000 (13:17 -0800)]
[libc] Let wrappergen pick LLVM libc mangled name from aliasee file.
Along the way, made a change to run tool unittests when the target
"check-libc" is run by introducing a libc testsuite for tool unittests.
Reviewed By: michaelrj
Differential Revision: https://reviews.llvm.org/D93142
Sean Silva [Fri, 11 Dec 2020 22:20:03 +0000 (14:20 -0800)]
Revert "Revert "[mlir] Start splitting the `tensor` dialect out of `std`.""
This reverts commit
0d48d265db6633e4e575f81f9d3a52139b1dc5ca.
This reapplies the following commit, with a fix for CAPI/ir.c:
[mlir] Start splitting the `tensor` dialect out of `std`.
This starts by moving `std.extract_element` to `tensor.extract` (this
mirrors the naming of `vector.extract`).
Curiously, `std.extract_element` supposedly works on vectors as well,
and this patch removes that functionality. I would tend to do that in
separate patch, but I couldn't find any downstream users relying on
this, and the fact that we have `vector.extract` made it seem safe
enough to lump in here.
This also sets up the `tensor` dialect as a dependency of the `std`
dialect, as some ops that currently live in `std` depend on
`tensor.extract` via their canonicalization patterns.
Part of RFC: https://llvm.discourse.group/t/rfc-split-the-tensor-dialect-from-std/2347/2
Differential Revision: https://reviews.llvm.org/D92991
Sanjay Patel [Fri, 11 Dec 2020 21:18:56 +0000 (16:18 -0500)]
[InstCombine][x86] fix insertion point bug in vector demanded elts fold (PR48476)
This transform was added at:
c63799fc52ff
From what I see, it's the first demanded elements transform that adds
a new instruction using the IRBuilder. There are similar folds in
the generic demanded bits chunk of instcombine that also use the
InsertPointGuard code pattern.
The tests here would assert/crash because the new instruction was
being added at the start of the demanded elements analysis rather
than at the instruction that is being replaced.
Sean Silva [Fri, 11 Dec 2020 22:15:41 +0000 (14:15 -0800)]
Revert "[mlir] Start splitting the `tensor` dialect out of `std`."
This reverts commit
cab8dda90f48e15ee94b0d55ceac5b6a812e4743.
I mistakenly thought that CAPI/ir.c failure was unrelated to this
change. Need to debug it.
Peter Steinfeld [Fri, 11 Dec 2020 18:28:51 +0000 (10:28 -0800)]
[flang] Removed an absolute path from the "flang" script
The "flang" script that gets put into "install/bin" had an absolute path
in it. This precuded moving the install directory to a new location.
Differential Revision: https://reviews.llvm.org/D93131
Sean Silva [Thu, 10 Dec 2020 01:50:03 +0000 (17:50 -0800)]
[mlir] Start splitting the `tensor` dialect out of `std`.
This starts by moving `std.extract_element` to `tensor.extract` (this
mirrors the naming of `vector.extract`).
Curiously, `std.extract_element` supposedly works on vectors as well,
and this patch removes that functionality. I would tend to do that in
separate patch, but I couldn't find any downstream users relying on
this, and the fact that we have `vector.extract` made it seem safe
enough to lump in here.
This also sets up the `tensor` dialect as a dependency of the `std`
dialect, as some ops that currently live in `std` depend on
`tensor.extract` via their canonicalization patterns.
Part of RFC: https://llvm.discourse.group/t/rfc-split-the-tensor-dialect-from-std/2347/2
Differential Revision: https://reviews.llvm.org/D92991
Richard Smith [Sun, 15 Nov 2020 01:37:25 +0000 (17:37 -0800)]
Consider reference, pointer, and pointer-to-member TemplateArguments to be different if they have different types.
For the Itanium ABI, this implements the mangling rule suggested in
https://github.com/itanium-cxx-abi/cxx-abi/issues/47, namely mangling
such template arguments as being cast to the parameter type in the case
where the template name is overloadable. This can cause a mangling
change for rare cases, where
* the template argument declaration is converted from its declared type
to the type of the template parameter, and
* the template parameter either has a deduced type or is a parameter of
a function template.
However, such changes are necessary to avoid mangling collisions. The
ABI changes can be reversed with -fclang-abi-compat=11 or earlier.
Differential Revision: https://reviews.llvm.org/D91488
Krzysztof Parzyszek [Fri, 11 Dec 2020 18:15:53 +0000 (12:15 -0600)]
[Hexagon] Workaround for compilation error with VS2017
Fangrui Song [Fri, 11 Dec 2020 20:45:22 +0000 (12:45 -0800)]
Migrate deprecated DebugLoc::get to DILocation::get
This migrates all LLVM (except Kaleidoscope and
CodeGen/StackProtector.cpp) DebugLoc::get to DILocation::get.
The CodeGen/StackProtector.cpp usage may have a nullptr Scope
and can trigger an assertion failure, so I don't migrate it.
Reviewed By: #debug-info, dblaikie
Differential Revision: https://reviews.llvm.org/D93087
Nikita Popov [Fri, 11 Dec 2020 20:17:54 +0000 (21:17 +0100)]
[BasicAA] Add extra check in phi-spec-order.ll (NFC)
The (scevgep, scevgep5) relation regressed with a patch I was
trying, but wasn't tested.
Florian Hahn [Fri, 11 Dec 2020 20:12:59 +0000 (20:12 +0000)]
Revert "[AArch64] Lower calls with rv_marker attribute ."
This reverts commit
a87fccb3ff9c11986d3110d9f77fb0ccea0daf79.
A test appears to fail with expensive checks. Reverting while I
investigate.
Florian Hahn [Fri, 11 Dec 2020 19:55:48 +0000 (19:55 +0000)]
[LV] Precommit test for PR48429.
Jinsong Ji [Fri, 11 Dec 2020 19:32:18 +0000 (19:32 +0000)]
[lld][PowerPC][test] Avoid flaky failures
This test may fail if there is a new changes to this tests.
The archives are not deleted so the contents from the previous test run
may affect the contents for the current run,
so this will require cleaning up the Output dir or force build of buildbot.
The fix is to put all the objects in the temporary dir that we cleanup every run,
to avoid run-2-run flaky failures.
Reviewed By: MaskRay
Differential Revision: https://reviews.llvm.org/D93128
Florian Hahn [Fri, 11 Dec 2020 19:37:14 +0000 (19:37 +0000)]
[AArch64] Lower calls with rv_marker attribute .
This patch adds support for lowering function calls with the
rv_marker attribute. The goal is to expand such calls to the
following sequence of instructions:
BL @fn
mov x29, x29
This sequence of instructions triggers Objective-C runtime optimizations,
hence we want to ensure no instructions get moved in between them.
This patch achieves that by adding a new CALL_RVMARKER ISD node,
which gets turned into the BLR_RVMARKER pseudo, which eventually gets
expanded into the sequence mentioned above. The sequence is then marked
as instruction bundle, to avoid anything being moved in between.
@ahatanak is working on using this attribute in the front- & middle-end.
Together with the front- & middle-end changes, this should address
PR31925 for AArch64.
Reviewed By: t.p.northover
Differential Revision: https://reviews.llvm.org/D92569
Scott Linder [Fri, 11 Dec 2020 19:34:10 +0000 (19:34 +0000)]
[SmallVector][NFC] Link to ProgrammersManual from SmallVector docs
Add a "see also" link from the condensed doxygen description of
`SmallVector` to the more complete description in the ProgrammersManual.
Louis Dionne [Fri, 11 Dec 2020 19:12:59 +0000 (14:12 -0500)]
[libc++] Fix Docker image build after installing clang-format
Siva Chandra Reddy [Wed, 9 Dec 2020 05:44:22 +0000 (21:44 -0800)]
[libc] Add implementations of lround[f|l] and llround[f|l].
A new function to MPFRWrapper has been added, which is used to set up
the unit tests.
Reviewed By: lntue
Differential Revision: https://reviews.llvm.org/D93007
Fangrui Song [Fri, 11 Dec 2020 19:08:16 +0000 (11:08 -0800)]
[MCAsmInfo] Delete unused doesSupportExceptionHandling
ExceptionHandling:: is a bit misleading - we actually use the term for both
exceptions and non-exception .eh_frame usage.
Louis Dionne [Fri, 11 Dec 2020 19:06:24 +0000 (14:06 -0500)]
[libc++] Install clang-format on CI nodes
LLVM GN Syncbot [Fri, 11 Dec 2020 18:37:39 +0000 (18:37 +0000)]
[gn build] Port
b577d2df7bd
Craig Topper [Fri, 11 Dec 2020 18:34:12 +0000 (10:34 -0800)]
[RISCV] Add a pass to remove duplicate VSETVLI instructions in a basic block.
Add simple pass for removing redundant vsetvli instructions within a basic block. This handles the case where the AVL register and VTYPE immediate are the same and no other instructions that change VTYPE or VL are between them.
There are going to be more opportunities for improvement in this space as we development more complex tests.
Differential Revision: https://reviews.llvm.org/D92679
Zinovy Nis [Sun, 15 Nov 2020 15:09:18 +0000 (18:09 +0300)]
[clang-tidy] false-positive for bugprone-redundant-branch-condition in case of passed-by-ref params
Inspired by discussion in https://reviews.llvm.org/D91037
Differential Revision: https://reviews.llvm.org/D91495
Michael Kruse [Fri, 11 Dec 2020 17:45:35 +0000 (11:45 -0600)]
[tests][OpenMPIRBuilder] Use EXPECT_EQ instead ASSERT_EQ.
Test execution can continue even if previous cases failed.
Nikita Popov [Tue, 1 Dec 2020 17:06:37 +0000 (18:06 +0100)]
[BasicAA] Handle two unknown sizes for GEPs
If we have two unknown sizes and one GEP operand and one non-GEP
operand, then we currently simply return MayAlias. The comment says
we can't do anything useful ... but we can! We can still check that
the underlying objects are different (and do so for the GEP-GEP case).
To reduce the compile-time impact, this a) checks this early, before
doing the relatively expensive GEP decomposition that will not be
used and b) doesn't do the check if the other operand is a phi or
select. In that case, the phi/select will already recurse, so this
would just do two slightly different recursive walks that arrive at
the same roots.
Compile-time is still a bit of a mixed bag: https://llvm-compile-time-tracker.com/compare.php?from=
624af932a808b363a888139beca49f57313d9a3b&to=
845356e14adbe651a553ed11318ddb5e79a24bcd&stat=instructions
On average this is a small improvement, but sqlite with ThinLTO has
a 0.5% regression (lencod has a 1% improvement).
The BasicAA test case checks this by using two memsets with unknown
size. However, the more interesting case where this is useful is
the LoopVectorize test case, as analysis of accesses in loops tends
to always us unknown sizes.
Differential Revision: https://reviews.llvm.org/D92401
Hiroshi Yamauchi [Wed, 9 Dec 2020 23:04:55 +0000 (15:04 -0800)]
[PGO] Adjust -vp-counters-per-site under dynamic linking.
Addressing clang bootstrap under the dynamic linking mode running out of static
allocation of value profile nodes, reported in D81682.
Differential Revision: https://reviews.llvm.org/D92669
Michael Kruse [Fri, 11 Dec 2020 16:55:58 +0000 (10:55 -0600)]
[OpenMPIRBuilder] Various changes required for tileLoops.
Extract some changes not directly related to tileLoops out of D92974:
* Refactor `createLoopSkeleton` out of `createCanonicalLoop`.
* Introduce `ComputeIP` parameter to the `createCanonicalLoop` overload inserts instructions to compute the trip count. Specifying the location is necessary to make these instructions appear before the outermost loop of a loop nest that is tiled.
* Introduce `Name` parameter to `createCanonicalLoop`. This can help better understanding the origin of values of basic blocks with many loops. The default value is "loop" instead of "for" which could be confused with the "for directive" (aka worksharing-loop) and does not apply to Fortran.
* Remove `CanonicalLoopInfo::eraseFromParent` which is currently unused and untested and was added in anticipation to be used by `tileLoops`. `eraseFromParent` has shown to be insufficient when more than a single loop is involved and is replaced by `removeUnusedBlocksFromParent` in D92974.
Reviewed By: SouraVX
Differential Revision: https://reviews.llvm.org/D93088
Louis Dionne [Tue, 8 Dec 2020 17:15:44 +0000 (12:15 -0500)]
[libc++] Use TARGET_FILE instead of TARGET_SONAME_FILE when generating ABI lists
TARGET_SONAME_FILE isn't valid on Windows, and TARGET_FILE should achieve
the same results.
Differential Revision: https://reviews.llvm.org/D92856
Louis Dionne [Wed, 9 Dec 2020 21:57:28 +0000 (16:57 -0500)]
[libc++] NFCI: Implement make_shared as allocate_shared with std::allocator
This simplifies the implementation, and it appears to be equivalent since
make_shared was allocating memory with std::allocator anyway.
Differential Revision: https://reviews.llvm.org/D93071
Tobias Burnus [Fri, 11 Dec 2020 16:43:06 +0000 (16:43 +0000)]
[MC][ELF] Accept abbreviated form with sh_flags and sh_entsize
D73999 / commit
75af9da755721123e62b45cd0bc0c5e688a9722a
added for LLVM 11 a check that sh_flags and sh_entsize (and sh_type)
changes are an error, in line with GNU assembler.
However, GNU assembler accepts and GCC generates an abbreviated form:
while the first .section contains the flags and entsize, subsequent
sections simply contain the name without repeating entsize or flags.
Do likewise for better compatibility.
See https://bugs.llvm.org/show_bug.cgi?id=48201
Reviewed By: jhenderson, MaskRay
Differential Revision: https://reviews.llvm.org/D92052
Sam McCall [Fri, 11 Dec 2020 16:35:50 +0000 (17:35 +0100)]
Revert [clangd] Extract per-dir CDB cache to its own threadsafe class. NFC
This reverts commit
8a4390dc4768fcd929a7231717980ccb28f124f7.
(The reland did not have the bugfix, just trying to get more details
from the buildbots)
Sam McCall [Fri, 11 Dec 2020 15:47:17 +0000 (16:47 +0100)]
Reland [clangd] Extract per-dir CDB cache to its own threadsafe class. NFC
This reverts commit
de4f5519015cc97f28718d90cc6dac73c0a15161.
More debug output to try to pin down an impossible condition.
Nathan James [Fri, 11 Dec 2020 16:34:06 +0000 (16:34 +0000)]
[YAML] Use correct source location for unknown key errors.
Currently unknown keys when inputting mapping traits have the location set to the Value.
Example:
```
YAML:1:14: error: unknown key 'UnknownKey'
{UnknownKey: SomeValue}
^~~~~~~~~
```
This is unhelpful for a user as it draws them to fix the wrong item.
Reviewed By: silvas
Differential Revision: https://reviews.llvm.org/D93037
Jinsong Ji [Fri, 11 Dec 2020 15:47:42 +0000 (15:47 +0000)]
[PowerPC] Remove duplicate layout
Alex Zinenko [Wed, 9 Dec 2020 08:51:15 +0000 (09:51 +0100)]
[mlir] Support inlining into affine operations
Introduce support for inlining into affine operations. This uses the generic
inline infrastructure and boils down to checking that, if applied, the inlining
doesn't violate the affine dimension/symbol value categorization. Given valid
IR, only the values that are valid dimensions/symbols thanks to being top-level
in their affine scope need special handling.
Reviewed By: rriddle
Differential Revision: https://reviews.llvm.org/D92770
Nathan James [Fri, 11 Dec 2020 14:46:12 +0000 (14:46 +0000)]
[clangd] Use enumMember instead of enumConstant
We should be using enumMember as thats defined in LSP, enumConstant is non standard so clients aren't likely to support it
Fixes https://github.com/clangd/clangd/issues/622n
Reviewed By: sammccall
Differential Revision: https://reviews.llvm.org/D93113
Matt Morehouse [Fri, 11 Dec 2020 14:24:43 +0000 (06:24 -0800)]
[DFSan] Add custom wrapper for recvmmsg.
Uses the recvmsg wrapper logic in a loop.
Reviewed By: stephan.yichao.zhao
Differential Revision: https://reviews.llvm.org/D93059
Jay Foad [Fri, 11 Dec 2020 14:02:14 +0000 (14:02 +0000)]
[AMDGPU] Make use of emitRemovedIntrinsicError. NFC.
Change-Id: I482bbf528255f2eacd3878ddfe7edb9a8f63d5c2
Nicolas Vasilache [Fri, 11 Dec 2020 12:53:49 +0000 (12:53 +0000)]
[mlir][ArmNeon][RFC] Add a Neon dialect
This revision starts an Arm-specific ArmNeon dialect discussed in the [discourse RFC thread](https://llvm.discourse.group/t/rfc-vector-dialects-neon-and-sve/2284).
Differential Revision: https://reviews.llvm.org/D92171
Adrian Kuegel [Thu, 10 Dec 2020 13:02:06 +0000 (14:02 +0100)]
[mlir] Expose target configuration for lowering to ROCDL.
Differential Revision: https://reviews.llvm.org/D93028
Adrian Kuegel [Thu, 10 Dec 2020 09:47:53 +0000 (10:47 +0100)]
Add rsqrt lowering from standard to ROCDL.
Add a lowering for rsqrt from standard dialect to ROCDL.
Differential Revision: https://reviews.llvm.org/D93011
Alexander Kornienko [Fri, 11 Dec 2020 01:26:21 +0000 (02:26 +0100)]
Remove references to the ast_type_traits namespace
Follow up to https://reviews.llvm.org/D92994
Marco Elver [Fri, 11 Dec 2020 11:20:40 +0000 (12:20 +0100)]
[KernelAddressSanitizer] Fix globals exclusion for indirect aliases
GlobalAlias::getAliasee() may not always point directly to a
GlobalVariable. In such cases, try to find the canonical GlobalVariable
that the alias refers to.
Link: https://github.com/ClangBuiltLinux/linux/issues/1208
Reviewed By: dvyukov, nickdesaulniers
Differential Revision: https://reviews.llvm.org/D92846
Joe Ellis [Wed, 9 Dec 2020 10:06:52 +0000 (10:06 +0000)]
[SelectionDAG] Implement SplitVecOp_INSERT_SUBVECTOR
This function is needed for when it is necessary to split the subvector
operand of an llvm.experimental.vector.insert call. Splitting the
subvector operand means performing two insertions: one inserting the
lower part of the split subvector into the destination vector, and
another for inserting the upper part.
Through experimenting, it seems quite rare to need split the subvector
operand, but this is necessary to avoid assertion errors.
Differential Revision: https://reviews.llvm.org/D92760
QingShan Zhang [Fri, 11 Dec 2020 10:36:46 +0000 (10:36 +0000)]
[NFC][Test] Add a test to verify the instruction form we got from isel
QingShan Zhang [Fri, 11 Dec 2020 09:50:59 +0000 (09:50 +0000)]
[NFC][Test] Format the PowerPC test for incoming patch
Haojian Wu [Fri, 11 Dec 2020 09:45:50 +0000 (10:45 +0100)]
[clangd] Reorder the class field to avoid -Wreorder-ctor warning, NFC.
David Sherwood [Fri, 11 Dec 2020 09:43:13 +0000 (09:43 +0000)]
Haojian Wu [Sun, 29 Nov 2020 21:31:42 +0000 (22:31 +0100)]
[AST][RecoveryAST] Preserve type for member call expr if argments are not matched.
Differential Revision: https://reviews.llvm.org/D92298
David Green [Fri, 11 Dec 2020 09:23:57 +0000 (09:23 +0000)]
[ARM] Make t2DoLoopStartTP a terminator
Although this was something that I was hoping we would not have to do,
this patch makes t2DoLoopStartTP a terminator in order to keep it at the
end of it's block, so not allowing extra MVE instruction between it and
the end. With t2DoLoopStartTP's also starting tail predication regions,
it also marks them as having side effects. The t2DoLoopStart is still
not a terminator, giving it the extra scheduling freedom that can be
helpful, but now that we have a TP version they can be treated
differently.
Differential Revision: https://reviews.llvm.org/D91887
Kazushi (Jam) Marukawa [Wed, 9 Dec 2020 16:20:40 +0000 (01:20 +0900)]
[VE] Add vgt and vsc intrinsic instructions
Add vgt and vsc intrinsic instructions and regression tests.
Reviewed By: simoll
Differential Revision: https://reviews.llvm.org/D93032
LLVM GN Syncbot [Fri, 11 Dec 2020 09:17:05 +0000 (09:17 +0000)]
[gn build] Port
5663bf201f5
Haojian Wu [Fri, 11 Dec 2020 08:59:37 +0000 (09:59 +0100)]
Revert "[analyzer] NFC: Move path diagnostic consumer implementations to libAnalysis."
The patch introduced a cycle dependency:
clangAnalysis -> clangFrontend -> clangSema -> clangAnalysis
This reverts commit
00ffea77ad887b576e9db82d98c97a31fee172cb.
This reverts commit
ea6641085d025ca0a5cef940465ef14d0ccace02.
LLVM GN Syncbot [Fri, 11 Dec 2020 08:40:54 +0000 (08:40 +0000)]
[gn build] Port
9b76160e53f
David Sherwood [Tue, 10 Nov 2020 11:09:20 +0000 (11:09 +0000)]
[Support] Introduce a new InstructionCost class
This is the first in a series of patches that attempts to migrate
existing cost instructions to return a new InstructionCost class
in place of a simple integer. This new class is intended to be
as light-weight and simple as possible, with a full range of
arithmetic and comparison operators that largely mirror the same
sets of operations on basic types, such as integers. The main
advantage to using an InstructionCost is that it can encode a
particular cost state in addition to a value. The initial
implementation only has two states - Normal and Invalid - but these
could be expanded over time if necessary. An invalid state can
be used to represent an unknown cost or an instruction that is
prohibitively expensive.
This patch adds the new class and changes the getInstructionCost
interface to return the new class. Other cost functions, such as
getUserCost, etc., will be migrated in future patches as I believe
this to be less disruptive. One benefit of this new class is that
it provides a way to unify many of the magic costs in the codebase
where the cost is set to a deliberately high number to prevent
optimisations taking place, e.g. vectorization. It also provides
a route to represent the extremely high, and unknown, cost of
scalarization of scalable vectors, which is not currently supported.
Differential Revision: https://reviews.llvm.org/D91174
Marek Kurdej [Fri, 11 Dec 2020 07:31:04 +0000 (08:31 +0100)]
[libc++] Remove invalid use of `#if _LIBCPP_STD_VER >= 11`, as `_LIBCPP_STD_VER` can never be less than 11.
The relevant part of `__config` is:
```
#ifndef _LIBCPP_STD_VER
# if __cplusplus <= 201103L
# define _LIBCPP_STD_VER 11
```
Reviewed By: ldionne, #libc
Differential Revision: https://reviews.llvm.org/D93025
Michael Kruse [Fri, 11 Dec 2020 06:04:12 +0000 (00:04 -0600)]
[OpenMPIRBuilder] Fix typo. NFC.
Arthur Eubanks [Fri, 11 Dec 2020 06:04:49 +0000 (22:04 -0800)]
[NFC] Inline maxDevirtIterationsReached()
This was separated in the past because the cl::opt was in the .cpp file
but DevirtSCCRepeatedPass::run() was in the .h file. Now that
DevirtSCCRepeatedPass::run() is in the .cpp file, get rid of the tiny
maxDevirtIterationsReached(), it's bad for readability.
Hsiangkai Wang [Thu, 10 Dec 2020 09:06:22 +0000 (17:06 +0800)]
[RISCV] Separate masked and unmasked definitions for pseudo instructions.
Differential Revision: https://reviews.llvm.org/D93012
Kazu Hirata [Fri, 11 Dec 2020 04:54:37 +0000 (20:54 -0800)]
[MemorySSA] Remove unused declaration optimizeUses (NFC)
The declaration was introduced on Aug 2, 2016 in commit
c43aa5a5b62b21c1d38cd3d2ece7d0d5124d5180 without a corresponding
definition.
Note that we do have a definition for
MmeorySSA::OptimizeUses::optimizeUses but not for
MmeorySSA::optimizeUses.
Kazu Hirata [Fri, 11 Dec 2020 04:40:37 +0000 (20:40 -0800)]
[Support] Use is_contained (NFC)
Michael Kruse [Fri, 11 Dec 2020 02:40:37 +0000 (20:40 -0600)]
[Polly] Consider InvalidContext to determine partial READ.
MemoryAccess::setNewAccessRelation() in assert-builds checks whether the
access relation for a READ has a memory location for every instance of
the domain. Otherwise, we would not have value to load from. That check
already considered that instances outside the Scop's context do not
matter since they are never executed (or would be undefined behavior).
In this patch also take instances of the InvalidContext into account,
as these can also be assumed to never occur. InvalidContext was
introduced to avoid the computational complexity of subtracting
restrictions from the AssumedContext. However, this additional check in
setNewAccessRelation is only done in assert-builds.
The assertion case with an InvalidContext may occur with DeLICM on a
conditionally infinite loops, as it is the case in the following code:
for (int i = 0; i < n; i+=b)
vreg = ...;
*Dest = vreg;
The loop is infinite when b=0, and [b] -> { : b = 0 } is part of the
InvalidContext. When DeLICM tries to map the memory for %vreg to *Dest,
there is no store instance that uses the value of vreg when b = 0, hence
no location to map it to. However, the case is irrelevant since Polly's
runtime condition check ensures that this is never case.
Fixes llvm.org/PR48445
Craig Topper [Fri, 11 Dec 2020 01:35:25 +0000 (17:35 -0800)]
[RISCV] Use tail agnostic policy for vsetvli instruction emitted in the custom inserter
The compiler is making no effort to preserve upper elements. To do so would require another source operand tied with the destination and a different intrinsic interface to give control of this source to the programmer.
This patch changes the tail policy to agnostic so that the CPU doesn't need to make an effort to preserve them.
This is consistent with the RVV intrinsic spec here https://github.com/riscv/rvv-intrinsic-doc/blob/master/rvv-intrinsic-rfc.md#configuration-setting
Differential Revision: https://reviews.llvm.org/D93080
Artem Dergachev [Sat, 21 Nov 2020 09:41:31 +0000 (01:41 -0800)]
[analyzer] OSObjectCStyleCast: Improve warning message.
Suggest OSRequiredCast as a closer alternative to C-style cast.
Explain how to decide.
Arthur O'Dwyer [Tue, 8 Dec 2020 02:50:15 +0000 (21:50 -0500)]
[libc++] ADL-proof by adding _VSTD:: qualifications to memmove etc.
Generally these calls aren't vulnerable to ADL because they involve only
primitive types. The ones in <list> and <vector> drag in namespace std
but that's OK; the ones in <fstream> and <strstream> are vulnerable
iff `CharT` is an enum type, which seems far-fetched.
But absolutely zero of them *need* ADL to happen; so in my opinion
they should all be consistently qualified, just like calls to any
other (non-user-customizable) functions in namespace std.
Also: Include <cstring> and <cwchar> in <__string>.
We seemed to be getting lucky that <memory> included <iterator>
included <iosfwd> included <wchar.h>. That gave us the
global-namespace `wmemmove`, but not `_VSTD::wmemmove`.
This is now fixed.
I didn't touch these headers:
<ext/__hash> uses strlen, safely
<support/ibm/locale_mgmt_aix.h> uses memcpy, safely
<string.h> uses memchr and strchr, safely
<wchar.h> uses wcschr, safely
<__bsd_locale_fallbacks.h> uses wcsnrtombs, safely
Differential Revision: https://reviews.llvm.org/D93061
Arthur O'Dwyer [Tue, 8 Dec 2020 02:45:29 +0000 (21:45 -0500)]
[libc++] Include C++ headers, not C headers, in <charconv>.
This matches how libc++ does it in all other C++ headers
(that is, headers not ending in ".h").
We need to include <cstring> if we want to use `_VSTD::memmove`
instead of unqualified ADL `memmove`. Even though ADL doesn't
physically matter in <charconv>'s specific case, I'm trying
to migrate libc++ to using `_VSTD::memmove` for all cases
(because some of them do matter, and this way it's easier to
grep for outliers).
Differential Revision: https://reviews.llvm.org/D92875
Alexandre Ganea [Fri, 11 Dec 2020 02:37:58 +0000 (21:37 -0500)]
Re-land: [lit] Support running tests on Windows without GnuWin32
Historically, we have told contributors that GnuWin32 is a pre-requisite
because our tests depend on utilities such as sed, grep, diff, and more.
However, Git on Windows includes versions of these utilities in its
installation. Furthermore, GnuWin32 has not been updated in many years.
For these reasons, it makes sense to have the ability to run llvm tests
in a way that is both:
a) Easier on the user (less stuff to install)
b) More up-to-date (The verions that ship with git are at least as
new, if not newer, than the versions in GnuWin32.
We add support for this here by attempting to detect where Git is
installed using the Windows registry, confirming the existence of
several common Unix tools, and then adding this location to lit's PATH
environment.
Differential Revision: https://reviews.llvm.org/D84380
Jon Chesterfield [Fri, 11 Dec 2020 02:13:22 +0000 (02:13 +0000)]
[libomptarget][nfc] Remove data_sharing type aliasing
[libomptarget][nfc] Remove data_sharing type aliasing
Libomptarget previous used __kmpc_data_sharing_slot to access values of type
__kmpc_data_sharing_{worker,master}_slot_static. This aliasing violation was
benign in practice. The master type has since been removed, so a single type
can be used instead.
This is particularly helpful for the transition to an openmp deviceRTL, as the
c++/openmp compiler for amdgcn currently rejects the flexible array member for
being an incomplete type. Serves the same purpose as abandoned D86324.
Reviewed By: jdoerfert
Differential Revision: https://reviews.llvm.org/D93075
Duncan P. N. Exon Smith [Wed, 9 Dec 2020 21:32:47 +0000 (13:32 -0800)]
Tooling: Migrate some tests to FileEntryRef, NFC
Migrate to the `FileEntryRef` overload of `SourceManager::createFileID`
(using `FileManager::getOptionalFileRef`) in RefactoringTest.cpp and
RewriterTestContext.h.
No functionality change.
Differential Revision: https://reviews.llvm.org/D92967
Jez Ng [Fri, 11 Dec 2020 01:48:31 +0000 (17:48 -0800)]
[lld-macho] Disable some tests that are failing on Windows
lto-object-path.ll, like stabs.s, is disabled on Windows as the path
separators make it difficult to write a test that works across
platforms.
This diff also disables implicit-dylibs.s on Windows as we seem to emit
LC_LOAD_DYLIBs in a different order on that platform. This seems like a
bug in LLD that needs to be addressed (in a future diff).
Jez Ng [Fri, 11 Dec 2020 01:40:14 +0000 (17:40 -0800)]
[lld-macho] Don't include absolute address value in expected test output
Should fix the mattrs.ll failure introduced by rG29d3b0e47113.
Derek Schuff [Wed, 9 Dec 2020 18:57:27 +0000 (10:57 -0800)]
[WebAssembly][lld] Exclude COMDAT sections
Allow exclusion/discarding of custom sections with COMDAT groups.
It piggybacks on the existing COMDAT-handling code, but applies to custom sections as well.
Differential Revision: https://reviews.llvm.org/D92950
LLVM GN Syncbot [Fri, 11 Dec 2020 01:40:59 +0000 (01:40 +0000)]
[gn build] Port
705a4c149d8
Hongtao Yu [Tue, 8 Dec 2020 23:37:32 +0000 (15:37 -0800)]
[CSSPGO] Pseudo probe encoding and emission.
This change implements pseudo probe encoding and emission for CSSPGO. Please see RFC here for more context: https://groups.google.com/g/llvm-dev/c/1p1rdYbL93s
Pseudo probes are in the form of intrinsic calls on IR/MIR but they do not turn into any machine instructions. Instead they are emitted into the binary as a piece of data in standalone sections. The probe-specific sections are not needed to be loaded into memory at execution time, thus they do not incur a runtime overhead.
**ELF object emission**
The binary data to emit are organized as two ELF sections, i.e, the `.pseudo_probe_desc` section and the `.pseudo_probe` section. The `.pseudo_probe_desc` section stores a function descriptor for each function and the `.pseudo_probe` section stores the actual probes, each fo which corresponds to an IR basic block or an IR function callsite. A function descriptor is stored as a module-level metadata during the compilation and is serialized into the object file during object emission.
Both the probe descriptors and pseudo probes can be emitted into a separate ELF section per function to leverage the linker for deduplication. A `.pseudo_probe` section shares the same COMDAT group with the function code so that when the function is dead, the probes are dead and disposed too. On the contrary, a `.pseudo_probe_desc` section has its own COMDAT group. This is because even if a function is dead, its probes may be inlined into other functions and its descriptor is still needed by the profile generation tool.
The format of `.pseudo_probe_desc` section looks like:
```
.section .pseudo_probe_desc,"",@progbits
.quad
6309742469962978389 // Func GUID
.quad
4294967295 // Func Hash
.byte 9 // Length of func name
.ascii "_Z5funcAi" // Func name
.quad
7102633082150537521
.quad
138828622701
.byte 12
.ascii "_Z8funcLeafi"
.quad
446061515086924981
.quad
4294967295
.byte 9
.ascii "_Z5funcBi"
.quad -
2016976694713209516
.quad
72617220756
.byte 7
.ascii "_Z3fibi"
```
For each `.pseudoprobe` section, the encoded binary data consists of a single function record corresponding to an outlined function (i.e, a function with a code entry in the `.text` section). A function record has the following format :
```
FUNCTION BODY (one for each outlined function present in the text section)
GUID (uint64)
GUID of the function
NPROBES (ULEB128)
Number of probes originating from this function.
NUM_INLINED_FUNCTIONS (ULEB128)
Number of callees inlined into this function, aka number of
first-level inlinees
PROBE RECORDS
A list of NPROBES entries. Each entry contains:
INDEX (ULEB128)
TYPE (uint4)
0 - block probe, 1 - indirect call, 2 - direct call
ATTRIBUTE (uint3)
reserved
ADDRESS_TYPE (uint1)
0 - code address, 1 - address delta
CODE_ADDRESS (uint64 or ULEB128)
code address or address delta, depending on ADDRESS_TYPE
INLINED FUNCTION RECORDS
A list of NUM_INLINED_FUNCTIONS entries describing each of the inlined
callees. Each record contains:
INLINE SITE
GUID of the inlinee (uint64)
ID of the callsite probe (ULEB128)
FUNCTION BODY
A FUNCTION BODY entry describing the inlined function.
```
To support building a context-sensitive profile, probes from inlinees are grouped by their inline contexts. An inline context is logically a call path through which a callee function lands in a caller function. The probe emitter builds an inline tree based on the debug metadata for each outlined function in the form of a trie tree. A tree root is the outlined function. Each tree edge stands for a callsite where inlining happens. Pseudo probes originating from an inlinee function are stored in a tree node and the tree path starting from the root all the way down to the tree node is the inline context of the probes. The emission happens on the whole tree top-down recursively. Probes of a tree node will be emitted altogether with their direct parent edge. Since a pseudo probe corresponds to a real code address, for size savings, the address is encoded as a delta from the previous probe except for the first probe. Variant-sized integer encoding, aka LEB128, is used for address delta and probe index.
**Assembling**
Pseudo probes can be printed as assembly directives alternatively. This allows for good assembly code readability and also provides a view of how optimizations and pseudo probes affect each other, especially helpful for diff time assembly analysis.
A pseudo probe directive has the following operands in order: function GUID, probe index, probe type, probe attributes and inline context. The directive is generated by the compiler and can be parsed by the assembler to form an encoded `.pseudoprobe` section in the object file.
A example assembly looks like:
```
foo2: # @foo2
# %bb.0: # %bb0
pushq %rax
testl %edi, %edi
.pseudoprobe
837061429793323041 1 0 0
je .LBB1_1
# %bb.2: # %bb2
.pseudoprobe
837061429793323041 6 2 0
callq foo
.pseudoprobe
837061429793323041 3 0 0
.pseudoprobe
837061429793323041 4 0 0
popq %rax
retq
.LBB1_1: # %bb1
.pseudoprobe
837061429793323041 5 1 0
callq *%rsi
.pseudoprobe
837061429793323041 2 0 0
.pseudoprobe
837061429793323041 4 0 0
popq %rax
retq
# -- End function
.section .pseudo_probe_desc,"",@progbits
.quad
6699318081062747564
.quad
72617220756
.byte 3
.ascii "foo"
.quad
837061429793323041
.quad
281547593931412
.byte 4
.ascii "foo2"
```
With inlining turned on, the assembly may look different around %bb2 with an inlined probe:
```
# %bb.2: # %bb2
.pseudoprobe
837061429793323041 3 0
.pseudoprobe
6699318081062747564 1 0 @
837061429793323041:6
.pseudoprobe
837061429793323041 4 0
popq %rax
retq
```
**Disassembling**
We have a disassembling tool (llvm-profgen) that can display disassembly alongside with pseudo probes. So far it only supports ELF executable file.
An example disassembly looks like:
```
00000000002011a0 <foo2>:
2011a0: 50 push rax
2011a1: 85 ff test edi,edi
[Probe]: FUNC: foo2 Index: 1 Type: Block
2011a3: 74 02 je 2011a7 <foo2+0x7>
[Probe]: FUNC: foo2 Index: 3 Type: Block
[Probe]: FUNC: foo2 Index: 4 Type: Block
[Probe]: FUNC: foo Index: 1 Type: Block Inlined: @ foo2:6
2011a5: 58 pop rax
2011a6: c3 ret
[Probe]: FUNC: foo2 Index: 2 Type: Block
2011a7: bf 01 00 00 00 mov edi,0x1
[Probe]: FUNC: foo2 Index: 5 Type: IndirectCall
2011ac: ff d6 call rsi
[Probe]: FUNC: foo2 Index: 4 Type: Block
2011ae: 58 pop rax
2011af: c3 ret
```
Reviewed By: wmi
Differential Revision: https://reviews.llvm.org/D91878
Cheng Wang [Thu, 3 Dec 2020 12:17:24 +0000 (20:17 +0800)]
[libc] Add [l|ll]abs implementation.
Implement abs, labs and llabs with template.
Reviewed By: sivachandra
Differential Revision: https://reviews.llvm.org/D92626
Sam Clegg [Thu, 10 Dec 2020 02:14:31 +0000 (18:14 -0800)]
[lld][WebAssembly] Split __wasm_apply_relocs function in two
We have two types of relocations that we apply on startup:
1. Relocations that apply to wasm globals
2. Relocations that apply to wasm memory
The first set of relocations use only the `__memory_base` import to
update a set of internal globals. Because wasm globals are thread local
these need to run on each thread. Memory relocations, like static
constructors, must only be run once.
To ensure global relocations run on all threads and because the only
depend on the immutable `__memory_base` import we can run them during
the WebAssembly start functions, instead of waiting until the
post-instantiation __wasm_call_ctors.
Differential Revision: https://reviews.llvm.org/D93066
Richard Smith [Fri, 11 Dec 2020 00:49:27 +0000 (16:49 -0800)]
Ensure that we don't leave behind "InstantiatingSpecialization" entries
after destroying an InstantiatingTemplate object.
This previously caused us to (silently!) bail out of class template
instantiation, thinking we'd produced an error, in some corner cases.
Fangrui Song [Fri, 11 Dec 2020 00:57:09 +0000 (16:57 -0800)]
[test] Fix compiler-rt/test/profile/coverage_emptylines.cpp if the build directory is under /tmp
llvm-cov -path-equivalence=/tmp,... is used by some checked-in coverage mapping
files where the original filename is under /tmp. If the test itself produces the
coverage mapping file, there is no need for /tmp.
For coverage_emptylines.cpp: the source filename is under the build directory.
If the build directory is under /tmp, the path mapping will make
llvm-cov fail to find the file.