platform/upstream/llvm.git
3 years ago[SyntaxTree] Extend the syntax tree dump to also cover `NodeRole`
Eduardo Caldas [Wed, 5 Aug 2020 13:55:17 +0000 (13:55 +0000)]
[SyntaxTree] Extend the syntax tree dump to also cover `NodeRole`

We should see `NodeRole` information in the dump because that exposes how the
accessors will behave.

Functional changes in the dump:
* Surround Leaf tokens with `'`
* Append `Node` dumps with `NodeRole` information, except for unknown roles
* Append marks to `Node` dumps, instead of prepending

Non-functional changes:
* `::dumpTokens(llvm::raw_ostream, ArrayRef<syntax::Token>, const
SourceManager &SM)` always received as parameter a `syntax::Token *`
pointing to `Leaf::token()`. Changed the function to
`dumpLeaf(llvm::raw_ostream, syntax::Leaf *, const SourceManager&)`
* `dumpTree` acted on a Node, rename to `dumpNode`

Differential Revision: https://reviews.llvm.org/D85330

3 years ago[lldb] Don't depend on psutil in TestCompletion.py
Raphael Isemann [Tue, 25 Aug 2020 06:25:58 +0000 (08:25 +0200)]
[lldb] Don't depend on psutil in TestCompletion.py

psutil isn't reall a dependency of the test suite so this shouldn't be
unconditionally be imported here. Instead just check for the process name
by looking for the "a.out" string to get the bots green again.

3 years agoPR37556: Don't diagnose conflicts between instantiated unqualified
Richard Smith [Tue, 25 Aug 2020 05:49:41 +0000 (22:49 -0700)]
PR37556: Don't diagnose conflicts between instantiated unqualified
friend declarations and declarations found in inline namespaces within
the target context.

3 years ago[X86] Support -march=sapphirerapids
Freddy Ye [Tue, 25 Aug 2020 04:27:02 +0000 (12:27 +0800)]
[X86] Support -march=sapphirerapids

Support -march=sapphirerapids for x86.
Compare with Icelake Server, it includes 14 more new features. They are
amxtile, amxint8, amxbf16, avx512bf16, avx512vp2intersect, cldemote,
enqcmd, movdir64b, movdiri, ptwrite, serialize, shstk, tsxldtrk, waitpkg.

Reviewed By: craig.topper

Differential Revision: https://reviews.llvm.org/D86503

3 years ago[SyntaxTree] Use annotations on ClassTemplate_MemberClassDefinition test
Eduardo Caldas [Mon, 24 Aug 2020 16:38:38 +0000 (16:38 +0000)]
[SyntaxTree] Use annotations on ClassTemplate_MemberClassDefinition test

Differential Revision: https://reviews.llvm.org/D86470

3 years ago[SyntaxTree] Split ConstVolatileQualifiers tests
Eduardo Caldas [Mon, 24 Aug 2020 16:33:09 +0000 (16:33 +0000)]
[SyntaxTree] Split ConstVolatileQualifiers tests

Differential Revision: https://reviews.llvm.org/D86469

3 years ago[SyntaxTree] Split `MemberPointer` tests with annotations
Eduardo Caldas [Mon, 24 Aug 2020 16:13:34 +0000 (16:13 +0000)]
[SyntaxTree] Split `MemberPointer` tests with annotations

Differential Revision: https://reviews.llvm.org/D86467

3 years ago[CMake] Fix ncurses/zlib in LLVM_SYSTEM_LIBS for Windows GNU
Petr Hosek [Tue, 25 Aug 2020 06:00:54 +0000 (23:00 -0700)]
[CMake] Fix ncurses/zlib in LLVM_SYSTEM_LIBS for Windows GNU

For the Windows GNU platform, CMAKE_FIND_LIBRARY_PREFIXES is a list
containing an empty string, which ended up in a regex capturing group,
which is invalid in CMake's regex engine. With this change, we get the
following:

  set(CMAKE_FIND_LIBRARY_PREFIXES "lib" "")
  set(CMAKE_FIND_LIBRARY_SUFFIXES ".dll.a" ".a" ".lib")
  get_system_libname(path/to/libz.dll.a zlib)
  message("${zlib}")

outputs z, as expected.

Patch By: haampie

Differential Revision: https://reviews.llvm.org/D86434

3 years agoTemporarily Revert "[DebugInfo] Move constructor homing case in shouldOmitDefinition."
Eric Christopher [Tue, 25 Aug 2020 04:51:31 +0000 (21:51 -0700)]
Temporarily Revert "[DebugInfo] Move constructor homing case in shouldOmitDefinition."
as it's causing test failures.

This reverts commit 589ce5f7050dd83fd3f7dbc182ea0fb051ece994.

3 years ago[DebugInfo] Move constructor homing case in shouldOmitDefinition.
Amy Huang [Tue, 25 Aug 2020 03:17:59 +0000 (20:17 -0700)]
[DebugInfo] Move constructor homing case in shouldOmitDefinition.

For some reason the ctor homing case was before the template
specialization case, and could have returned false too early.
I moved the code out into a separate function to avoid this.

Also added a run line to the template specialization test. I guess
all the -debug-info-kind=limited tests should still pass with =constructor,
but it's probably unnecessary to test for all of those.

Differential Revision: https://reviews.llvm.org/D86491

3 years agoDisable 'not' test on Windows because 'env' from GnuWin32 cannot be used without...
Alexandre Ganea [Tue, 25 Aug 2020 01:55:34 +0000 (21:55 -0400)]
Disable 'not' test on Windows because 'env' from GnuWin32 cannot be used without arguments.

3 years ago[flang] Don't attempt to compute element size if no DynamicType
Tim Keith [Tue, 25 Aug 2020 01:20:22 +0000 (18:20 -0700)]
[flang] Don't attempt to compute element size if no DynamicType

If an error has occurred a symbol may have a DeclTypeSpec but no
valid DynamicType. There is no need to compute the size of erroneous
symbols.

Also, we only need to process object entities and procedure entities.
All other kinds of symbols can be skipped.

This fixes another problem revealed by https://bugs.llvm.org/show_bug.cgi?id=47265

Differential Revision: https://reviews.llvm.org/D86484

3 years agoAdd NDEBUG checks around debug only loop to avoid unused variable
Eric Christopher [Tue, 25 Aug 2020 00:58:17 +0000 (17:58 -0700)]
Add NDEBUG checks around debug only loop to avoid unused variable
warnings.

3 years agoProperly pass modules flags to frontend when using -std=c++20 instead of -std=c++2a.
Richard Smith [Mon, 24 Aug 2020 23:28:41 +0000 (16:28 -0700)]
Properly pass modules flags to frontend when using -std=c++20 instead of -std=c++2a.

In passing, also teach the driver to map /std:c++latest to -std=c++20
not -std=c++2a.

3 years ago[MLInliner] Support training that doesn't require partial rewards
Mircea Trofin [Mon, 24 Aug 2020 18:36:22 +0000 (11:36 -0700)]
[MLInliner] Support training that doesn't require partial rewards

If we use training algorithms that don't need partial rewards, we don't
need to worry about an ir2native model. In that case, training logs
won't contain a 'delta_size' feature either (since that's the partial
reward).

Differential Revision: https://reviews.llvm.org/D86481

3 years ago[not][test] Fix disable-symbolization.test when 'printenv' is not available
Fangrui Song [Tue, 25 Aug 2020 00:27:34 +0000 (17:27 -0700)]
[not][test] Fix disable-symbolization.test when 'printenv' is not available

On Windows, 'env' or 'printenv' may not exist.

Also switch back to 'env' which is specified by POSIX.1-2017. 'printenv' is not
standard (I picked it because 'printenv' exists on GnuWin32 but 'env' does not).

Reviewed By: zequanwu

Differential Revision: https://reviews.llvm.org/D86496

3 years ago[LLDB] Fix SVE offset calculation in NativeRegisterContextLinux_arm64
Muhammad Omair Javaid [Mon, 24 Aug 2020 19:41:01 +0000 (00:41 +0500)]
[LLDB] Fix SVE offset calculation in NativeRegisterContextLinux_arm64

There was typo left from changes in CalculateSVEOffset where we moved
FPSR/FPCR offset calculation into WriteRegister and ReadRegister.

Differential Revision: https://reviews.llvm.org/D79699

3 years agoFix test for D77924.
Elliott Hughes [Thu, 20 Aug 2020 22:59:18 +0000 (15:59 -0700)]
Fix test for D77924.

The trailing 'L' was missing in the expectation.

Differential Revision: https://reviews.llvm.org/D86321

3 years ago[LLDB] Fix how ValueObjectVariable handles DW_AT_const_value when the DWARFExpression...
shafik [Mon, 24 Aug 2020 21:38:55 +0000 (14:38 -0700)]
[LLDB] Fix how ValueObjectVariable handles DW_AT_const_value when the DWARFExpression holds the data that represents a constant value

In some cases when we have a DW_AT_const_value and the data can be found in the
DWARFExpression then ValueObjectVariable does not handle it properly and we end
up with an extracting data from value failed error.

The test is a very stripped down assembly file since reproducing this relies on the results of compiling with -O1 which may not be stable over time.

Differential Revision: https://reviews.llvm.org/D86311

3 years ago[DAGCombine]: Fold X/Sqrt(X) to Sqrt(X)
Venkataramanan Kumar [Mon, 24 Aug 2020 22:12:32 +0000 (18:12 -0400)]
[DAGCombine]: Fold X/Sqrt(X) to Sqrt(X)

With FMF ( "nsz" and " reassoc") fold X/Sqrt(X) to Sqrt(X).

This is done after targets have the chance to produce a
reciprocal sqrt estimate sequence because that expansion
is probably more efficient than an expansion of a
non-reciprocal sqrt. That is also why we deferred doing
this transform in IR (D85709).

Differential Revision: https://reviews.llvm.org/D86403

3 years ago[x86][AArch64] adjust fast-math-flags in tests; NFC
Sanjay Patel [Mon, 24 Aug 2020 22:05:05 +0000 (18:05 -0400)]
[x86][AArch64] adjust fast-math-flags in tests; NFC

This goes with the proposal in D86403.

3 years ago[lldb] Add a SymbolFileProvider to record and replay calls to dsymForUUID
Jonas Devlieghere [Mon, 24 Aug 2020 22:07:02 +0000 (15:07 -0700)]
[lldb] Add a SymbolFileProvider to record and replay calls to dsymForUUID

When replaying a reproducer captured from a core file, we always use
dsymForUUID for the kernel binary. When enabled, we also use it to find
kexts. Since these files are already contained in the reproducer,
there's no reason to call out to an external tool. If the tool returns a
different result, e.g. because the dSYM got garbage collected, it will
break reproducer replay. The SymbolFileProvider solves the issue by
mapping UUIDs to module and symbol paths in the reproducer.

Differential revision: https://reviews.llvm.org/D86389

3 years agoAMDGPU/GlobalISel: Handle AGPRs used for SGPR operands.
Matt Arsenault [Wed, 12 Aug 2020 15:17:40 +0000 (11:17 -0400)]
AMDGPU/GlobalISel: Handle AGPRs used for SGPR operands.

We would still need to waterfall if the value were somehow an AGPR,
and also need to explicitly copy to a VGPR.

3 years ago[PowerPC] Do not use FISel for calls and TOC-based accesses with PC-Rel
Nemanja Ivanovic [Mon, 24 Aug 2020 21:51:19 +0000 (16:51 -0500)]
[PowerPC] Do not use FISel for calls and TOC-based accesses with PC-Rel

PC-Relative addressing introduces a fair bit of complexity for correctly
eliminating TOC accesses. FastISel does not include any of that handling so we
miscompile code with -mcpu=pwr10 -O0 if it includes an external call that
FastISel does not handle followed by any of the following:

    Floating point constant materialization
    Materialization of a GlobalValue
    Call that FastISel does handle

This patch switches to SDISel for any of the above.

Differential revision: https://reviews.llvm.org/D86343

3 years ago[X86] Copy the tuning features and scheduler model from pentium4/x86-64 to generic
Craig Topper [Mon, 24 Aug 2020 17:51:56 +0000 (10:51 -0700)]
[X86] Copy the tuning features and scheduler model from pentium4/x86-64 to generic

This is preparation for making clang default to -mtune=generic when no -march is specified. This will allow the default tuning to be "generic" even though our default march is "pentium4" or "x86-64".

To avoid llc lit test regressions, if no mcpu is specified, I've defaulted tune to use i586 to match the old tuning settings of no CPU. Some tests explicitly used -mcpu=generic which I've removed so they instead get this default of architecture features from generic and tune from i586.

I updated one llvm-mca test to check a different CPU since generic has a scheduler model now

Differential Revision: https://reviews.llvm.org/D86312

3 years agoAMDGPU: Have a few selection failure tests check both paths
Matt Arsenault [Thu, 30 Jul 2020 02:01:32 +0000 (22:01 -0400)]
AMDGPU: Have a few selection failure tests check both paths

SelectionDAG and GlobalISel take different failure paths for these and
end up producing different failure errors. Check both so the test
passes when the default is switched.

3 years ago[TSan][libdispatch] Add interceptors for dispatch_barrier_async_and_wait(), pt. 2
Julian Lettner [Mon, 24 Aug 2020 21:36:18 +0000 (14:36 -0700)]
[TSan][libdispatch] Add interceptors for dispatch_barrier_async_and_wait(), pt. 2

Also intercept these target functions on Linux.

3 years ago[PowerPC] Handle SUBFIC in reg+reg -> reg+imm transformation
Nemanja Ivanovic [Mon, 24 Aug 2020 21:22:44 +0000 (16:22 -0500)]
[PowerPC] Handle SUBFIC in reg+reg -> reg+imm transformation

We initially missed the subtract-immediate in this transformation.
This patch just adds that.

Differential revision: https://reviews.llvm.org/D84659

3 years ago[libunwind] Remove static_assert / __has_feature macros
Ryan Prichard [Mon, 24 Aug 2020 21:07:20 +0000 (14:07 -0700)]
[libunwind] Remove static_assert / __has_feature macros

The static_assert macro broke on GCC when a scope had two asserts and a
condition that depended on a template parameter. Remove the macro and
rely on the compiler's C++11 static_assert feature.

The __has_feature macro was only used here to determine whether to
define the static_assert macro.

Reviewed By: mstorsjo, #libunwind

Differential Revision: https://reviews.llvm.org/D86411

3 years ago[TSan][libdispatch] Add interceptors for dispatch_barrier_async_and_wait()
Julian Lettner [Mon, 24 Aug 2020 20:56:22 +0000 (13:56 -0700)]
[TSan][libdispatch] Add interceptors for dispatch_barrier_async_and_wait()

Add interceptors for the barrier variants of the "async and wait"
dispatch API family.

3 years ago[InstCombine] improve demanded element analysis for vector insert-of-extract
Sanjay Patel [Mon, 24 Aug 2020 19:31:31 +0000 (15:31 -0400)]
[InstCombine] improve demanded element analysis for vector insert-of-extract

InstCombine currently has odd rules for folding insert-extract chains to shuffles,
so we miss collapsing seemingly simple cases as shown in the tests here.

But poison makes this not quite as easy as we might have guessed. Alive2 tests to
show the subtle difference (similar to the regression tests):
https://alive2.llvm.org/ce/z/hp4hv3 (this is ok)
https://alive2.llvm.org/ce/z/ehEWaN (poison leakage)

SLP tends to create these patterns (as shown in the SLP tests), and this could
help with solving PR16739.

Differential Revision: https://reviews.llvm.org/D86460

3 years ago[SLP] avoid 'tmp' names in regression tests; NFC
Sanjay Patel [Mon, 24 Aug 2020 14:10:00 +0000 (10:10 -0400)]
[SLP] avoid 'tmp' names in regression tests; NFC

That can cause problems for update_test_checks.py (it warns when updating this file).

3 years ago[InstCombine] add tests for insert+extract demanded elements; NFC
Sanjay Patel [Mon, 24 Aug 2020 13:27:30 +0000 (09:27 -0400)]
[InstCombine] add tests for insert+extract demanded elements; NFC

3 years ago[runtimes] Use llvm-libtool-darwin for runtimes build
Shoaib Meenai [Fri, 21 Aug 2020 20:03:13 +0000 (13:03 -0700)]
[runtimes] Use llvm-libtool-darwin for runtimes build

It's full featured now and we can use it for the runtimes build instead
of relying on an external libtool, which means the CMAKE_HOST_APPLE
restriction serves no purpose either now. Restrict llvm-lipo to Darwin
targets while I'm here, since it's only needed there.

Reviewed By: phosek

Differential Revision: https://reviews.llvm.org/D86367

3 years ago[runtimes] Remove TOOLCHAIN_TOOLS specialization
Shoaib Meenai [Fri, 21 Aug 2020 19:57:16 +0000 (12:57 -0700)]
[runtimes] Remove TOOLCHAIN_TOOLS specialization

{builtin,runtime}_register_target passes a TOOLCHAIN_TOOLS list, whereas
{builtin,runtime}_default_target does notl. The explicit TOOLCHAIN_TOOLS
list matches what LLVMExternalProjectUtils would have set anyway,
barring some target-specific adjustments, and those target-specific
adjustments seem valuable, so let's drop the explicit TOOLCHAIN_TOOLS
list and let LLVMExternalProjectUtils take care of it.

Reviewed By: phosek

Differential Revision: https://reviews.llvm.org/D86366

3 years ago[compiler-rt] Disable ranlib when using libtool
Shoaib Meenai [Fri, 21 Aug 2020 19:54:31 +0000 (12:54 -0700)]
[compiler-rt] Disable ranlib when using libtool

libtool already produces a table of contents, and ranlib just gives
spurious errors because it doesn't understand universal binaries.

Reviewed By: phosek

Differential Revision: https://reviews.llvm.org/D86365

3 years ago[llvm-libtool-darwin] Add support for -V option
Shoaib Meenai [Fri, 21 Aug 2020 17:49:59 +0000 (10:49 -0700)]
[llvm-libtool-darwin] Add support for -V option

The -V option in cctools' libtool prints out the version number and
performs any specified operation. Add this option to LLVM's version.
cctools is more forgiving of invalid command lines when -V is specified,
but I think it's better to give errors instead of silently producing no
output.

Unfortunately, when -V is present, options that would otherwise be
required aren't anymore, so we need to perform some manual argument
validation.

Reviewed By: alexshap

Differential Revision: https://reviews.llvm.org/D86359

3 years agoAdd <stdarg.h> include to kmp_os.h, to get the va_list type, required
Dimitry Andric [Mon, 24 Aug 2020 20:45:02 +0000 (22:45 +0200)]
Add <stdarg.h> include to kmp_os.h, to get the va_list type, required
after cde8f4c164a2. Sort system includes, while here.

3 years agoMove special va_list handling to kmp_os.h
Dimitry Andric [Sat, 22 Aug 2020 13:25:18 +0000 (15:25 +0200)]
Move special va_list handling to kmp_os.h

Instead of copying and pasting the same `#ifdef` expressions in multiple
places, define a type and a pair of macros in `kmp_os.h`, to handle
whether `va_list` is pointer-like or not:

* `kmp_va_list` is the type to use for `__kmp_fork_call()`
* `kmp_va_deref()` dereferences a `va_list`, if necessary
* `kmp_va_addr_of()` takes the address of a `va_list`, if necessary

Also add FreeBSD to the list of OSes that has a non pointer-like
va_list. This can now be easily extended to other OSes too.

Reviewed By: AndreyChurbanov

Differential Revision: https://reviews.llvm.org/D86397

3 years ago[Scalarizer] Avoid updating the name of globals
Bjorn Pettersson [Mon, 24 Aug 2020 17:15:34 +0000 (19:15 +0200)]
[Scalarizer] Avoid updating the name of globals

The "takeName" logic at the end of ScalarizerVisitor::finish
could end up renaming global variables when having simplified
and extractelement instruction to simply pick a single vector
element. If the input vector to the extractelement instruction
held pointers to global variables we ended up renaming the global
variable.
The patch make sure we only take the name of the replaced Op when
we have added new instructions that might need a useful name.

Reviewed By: lebedev.ri

Differential Revision: https://reviews.llvm.org/D86472

3 years ago[flang] Fix bug accessing implicit variable in specification expression
Tim Keith [Mon, 24 Aug 2020 19:53:44 +0000 (12:53 -0700)]
[flang] Fix bug accessing implicit variable in specification expression

A specification expression can reference an implicitly declared variable
in the host procedure. Because we have to process specification parts
before execution parts, this may be the first time we encounter the
variable. We were assuming the variable was implicitly declared in the
scope where it was encountered, leading to an error because local
variables may not be referenced in specification expressions.

The fix is to tentatively create the implicit variable in the host
procedure because that is the only way the specification expression can
be valid. We mark it with the flag `ImplicitOrError` to indicate that
either it must be implicitly defined in the host (by being mentioned in
the execution part) or else its use turned out to be an error.
We need to apply the implicit type rules of the host, which requires
some changes to implicit typing.

Variables in common blocks are allowed to appear in specification expressions
(because they are not locals) but the common block definition may not appear
until after their use. To handle this we create common block symbols and object
entities for each common block object during the `PreSpecificationConstruct`
pass. This allows us to remove the corresponding code in the main visitor and
`commonBlockInfo_.curr`. The change in order of processing causes some
different error messages to be emitted.

Some cleanup is included with this change:
- In `ExpressionAnalyzer`, if an unresolved name is encountered but
  no error has been reported, emit an internal error.
- Change `ImplicitRulesVisitor` to hide the `ImplicitRules` object
  that implements it. Change the interface to pass in names rather
  than having to get the first character of the name.
- Change `DeclareObjectEntity` to have the `attrs` argument default
  to an empty set; that is the typical case.
- In `Pre(parser::SpecificationPart)` use "structured bindings" to
  give names to the pieces that make up a specification-part.
- Enhance `parser::Unwrap` to unwrap `Statement` and `UnlabeledStatement`
  and make use of that in PreSpecificationConstruct.

Differential Revision: https://reviews.llvm.org/D86322

3 years ago[NFC][InstCombine] Multi-level aggregate test for phi-of-insertvalue pattern
Roman Lebedev [Mon, 24 Aug 2020 19:39:03 +0000 (22:39 +0300)]
[NFC][InstCombine] Multi-level aggregate test for phi-of-insertvalue pattern

See https://reviews.llvm.org/D86306

3 years ago[NFC][InstCombine] Adjust naming for some methods to match coding standards
Roman Lebedev [Mon, 24 Aug 2020 19:33:58 +0000 (22:33 +0300)]
[NFC][InstCombine] Adjust naming for some methods to match coding standards

Requested as preparatory cleanup in https://reviews.llvm.org/D86306#inline-799065

3 years ago[PowerPC] Extend custom lower of vector truncate to handle wider input
Roland Froese [Mon, 24 Aug 2020 19:30:04 +0000 (15:30 -0400)]
[PowerPC] Extend custom lower of vector truncate to handle wider input

Current custom lowering of truncate vector handles a source of up to 128 bits, but that only uses one of the two shuffle vector operands. Extend it to use both operands to handle 256 bit sources.

Differential Revision: https://reviews.llvm.org/D68035

3 years ago[mlir] Add Index Type, Floating Point Type and None Type subclasses to python bindings.
zhanghb97 [Mon, 24 Aug 2020 18:54:38 +0000 (18:54 +0000)]
[mlir] Add Index Type, Floating Point Type and None Type subclasses to python bindings.

Based on the PyType and PyConcreteType classes, this patch implements the bindings of Index Type, Floating Point Type and None Type subclasses.
These three subclasses share the same binding strategy:
- The function pointer `isaFunction` points to `mlirTypeIsA***`.
- The `mlir***TypeGet` C API is bound with the `***Type` constructor in the python side.

Reviewed By: stellaraccident

Differential Revision: https://reviews.llvm.org/D86466

3 years agoAdd hashing of the .text section to ProcessMinidump.
Greg Clayton [Mon, 10 Aug 2020 22:07:47 +0000 (15:07 -0700)]
Add hashing of the .text section to ProcessMinidump.

Breakpad will always have a UUID for binaries when it creates minidump files. If an ELF files has a GNU build ID, it will use that. If it doesn't, it will create one by hashing up to the first 4096 bytes of the .text section. LLDB was not able to load these binaries even when we had the right binary because the UUID didn't match. LLDB will use the GNU build ID first as the main UUID for a binary and fallback onto a 8 byte CRC if a binary doesn't have one. With this fix, we will check for the Breakpad hash or the Facebook hash (a modified version of the breakpad hash that collides a bit less) and accept binaries when these hashes match.

Differential Revision: https://reviews.llvm.org/D86261

3 years agoRevert D85812 "[coroutine] should disable inline before calling coro split"
Fangrui Song [Mon, 24 Aug 2020 18:37:18 +0000 (11:37 -0700)]
Revert D85812 "[coroutine] should disable inline before calling coro split"

This reverts commit 2e43acfed89b1903de473f682c65878bdebc395a.

LLVMCoroutines (the library which contains Coroutines.h) depends on LLVMipo (the
library which contains SampleProfile.cpp). It is inappropriate for
SampleProfile.cpp to depent on Coroutines.h (circular dependency).

The test inverted dependencies as well:
llvm/test/Transforms/Coroutines/coro-inline.ll uses -sample-profile.

3 years agoAMDGPU: Add flag to disable promotion of uniform i16 ops
Matt Arsenault [Fri, 31 Jul 2020 18:50:39 +0000 (14:50 -0400)]
AMDGPU: Add flag to disable promotion of uniform i16 ops

This interferes with GlobalISel's much better handling of the
situation.

This should really be disable for GlobalISel. However, the fallback
only re-runs the selection passes, and doesn't go back and rerun any
codegen IR passes. I haven't come up with a good solution to this
problem.

3 years ago[TSan][Darwin] Handle NULL argument in interceptor
Julian Lettner [Mon, 24 Aug 2020 18:30:58 +0000 (11:30 -0700)]
[TSan][Darwin] Handle NULL argument in interceptor

Handle NULL address argument in the `mach_vm_[de]allocate()`
interceptors and fix test: `Assignment 2` is not valid if we weren't
able to re-allocate memory.

rdar://67680613

3 years ago[AMDGPU, docs] Fix typos
vnalamot [Mon, 24 Aug 2020 18:25:34 +0000 (23:55 +0530)]
[AMDGPU, docs] Fix typos

Reviewed By: t-tye, Flakebi

Differential Revision: https://reviews.llvm.org/D86340

3 years ago[flang][openacc] Fix reduction operator parsing/unparsing
Valentin Clement [Mon, 24 Aug 2020 18:22:34 +0000 (14:22 -0400)]
[flang][openacc] Fix reduction operator parsing/unparsing

Update the way reduction operator are defined for the OpenACC parser.

Reviewed By: klausler

Differential Revision: https://reviews.llvm.org/D86296

3 years ago[lldb] type category name common completion
Gongyu Deng [Mon, 24 Aug 2020 16:58:17 +0000 (18:58 +0200)]
[lldb] type category name common completion

1. Added a new common completion TypeCategoryNames to provide a list of category names for completion;
2. Applied the completion to these commands: type category delete/enable/disable/list/define;
3. Added a related test case;
4. Bound the completion to the arguments of the type 'eArgTypeName'.

Reviewed By: teemperor, JDevlieghere

Differential Revision: https://reviews.llvm.org/D84124

3 years agoTableGen/GlobalISel: Allow inst matcher to check multiple opcodes
Matt Arsenault [Sun, 2 Aug 2020 18:52:20 +0000 (14:52 -0400)]
TableGen/GlobalISel: Allow inst matcher to check multiple opcodes

This is to initially handleg immAllOnesV, which should match
G_BUILD_VECTOR or G_BUILD_VECTOR_TRUNC. In the future, it could be
used for other patterns cases that map to multiple G_* instructions,
such as G_ADD and G_PTR_ADD.

3 years ago[LegalizeTypes][X86] Add ROTL/ROTR to WidenVectorResult.
Craig Topper [Mon, 24 Aug 2020 17:06:07 +0000 (10:06 -0700)]
[LegalizeTypes][X86] Add ROTL/ROTR to WidenVectorResult.

We can widen these just like any other binary operation.

Added test cases for v2i32 for X86 for coverage.

Fixes failures seen after D77152.

3 years ago[SDAG] Convert FSHL <--> FSHR if the target only supports one of them
Jay Foad [Mon, 24 Aug 2020 09:52:38 +0000 (10:52 +0100)]
[SDAG] Convert FSHL <--> FSHR if the target only supports one of them

D77152 tried to do this but got it wrong in the shift-by-zero case.
D86430 reverted the wrong code. Reimplement the optimization with
different code depending on whether the shift amount is known to be
non-zero (modulo bitwidth).

This improves code quality for fshl tests on AMDGPU, which only has an
fshr instruction.

Differential Revision: https://reviews.llvm.org/D86438

3 years ago[FLANG] Pick `.md` files when building sphinx documentation.
Sameeran joshi [Mon, 24 Aug 2020 14:21:45 +0000 (19:51 +0530)]
[FLANG] Pick `.md` files when building sphinx documentation.

Need to build sphinx using below flags to Cmake
`-DLLVM_ENABLE_SPHINX=ON -DSPHINX_WARNINGS_AS_ERRORS=OFF`.
Generate html docs using cmake target
`docs-flang-html`
Generated html files should be at `build/tools/flang/docs/html`.
Patch in series from the dicussion on review
https://reviews.llvm.org/D85828

After this patch the markdown docmentation must be written using guide in-
`llvm/docs/MarkdownQuickstartTemplate.md`

Reviewed By: sscalpone

Differential Revision: https://reviews.llvm.org/D86131

3 years ago[lldb] Remote disk file/directory completion for platform commands
Gongyu Deng [Mon, 24 Aug 2020 15:34:32 +0000 (17:34 +0200)]
[lldb] Remote disk file/directory completion for platform commands

1. Extended the gdb-remote communication related classes with disk file/directory
   completion functions;
2. Added two common completion functions RemoteDiskFiles and
   RemoteDiskDirectories based on the functions above;
3. Added completion for these commands:
   A. platform get-file <remote-file> <local-file>;
   B. platform put-file <local-file> <remote-file>;
   C. platform get-size <remote-file>;
   D. platform settings -w <remote-dir>;
   E. platform open file <remote-file>.
4. Added related tests for client and server;
5. Updated docs/lldb-platform-packets.txt.

Reviewed By: labath

Differential Revision: https://reviews.llvm.org/D85284

3 years ago[lldb] common completion for process pids and process names
Gongyu Deng [Mon, 24 Aug 2020 12:23:23 +0000 (14:23 +0200)]
[lldb] common completion for process pids and process names

1. Added two common completions: `ProcessIDs` and `ProcessNames`, which are
refactored from their original dedicated option completions;
2. Removed the dedicated option completion functions of `process attach` and
`platform process attach`, so that they can use arg-type-bound common
completions instead;
3. Bound `eArgTypePid` to the pid completion, `eArgTypeProcessName` to the
process name completion in `CommandObject.cpp`;
4. Added a related test case.

Reviewed By: teemperor

Differential Revision: https://reviews.llvm.org/D80700

3 years ago[DSE,MemorySSA] Do not use callCapturesBefore in isReadClobber.
Florian Hahn [Tue, 18 Aug 2020 10:12:31 +0000 (11:12 +0100)]
[DSE,MemorySSA] Do not use callCapturesBefore in isReadClobber.

Using callCapturesBefore potentially improves the precision and the
number of stores we can remove. But in practice, it seems to have very
little impact in terms of stores removed. For example, for
SPEC2000/SPEC2006/MultiSource with -O3 -flto, ~50 more stores are
removed (out of ~26900 stores removed). But in terms of compile-time, it
is very expensive and the patch gives substantial compile-time
improvements: Geomean O3 -0.24%, ReleaseThinLTO -0.47%, ReleaseLTO-g
-0.39%.

http://llvm-compile-time-tracker.com/compare.php?from=612a0bff88ed906c83b82f079d4c49e5fecfb9d0&to=e6c86b96d20d97dd88e903a409bd8d39b6114312&stat=instructions

3 years ago[clang][NFC] Fix a GCC warning in ASTImporterTest.cpp
Raphael Isemann [Mon, 24 Aug 2020 15:07:56 +0000 (17:07 +0200)]
[clang][NFC] Fix a GCC warning in ASTImporterTest.cpp

Apparently only overriding one of the two CompleteType overloads causes
GCC to emit a warning with -Woverloaded-virtual .

3 years agoAMDGPU/GlobalISel: Use unmerge instead of extract in addrspace queries
Matt Arsenault [Wed, 19 Aug 2020 20:26:22 +0000 (16:26 -0400)]
AMDGPU/GlobalISel: Use unmerge instead of extract in addrspace queries

This is a bit more consistent with regular operation legalization.

3 years ago[OpenMP] Check if _MSC_VER is defined before using it
AndreyChurbanov [Mon, 24 Aug 2020 14:50:38 +0000 (17:50 +0300)]
[OpenMP] Check if _MSC_VER is defined before using it

Patch by mati865@gmail.com

Differential Revision: https://reviews.llvm.org/D86448

3 years ago[libFuzzer] Make msan.test:SimpleCmpTest succeed with less trials.
Dokyung Song [Fri, 21 Aug 2020 22:40:26 +0000 (22:40 +0000)]
[libFuzzer] Make msan.test:SimpleCmpTest succeed with less trials.

Currently SimpleCmpTest passes after 9,831,994 trials on x86_64/Linux
when the number of given trials is 10,000,000, just a little bigger than
that. This patch modifies SimpleCmpTest.cpp so that the test passes with less
trials, reducing its chances of future failures as libFuzzer evolves. More
specifically, this patch changes a 32-bit equality check to a 8-bit equality
check, making this test pass at 4,635,303 trials.

Differential Revision: https://reviews.llvm.org/D86382

3 years agoTest all CHECK-NOT in a block even if one fails
Thomas Preud'homme [Wed, 19 Aug 2020 14:47:42 +0000 (15:47 +0100)]
Test all CHECK-NOT in a block even if one fails

This commit makes FileCheck print all CHECK-NOT directive failure in a
CHECK-NOT block even if one fails. Prior to that, it would stop trying
to match CHECK-NOT directive as soon as one in the block fails.

Reviewed By: jhenderson

Differential Revision: https://reviews.llvm.org/D86315

3 years ago[PowerPC] Add clang options to control MMA support
Baptiste Saleil [Mon, 24 Aug 2020 14:14:16 +0000 (09:14 -0500)]
[PowerPC] Add clang options to control MMA support

This patch adds frontend and backend options to enable and disable
the PowerPC MMA operations added in ISA 3.1. Instructions using these
options will be added in subsequent patches.

Differential Revision: https://reviews.llvm.org/D81442

3 years ago[SyntaxTree] Split `DynamicExceptionSpecification` test
Eduardo Caldas [Mon, 24 Aug 2020 14:11:52 +0000 (14:11 +0000)]
[SyntaxTree] Split `DynamicExceptionSpecification` test

3 years ago[SyntaxTree] Split `ParametersAndQualifiers` tests
Eduardo Caldas [Mon, 24 Aug 2020 13:57:20 +0000 (13:57 +0000)]
[SyntaxTree] Split `ParametersAndQualifiers` tests

Differential Revision: https://reviews.llvm.org/D86459

3 years ago[SyntaxTree] Group tests related to `using`
Eduardo Caldas [Mon, 24 Aug 2020 10:30:09 +0000 (10:30 +0000)]
[SyntaxTree] Group tests related to `using`

Differential Revision: https://reviews.llvm.org/D86443

3 years ago[SyntaxTree] Split ExplicitTemplateInstantiation test
Eduardo Caldas [Mon, 24 Aug 2020 10:19:19 +0000 (10:19 +0000)]
[SyntaxTree] Split ExplicitTemplateInstantiation test

Differential Revision: https://reviews.llvm.org/D86441

3 years ago[SyntaxTree] Split FreeStandingClass tests
Eduardo Caldas [Mon, 24 Aug 2020 10:07:27 +0000 (10:07 +0000)]
[SyntaxTree] Split FreeStandingClass tests

Differential Revision: https://reviews.llvm.org/D86440

3 years ago[SyntaxTree] Use annotations to reduce noise on member function tests
Eduardo Caldas [Mon, 24 Aug 2020 09:54:58 +0000 (09:54 +0000)]
[SyntaxTree] Use annotations to reduce noise on member function tests

Differential Revision: https://reviews.llvm.org/D86439

3 years ago[SyntaxTree] Split array declarator tests
Eduardo Caldas [Mon, 24 Aug 2020 09:50:03 +0000 (09:50 +0000)]
[SyntaxTree] Split array declarator tests

Differential Revision: https://reviews.llvm.org/D86437

3 years ago[coroutine] should disable inline before calling coro split
dongAxis [Mon, 24 Aug 2020 14:22:08 +0000 (22:22 +0800)]
[coroutine] should disable inline before calling coro split
summary:
When callee coroutine function is inlined into caller coroutine
function before coro-split pass, llvm will emits "coroutine should
have exactly one defining @llvm.coro.begin". It seems that coro-early
pass can not handle this quiet well.
So we believe that unsplited coroutine function should not be inlined.
This patch fix such issue by not inlining function if it has attribute
"coroutine.presplit" (it means the function has not been splited) to
fix this issue

TestPlan: check-llvm

Reviewed By: wenlei

Differential Revision: https://reviews.llvm.org/D85812

3 years agoGlobalISel: Improve dead instruction debug printing
Matt Arsenault [Sun, 23 Aug 2020 19:02:50 +0000 (15:02 -0400)]
GlobalISel: Improve dead instruction debug printing

This was printing the "Is dead" on a separate line from the
instruction, which was harder to follow.

3 years agoAMDGPU/GlobalISel: Use different technique for sample v3s16 values
Matt Arsenault [Thu, 16 Jul 2020 23:37:31 +0000 (19:37 -0400)]
AMDGPU/GlobalISel: Use different technique for sample v3s16 values

Avoid relying on implicit_def values, and odd sized G_INSERT/G_EXTRACT

3 years agoAMDGPU/GlobalISel: Add baseline, failing unmerge tests
Matt Arsenault [Wed, 19 Aug 2020 22:13:23 +0000 (18:13 -0400)]
AMDGPU/GlobalISel: Add baseline, failing unmerge tests

3 years ago[OPENMP]Fix PR47158, case 3: allow devic_typein nested declare target region.
Alexey Bataev [Wed, 19 Aug 2020 19:23:00 +0000 (15:23 -0400)]
[OPENMP]Fix PR47158, case 3: allow devic_typein nested declare target region.

OpenMP 5.0 supports nested declare target regions. So, in general,it is
allow to mark a declarationas declare target with different device_type
or link type. Patch adds support for such kind of nesting.

Differential Revision: https://reviews.llvm.org/D86239

3 years ago[llvm][LV] Replace `unsigned VF` with `ElementCount VF` [NFCI]
Francesco Petrogalli [Fri, 7 Aug 2020 22:03:24 +0000 (22:03 +0000)]
[llvm][LV] Replace `unsigned VF` with `ElementCount VF` [NFCI]

Changes:

* Change `ToVectorTy` to deal directly with `ElementCount` instances.
* `VF == 1` replaced with `VF.isScalar()`.
* `VF > 1` and `VF >=2` replaced with `VF.isVector()`.
* `VF <=1` is replaced with `VF.isZero() || VF.isScalar()`.
* Replaced the uses of `llvm::SmallSet<ElementCount, ...>` with
   `llvm::SmallSetVector<ElementCount, ...>`. This avoids the need of an
   ordering function for the `ElementCount` class.
* Bits and pieces around printing the `ElementCount` to string streams.

To guarantee that this change is a NFC, `VF.Min` and asserts are used
in the following places:

1. When it doesn't make sense to deal with the scalable property, for
example:
   a. When computing unrolling factors.
   b. When shuffle masks are built for fixed width vector types
In this cases, an
assert(!VF.Scalable && "<mgs>") has been added to make sure we don't
enter coepaths that don't make sense for scalable vectors.
2. When there is a conscious decision to use `FixedVectorType`. These
uses of `FixedVectorType` will likely be removed in favour of
`VectorType` once the vectorizer is generic enough to deal with both
fixed vector types and scalable vector types.
3. When dealing with building constants out of the value of VF, for
example when computing the vectorization `step`, or building vectors
of indices. These operation _make sense_ for scalable vectors too,
but changing the code in these places to be generic and make it work
for scalable vectors is to be submitted in a separate patch, as it is
a functional change.
4. When building the potential VFs in VPlan. Making the VPlan generic
enough to handle scalable vectorization factors is a functional change
that needs a separate patch. See for example `void
LoopVectorizationPlanner::buildVPlans(unsigned MinVF, unsigned
MaxVF)`.
5. The class `IntrinsicCostAttribute`: this class still uses `unsigned
VF` as updating the field to use `ElementCount` woudl require changes
that could result in changing the behavior of the compiler. Will be done
in a separate patch.
7. When dealing with user input for forcing the vectorization
factor. In this case, adding support for scalable vectorization is a
functional change that migh require changes at command line.

Note that in some places the idiom

```
unsigned VF = ...
auto VTy = FixedVectorType::get(ScalarTy, VF)
```

has been replaced with

```
ElementCount VF = ...
assert(!VF.Scalable && ...);
auto VTy = VectorType::get(ScalarTy, VF)
```

The assertion guarantees that the new code is (at least in debug mode)
functionally equivalent to the old version. Notice that this change had been
possible because none of the methods that are specific to `FixedVectorType`
were used after the instantiation of `VTy`.

Reviewed By: rengolin, ctetreau

Differential Revision: https://reviews.llvm.org/D85794

3 years agoAMDGPU/GlobalISel: Start implementing computeKnownBitsForTargetInstr
Matt Arsenault [Sun, 16 Aug 2020 17:42:55 +0000 (13:42 -0400)]
AMDGPU/GlobalISel: Start implementing computeKnownBitsForTargetInstr

Handle workitem intrinsics. There isn't really away to adequately test
this right now, since none of the known bits users are fine grained
enough to test the edge conditions. This triggers a number of
instances of the new 64-bit to 32-bit shift combine in the existing
tests.

3 years agoRevert "[llvm][LV] Replace `unsigned VF` with `ElementCount VF` [NFCI]"
Francesco Petrogalli [Mon, 24 Aug 2020 13:49:27 +0000 (13:49 +0000)]
Revert "[llvm][LV] Replace `unsigned VF` with `ElementCount VF` [NFCI]"

Reverting because the commit message doesn't reflect the one agreed on
phabricator at https://reviews.llvm.org/D85794.

This reverts commit c8d2b065b98fa91139cc7bb1fd1407f032ef252e.

3 years agoGlobalISel: Reduce G_SHL width if source is extension
Matt Arsenault [Sat, 15 Aug 2020 17:38:29 +0000 (13:38 -0400)]
GlobalISel: Reduce G_SHL width if source is extension

shl ([sza]ext x, y) => zext (shl x, y).

Turns expensive 64 bit shifts into 32 bit if it does not overflow the
source type:

This is a port of an AMDGPU DAG combine added in
5fa289f0d8ff85b9e14d2f814a90761378ab54ae. InstCombine does this
already, but we need to do it again here to apply it to shifts
introduced for lowered getelementptrs. This will help matching
addressing modes that use 32-bit offsets in a future patch.

TableGen annoyingly assumes only a single match data operand, so
introduce a reusable struct. However, this still requires defining a
separate GIMatchData for every combine which is still annoying.

Adds a morally equivalent function to the existing
getShiftAmountTy. Without this, we would have to do try to repeatedly
query the legalizer info and guess at what type to use for the shift.

3 years ago[llvm][LV] Replace `unsigned VF` with `ElementCount VF` [NFCI]
Francesco Petrogalli [Fri, 7 Aug 2020 22:03:24 +0000 (22:03 +0000)]
[llvm][LV] Replace `unsigned VF` with `ElementCount VF` [NFCI]

Changes:

* Change `ToVectorTy` to deal directly with `ElementCount` instances.
* `VF == 1` replaced with `VF.isScalar()`.
* `VF > 1` and `VF >=2` replaced with `VF.isVector()`.
* `VF <=1` is replaced with `VF.isZero() || VF.isScalar()`.
* Add `<` operator to `ElementCount` to be able to use
`llvm::SmallSetVector<ElementCount, ...>`.
* Bits and pieces around printing the ElementCount to string streams.
* Added a static method to `ElementCount` to represent a scalar.

To guarantee that this change is a NFC, `VF.Min` and asserts are used
in the following places:

1. When it doesn't make sense to deal with the scalable property, for
example:
   a. When computing unrolling factors.
   b. When shuffle masks are built for fixed width vector types
In this cases, an
assert(!VF.Scalable && "<mgs>") has been added to make sure we don't
enter coepaths that don't make sense for scalable vectors.
2. When there is a conscious decision to use `FixedVectorType`. These
uses of `FixedVectorType` will likely be removed in favour of
`VectorType` once the vectorizer is generic enough to deal with both
fixed vector types and scalable vector types.
3. When dealing with building constants out of the value of VF, for
example when computing the vectorization `step`, or building vectors
of indices. These operation _make sense_ for scalable vectors too,
but changing the code in these places to be generic and make it work
for scalable vectors is to be submitted in a separate patch, as it is
a functional change.
4. When building the potential VFs in VPlan. Making the VPlan generic
enough to handle scalable vectorization factors is a functional change
that needs a separate patch. See for example `void
LoopVectorizationPlanner::buildVPlans(unsigned MinVF, unsigned
MaxVF)`.
5. The class `IntrinsicCostAttribute`: this class still uses `unsigned
VF` as updating the field to use `ElementCount` woudl require changes
that could result in changing the behavior of the compiler. Will be done
in a separate patch.
7. When dealing with user input for forcing the vectorization
factor. In this case, adding support for scalable vectorization is a
functional change that migh require changes at command line.

Differential Revision: https://reviews.llvm.org/D85794

3 years ago[analyzer][tests] Add a notion of project sizes
Valeriy Savchenko [Thu, 16 Jul 2020 10:28:29 +0000 (13:28 +0300)]
[analyzer][tests] Add a notion of project sizes

Summary:
Whith the number of projects growing, it is important to be able to
filter them in a more convenient way than by names.  It is especially
important for benchmarks, when it is not viable to analyze big
projects 20 or 50 times in a row.

Because of this reason, this commit adds a notion of sizes and a
filtering interface that puts a limit on a maximum size of the project
to analyze or benchmark.

Sizes assigned to the projects in this commit, do not directly
correspond to the number of lines or files in the project.  The key
factor that is important for the developers of the analyzer is the
time it takes to analyze the project.  And for this very reason,
"size" basically helps to cluster projects based on their analysis
time.

Differential Revision: https://reviews.llvm.org/D83942

3 years ago[DSE,MemorySSA] Delay PointerMayBeCaptured calls until actually needed.
Florian Hahn [Fri, 21 Aug 2020 17:17:00 +0000 (18:17 +0100)]
[DSE,MemorySSA] Delay PointerMayBeCaptured calls until actually needed.

Avoid computing InvisibleToCallerBefore/AfterRet up front. In most
cases, this information is not really needed. Instead, introduce helper
functions to compute and cache the result on demand.

Notably, this also does not use PointerMayBeCapturedBefore for
isInvisibleToCallerBeforeRet, as it requires the killing MemoryDef as
starting instruction, making the caching ineffective. But it appears the
use of PointerMayBeCapturedBefore has very limited benefits in practice
(e.g. on SPEC2000/SPEC2006/MultiSource there are no binary changes with
-O3 -flto). Refrain from using it for now, to limit-compile-time.

This gives some nice compile-time improvements:
http://llvm-compile-time-tracker.com/compare.php?from=db9345f6810f379a36752dc52caf5230585d0ebd&to=b4d091047e1b8a3d377d200137b79d03aca65663&stat=instructions

3 years ago[ARM][MVE] Allow tail predication for strides !=1 with gather/scatters
Anna Welker [Mon, 24 Aug 2020 11:04:57 +0000 (12:04 +0100)]
[ARM][MVE] Allow tail predication for strides !=1 with gather/scatters

If gather/scatters are enabled, ARMTargetTransformInfo now allows
tail predication for loops with a much wider range of strides, up
to anything that is loop invariant.

Differential Revision: https://reviews.llvm.org/D85410

3 years agoReland "Correctly emit dwoIDs after ASTFileSignature refactoring (D81347)"
Raphael Isemann [Fri, 21 Aug 2020 12:21:21 +0000 (14:21 +0200)]
Reland "Correctly emit dwoIDs after ASTFileSignature refactoring (D81347)"

The orignal patch with the missing 'REQUIRES: asserts' as there is a debug-only
flag used in the test.

Original summary:

D81347 changes the ASTFileSignature to be an array of 20 uint8_t instead of 5
uint32_t. However, it didn't update the code in ObjectFilePCHContainerOperations
that creates the dwoID in the module from the ASTFileSignature
(`Buffer->Signature` being the array subclass that is now `std::array<uint8_t,
20>` instead of `std::array<uint32_t, 5>`).

```
  uint64_t Signature = [..] (uint64_t)Buffer->Signature[1] << 32 | Buffer->Signature[0]
```

This code works with the old ASTFileSignature (where two uint32_t are enough to
fill the uint64_t), but after the patch this only took two bytes from the
ASTFileSignature and only partly filled the Signature uint64_t.

This caused that the dwoID in the module ref and the dwoID in the actual module
no longer match (which in turns causes that LLDB keeps warning about the dwoID's
not matching when debugging -gmodules-compiled binaries).

This patch just unifies the logic for turning the ASTFileSignature into an
uint64_t which makes the dwoID match again (and should prevent issues like that
in the future).

Reviewed By: aprantl, dang

Differential Revision: https://reviews.llvm.org/D84013

3 years ago[Fixed Point] Add codegen for fixed-point shifts.
Bevin Hansson [Fri, 21 Aug 2020 08:26:52 +0000 (10:26 +0200)]
[Fixed Point] Add codegen for fixed-point shifts.

This patch adds codegen to Clang for fixed-point shift
operations.

Reviewed By: leonardchan

Differential Revision: https://reviews.llvm.org/D83294

3 years ago[Fixed Point] Use FixedPointBuilder to codegen fixed-point IR.
Bevin Hansson [Thu, 20 Aug 2020 12:36:35 +0000 (14:36 +0200)]
[Fixed Point] Use FixedPointBuilder to codegen fixed-point IR.

This changes the methods in CGExprScalar to use
FixedPointBuilder to generate IR for fixed-point
conversions and operations.

Since FixedPointBuilder emits padded operations slightly
differently than the original code, some tests change.

Reviewed By: leonardchan

Differential Revision: https://reviews.llvm.org/D86282

3 years ago[AST][RecoveryAST] Preserve the type by default for recovery expression.
Haojian Wu [Mon, 24 Aug 2020 12:20:36 +0000 (14:20 +0200)]
[AST][RecoveryAST] Preserve the type by default for recovery expression.

Differential Revision: https://reviews.llvm.org/D82657

3 years ago[DSE,MemorySSA] Regnerate some check lines.
Florian Hahn [Mon, 24 Aug 2020 12:24:44 +0000 (13:24 +0100)]
[DSE,MemorySSA] Regnerate some check lines.

The check lines where generated before align was added for all
instructions. Re-generate them, to reduce diff noise for actual
functional changes.

3 years ago[SystemZ] Preserve the MachineMemOperand in emitCondStore() in all cases.
Jonas Paulsson [Mon, 24 Aug 2020 12:07:30 +0000 (14:07 +0200)]
[SystemZ] Preserve the MachineMemOperand in emitCondStore() in all cases.

Review: Ulrich Weigand

3 years ago[DSE,MemorySSA] Limit elimination at end of function to single UO.
Florian Hahn [Sat, 22 Aug 2020 09:08:59 +0000 (10:08 +0100)]
[DSE,MemorySSA] Limit elimination at end of function to single UO.

Limit elimination of stores at the end of a function to MemoryDefs with
a single underlying object, to save compile time.

In practice, the case with multiple underlying objects seems not very
important in practice. For -O3 -flto on MultiSource/SPEC2000/SPEC2006
this results in a total of 2 more stores being eliminated.

We can always re-visit that in the future.

3 years ago[InstCombine] fold abs of select with negated op (PR39474)
Sanjay Patel [Sun, 23 Aug 2020 18:58:29 +0000 (14:58 -0400)]
[InstCombine] fold abs of select with negated op (PR39474)

Similar to the existing transform - peek through a select
to match a value and its negation.

https://alive2.llvm.org/ce/z/MXi5KG

  define i8 @src(i1 %b, i8 %x) {
  %0:
    %neg = sub i8 0, %x
    %sel = select i1 %b, i8 %x, i8 %neg
    %abs = abs i8 %sel, 1
    ret i8 %abs
  }
  =>
  define i8 @tgt(i1 %b, i8 %x) {
  %0:
    %abs = abs i8 %x, 1
    ret i8 %abs
  }
  Transformation seems to be correct!

3 years ago[InstCombine] add tests for abs of select with negated op; NFC (PR39474)
Sanjay Patel [Sun, 23 Aug 2020 18:49:03 +0000 (14:49 -0400)]
[InstCombine] add tests for abs of select with negated op; NFC (PR39474)

3 years agoRevert "Reland "Correctly emit dwoIDs after ASTFileSignature refactoring (D81347)""
Raphael Isemann [Mon, 24 Aug 2020 10:54:25 +0000 (12:54 +0200)]
Revert "Reland "Correctly emit dwoIDs after ASTFileSignature refactoring (D81347)""

This reverts commit ada2e8ea67393aa8c44fe8e9d46be62df6d1c702. Still breaking
on Fuchsia (and also Fedora) with exit code 1, so back to investigating.

3 years ago[SCEV] Still (again) trying to fix buildbots
Sam Parker [Mon, 24 Aug 2020 10:23:46 +0000 (11:23 +0100)]
[SCEV] Still (again) trying to fix buildbots

3 years agoReland "Correctly emit dwoIDs after ASTFileSignature refactoring (D81347)"
Raphael Isemann [Mon, 24 Aug 2020 09:20:57 +0000 (11:20 +0200)]
Reland "Correctly emit dwoIDs after ASTFileSignature refactoring (D81347)"

This relands D84013 but with a test that relies on less shell features to
hopefully make the test pass on Fuchsia (where the test from the previous patch
version strangely failed with a plain "Exit code 1").

Original summary:

D81347 changes the ASTFileSignature to be an array of 20 uint8_t instead of 5 uint32_t.
However, it didn't update the code in ObjectFilePCHContainerOperations that creates
the dwoID in the module from the ASTFileSignature (`Buffer->Signature` being the
array subclass that is now `std::array<uint8_t, 20>` instead of `std::array<uint32_t, 5>`).

```
  uint64_t Signature = [..] (uint64_t)Buffer->Signature[1] << 32 | Buffer->Signature[0]
```

This code works with the old ASTFileSignature  (where two uint32_t are enough to
fill the uint64_t), but after the patch this only took two bytes from the ASTFileSignature
and only partly filled the Signature uint64_t.

This caused that the dwoID in the module ref and the dwoID in the actual module no
longer match (which in turns causes that LLDB keeps warning about the dwoID's not
matching when debugging -gmodules-compiled binaries).

This patch just unifies the logic for turning the ASTFileSignature into an uint64_t which
makes the dwoID match again (and should prevent issues like that in the future).

Reviewed By: aprantl, dang

Differential Revision: https://reviews.llvm.org/D84013

3 years ago[lld] s/dyn_cast/isa in InputSection.cpp
Pavel Labath [Mon, 24 Aug 2020 09:44:28 +0000 (11:44 +0200)]
[lld] s/dyn_cast/isa in InputSection.cpp

Avoids a -Wunused-variable with gcc.

3 years ago[lldb/Utility] Remove some Scalar type accessors
Pavel Labath [Thu, 20 Aug 2020 07:20:55 +0000 (09:20 +0200)]
[lldb/Utility] Remove some Scalar type accessors

Now that the number of Scalar "types" has been reduced, these don't make
sense anymore.

3 years ago[SCEV] Still trying to fix windows buildbots
Sam Parker [Mon, 24 Aug 2020 09:26:48 +0000 (10:26 +0100)]
[SCEV] Still trying to fix windows buildbots