Tatyana Krasnukha [Thu, 5 Mar 2020 08:32:13 +0000 (11:32 +0300)]
[lldb][test] TestFileHandle: flush the output after write
serge-sans-paille [Wed, 26 Feb 2020 07:08:47 +0000 (08:08 +0100)]
Avoid dangling reference on SectionList
Bug spotted by https://cookieplmonster.github.io/2020/02/01/emulator-bug-llvm-bug/
Basically, holding references to object inside a resized vector is a bad idea.
Differential Revision: https://reviews.llvm.org/D75110
Dvorskiy, Mikhail [Wed, 4 Mar 2020 10:41:20 +0000 (13:41 +0300)]
[pstl] A cleanup fix for sort parallel algorithm.
When one of sub-ranges has not been move constructed into a raw buffer, we should not call clean up for that sub-range. Instead of store detailed info about raw buffer history, the fix does the cleanup a sub-range after each moving the sub-range back.
https://reviews.llvm.org/D73779
Tatyana Krasnukha [Thu, 5 Mar 2020 07:31:07 +0000 (10:31 +0300)]
[lldb][test] Enable fix-its for the test case that expects them enabled
Fix-its were intentionally disabled by TestBase.setUp so that incorrect expressions in tests
don't pass just because Clang thinks it has a fix-it.
Tatyana Krasnukha [Thu, 5 Mar 2020 07:12:54 +0000 (10:12 +0300)]
[lldb][testsuite] Create a SBDebugger instance for each test
Some tests set settings and don't clean them up, this leads to side effects in other tests.
The patch removes a global debugger instance with a per-test debugger to avoid such effects.
From what I see, lldb.DBG was needed to determine the platform before a test is run,
lldb.selected_platform is used for this purpose now. Though, this required adding a new function
to the SBPlatform interface.
Differential Revision: https://reviews.llvm.org/D74903
Jun Ma [Mon, 2 Mar 2020 09:35:34 +0000 (17:35 +0800)]
[Coroutines] Optimized coroutine elision based on reachability
Differential Revision: https://reviews.llvm.org/D75440
David Blaikie [Thu, 5 Mar 2020 06:36:24 +0000 (22:36 -0800)]
X86AsmBackend.cpp: #ifndef NDEBUG some only-used-in-asserts variables to fix the -Werror non-asserts build
Lang Hames [Thu, 5 Mar 2020 05:23:51 +0000 (21:23 -0800)]
[ORC] Remove hard dependency on libobjc when using MachOPlatform with LLJIT.
The LLJIT::MachOPlatformSupport class used to unconditionally attempt to
register __objc_selrefs and __objc_classlist sections. If libobjc had not
been loaded this resulted in an assertion, even if no objc sections were
actually present. This patch replaces this unconditional registration with
a check that no objce sections are present if libobjc has not been loaded.
This will allow clients to use MachOPlatform with LLJIT without requiring
libobjc for non-objc code.
Sameer Sahasrabuddhe [Thu, 5 Mar 2020 03:39:46 +0000 (09:09 +0530)]
StructurizeCFG: simplify phi nodes when possible
After structurization, some phi nodes can have a single incoming edge
and can be simplified away. This change runs a simplify query on all
phis that are either modified or added by the structurizer. This also
moves some phis closer to their use as a side benefit.
Reviewed By: arsenm
Differential Revision: https://reviews.llvm.org/D75500
Craig Topper [Thu, 5 Mar 2020 04:38:44 +0000 (20:38 -0800)]
[X86] Simplify the code at the end of lowerShuffleAsBroadcast.
The original code could create a bitcast from f64 to i64 and back
on 32-bit targets. This was only working because getBitcast was
able to fold the casts away to avoid leaving the illegal i64 type.
Now we handle the scalar case directly by broadcasting using the
scalar type as the element type. Then bitcasting to the final VT.
This works since we ensure the scalar type is the same size as
the final VT element type. No more casts to i64.
For the vector case, we cast to VT or subvector of VT. And then
do the broadcast.
I think this all matches what we generated before, just in a more
readable way.
Matt Arsenault [Wed, 6 Nov 2019 04:48:18 +0000 (20:48 -0800)]
clang: Treat ieee mode as the default for denormal-fp-math
The IR hasn't switched the default yet, so explicitly add the ieee
attributes.
I'm still not really sure how the target default denormal mode should
interact with -fno-unsafe-math-optimizations. The target may have
selected the default mode to be non-IEEE based on the flags or based
on its true behavior, but we don't know which is the case. Since the
only users of a non-IEEE mode without a flag still support IEEE mode,
just reset to IEEE.
Philip Reames [Thu, 5 Mar 2020 03:59:12 +0000 (19:59 -0800)]
Consistently capitalize a variable [NFC]
One instance in a copy paste was pointed out in a review, fix all instances at once.
Michael Trent [Wed, 4 Mar 2020 17:10:38 +0000 (09:10 -0800)]
Fix dyld opcode *_ADD_ADDR_IMM_SCALED error detection.
Summary:
Move the check for malformed REBASE_OPCODE_ADD_ADDR_IMM_SCALED and
BIND_OPCODE_DO_BIND_ADD_ADDR_IMM_SCALED opcodes after the immediate
has been applied to the SegmentOffset. This fixes specious errors
where SegmentOffset is pointing between two sections when trying to
correct the SegmentOffset value.
Update the regression tests to verify the proper error message.
Reviewers: pete, ab, lhames, steven_wu, jhenderson
Reviewed By: pete
Subscribers: hiraditya, dexonsmith, rupprecht, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D75629
Igor Kudrin [Wed, 4 Mar 2020 13:53:05 +0000 (20:53 +0700)]
[DebugInfo] Avoid crashing on an invalid section identifier.
A DWARFSectionKind is read from input. It is not validated on parsing,
so an unexpected value may result in reaching llvm_unreachable() in
DWARFUnitIndex::getColumnHeader() when dumping the index section.
Differential Revision: https://reviews.llvm.org/D75609
QingShan Zhang [Thu, 5 Mar 2020 03:42:50 +0000 (03:42 +0000)]
[DAGCombine] Check the uses of negated floating constant and remove the hack
PowerPC hits an assertion due to somewhat the same reason as https://reviews.llvm.org/D70975.
Though there are already some hack, it still failed with some case, when the operand 0 is NOT
a const fp, it is another fma that with const fp. And that const fp is negated which result in multi-uses.
A better fix is to check the uses of the negated const fp. If there are already use of its negated
value, we will have benefit as no extra Node is added.
Differential revision: https://reviews.llvm.org/D75501
Jim Lin [Thu, 5 Mar 2020 02:00:23 +0000 (10:00 +0800)]
[AVR][NFC] Use Register instead of unsigned
Summary: Use Register type for variables instead of unsigned type.
Reviewers: dylanmckay
Reviewed By: dylanmckay
Subscribers: hiraditya, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D75595
Greg Clayton [Thu, 5 Mar 2020 03:28:24 +0000 (19:28 -0800)]
Fix buildbots with merge that didn't happen for
4050b01ba9ece02721ec496383baee219ca8cc2b.
Greg Clayton [Thu, 5 Mar 2020 03:12:08 +0000 (19:12 -0800)]
Fix GSYM tests to run the yaml files and fix test failures on some machines.
YAML files were not being run during lit testing as there was no lit.local.cfg file. Once this was fixed, some buildbots would fail due to a StringRef that pointed to a std::string inside of a temporary llvm::Triple object. These issues are fixed here by making a local triple object that stays around long enough so the StringRef points to valid data. Fixed memory sanitizer bot bugs as well.
Differential Revision: https://reviews.llvm.org/D75390
hsmahesha [Thu, 5 Mar 2020 02:45:55 +0000 (08:15 +0530)]
AMDGPU/GlobalISel: Support llvm.trap and llvm.debugtrap intrinsics
Summary: Lower trap and debugtrap intrinsics to AMDGPU machine instruction(s).
Reviewers: arsenm, nhaehnle, kerbowa, cdevadas, t-tye, kzhuravl
Reviewed By: arsenm
Subscribers: kzhuravl, jvesely, wdng, yaxunl, rovka, dstuttard, tpr, hiraditya, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D74688
Shengchen Kan [Sun, 1 Mar 2020 08:02:41 +0000 (16:02 +0800)]
[X86] Add a private member function determinePaddingPrefix for X86AsmBackend
Summary: X86 can reduce the bytes of NOP by padding instructions with prefixes to get a better peformance in some cases. So a private member function `determinePaddingPrefix` is added to determine which prefix is the most suitable.
Reviewers: annita.zhang, reames, MaskRay, craig.topper, LuoYuanke, jyknight
Reviewed By: reames
Subscribers: llvm-commits, dexonsmith, hiraditya
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D75357
MaheshRavishankar [Thu, 5 Mar 2020 01:03:07 +0000 (17:03 -0800)]
[mlir][Linalg] Fix load/store operations generated while lower loops when
output has zero rank.
While lowering to loops, no indices should be used in the load/store
operation if the buffer is zero-rank.
Differential Revision: https://reviews.llvm.org/D75391
Philip Reames [Thu, 5 Mar 2020 00:49:15 +0000 (16:49 -0800)]
[X86] Relax existing instructions to reduce the number of nops needed for alignment purposes
If we have an explicit align directive, we currently default to emitting nops to fill the space. As discussed in the context of the prefix padding work for branch alignment (D72225), we're allowed to play other tricks such as extending the size of previous instructions instead.
This patch will convert near jumps to far jumps if doing so decreases the number of bytes of nops needed for a following align. It does so as a post-pass after relaxation is complete. It intentionally works without moving any labels or doing anything which might require another round of relaxation.
The point of this patch is mainly to mock out the approach. The optimization implemented is real, and possibly useful, but the main point is to demonstrate an approach for implementing such "pad previous instruction" approaches. The key notion in this patch is to treat padding previous instructions as an optional optimization, not as a core part of relaxation. The benefit to this is that we avoid the potential concern about increasing the distance between two labels and thus causing further potentially non-local code grown due to relaxation. The downside is that we may miss some opportunities to avoid nops.
For the moment, this patch only implements a small set of existing relaxations.. Assuming the approach is satisfactory, I plan to extend this to a broader set of instructions where there are obvious "relaxations" which are roughly performance equivalent.
Note that this patch *doesn't* change which instructions are relaxable. We may wish to explore that separately to increase optimization opportunity, but I figured that deserved it's own separate discussion.
There are possible downsides to this optimization (and all "pad previous instruction" variants). The major two are potentially increasing instruction fetch and perturbing uop caching. (i.e. the usual alignment risks) Specifically:
* If we pad an instruction such that it crosses a fetch window (16 bytes on modern X86-64), we may cause the decoder to have to trigger a fetch it wouldn't have otherwise. This can effect both decode speed, and icache pressure.
* Intel's uop caching have particular restrictions on instruction combinations which can fit in a particular way. By moving around instructions, we can both cause misses an change misses into hits. Many of the most painful cases are around branch density, so I don't expect this to be too bad on the whole.
On the whole, I expect to see small swings (i.e. the typical alignment change problem), but nothing major or systematic in either direction.
Differential Revision: https://reviews.llvm.org/D75203
Louis Dionne [Thu, 5 Mar 2020 00:32:10 +0000 (19:32 -0500)]
[libc++] Mark deprecation test as UNSUPPORTED on Clang 6
Sam McCall [Tue, 3 Mar 2020 23:33:29 +0000 (00:33 +0100)]
[clangd] Track document versions, include them with diags, enhance logs
Summary:
This ties to an LSP feature (diagnostic versioning) but really a lot
of the value is in being able to log what's happening with file versions
and queues more descriptively and clearly.
As such it's fairly invasive, for a logging patch :-\
Key decisions:
- at the LSP layer, we don't reqire the client to provide versions (LSP
makes it mandatory but we never enforced it). If not provided,
versions start at 0 and increment. DraftStore handles this.
- don't propagate magically using contexts, but rather manually:
addDocument -> ParseInputs -> (ParsedAST, Preamble, various callbacks)
Context-propagation would hide the versions from ClangdServer, which
would make producing good log messages hard
- within ClangdServer, treat versions as opaque and unordered.
std::string is a convenient type for this, and allows richer versions
for embedders. They're "mandatory" but "null" is a reasonable default.
Subscribers: ilya-biryukov, javed.absar, MaskRay, jkorous, arphaman, kadircet, usaxena95, cfe-commits
Tags: #clang
Differential Revision: https://reviews.llvm.org/D75582
Sam McCall [Thu, 5 Mar 2020 00:04:44 +0000 (01:04 +0100)]
[clangd] Remove unused+broken InvalidationError class.
Petr Hosek [Wed, 4 Mar 2020 23:59:59 +0000 (15:59 -0800)]
Revert "[clang-doc] Improving Markdown Output"
This reverts commit
45499f3801d8a00919deaf38c801885d8e75b942, it's
still failing on Windows bots.
Matt Arsenault [Wed, 4 Mar 2020 23:05:48 +0000 (18:05 -0500)]
Add constexpr to DenormalMode constructors
This will allow their use in member initializers in a future commit.
Matt Arsenault [Wed, 12 Feb 2020 22:50:52 +0000 (17:50 -0500)]
X86: Generate mir checks in sqrt test
Stefan Gränitz [Wed, 4 Mar 2020 22:52:51 +0000 (23:52 +0100)]
[ORC] Decompose LazyCallThroughManager::callThroughToSymbol()
Summary: Decompose callThroughToSymbol() into findReexport(), resolveSymbol(), notifyResolved() and reportCallThroughError(). This allows derived classes to reuse the functionality while adding their own code in between.
Reviewers: lhames
Reviewed By: lhames
Subscribers: hiraditya, steven_wu, dexonsmith, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D75084
Sam McCall [Wed, 4 Mar 2020 13:04:17 +0000 (14:04 +0100)]
[clangd] Cancel certain operations if the file changes before we start.
Summary:
Otherwise they can force us to build lots of snapshots that we don't need.
Particularly, try to do this for operations that are frequently
generated by editors without explicit user interaction, and where
editing the file makes the result less useful. (Code action
enumeration is a good example).
https://github.com/clangd/clangd/issues/298
This doesn't return the "right" LSP error code (ContentModified) to the client,
we need to teach the cancellation API to distinguish between different causes.
Reviewers: kadircet
Subscribers: ilya-biryukov, javed.absar, MaskRay, jkorous, arphaman, jfb, usaxena95, cfe-commits
Tags: #clang
Differential Revision: https://reviews.llvm.org/D75602
Craig Topper [Wed, 4 Mar 2020 22:57:58 +0000 (14:57 -0800)]
[X86] Convert vXi1 vectors to xmm/ymm/zmm types via getRegisterTypeForCallingConv rather than using CCPromoteToType in the td file
Previously we tried to promote these to xmm/ymm/zmm by promoting
in the X86CallingConv.td file. But this breaks when we run out
of xmm/ymm/zmm registers and need to fall back to memory. We end
up trying to create a non-sensical scalar to vector. This lead
to an assertion. The new tests in avx512-calling-conv.ll all
trigger this assertion.
Since we really want to treat these types like we do on avx2,
it seems better to promote them before the calling convention
code gets involved. Except when the calling convention is one
that passes the vXi1 type in a k register.
The changes in avx512-regcall-Mask.ll are because we indicated
that xmm/ymm/zmm types should be passed indirectly for the
Win64 ABI before we go to the common lines that promoted the
vXi1 types. This caused the promoted types to be picked up by
the default calling convention code. Now we promote them earlier
so they get passed indirectly as though they were xmm/ymm/zmm.
Differential Revision: https://reviews.llvm.org/D75154
Sam McCall [Mon, 2 Mar 2020 15:54:56 +0000 (16:54 +0100)]
[clangd] Fix isInsideMainFile to be aware of preamble.
Reviewers: kadircet
Subscribers: ilya-biryukov, MaskRay, jkorous, arphaman, usaxena95, cfe-commits
Tags: #clang
Differential Revision: https://reviews.llvm.org/D75460
shafik [Wed, 4 Mar 2020 22:52:31 +0000 (14:52 -0800)]
[dsymutil] Fix template stripping in getDIENames(...) to account for overloaded operators
Currently dsymutil when generating accelerator tables will attempt to strip the template parameters from names for subroutines.
For some overload operators which contain < in their names e.g. operator< the current method ends up stripping the operator name as well,
we just end up with the name operator in the table for each case.
Differential Revision: https://reviews.llvm.org/D75545
Martijn Vels [Wed, 4 Mar 2020 22:52:46 +0000 (17:52 -0500)]
Partially inline basic_string copy constructor in UNSTABLE
Summary:
This is a recommit of https://reviews.llvm.org/D73223 where the added function accidentally ended up inside an idef block.
This change splits the copy constructor up inlining short initialization, and explicitly outlining long initialization into __init_copy_ctor_external() which is the externally instantiated slow path.
For unstable ABI, this has the following changes:
remove basic_string(const basic_string&)
remove basic_string(const basic_string&, const Allocator&)
add __init_copy_ctor_external(const value_type*, size_type)
Quick local benchmark for Copy:
Master
```
---------------------------------------------------------------
Benchmark Time CPU Iterations
---------------------------------------------------------------
BM_StringCopy_Empty 3.50 ns 3.51 ns
199326720
BM_StringCopy_Small 3.50 ns 3.51 ns
199510016
BM_StringCopy_Large 15.7 ns 15.7 ns
45230080
BM_StringCopy_Huge 1503 ns 1503 ns 464896
```
With this change
```
---------------------------------------------------------------
Benchmark Time CPU Iterations
---------------------------------------------------------------
BM_StringCopy_Empty 1.99 ns 2.00 ns
356471808
BM_StringCopy_Small 3.29 ns 3.30 ns
203425792
BM_StringCopy_Large 13.3 ns 13.3 ns
52948992
BM_StringCopy_Huge 1472 ns 1472 ns 475136
```
Subscribers: libcxx-commits
Tags: #libc
Differential Revision: https://reviews.llvm.org/D75639
Petr Hosek [Sat, 29 Feb 2020 20:22:02 +0000 (12:22 -0800)]
[clang-doc] Improving Markdown Output
This change has two components. The moves the generated file
for a namespace to the directory named after the namespace in
a file named 'index.<format>'. This greatly improves the browsing
experience since the index page is shown by default for a directory.
The second improves the markdown output by adding the links to the
referenced pages for children objects and the link back to the source
code.
Patch By: Clayton
Differential Revision: https://reviews.llvm.org/D72954
Craig Topper [Wed, 4 Mar 2020 22:33:26 +0000 (14:33 -0800)]
[X86] Disable commuting for the first source operand of zero masked scalar fma intrinsic instructions.
I believe this is the correct fix for D75506 rather than disabling all commuting. We can still commute the remaining two sources.
Differential Revision:m https://reviews.llvm.org/D75526
Kostya Kortchinsky [Tue, 3 Mar 2020 19:16:31 +0000 (11:16 -0800)]
[scudo][standalone] Do not fill 32b regions at once
Summary:
For the 32b primary, whenever we created a region, we would fill it
all at once (eg: create all the transfer batches for all the blocks
in that region). This wasn't ideal as all the potential blocks in
a newly created region might not be consummed right away, and it was
using extra memory (and release cycles) to keep all those free
blocks.
So now we keep track of the current region for a given class, and
how filled it is, carving out at most `MaxNumBatches` worth of
blocks at a time.
Additionally, lower `MaxNumBatches` on Android from 8 to 4. This
lowers the randomness of blocks, which isn't ideal for security, but
keeps things more clumped up for PSS/RSS accounting purposes.
Subscribers: #sanitizers, llvm-commits
Tags: #sanitizers, #llvm
Differential Revision: https://reviews.llvm.org/D75551
Matt Arsenault [Wed, 4 Mar 2020 19:24:09 +0000 (14:24 -0500)]
AMDGPU: Remove VOP3OpSelMods0 complex pattern
Use default operand of 0 instead.
Frank Laub [Wed, 4 Mar 2020 22:16:41 +0000 (14:16 -0800)]
[MLIR][Affine][NFC] Expose expandAffineMap
Summary:
Expose expandAffineMap so that it can be used by lowerings defined outside of
MLIR core.
Reviewed By: ftynse
Differential Revision: https://reviews.llvm.org/D75589
Nikita Popov [Sat, 29 Feb 2020 10:41:47 +0000 (11:41 +0100)]
[InstSimplify] Constant fold icmp of gep
InstSimplify can fold icmps of gep where the base pointers are the
same and the offsets are constant. It does so by constructing a
constant expression icmp and assumes that it gets folded -- but
this doesn't actually happen, because GEP expressions can usually
only be folded by the target-dependent constant folding layer.
As such, we need to explicitly invoke it here.
Differential Revision: https://reviews.llvm.org/D75407
Lei Zhang [Tue, 3 Mar 2020 16:25:10 +0000 (11:25 -0500)]
[mlir][vulkan-runner] Add basic timing for compute pipeline
This commit adds timestamp query commands in Vulkan runner's
compute pipeline to gain insights into how long it takes to
run the compute shader. This commit also adds timing from CPU
side for VkQueueSubmit and vkQueueWaitIdle.
Differential Revision: https://reviews.llvm.org/D75531
Muhammad Omair Javaid [Wed, 4 Mar 2020 22:12:28 +0000 (03:12 +0500)]
Revert "[GlobalISel][Localizer] Enable intra-block localization of already-local uses."
This reverts commit
e91e1df6ab74006e96b0cca94192e935542705a4.
Eric Fiselier [Wed, 4 Mar 2020 22:09:29 +0000 (17:09 -0500)]
[libc++] Un-xfail GCC test for new version
Matt Arsenault [Tue, 25 Feb 2020 19:45:07 +0000 (14:45 -0500)]
AMDGPU/GlobalISel: Don't use vector G_EXTRACT in arg lowering
Create a wider source vector, and unmerge with dead defs like the
legalizer. The legalization handling for G_EXTRACT is incomplete, and
it's preferrable to keep everything in 32-bit pieces.
We should probably start moving these functions into utils, since we
have a growing number of places that do almost the same thing.
Matt Arsenault [Tue, 25 Feb 2020 20:00:37 +0000 (15:00 -0500)]
AMDGPU/GlobalISel: Switch target in argument test
Since this is still largely relying on the DAG argument type lowering
code, this has inherited the problem where i16 vectors have a
different ABI on targets with and without legal i16. Switch to using a
target with legal i16, so the i16 vector argument tests are more
useful.
Matt Arsenault [Mon, 24 Feb 2020 23:09:08 +0000 (18:09 -0500)]
GlobalISel: Move some legalizer functions to utils
Matt Arsenault [Wed, 28 Aug 2019 04:01:46 +0000 (00:01 -0400)]
GlobalISel: Set alignment on function argument stack load/store
Alexey Bataev [Wed, 4 Mar 2020 21:15:28 +0000 (16:15 -0500)]
[OPENMP50]Codegen for 'destroy' clause in depobj directive.
If the destroy clause is appplied, the previously allocated memory for
the dependency object must be destroyed.
Richard Smith [Wed, 4 Mar 2020 21:18:46 +0000 (13:18 -0800)]
Fix regression in bdad0a1: force rebuilding of StmtExpr nodes in
TreeTransform if the 'dependent' flag would change.
Frank Laub [Wed, 4 Mar 2020 21:12:01 +0000 (13:12 -0800)]
[MLIR][Affine][NFC] Remove obsolete and ambiguous definitions
Summary:
Looks like a refactor that was never completed.
This change removes some unused and ambiguous definitions.
Reviewed By: bondhugula, nicolasvasilache, rriddle
Differential Revision: https://reviews.llvm.org/D75586
Louis Dionne [Wed, 4 Mar 2020 21:10:30 +0000 (16:10 -0500)]
[libc++] Fix typo in REQUIRES that broke the GCC-tot bot configuration
Explained in https://reviews.llvm.org/D70117#inline-688897.
Raphael Isemann [Wed, 4 Mar 2020 20:57:05 +0000 (12:57 -0800)]
[lldb][NFC] Use C++11 for loop in ClangASTSource::FindExternalLexicalDecls
Zola Bridges [Wed, 4 Mar 2020 20:48:52 +0000 (21:48 +0100)]
[x86][SLH] Rm liveness check from data invariance check
SLH had two functions named isDataInvariant and isDataInvariantLoad that
checked whether the passed instruction was data invariant. For some instructions,
if the EFLAGS were dead then they were considered data invariant, otherwise
they were not considered data invariant.
In this patch, I extracted that EFLAGS liveness check and made it
explicit at every call to isDataInvariant and isDataInvariantLoad.
This makes the isDataInvariant function behave more generally
and preserves the liveness check behavior that SLH would like to have.
Tested via llvm-lit llvm/test/CodeGen/X86/speculative-load-hardening*
This is the first step in making these two data invariance checks
available for non-SLH passes. The second step is to move the passes from
SLH to X86InstrInfo.cpp. I'll follow up with a patch that does that.
Differential Revision: https://reviews.llvm.org/D70283
Eric Fiselier [Wed, 4 Mar 2020 20:48:33 +0000 (15:48 -0500)]
[libc++] Mark another test as flaky
Lang Hames [Wed, 4 Mar 2020 20:36:50 +0000 (12:36 -0800)]
[ORC] Add some debugging output for initializers.
This output can be useful in tracking down initialization failures in the JIT.
Fangrui Song [Wed, 4 Mar 2020 03:49:14 +0000 (19:49 -0800)]
[llvm-readelf] Make --all output order closer to GNU readelf
https://bugs.llvm.org/show_bug.cgi?id=43403
The new order makes it easy to compare the two tools' --all.
Reviewed By: grimar, rupprecht
Differential Revision: https://reviews.llvm.org/D75592
Lei Zhang [Wed, 4 Mar 2020 20:12:33 +0000 (15:12 -0500)]
[mlir][spirv] Support integer signedness
This commit updates SPIR-V dialect to support integer signedness
by relaxing various checks for signless to just normal integers.
The hack for spv.Bitcast can now be removed.
Differential Revision: https://reviews.llvm.org/D75611
Fangrui Song [Wed, 4 Mar 2020 00:59:33 +0000 (16:59 -0800)]
[llvm-objdump] --syms: print st_size as "%016" PRIx64 instead of "%08" PRIx64 for 64-bit objects
This is GNU objdump's behavior and it is reasonable to match.
Reviewed By: grimar
Differential Revision: https://reviews.llvm.org/D75588
Lei Zhang [Wed, 4 Mar 2020 19:41:27 +0000 (14:41 -0500)]
[mlir][ods] Improve integer signedness modelling
A previous commit added support for integer signedness in C++
IntegerType. This change introduces ODS definitions for
integer types and integer (element) attributes w.r.t. signedness.
This commit also updates various existing definitions' descriptions
to mention signless where suitable to make it more clear.
Positive and non-negative integer attributes are removed to avoid
the explosion of subclasses. Instead, one should use more atmoic
constraints together with Confined to model that. For example,
`Confined<..., [IntPositive]>`.
Differential Revision: https://reviews.llvm.org/D75610
Alexey Bataev [Wed, 4 Mar 2020 19:37:51 +0000 (14:37 -0500)]
[OPENMP50]Codegen for 'depend' clause in depobj directive.
Added codegen for 'depend' clause in depobj directive. The depend clause
is emitted as kmp_depend_info <deps>[<number_of_items_in_clause> + 1]. The
first element in this array is reserved for storing the number of
elements in this array: <deps>[0].base_addr =
<number_of_items_in_clause>;
This extra element is required to implement 'update' and 'destroy'
clauses. It is required to know the size of array to destroy it
correctly and to update depency kind.
Martijn Vels [Wed, 4 Mar 2020 19:51:21 +0000 (14:51 -0500)]
Revert "Partially inline basic_string copy constructor in UNSTABLE"
This reverts commit
8cf76e913b867a98a9843aa1b3d782632ed5d930.
We are investigating why this causes compilation issues under -O3
Sam Clegg [Wed, 4 Mar 2020 19:29:45 +0000 (11:29 -0800)]
[lld][WebAssembly] Add support for --rsp-quoting
This also changes to default style to match the host.
Reviewed By: ruiu
Differential Revision: https://reviews.llvm.org/D75577
Louis Dionne [Wed, 4 Mar 2020 19:38:51 +0000 (14:38 -0500)]
[libc++] Avoid deprecation warning in the implementation of __has_rebind
Wei Mi [Thu, 13 Feb 2020 17:23:27 +0000 (09:23 -0800)]
Generate Callee Saved Register (CSR) related cfi directives like .cfi_restore.
https://reviews.llvm.org/D42848 only handled CFA related cfi directives but
didn't handle CSR related cfi. The patch adds the CSR part. Basically it reuses
the framework created in D42848. For each basicblock, the patch tracks which
CSR set have been saved at its CFG predecessors's exits, and compare the CSR
set with the set at its previous basicblock's exit (The previous block is the
block laid before the current block). If the saved CSR set at its previous
basicblock's exit is larger, .cfi_restore will be inserted.
The patch also generates proper .cfi_restore in epilogue to make sure the
saved CSR set is consistent for the incoming edges of each block.
Differential Revision: https://reviews.llvm.org/D74303
Guozhi Wei [Wed, 4 Mar 2020 19:10:32 +0000 (11:10 -0800)]
[CodeGenPrepare] Handle ExtractValueInst in dupRetToEnableTailCallOpts
As the test case shows if there is an ExtractValueInst in the Ret block, function dupRetToEnableTailCallOpts can't duplicate it into the block containing call. So later no tail call is generated in CodeGen.
This patch adds the ExtractValueInst handling code in function dupRetToEnableTailCallOpts and FoldReturnIntoUncondBranch, and later tail call can be generated for this case.
Differential Revision: https://reviews.llvm.org/D74242
Raphael Isemann [Wed, 4 Mar 2020 19:05:48 +0000 (11:05 -0800)]
[lldb] Fix typo in ClangASTSource logging statement
Lei Zhang [Mon, 2 Mar 2020 22:27:05 +0000 (17:27 -0500)]
[mlir][spirv] Add get() method to TargetEnvAttr taking raw values
Also make the getResourceLimits() method more explicit about its return type.
Differential Revision: https://reviews.llvm.org/D75484
Eric Fiselier [Wed, 4 Mar 2020 18:54:04 +0000 (13:54 -0500)]
[libc++] Move std::string extern template declarations to end of class.
They need to appear before any member functions are ODR used, because
they change the visibility of many of these functions and otherwise
they could end up with hidden visibility in the DSO.
Louis Dionne [Wed, 4 Mar 2020 18:54:58 +0000 (13:54 -0500)]
[libc++] Revert to previous implementation of __has_rebind
The new implementation introduced in
5b1e5b43 broke the bot running GCC 5.
Fangrui Song [Wed, 4 Mar 2020 16:17:35 +0000 (08:17 -0800)]
[ELF][test] Improve llvm-objdump -t tests
In many cases, llvm-nm or llvm-readelf is more suitable.
David Green [Wed, 4 Mar 2020 11:45:41 +0000 (11:45 +0000)]
[LSR] Add masked load and store handling
This teaches Loop Strength Reduction the details about masked load and
store address operands, so that it can have a better time optimising
them as it would for normal loads and stores.
Differential Revision: https://reviews.llvm.org/D75371
Raphael Isemann [Wed, 4 Mar 2020 18:32:01 +0000 (10:32 -0800)]
[lldb] Fix several LLDB_LOGs with wrong indices in ClangASTSource.cpp
Mitch Phillips [Wed, 4 Mar 2020 18:04:11 +0000 (10:04 -0800)]
Revert "Fix GSYM tests to run the yaml files and fix test failures on some machines."
This reverts commit
8d41f1a02369537cae1a7d00c0fa717fc3aca575.
This change broke the MSan buildbots - see comments in
https://reviews.llvm.org/D75390 for more information.
Jonathan Coe [Wed, 4 Mar 2020 18:09:26 +0000 (18:09 +0000)]
[clang-format] Improve identification of C# nullables
Summary: Consider `? identifier =` and `? identifier;` to be nullable within function bodies.
Reviewers: krasimir
Reviewed By: krasimir
Subscribers: cfe-commits, MyDeveloperDay
Tags: #clang-format, #clang
Differential Revision: https://reviews.llvm.org/D75606
Jon Chesterfield [Wed, 4 Mar 2020 17:51:38 +0000 (17:51 +0000)]
[libomptarget] Implement most hip atomic functions in terms of intrinsics
Summary:
[libomptarget] Implement hip atomic functions in terms of intrinsics
All but atomicInc can be implemented using type generic clang intrinsics.
There is not yet a corresponding intrinsic for atomicInc in clang, only one in
LLVM. This patch leaves atomicInc as an unresolved symbol.
Reviewers: jdoerfert, ABataev, hfinkel, grokos, arsenm
Reviewed By: arsenm
Subscribers: sri, saiislam, wdng, jvesely, mgorny, jfb, openmp-commits
Tags: #openmp
Differential Revision: https://reviews.llvm.org/D73076
River Riddle [Wed, 4 Mar 2020 17:44:36 +0000 (09:44 -0800)]
[mlir][NFC] Sort the operations alphabetically and add header blocks
Summary:
The order of the operations has fallen out of sync as operations have been renamed and new ones have been added.
Differential Revision: https://reviews.llvm.org/D75540
Nikita Popov [Wed, 4 Mar 2020 17:33:00 +0000 (18:33 +0100)]
[InstCombine] Don't explicitly invoke const folding in shift combine
InstCombine uses an IRBuilder that automatically performs
target-dependent constant folding, so explicitly invoking it here
is not necessary.
Nikita Popov [Fri, 28 Feb 2020 21:29:54 +0000 (22:29 +0100)]
[InstCombine] Use IRBuilder to create bitcast
This makes sure that the constant expression bitcast goes through
target-dependent constant folding, and thus avoids an additional
iteration of InstCombine.
Nikita Popov [Sat, 29 Feb 2020 17:51:18 +0000 (18:51 +0100)]
[ConstProp] Add test for bitcast to gep fold; NFC
Nikita Popov [Sat, 29 Feb 2020 17:24:20 +0000 (18:24 +0100)]
[InstSimplify] Add additional icmp of gep folding test; NFC
Nikita Popov [Sat, 29 Feb 2020 17:22:41 +0000 (18:22 +0100)]
[InstSimplify] Regenerate compare.ll checks; NFC
Nikita Popov [Tue, 3 Mar 2020 18:16:11 +0000 (19:16 +0100)]
[ConstantFolding] Always return something from ConstantFoldConstant
Spin-off from D75407. As described there, ConstantFoldConstant()
currently returns null for non-ConstantExpr/ConstantVector inputs,
but otherwise always returns non-null, independently of whether
any folding has happened or not.
This is confusing and makes consumer code more complicated.
I would expect either that ConstantFoldConstant() returns only if
it actually folded something, or that it always returns non-null.
I'm going to the latter possibility here, which appears to be more
useful considering existing usage.
Differential Revision: https://reviews.llvm.org/D75543
Jeremy Morse [Wed, 4 Mar 2020 17:08:17 +0000 (17:08 +0000)]
[analyzer] decode() a bytes object to make Python3 happy
The output of subprocess.check_output is decode()'d through the rest of
this python program, but one appears to have been missed for the output
of the call to "clang -print-file-name=include".
On Windows, with Python 3.6, this leads to the 'args' array being a mix of
bytes and strings, which causes exceptions later down the line.
I can't easily test with python2 on Windows, but python2 on Ubuntu 18.04
was happy with this change.
Craig Topper [Wed, 4 Mar 2020 07:45:59 +0000 (23:45 -0800)]
[X86] Directly form VBROADCAST_LOAD in lowerShuffleAsBroadcast on AVX targets.
If we would emit a VBROADCAST node, we can instead directly emit
a VBROADCAST_LOAD. This allows us to get rid of the special case
to use an f64 load on 32-bit targets for vXi64.
I believe there is more cleanup we can do later in this function,
but I'll do that in follow ups.
Simon Pilgrim [Wed, 4 Mar 2020 17:02:20 +0000 (17:02 +0000)]
[X86] Add tests showing failure to combine consecutive loads + FSHR into a single load
Similar to some of the regressions seen in D75114
Simon Pilgrim [Wed, 4 Mar 2020 15:04:03 +0000 (15:04 +0000)]
[X86] Add tests showing failure to combine consecutive loads + FSHL into a single load
Similar to some of the regressions seen in D75114
Michael Park [Wed, 4 Mar 2020 16:27:14 +0000 (11:27 -0500)]
[libc++][P0174] Deprecated/removed parts of default allocator.
Differential Revision: https://reviews.llvm.org/D70117
Raphael Isemann [Wed, 4 Mar 2020 00:31:25 +0000 (16:31 -0800)]
[lldb][NFC] Modernize logging UserExpression
Raphael Isemann [Wed, 4 Mar 2020 17:01:45 +0000 (09:01 -0800)]
Fix modules build after MatrixBuilder patch
The addition of MatrixBuilder.h broke the modules build:
```
While building module 'LLVM_intrinsic_gen' imported from llvm-project/llvm/lib/IR/AbstractCallSite.cpp:19:
While building module 'LLVM_IR' imported from llvm-project/llvm/include/llvm/IR/Argument.h:19:
In file included from <module-includes>:6:
llvm-project/llvm/include/llvm/IR/MatrixBuilder.h:19:10: fatal error: cyclic dependency in module 'LLVM_intrinsic_gen': LLVM_intrinsic_gen -> LLVM_IR -> LLVM_intrinsic_gen
^
While building module 'LLVM_intrinsic_gen' imported from llvm-project/llvm/lib/IR/AbstractCallSite.cpp:19:
In file included from <module-includes>:1:
llvm-project/llvm/include/llvm/IR/Argument.h:19:10: fatal error: could not build module 'LLVM_IR'
~~~~~~~~^~~~~~~~~~~~~~~~~
llvm-project/llvm/lib/IR/AbstractCallSite.cpp:19:10: fatal error: could not build module 'LLVM_intrinsic_gen'
~~~~~~~~^~~~~~~~~~~~~~~~~~~~
```
Louis Dionne [Wed, 4 Mar 2020 16:32:49 +0000 (11:32 -0500)]
[libc++] Fix reverse_iterator test when UBSan is enabled
The goal of the test was only to check that we could access the
`this->current` member of std::reverse_iterator from a derived
class, but in doing so we incremented a null iterator, which is UB.
Sanjay Patel [Wed, 4 Mar 2020 16:08:28 +0000 (11:08 -0500)]
[PassManager] adjust VectorCombine placement
The initial placement of vector-combine in the opt pipeline revealed phase ordering bugs:
https://bugs.llvm.org/show_bug.cgi?id=45015
https://bugs.llvm.org/show_bug.cgi?id=42022
This patch contains a few independent changes:
1. Move the pass up in the pipeline, so it happens just after loop-vectorization.
This is only to keep vectorization passes together in the pipeline at the moment.
I don't have evidence of interaction between these yet.
2. Add an -early-cse pass after -vector-combine to clean up redundant ops. This was
partly proposed as far back as rL219644 (which is why it's effectively being moved
in the old PM code). This is important because the subsequent -instcombine doesn't
work as well without EarlyCSE. With the CSE, -instcombine is able to squash
shuffles together in 1 of the tests (because those are simple "select" shuffles).
3. Remove the -vector-combine pass that was running after SLP. We may want to do that
eventually, but I don't have a test case to support it yet.
Differential Revision: https://reviews.llvm.org/D75145
Balazs Benics [Wed, 4 Mar 2020 16:03:59 +0000 (17:03 +0100)]
[analyzer][NFC] Use CallEvent checker callback in GenericTaintChecker
Summary:
Intended to be a non-functional change but it turned out CallEvent handles
constructor calls unlike CallExpr which doesn't triggered for constructors.
All in all, this change shouldn't be observable since constructors are not
yet propagating taintness like functions.
In the future constructors should propagate taintness as well.
This change includes:
- NFCi change all uses of the CallExpr to CallEvent
- NFC rename some functions, mark static them etc.
- NFC omit explicit TaintPropagationRule type in switches
- NFC apply some clang-tidy fixits
Reviewers: NoQ, Szelethus, boga95
Reviewed By: Szelethus
Subscribers: martong, whisperity, xazax.hun, baloghadamsoftware, szepet,
a.sidorin, mikhail.ramalho, donat.nagy, dkrupp, Charusso, cfe-commits
Tags: #clang
Differential Revision: https://reviews.llvm.org/D72035
Sanjay Patel [Wed, 4 Mar 2020 15:22:09 +0000 (10:22 -0500)]
[SDAG] simplify FP binops to undef
As discussed in the commit thread for rGa253a2a and D73978, we can do more undef folding for FP ops.
The nnan and ninf fast-math-flags specify that if an operand is the disallowed value, the result is
poison, so we can produce an undef result.
But this doesn't work as expected (the undef operand cases remain) because of a Flags propagation
problem in SelectionDAGBuilder.
I've added DAGCombiner calls to enable these for the other cases because we've shown in other
patches that (because of the limited way that SDAG iterates), it is possible to miss simplifications
like this if they are done only at node creation time.
Several potential follow-ups to expand on this patch are possible.
Differential Revision: https://reviews.llvm.org/D75576
Alex Zinenko [Wed, 4 Mar 2020 10:44:22 +0000 (11:44 +0100)]
[mlir] support conversion of parallel reduction loops to std
Recently introduced support for converting sequential reduction loops to
CFG of basic blocks in the Standard dialect makes it possible to perform
a staged conversion of parallel reduction loops into a similar CFG by
using sequential loops as an intermediate step. This is already the case
for parallel loops without reduction, so extend the pattern to support
an additional use case.
Differential Revision: https://reviews.llvm.org/D75599
Jeremy Morse [Wed, 4 Mar 2020 15:22:31 +0000 (15:22 +0000)]
Quote a python executable path
On my Windows machine at least, the path to python contains a space.
Alexey Bataev [Wed, 4 Mar 2020 14:29:50 +0000 (09:29 -0500)]
[OPENMP50]'source' and 'sink' kinds are not allowed in depobj.
Do not allow to use 'sink' and 'source' dependency kinds in 'depobj'
directive.
AndreyChurbanov [Wed, 4 Mar 2020 15:15:05 +0000 (18:15 +0300)]
[openmp] OpenMP 5.1 omp_display_env function implementation.
Patch by Michael Klemm.
Differential Revision: https://reviews.llvm.org/D74956
Louis Dionne [Wed, 4 Mar 2020 15:10:02 +0000 (10:10 -0500)]
[libc++] Mark the shared_future.wait_for test as being flaky
It is timing sensitive and it fails from time to time. If marking it as
flaky doesn't help, we can try tweaking the time outs.
John Brawn [Wed, 4 Mar 2020 13:25:06 +0000 (13:25 +0000)]
Handle PluginAttrInstances using ManagedStatic
We need to make sure that PluginAttrInstances is deleted before shared libraries
are unloaded, because otherwise when deleting its contents we'll try to access
a virtual destructor which no longer exists.
As shared libraries are managed using ManagedStatic we can do this by also using
ManagedStatic for PluginAttrInstances as ManagedStatics are deleted in reverse
order of construction and we know that PluginAttrInstances will only be
accessed, and thus constructed, after shared libraries have been loaded.
Mikhail Maltsev [Wed, 4 Mar 2020 14:54:24 +0000 (14:54 +0000)]
Revert "Promote nameless lambda used by dl_iterate_phdr to named function to clean up control flow inside findUnwindSections. Also, expose the data structure"
This reverts commit
d93371238e7f5d5f9c506a88cf4f05f8dea9d008.
The commit broke the build in several configurations (including
Windows and bare-metal). For details see comments in
https://reviews.llvm.org/D75480