platform/upstream/llvm.git
4 years ago[ConstantFold][SVE] Fix constant folding for scalable vector compare instruction.
Huihui Zhang [Thu, 12 Mar 2020 22:59:14 +0000 (15:59 -0700)]
[ConstantFold][SVE] Fix constant folding for scalable vector compare instruction.

Summary:
Do not iterate on scalable vector. Also do not return constant scalable vector
from ConstantInt::get().
Fix result type by using getElementCount() instead of getNumElements().

Reviewers: sdesmalen, efriedma, apazos, huntergr, willlovett

Reviewed By: efriedma

Subscribers: tschuett, hiraditya, rkruppe, psnobl, llvm-commits

Tags: #llvm

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

4 years agoAMDGPU: Directly annotate functions if they have calls
Matt Arsenault [Wed, 11 Mar 2020 21:12:20 +0000 (17:12 -0400)]
AMDGPU: Directly annotate functions if they have calls

Currently we infer whether the flat-scratch-init kernel input should
be enabled based on calls. Move this handling, so we can decide if the
full set of ABI inputs is needed in kernels. Ideally we would have an
analysis of some sort, rather than the function attributes.

4 years agoCodeGen: Add constexpr to Register constructors
Matt Arsenault [Wed, 11 Mar 2020 22:20:00 +0000 (18:20 -0400)]
CodeGen: Add constexpr to Register constructors

4 years ago[ORC] Enable exception handling in JIT'd code when using LLJIT on Darwin.
Lang Hames [Thu, 12 Mar 2020 21:44:53 +0000 (14:44 -0700)]
[ORC] Enable exception handling in JIT'd code when using LLJIT on Darwin.

This patch enables exception handling in code added to LLJIT on Darwin by
adding an orc::EHFrameRegistrationPlugin instance to the ObjectLinkingLayer
(which is currently used on Darwin only).

4 years ago[ORC] Add a mutex to guard EHFrameRegistrationPlugin data structures.
Lang Hames [Thu, 12 Mar 2020 22:08:30 +0000 (15:08 -0700)]
[ORC] Add a mutex to guard EHFrameRegistrationPlugin data structures.

These may be accessed from multiple threads if concurrent materialization is
enabled in ORC.

Testcase coming in a follow-up patch that enables eh-frame registration for
LLJIT.

4 years ago[lldb/Host] Fix the Windows build
Jonas Devlieghere [Thu, 12 Mar 2020 22:30:34 +0000 (15:30 -0700)]
[lldb/Host] Fix the Windows build

Update use of ProcessInstanceInfoList which is now a std::vector.

4 years ago[libc++abi] NFC: Move AtomicInt to cxa_guard_impl.h
Louis Dionne [Tue, 10 Mar 2020 17:44:33 +0000 (13:44 -0400)]
[libc++abi] NFC: Move AtomicInt to cxa_guard_impl.h

Since the atomic_support.h header of libc++abi is considered technical
debt (since we should use libc++'s), it's better not to add new
definitions to it, which makes it diverge from the original libc++
header even more.

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

4 years ago[clang][Parse] properly parse asm-qualifiers, asm inline
Nick Desaulniers [Thu, 12 Mar 2020 22:13:55 +0000 (15:13 -0700)]
[clang][Parse] properly parse asm-qualifiers, asm inline

Summary:
The parsing of GNU C extended asm statements was a little brittle and
had a few issues:
- It was using Parse::ParseTypeQualifierListOpt to parse the `volatile`
  qualifier.  That parser is really meant for TypeQualifiers; an asm
  statement doesn't really have a type qualifier. This is still maybe
  nice to have, but not necessary. We now can check for the `volatile`
  token by properly expanding the grammer, rather than abusing
  Parse::ParseTypeQualifierListOpt.
- The parsing of `goto` was position dependent, so `asm goto volatile`
  wouldn't parse. The qualifiers should be position independent to one
  another. Now they are.
- We would warn on duplicate `volatile`, but the parse error for
  duplicate `goto` was a generic parse error and wasn't clear.
- We need to add support for the recent GNU C extension `asm inline`.
  Adding support to the parser with the above issues highlighted the
  need for this refactoring.

Link: https://gcc.gnu.org/onlinedocs/gcc/Extended-Asm.html
Reviewers: aaron.ballman

Reviewed By: aaron.ballman

Subscribers: aheejin, jfb, nathanchance, cfe-commits, echristo, efriedma, rsmith, chandlerc, craig.topper, erichkeane, jyu2, void, srhines

Tags: #clang

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

4 years ago[AMDGPU] Simplify exec copies
Stanislav Mekhanoshin [Thu, 12 Mar 2020 18:09:45 +0000 (11:09 -0700)]
[AMDGPU] Simplify exec copies

The patch removes late endcf handling and only leaves the
related portion with redundant exec mask copy elimination.

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

4 years ago[lldb] Add YAML traits for ArchSpec and ProcessInstanceInfo
Jonas Devlieghere [Thu, 12 Mar 2020 21:34:44 +0000 (14:34 -0700)]
[lldb] Add YAML traits for ArchSpec and ProcessInstanceInfo

Add YAML traits for ArchSpec and ProcessInstanceInfo so they can be
serialized for the reproducers.

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

4 years ago[mlir] Use llvm::ElementCount when constructing an llvm splat vector.
River Riddle [Thu, 12 Mar 2020 21:22:00 +0000 (14:22 -0700)]
[mlir] Use llvm::ElementCount when constructing an llvm splat vector.

This fixes a breakage after the LLVM API changed.

4 years ago[mlir][SideEffects] Replace HasNoSideEffect with the memory effect interfaces.
River Riddle [Thu, 12 Mar 2020 21:06:41 +0000 (14:06 -0700)]
[mlir][SideEffects] Replace HasNoSideEffect with the memory effect interfaces.

HasNoSideEffect can now be implemented using the MemoryEffectInterface, removing the need to check multiple things for the same information. This also removes an easy foot-gun for users as 'Operation::hasNoSideEffect' would ignore operations that dynamically, or recursively, have no side effects. This also leads to an immediate improvement in some of the existing users, such as DCE, now that they have access to more information.

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

4 years ago[mlir] Add a new `ConstantLike` trait to better identify operations that represent...
River Riddle [Thu, 12 Mar 2020 21:06:14 +0000 (14:06 -0700)]
[mlir] Add a new `ConstantLike` trait to better identify operations that represent a "constant".

The current mechanism for identifying is a bit hacky and extremely adhoc, i.e. we explicit check 1-result, 0-operand, no side-effect, and always foldable and then assume that this is a constant. Adding a trait adds structure to this, and makes checking for a constant much more efficient as we can guarantee that all of these things have already been verified.

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

4 years ago[mlir][NFC] Move the definition of AffineApplyOp to ODS
River Riddle [Thu, 12 Mar 2020 21:06:01 +0000 (14:06 -0700)]
[mlir][NFC] Move the definition of AffineApplyOp to ODS

This has been a long standing cleanup TODO.

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

4 years ago[mlir][SideEffects][NFC] Move the .td definitions for NoSideEffect/RecursiveSideEffec...
River Riddle [Thu, 12 Mar 2020 21:05:41 +0000 (14:05 -0700)]
[mlir][SideEffects][NFC] Move the .td definitions for NoSideEffect/RecursiveSideEffect to SideEffects.td

This matches the location of these traits within the source files.

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

4 years ago[mlir][SideEffects] Mark the CFG only terminator operations as NoSideEffect
River Riddle [Thu, 12 Mar 2020 21:05:27 +0000 (14:05 -0700)]
[mlir][SideEffects] Mark the CFG only terminator operations as NoSideEffect

These terminator operations don't really have any side effects, and this allows for more accurate side-effect analysis for region operations. For example, currently we can't detect like a loop.for or affine.for are dead because the affine.terminator is "side effecting".

Note: Marking as NoSideEffect doesn't mean that these operations can be opaquely erased.

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

4 years agoRevert "[libcxx] Enable C++17 for the benchmarks."
Mark de Wever [Thu, 12 Mar 2020 21:23:46 +0000 (22:23 +0100)]
Revert "[libcxx] Enable C++17 for the benchmarks."

It seems several build bots have issues with setting the CXX_STANDARD
property to 17.

This reverts commit d184d0226301d8bb8b3fdaee52bb636faddd81bc.

4 years ago[lldb/Utility] Replace ProcessInstanceInfoList with std::vector. (NFCI)
Jonas Devlieghere [Thu, 12 Mar 2020 21:10:25 +0000 (14:10 -0700)]
[lldb/Utility] Replace ProcessInstanceInfoList with std::vector. (NFCI)

Replace ProcessInstanceInfoList with std::vector<ProcessInstanceInfo>
and update the call sites.

4 years ago[mlir] [VectorOps] Progressively lower vector.outerproduct to LLVM
aartbik [Thu, 12 Mar 2020 20:10:47 +0000 (13:10 -0700)]
[mlir] [VectorOps] Progressively lower vector.outerproduct to LLVM

Summary:
This replaces the direct lowering of vector.outerproduct to LLVM with progressive lowering into elementary vectors ops to avoid having the similar lowering logic at several places.

NOTE1: with the new progressive rule, the lowered llvm is slightly more elaborate than with the direct lowering, but the generated assembly is just as optimized; still if we want to stay closer to the original, we should add a "broadcast on extract" to shuffle rewrite (rather than special cases all the lowering steps)

NOTE2: the original outerproduct lowering code should now be removed but some linalg test work directly on vector and contain some dead code, so this requires another CL

Reviewers: nicolasvasilache, andydavis1

Reviewed By: nicolasvasilache, andydavis1

Subscribers: mehdi_amini, rriddle, jpienaar, burmako, shauheen, antiagainst, nicolasvasilache, arpith-jacob, mgester, lucyrfox, liufengdb, Joonsoo, llvm-commits

Tags: #llvm

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

4 years ago[MLIR] Reformat LoopOps.td documentation.
Alexander Belyaev [Thu, 12 Mar 2020 20:42:33 +0000 (21:42 +0100)]
[MLIR] Reformat LoopOps.td documentation.

4 years ago[MLIR] Update documentation for loop.reduce.
Alexander Belyaev [Thu, 12 Mar 2020 20:34:40 +0000 (21:34 +0100)]
[MLIR] Update documentation for loop.reduce.

4 years ago[libcxx] Enable C++17 for the benchmarks.
Mark de Wever [Thu, 12 Mar 2020 20:34:31 +0000 (21:34 +0100)]
[libcxx] Enable C++17 for the benchmarks.

The benchmarks are intended to be build with C++17 but the
CMAKE_CXX_STANDARD in the LLVM forces the build to use C++14 by default.
This fixes the issue by setting the CXX_STANDARD property of the benchmark
targets.

The CMake documentation is not clear whether this will use the C++1z
fallback for older compilers. So this may break the benchmarks if somebody
uses the benchmarks with pre C++17 compilers with the C++1z fallback.

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

4 years ago[clangd] Add a textual fallback for go-to-definition
Sam McCall [Thu, 5 Mar 2020 21:47:32 +0000 (16:47 -0500)]
[clangd] Add a textual fallback for go-to-definition

Summary:
This facilitates performing go-to-definition in contexts where AST-based
resolution does not work, such as comments, string literals, preprocessor
disabled regions, and macro definitions, based on textual lookup in the index.

Partially fixes https://github.com/clangd/clangd/issues/241

Reviewers: sammccall

Subscribers: ilya-biryukov, MaskRay, jkorous, arphaman, kadircet, usaxena95, cfe-commits

Tags: #clang

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

4 years ago[SVE] Update API ConstantVector::getSplat() to use ElementCount.
Huihui Zhang [Thu, 12 Mar 2020 20:15:34 +0000 (13:15 -0700)]
[SVE] Update API ConstantVector::getSplat() to use ElementCount.

Summary:
Support ConstantInt::get() and Constant::getAllOnesValue() for scalable
vector type, this requires ConstantVector::getSplat() to take in 'ElementCount',
instead of 'unsigned' number of element count.

This change is needed for D73753.

Reviewers: sdesmalen, efriedma, apazos, spatel, huntergr, willlovett

Reviewed By: efriedma

Subscribers: tschuett, hiraditya, rkruppe, psnobl, cfe-commits, llvm-commits

Tags: #llvm

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

4 years ago[AMDGPU] Add ISD::FSHR -> ALIGNBIT support
Simon Pilgrim [Thu, 12 Mar 2020 20:16:40 +0000 (20:16 +0000)]
[AMDGPU] Add ISD::FSHR -> ALIGNBIT support

This patch allows ISD::FSHR(i32) patterns to lower to ALIGNBIT instructions.

This improves test coverage of ISD::FSHR matching - x86 has both FSHL/FSHR instructions and we prefer FSHL by default.

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

4 years agoDefer checking for mismatches between the deletedness of and overriding
Richard Smith [Wed, 11 Mar 2020 20:49:28 +0000 (13:49 -0700)]
Defer checking for mismatches between the deletedness of and overriding
function and an overridden function until we know whether the overriding
function is deleted.

We previously did these checks when we first built the declaration,
which was too soon in some cases. We now defer all these checks to the
end of the class.

Also add missing check that a consteval function cannot override a
non-consteval function and vice versa.

4 years ago[DAGCombine] foldVSelectOfConstants - ensure constants are same type
Simon Pilgrim [Thu, 12 Mar 2020 19:47:08 +0000 (19:47 +0000)]
[DAGCombine] foldVSelectOfConstants - ensure constants are same type

Fix bug identified by https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=21167, foldVSelectOfConstants must ensure that the 2 build vectors have scalars of the same type before trying to compare APInt values.

4 years ago[Hexagon] Enable init_arrays when target is linux-musl
Sid Manning [Thu, 12 Mar 2020 17:18:35 +0000 (12:18 -0500)]
[Hexagon] Enable init_arrays when target is linux-musl

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

4 years ago[WebAssembly] Fix SIMD shift unrolling to avoid assertion failure
Thomas Lively [Thu, 12 Mar 2020 01:08:46 +0000 (18:08 -0700)]
[WebAssembly] Fix SIMD shift unrolling to avoid assertion failure

Summary:
Using the default DAG.UnrollVectorOp on v16i8 and v8i16 vectors
results in i8 or i16 nodes being inserted into the SelectionDAG. Since
those are illegal types, this causes a legalization assertion failure
for some code patterns, as uncovered by PR45178. This change unrolls
shifts manually to avoid this issue by adding and using a new optional
EVT argument to DAG.ExtractVectorElements to control the type of the
extract_element nodes.

Reviewers: aheejin, dschuff

Subscribers: sbc100, jgravelle-google, hiraditya, sunfish, zzheng, llvm-commits

Tags: #llvm

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

4 years ago[lldb] Specify default value for platform.module-cache-directory
Tatyana Krasnukha [Thu, 12 Mar 2020 18:48:23 +0000 (21:48 +0300)]
[lldb] Specify default value for platform.module-cache-directory

In addition to the commit rG352f16db87f583ec7f55f8028647b5fd8616111f,
this one fixes settings behavior on clearing - the setting should be
reverted to their default value, not an empty one.

4 years ago[ARM] Long shift tests. NFC
David Green [Thu, 12 Mar 2020 14:57:40 +0000 (14:57 +0000)]
[ARM] Long shift tests. NFC

4 years agoAdd a catch-all else case so any unanticipated configs pass this test.
Sterling Augustine [Thu, 12 Mar 2020 18:52:13 +0000 (11:52 -0700)]
Add a catch-all else case so any unanticipated configs pass this test.

4 years agoSink more Attr.h inline methods, NFC
Reid Kleckner [Thu, 12 Mar 2020 03:22:14 +0000 (20:22 -0700)]
Sink more Attr.h inline methods, NFC

This has very little impact on build time, but is a mechanical pre-req
to removing the OpenMPClause.h include, which matters. Most of these
pretty print methods require Expr to be complete.

4 years agoFix unused variable warning. NFCI.
Simon Pilgrim [Thu, 12 Mar 2020 18:45:11 +0000 (18:45 +0000)]
Fix unused variable warning. NFCI.

4 years agoReplace getAs with castAs to fix null dereference static analyzer warning.
Simon Pilgrim [Thu, 12 Mar 2020 18:42:28 +0000 (18:42 +0000)]
Replace getAs with castAs to fix null dereference static analyzer warning.

Use castAs as we know the cast should succeed (and castAs will assert if it doesn't) and we're dereferencing it directly in the BuildRCBlockVarRecordLayout call.

4 years agoCGOpenMPRuntime::emitDeclareTargetVarDefinition - fix static analyzer null dereferenc...
Simon Pilgrim [Thu, 12 Mar 2020 18:12:47 +0000 (18:12 +0000)]
CGOpenMPRuntime::emitDeclareTargetVarDefinition - fix static analyzer null dereference warning. NFCI.

All paths test for or dereference the VD pointer, so just assert that its not null.

4 years agoExecutionDomainFix - fix static analyzer out of range shift warnings.
Simon Pilgrim [Thu, 12 Mar 2020 17:55:04 +0000 (17:55 +0000)]
ExecutionDomainFix - fix static analyzer out of range shift warnings.

Repeat the assertion that we already have in hasDomain for addDomain and setSingleDomain.

4 years agoRevert "[SCCP] Use ValueLatticeElement instead of LatticeVal (NFCI)"
Florian Hahn [Thu, 12 Mar 2020 18:46:16 +0000 (18:46 +0000)]
Revert "[SCCP] Use ValueLatticeElement instead of LatticeVal (NFCI)"

This commit is likely causing clang-with-lto-ubuntu to fail
http://lab.llvm.org:8011/builders/clang-with-lto-ubuntu/builds/16052

Also causes PR45185.

This reverts commit f1ac5d2263f8419b865cc78ba1f5c8694970fb6b.

4 years ago[clang-tidy] Add module for llvm-libc and restrict-system-libc-header-check.
Paula Toth [Thu, 12 Mar 2020 18:38:05 +0000 (11:38 -0700)]
[clang-tidy] Add module for llvm-libc and restrict-system-libc-header-check.

Summary: This adds a new module to enforce standards specific to the llvm-libc project. This change also adds the first check which restricts user from including system libc headers accidentally which can lead to subtle bugs that would be a challenge to detect.

Reviewers: alexfh, hokein, aaron.ballman

Reviewed By: aaron.ballman

Subscribers: juliehockett, arphaman, jfb, abrachet, sivachandra, Eugene.Zelenko, njames93, mgorny, xazax.hun, MaskRay, cfe-commits

Tags: #clang-tools-extra, #libc-project, #clang

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

4 years ago[AMDGPU] Simplify nested SI_END_CF
Stanislav Mekhanoshin [Wed, 11 Mar 2020 20:17:32 +0000 (13:17 -0700)]
[AMDGPU] Simplify nested SI_END_CF

This is to replace the optimization from the SIOptimizeExecMaskingPreRA.
We have less opportunities in the control flow lowering because many
VGPR copies are still in place and will be removed later, but we know
for sure an instruction is SI_END_CF and not just an arbitrary S_OR_B64
with EXEC.

The subsequent change needs to convert s_and_saveexec into s_and and
address new TODO lines in tests, then code block guarded by the
-amdgpu-remove-redundant-endcf option in the pre-RA exec mask optimizer
will be removed.

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

4 years agoCache uwnind frame headers as they are found.
Sterling Augustine [Tue, 10 Mar 2020 19:03:24 +0000 (12:03 -0700)]
Cache uwnind frame headers as they are found.

Summary:
This improves unwind performance quite substantially, and follows
a somewhat similar approach used in libgcc_s as described in the
thread here:

https://gcc.gnu.org/ml/gcc/2005-02/msg00625.html

On certain extremely exception heavy internal tests, the time
drops from about 80 minutes to about five minutes.

Subscribers: libcxx-commits

Tags: #libc

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

4 years agoCFGDiff: Simplify and generalize over all graph types
David Blaikie [Wed, 11 Mar 2020 22:56:24 +0000 (15:56 -0700)]
CFGDiff: Simplify and generalize over all graph types

Use GraphTraits in the implementation of the GraphDiff's own GraphTraits
so GraphDiff can be used across all graph types that provide
GraphTraits.

Also use partial template specializations to make the traits a bit more
compact.

Reviewers: asbirlea

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

4 years ago[Sema][SVE] Don't allow static or thread-local variables to have sizeless type
Richard Sandiford [Fri, 21 Feb 2020 15:49:26 +0000 (15:49 +0000)]
[Sema][SVE] Don't allow static or thread-local variables to have sizeless type

clang accepts a TU containing just:

  __SVInt8_t x;

However, sizeless types are not allowed to have static or thread-local
storage duration and trying to code-generate the TU triggers an LLVM
fatal error:

  Globals cannot contain scalable vectors
  <vscale x 16 x i8>* @x
  fatal error: error in backend: Broken module found, compilation aborted!

This patch adds an associated clang diagnostic.

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

4 years ago[mlir] Add derived attribute op interface
Jacques Pienaar [Wed, 11 Mar 2020 23:14:54 +0000 (16:14 -0700)]
[mlir] Add derived attribute op interface

Interface provides uniform access to the the derived attribute query method.

4 years ago[lldb/Utility] Add YAML traits for ConstString and FileSpec.
Jonas Devlieghere [Thu, 12 Mar 2020 16:51:59 +0000 (09:51 -0700)]
[lldb/Utility] Add YAML traits for ConstString and FileSpec.

Add YAML traits for the ConstString and FileSpec classes so they can be
serialized as part of ProcessInfo. The latter needs to be serializable
for the reproducers.

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

4 years ago[Sema][SVE] Reject atomic sizeless types
Richard Sandiford [Mon, 2 Mar 2020 19:03:08 +0000 (19:03 +0000)]
[Sema][SVE] Reject atomic sizeless types

It would be difficult to guarantee atomicity for sizeless types,
so the SVE ACLE makes atomic sizeless types invalid.  As it happens,
we already rejected them before the patch, but for the wrong reason:

  error: _Atomic cannot be applied to type 'svint8_t' (aka '__SVInt8_t')
  which is not trivially copyable

The SVE types should be treated as trivially copyable; a later
patch fixes that.

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

4 years ago[Sema][SVE] Reject aligned/_Alignas for sizeless types
Richard Sandiford [Mon, 2 Mar 2020 17:37:58 +0000 (17:37 +0000)]
[Sema][SVE] Reject aligned/_Alignas for sizeless types

A previous patch rejected alignof for sizeless types.  This patch
extends that to cover the "aligned" attribute and _Alignas.  Since
sizeless types are not meant to be used for long-term data, cannot
be used in aggregates, and cannot have static storage duration,
there shouldn't be any need to fiddle with their alignment.

Like with alignof, this is a conservative position that can be
relaxed in future if it turns out to be too restrictive.

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

4 years ago[Sema][SVE] Reject sizeof and alignof for sizeless types
Richard Sandiford [Fri, 21 Feb 2020 15:30:52 +0000 (15:30 +0000)]
[Sema][SVE] Reject sizeof and alignof for sizeless types

clang current accepts:

  void foo1(__SVInt8_t *x, __SVInt8_t *y) { *x = *y; }
  void foo2(__SVInt8_t *x, __SVInt8_t *y) {
    memcpy(y, x, sizeof(__SVInt8_t));
  }

The first function is valid ACLE code and generates correct LLVM IR.
However, the second function is invalid ACLE code and generates a
zero-length memcpy.  The point of this patch is to reject the use
of sizeof in the second case instead.

There's no similar wrong-code bug for alignof.  However, the SVE ACLE
conservatively treats alignof in the same way as sizeof, just as the
C++ standard does for incomplete types.  The idea is that layout of
sizeless types is an implementation property and isn't defined at
the language level.

Implementation-wise, the patch adds a new CompleteTypeKind enum
that controls whether RequireCompleteType & friends accept sizeless
built-in types.  For now the default is to maintain the status quo
and accept sizeless types.  However, the end of the series will flip
the default and remove the Default enum value.

The patch also adds new ...CompleteSized... wrappers that callers can
use if they explicitly want to reject sizeless types.  The callers then
use diagnostics that have an extra 0/1 parameter to indicats whether
the type is sizeless or not.

The idea is to have three cases:

1. calls that explicitly reject sizeless types, with a tweaked diagnostic
   for the sizeless case

2. calls that explicitly allow sizeless types

3. normal/old-style calls that don't make an explicit choice either way

Once the default is flipped, the 3. calls will conservatively reject
sizeless types, using the same diagnostic as for other incomplete types.

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

4 years ago[CUDA] Warn about unsupported CUDA SDK version only if it's used.
Artem Belevich [Wed, 11 Mar 2020 21:53:03 +0000 (14:53 -0700)]
[CUDA] Warn about unsupported CUDA SDK version only if it's used.

This fixes an issue with clang issuing a warning about unknown CUDA SDK if it's
detected during non-CUDA compilation.

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

4 years ago[Sema][SVE] Add tests for valid and invalid type usage
Richard Sandiford [Fri, 21 Feb 2020 14:55:28 +0000 (14:55 +0000)]
[Sema][SVE] Add tests for valid and invalid type usage

This patch adds C and C++ tests for various uses of SVE types.
The tests cover valid uses that are already (correctly) accepted and
invalid uses that are already (correctly) rejected.  Later patches
will expand the tests as they fix other cases.[*]

Some of the tests for invalid uses aren't obviously related to
scalable vectors.  Part of the reason for having them is to make
sure that the quality of the error message doesn't regress once/if
the types are treated as incomplete types.

[*] These later patches all fix invalid uses that are being incorrectly
    accepted.  I don't know of any cases in which valid uses are being
    incorrectly rejected.  In other words, this series is all about
    diagnosing invalid code rather than enabling something new.

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

4 years agoReplace getAs/dyn_cast with castAs/cast to fix null dereference static analyzer warnings.
Simon Pilgrim [Thu, 12 Mar 2020 16:49:35 +0000 (16:49 +0000)]
Replace getAs/dyn_cast with castAs/cast to fix null dereference static analyzer warnings.

Both these casts are immediately deferenced and the cast will assert for us that they are of the correct type.

4 years ago[gn build] Port fa8080376e7
LLVM GN Syncbot [Thu, 12 Mar 2020 16:33:39 +0000 (16:33 +0000)]
[gn build] Port fa8080376e7

4 years ago[AST][SVE] Add new Type queries for sizeless types
Richard Sandiford [Thu, 20 Feb 2020 21:17:03 +0000 (21:17 +0000)]
[AST][SVE] Add new Type queries for sizeless types

One of the defining features of the SVE ACLE types is that they
are "sizeless"; see the SVE ACLE spec:

    https://developer.arm.com/docs/100987/0000/arm-c-language-extensions-for-sve

or the email message:

    http://lists.llvm.org/pipermail/cfe-dev/2019-June/062523.html

for a fuller definition of what that means.

This patch adds two associated type queries:

- isSizelessBuiltinType asks specifically about types that are built
  into clang.  It is effectively an enum range check.

- isSizelessType instead tests for any type that has the "sizeless" type
  property.  At the moment it only returns true for the built-in types,
  but it seems better not to hard-code that assumption throughout
  the codebase.  (E.g. we could in principle support some form of
  user-defined sizeless types in future.  Even if that seems unlikely
  and never actually happens, the possibility at least exists.)

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

4 years ago[TableGen] Move generated *Attr class methods out of line
Reid Kleckner [Thu, 12 Mar 2020 02:43:37 +0000 (19:43 -0700)]
[TableGen] Move generated *Attr class methods out of line

After this change, clang spends ~200ms parsing Attrs.inc instead of
~560ms. A large part of the cost was from the StringSwitch
instantiations, but this is a good way to avoid similar problems in the
future.

Reviewed By: aaron.ballman, rjmccall

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

4 years ago[gn build] Port 2c9cf9f4ddd
LLVM GN Syncbot [Thu, 12 Mar 2020 16:01:56 +0000 (16:01 +0000)]
[gn build] Port 2c9cf9f4ddd

4 years ago[clang-tidy] New check: bugprone-suspicious-include
Jonathan Roelofs [Tue, 10 Mar 2020 14:34:34 +0000 (08:34 -0600)]
[clang-tidy] New check: bugprone-suspicious-include

Detects and fixes suspicious code like: `#include "foo.cpp"`.

Inspired by: https://twitter.com/lefticus/status/1228458240364687360?s=20

https://reviews.llvm.org/D74669

4 years ago[PowerPC][AIX] Implement formal arguments passed in stack memory.
Zarko Todorovski [Thu, 12 Mar 2020 15:01:40 +0000 (11:01 -0400)]
[PowerPC][AIX] Implement formal arguments passed in stack memory.

This patch is the callee side counterpart for https://reviews.llvm.org/D73209.
It removes the fatal error when we pass more formal arguments than available
registers.

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

4 years agoObjCMethodDecl::findPropertyDecl - fix static analyzer null dereference warnings...
Simon Pilgrim [Thu, 12 Mar 2020 15:36:33 +0000 (15:36 +0000)]
ObjCMethodDecl::findPropertyDecl  - fix static analyzer null dereference warnings. NFCI.

All paths dereference the ClassDecl pointer, so use a cast<> instead of dyn_cast<>, assert that its not null and remove the remaining null tests.

4 years ago[Attributor][FIX] Add a missing dependence track in noalias deduction
Hideto Ueno [Thu, 12 Mar 2020 15:25:24 +0000 (15:25 +0000)]
[Attributor][FIX] Add a missing dependence track in noalias deduction

4 years ago[RAGreedy] Fix minor typo in comment. NFC
Marcello Maggioni [Thu, 12 Mar 2020 15:15:04 +0000 (08:15 -0700)]
[RAGreedy] Fix minor typo in comment. NFC

4 years ago[lldb] Let OptionValueRegex::Clear set to value to the default and not an empty regex
Raphael Isemann [Thu, 12 Mar 2020 15:06:51 +0000 (16:06 +0100)]
[lldb] Let OptionValueRegex::Clear set to value to the default and not an empty regex

Since D75537 the test suite clears all settings before a test. This caused
two tests to fail:
    lldb-api :: functionalities/inline-stepping/TestInlineStepping.py
    lldb-api :: lang/cpp/std-function-step-into-callable/TestStdFunctionStepIntoCallable.py
The reason for that is that OptionValueRegex::Clear was setting the regex
to empty instead of the default value that was passed initially. This caused
that the target.process.thread.step-avoid-regexp setting which is used in the
tests was set to "" instead of "^std::".

This patch is just a quick fix that sets the regex back to the original value
to make the tests pass.

In total these 3 setting values have changed with D75537 and also need to be
fixed (even though they don't seem to break any tests).
  target.process.thread.step-avoid-regexp (regex) -> from '^std::' to empty string
  platform.module-cache-directory (file) -> from "~/.lldb/module_cache" to empty string
  script-lang (enum) -> from 'default' to 'python'

4 years ago[ELF] Move --print-map(-M)/--cref before checkSections() and openFile()
Fangrui Song [Tue, 10 Mar 2020 22:41:57 +0000 (15:41 -0700)]
[ELF] Move --print-map(-M)/--cref before checkSections() and openFile()

-M output can be useful when diagnosing an "error: output file too large" problem (emitted in openFile()).

I just ran into such a situation where I had to debug an erronerous
Linux kernel linker script. It tried to create a file larger than
INT64_MAX bytes.

This patch could have helped https://bugs.llvm.org/show_bug.cgi?id=44715 as well.

Reviewed By: grimar

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

4 years agoReplace getAs with castAs to fix null dereference static analyzer warnings.
Simon Pilgrim [Thu, 12 Mar 2020 14:56:32 +0000 (14:56 +0000)]
Replace getAs with castAs to fix null dereference static analyzer warnings.

Use castAs as we know the cast should succeed (and castAs will assert if it doesn't) and we're dereferencing it directly in the getThisType/getThisObjectType calls.

4 years agoFix static analyzer null dereference warning. NFCI.
Simon Pilgrim [Thu, 12 Mar 2020 14:32:33 +0000 (14:32 +0000)]
Fix static analyzer null dereference warning. NFCI.

4 years agoReplace getAs with castAs to fix null dereference static analyzer warnings.
Simon Pilgrim [Thu, 12 Mar 2020 14:28:16 +0000 (14:28 +0000)]
Replace getAs with castAs to fix null dereference static analyzer warnings.

Use castAs as we know the cast should succeed (and castAs will assert if it doesn't) and we're dereferencing it directly in the canAssignObjCInterfaces call.

4 years ago[PowerPC32] Fix the `setcc` inconsistent result type problem
Xiangling Liao [Wed, 11 Mar 2020 20:16:27 +0000 (16:16 -0400)]
[PowerPC32] Fix the `setcc` inconsistent result type problem

Summary:
On 32-bit PPC target[AIX and BE], when we convert an `i64` to `f32`, a `setcc` operand expansion is needed. The expansion will set the result type of expanded `setcc` operation based on if the subtarget use CRBits or not. If the subtarget does use the CRBits, like AIX and BE, then it will set the result type to `i1`, leading to an inconsistency with original `setcc` result type[i32].
And the reason why it crashed underneath is because we don't set result type of setcc consistent in those two places.

This patch fixes this problem by setting original setcc opnode result type also with `getSetCCResultType`  interface.

Reviewers: sfertile, cebowleratibm, hubert.reinterpretcast, Xiangling_L

Reviewed By: sfertile

Subscribers: wuzish, nemanjai, hiraditya, kbarton, jsji, shchenz, llvm-commits

Tags: #llvm

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

4 years ago[VE][nfc] Use RRIm for RRINDm, remove the latter
Simon Moll [Thu, 12 Mar 2020 14:37:39 +0000 (15:37 +0100)]
[VE][nfc] Use RRIm for RRINDm, remove the latter

Summary:
De-duplicate isel instruction classes by using RRIm for RRINDm. The latter
becomes obsolete.

Reviewed By: arsenm

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

4 years ago[PowerPC][AIX] Fix printing of program counter for AIX assembly.
Sean Fertile [Thu, 12 Mar 2020 14:21:42 +0000 (10:21 -0400)]
[PowerPC][AIX] Fix printing of program counter for AIX assembly.

Program counter on AIX is the dollar-sign.

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

4 years ago[lldb][NFC] Fix unsigned/signed comparison warning in SymbolFileDWARFTest.cpp
Raphael Isemann [Thu, 12 Mar 2020 14:30:10 +0000 (15:30 +0100)]
[lldb][NFC] Fix unsigned/signed comparison warning in SymbolFileDWARFTest.cpp

offset_t is unsigned, so if the RHS is signed we get a warning from clang:
    warning: comparison of integers of different signs: 'const unsigned long long' and 'const int'

4 years ago[mlir][CRunnerUtils] Enable compilation with C++11 toolchain on microcontroller platf...
Nicolas Vasilache [Thu, 12 Mar 2020 14:07:16 +0000 (10:07 -0400)]
[mlir][CRunnerUtils] Enable compilation with C++11 toolchain on microcontroller platforms.

Summary:
The C runner utils API was still not vanilla enough for certain use
cases on embedded ARM SDKs, this enables such cases.

Adding people more widely for historical Windows related build issues.

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

4 years ago[AArch64][SVE] Add intrinsics for non-temporal scatters/gathers
Andrzej Warzynski [Wed, 4 Mar 2020 11:21:20 +0000 (11:21 +0000)]
[AArch64][SVE] Add intrinsics for non-temporal scatters/gathers

Summary:
This patch adds the following intrinsics for non-temporal gather loads
and scatter stores:
  * aarch64_sve_ldnt1_gather_index
  * aarch64_sve_stnt1_scatter_index
These intrinsics implement the "scalar + vector of indices" addressing
mode.

As opposed to regular and first-faulting gathers/scatters, there's no
instruction that would take indices and then scale them. Instead, the
indices for non-temporal gathers/scatters are scaled before the
intrinsics are lowered to `ldnt1` instructions.

The new ISD nodes, GLDNT1_INDEX and SSTNT1_INDEX, are only used as
placeholders so that we can easily identify the cases implemented in
this patch in performGatherLoadCombine and performScatterStoreCombined.
Once encountered, they are replaced with:
  * GLDNT1_INDEX -> SPLAT_VECTOR + SHL + GLDNT1
  * SSTNT1_INDEX -> SPLAT_VECTOR + SHL + SSTNT1

The patterns for lowering ISD::SHL for scalable vectors (required by
this patch) were missing, so these are added too.

Reviewed By: sdesmalen

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

4 years ago[InstSimplify] simplify FP ops harder with FMF (part 2)
Sanjay Patel [Thu, 12 Mar 2020 13:52:06 +0000 (09:52 -0400)]
[InstSimplify] simplify FP ops harder with FMF (part 2)

This is part of the IR sibling for:
D75576

Related transform committed with:
rG8ec71585719d

4 years ago[libcxxabi] Set LIBCXXABI_LINK_TESTS_WITH_SHARED_LIBCXX to ON if LIBCXX_ENABLE_SHARED...
Sergej Jaskiewicz [Thu, 30 Jan 2020 10:05:14 +0000 (13:05 +0300)]
[libcxxabi] Set LIBCXXABI_LINK_TESTS_WITH_SHARED_LIBCXX to ON if LIBCXX_ENABLE_SHARED is not defined

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

4 years ago[OpenCL] Add missing get_image_array_size builtins
Sven van Haastregt [Thu, 12 Mar 2020 13:43:51 +0000 (13:43 +0000)]
[OpenCL] Add missing get_image_array_size builtins

4 years ago[lldb] Clear all settings during a test's setUp
Tatyana Krasnukha [Wed, 11 Mar 2020 16:51:40 +0000 (19:51 +0300)]
[lldb] Clear all settings during a test's setUp

Global properties are shared between debugger instances and
if a test doesn't clear changes in settings it made,
this leads to side effects in other tests.

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

4 years ago[InstSimplify] simplify FP ops harder with FMF
Sanjay Patel [Thu, 12 Mar 2020 13:10:26 +0000 (09:10 -0400)]
[InstSimplify] simplify FP ops harder with FMF

This is part of the IR sibling for:
D75576

(I'm splitting part of the transform as a separate commit
to reduce risk. I don't know of any bugs that might be
exposed by this improved folding, but it's hard to see
those in advance...)

4 years ago[X86] Add FeatureFast7ByteNOP flag
Simon Pilgrim [Thu, 12 Mar 2020 13:06:12 +0000 (13:06 +0000)]
[X86] Add FeatureFast7ByteNOP flag

Lets us remove another SLM proc family flag usage.

This is NFC, but we should probably check whether atom/glm/knl? should be using this flag as well...

4 years ago[clangd] Add README pointing to docs, bugtracker etc. NFC
Sam McCall [Thu, 12 Mar 2020 12:59:40 +0000 (13:59 +0100)]
[clangd] Add README pointing to docs, bugtracker etc. NFC

4 years ago[AMDGPU] Add some funnel shift intrinsic test coverage
Simon Pilgrim [Thu, 12 Mar 2020 12:53:31 +0000 (12:53 +0000)]
[AMDGPU] Add some funnel shift intrinsic test coverage

4 years ago[InstSimplify] reduce code for FP undef/nan folding; NFC
Sanjay Patel [Thu, 12 Mar 2020 12:45:38 +0000 (08:45 -0400)]
[InstSimplify] reduce code for FP undef/nan folding; NFC

4 years agoUse `grep -F` instead of deprecated fgrep.
Nico Weber [Thu, 12 Mar 2020 12:33:54 +0000 (08:33 -0400)]
Use `grep -F` instead of deprecated fgrep.

(In addition to the deprecation bit, this is useful on Windows
where people might have grep but not fgrep.)

4 years ago[InstSimplify] add tests for FP poison; NFC
Sanjay Patel [Thu, 12 Mar 2020 12:08:36 +0000 (08:08 -0400)]
[InstSimplify] add tests for FP poison; NFC

Adapted from codegen tests seen in D75576.

4 years ago[lldb] reject `.debug_arange` sections with nonzero segment size
Luke Drummond [Tue, 10 Mar 2020 15:05:53 +0000 (15:05 +0000)]
[lldb] reject `.debug_arange` sections with nonzero segment size

If a producer emits a nonzero segment size, `lldb` will silently read
incorrect values and crash, or do something worse later as the tuple
size is expected to be 2, rather than 3.

Neither LLVM, nor GCC produce segmented aranges, but this dangerous case
should still be checked and handled.

Reviewed by: clayborg, labath
Differential Revision: https://reviews.llvm.org/D75925
Subscribers: lldb-commits
Tags: #lldb

4 years ago[SCCP] Use ValueLatticeElement instead of LatticeVal (NFCI)
Florian Hahn [Thu, 12 Mar 2020 11:26:07 +0000 (11:26 +0000)]
[SCCP] Use ValueLatticeElement instead of LatticeVal (NFCI)

This patch switches SCCP to use ValueLatticeElement for lattice values,
instead of the local LatticeVal, as first step to enable integer range support.

This patch does not make use of constant ranges for additional operations
and the only difference for now is that integer constants are represented by
single element ranges. To preserve the existing behavior, the following helpers
are used

* isConstant(LV): returns true when LV is either a constant or a constant range with a single element. This should return true in the same cases where LV.isConstant() returned true previously.
* getConstant(LV): returns a constant if LV is either a constant or a constant range with a single element. This should return a constant in the same cases as LV.getConstant() previously.
* getConstantInt(LV): same as getConstant, but additionally casted to ConstantInt.

Reviewers: davide, efriedma, mssimpso

Reviewed By: efriedma

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

4 years ago[gn build] Port d5edcb90643
LLVM GN Syncbot [Thu, 12 Mar 2020 11:58:14 +0000 (11:58 +0000)]
[gn build] Port d5edcb90643

4 years ago[AVR] Fix reads of uninitialized variables from constructor of AVRSubtarget
Dylan McKay [Thu, 12 Mar 2020 11:51:30 +0000 (00:51 +1300)]
[AVR] Fix reads of uninitialized variables from constructor of AVRSubtarget

The initialization order was not correct. These bugs were discovered by
valgrind. They appear to work fine in practice but this patch should
unblock switching the AVR backend on by default as now a standard AVR
llc invocation runs without memory errors.

The AVRISelLowering constructor would run before the subtarget boolean
fields were initialized to false. Now, the initialization order is
correct.

4 years ago[clang] Prune 'IsOMPStructuredBlock' Stmt bit
Roman Lebedev [Thu, 12 Mar 2020 09:18:01 +0000 (12:18 +0300)]
[clang] Prune 'IsOMPStructuredBlock' Stmt bit

As discussed in https://reviews.llvm.org/D59214#1916596
and in some other reviews dealing with FPenv,
bits in Stmt are scarce, and i got so burnout with D59214
and https://bugs.llvm.org/show_bug.cgi?id=40563 specifically
that i never actually followed up with the usages for this bit.

So let's unhoard it, at least for now?

4 years ago[X86] combineOrShiftToFunnelShift - remove shift by immediate handling.
Simon Pilgrim [Thu, 12 Mar 2020 11:46:28 +0000 (11:46 +0000)]
[X86] combineOrShiftToFunnelShift - remove shift by immediate handling.

Now that D75114 has landed, DAGCombiner handles this case so the code is redundant.

4 years ago[ARM,MVE] Add intrinsics and isel for MVE fused multiply-add.
Simon Tatham [Thu, 12 Mar 2020 09:57:48 +0000 (09:57 +0000)]
[ARM,MVE] Add intrinsics and isel for MVE fused multiply-add.

Summary:
This adds the ACLE intrinsic family for the VFMA and VFMS
instructions, which perform fused multiply-add on vectors of floats.

I've represented the unpredicated versions in IR using the cross-
platform `@llvm.fma` IR intrinsic. We already had isel rules to
convert one of those into a vector VFMA in the simplest possible way;
but we didn't have rules to detect a negated argument and turn it into
VFMS, or rules to detect a splat argument and turn it into one of the
two vector/scalar forms of the instruction. Now we have all of those.

The predicated form uses a target-specific intrinsic as usual, but
I've stuck to just one, for a predicated FMA. The subtraction and
splat versions are code-generated by passing an fneg or a splat as one
of its operands, the same way as the unpredicated version.

In arm_mve_defs.h, I've had to introduce a tiny extra piece of
infrastructure: a record `id` for use in codegen dags which implements
the identity function. (Just because you can't declare a Tablegen
value of type dag which is //only// a `$varname`: you have to wrap it
in something. Now I can write `(id $varname)` to get the same effect.)

Reviewers: dmgreen, MarkMurrayARM, miyuki, ostannard

Reviewed By: dmgreen

Subscribers: kristof.beyls, hiraditya, danielkiss, cfe-commits, llvm-commits

Tags: #clang, #llvm

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

4 years ago[ARM,MVE] Fix user-namespace violation in arm_mve.h.
Simon Tatham [Thu, 12 Mar 2020 09:57:40 +0000 (09:57 +0000)]
[ARM,MVE] Fix user-namespace violation in arm_mve.h.

Summary:
We were generating the declarations of polymorphic intrinsics using
`__attribute__((overloadable))`. But `overloadable` is a valid
identifier for an end user to define as a macro in a C program, and if
they do that before including `<arm_mve.h>`, then we shouldn't cause a
compile error.

Fixed to spell the attribute name `__overloadable__` instead.

Reviewers: miyuki, MarkMurrayARM, ostannard

Reviewed By: miyuki

Subscribers: kristof.beyls, dmgreen, danielkiss, cfe-commits

Tags: #clang

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

4 years ago[AVR] Fix read of uninitialized variable AVRSubtarget:::ELFArch
Dylan McKay [Thu, 12 Mar 2020 11:03:30 +0000 (00:03 +1300)]
[AVR] Fix read of uninitialized variable AVRSubtarget:::ELFArch

Found by the LLVM MemorySanitizer tests when switching AVR to a default
backend.

ELFArch must be initialized before the call to
initializeSubtargetDependencies().

The uninitialized read would occur deep within TableGen'd code.

4 years ago[clangd] Redirect documentation to clangd.llvm.org.
Sam McCall [Thu, 12 Mar 2020 09:55:31 +0000 (10:55 +0100)]
[clangd] Redirect documentation to clangd.llvm.org.

Reviewers: hokein

Subscribers: ilya-biryukov, MaskRay, jkorous, arphaman, kadircet, usaxena95, cfe-commits

Tags: #clang

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

4 years ago[LoopPeel] Turn incorrect assert into a check
Max Kazantsev [Thu, 12 Mar 2020 10:13:07 +0000 (17:13 +0700)]
[LoopPeel] Turn incorrect assert into a check

Summary:
This patch replaces incorrectt assert with a check. Previously it asserts that
if SCEV cannot prove `isKnownPredicate(A != B)`, then it should be able to prove
`isKnownPredicate(A == B)`.

Both these fact may be not provable. It is shown in the provided test:

Could not prove: `{-294,+,-2}<%bb1> !=  0`
Asserting: `{-294,+,-2}<%bb1> == 0`

Obviously, this SCEV is not equal to zero, but 0 is in its range so we cannot
also prove that it is not zero.

Instead of assert, we should be checking the required conditions explicitly.

Reviewers: lebedev.ri, fhahn, sanjoy, fedor.sergeev
Reviewed By: lebedev.ri
Subscribers: hiraditya, zzheng, javed.absar, llvm-commits

Tags: #llvm

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

4 years ago[AST] Respect shouldTraversePostOrder when traversing type locs
Marcel Hlopko [Thu, 12 Mar 2020 09:53:54 +0000 (10:53 +0100)]
[AST] Respect shouldTraversePostOrder when traversing type locs

Summary: Copy of https://reviews.llvm.org/D72072, submitting with ilya-biryukov's permission.

Reviewers: gribozavr2

Reviewed By: gribozavr2

Subscribers: cfe-commits

Tags: #clang

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

4 years ago[libc++] [P0646] Add feature-test macro for __cpp_lib_list_remove_return_type.
Marek Kurdej [Thu, 14 Nov 2019 22:20:24 +0000 (23:20 +0100)]
[libc++] [P0646] Add feature-test macro for __cpp_lib_list_remove_return_type.

Summary: The return type modification has already been implemented in rL364840 and rL365290.

Reviewers: ldionne, mclow.lists, EricWF, #libc!

Reviewed By: ldionne

Subscribers: christof, dexonsmith, libcxx-commits

Tags: #libc

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

4 years agoBasis of dropping uses in llvm.assume.
Tyker [Wed, 11 Mar 2020 23:39:05 +0000 (00:39 +0100)]
Basis of dropping uses in llvm.assume.

Summary: This patch adds the basic utilities to deal with dropable uses. dropable uses are uses that we rather drop than prevent transformations, for now they are limited to uses in llvm.assume.

Reviewers: jdoerfert, sstefan1

Reviewed By: jdoerfert

Subscribers: uenoku, lebedev.ri, mgorny, hiraditya, dexonsmith, llvm-commits

Tags: #llvm

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

4 years ago[NFC] Add filters to hasNItems and hasNItemsOrMore
Tyker [Wed, 11 Mar 2020 23:35:27 +0000 (00:35 +0100)]
[NFC] Add filters to hasNItems and hasNItemsOrMore

Reviewers: lebedev.ri, jdoerfert

Reviewed By: jdoerfert

Subscribers: jdoerfert, dexonsmith, llvm-commits

Tags: #llvm

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

4 years ago[PowerPC] Add strict-fp intrinsic to FP arithmetic
Qiu Chaofan [Thu, 12 Mar 2020 09:02:54 +0000 (17:02 +0800)]
[PowerPC] Add strict-fp intrinsic to FP arithmetic

This patch adds basic strict-fp intrinsics support to PowerPC backend,
including basic arithmetic operations (add/sub/mul/div).

Reviewed By: steven.zhang, andrew.w.kaylor

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

4 years ago[SCEV] isHighCostExpansionHelper(): use correct TTI hooks
Roman Lebedev [Thu, 12 Mar 2020 08:33:38 +0000 (11:33 +0300)]
[SCEV] isHighCostExpansionHelper(): use correct TTI hooks

Summary:
Cost modelling strikes again.
In PR44668 <https://bugs.llvm.org/show_bug.cgi?id=44668> patch series,
i've made the same mistake of always using generic `getOperationCost()`
that i missed in reviewing D73480/D74495 which was later fixed
in 62dd44d76da9aa596fb199bda8b1e8768bb41033.

We should be using more specific hooks instead - `getCastInstrCost()`,
`getArithmeticInstrCost()`, `getCmpSelInstrCost()`.

Evidently, this does not have an effect on the existing testcases,
with unchanged default cost budget. But if it *does* have an effect
on some target, we'll have to segregate tests that use this function
per-target, much like we already do with other TTI-aware transform tests.

There's also an issue that @samparker has brought up in post-commit-review:
>>! In D73501#1905171, @samparker wrote:
> Hi,
> Did you get performance numbers for these patches? We track the performance
> of our (Arm) open source DSP library and the cost model fixes were generally
> a notable improvement, so many thanks for that! But the final patch
> for rewriting exit values has generally been bad, especially considering
> the gains from the modelling improvements. I need to look into it further,
> but on my current test case I'm seeing +30% increase in stack accesses
> with a similar decrease in performance.
> I'm just wondering if you observed any negative effects yourself?

I don't know if this addresses that, or we need D66450 for that.

Reviewers: samparker, spatel, mkazantsev, reames, wmi

Reviewed By: reames

Subscribers: kristof.beyls, hiraditya, danielkiss, llvm-commits, samparker

Tags: #llvm

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

4 years ago[GlobalISel] fix crash in narrowScalarExtract if DstRegs only has one register
Dominik Montada [Thu, 12 Mar 2020 08:03:08 +0000 (09:03 +0100)]
[GlobalISel] fix crash in narrowScalarExtract if DstRegs only has one register

Summary: When narrowing a scalar G_EXTRACT where the destination lines up perfectly with a single result of the emitted G_UNMERGE_VALUES a COPY should be emitted instead of unconditionally trying to emit a G_MERGE_VALUES.

Reviewers: arsenm, dsanders

Reviewed By: arsenm

Subscribers: wdng, rovka, hiraditya, volkan, llvm-commits

Tags: #llvm

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