platform/upstream/llvm.git
3 years ago[InstCombine] add tests for abs(sext X); NFC
Sanjay Patel [Fri, 22 Jan 2021 15:02:51 +0000 (10:02 -0500)]
[InstCombine] add tests for abs(sext X); NFC

https://llvm.org/PR48816

3 years ago[mlir][spirv] Define spv.IsNan/spv.IsInf and add lowerings
Lei Zhang [Fri, 22 Jan 2021 18:08:00 +0000 (13:08 -0500)]
[mlir][spirv] Define spv.IsNan/spv.IsInf and add lowerings

spv.Ordered/spv.Unordered are meant for OpenCL Kernel capability.
For Vulkan Shader capability, we should use spv.IsNan to check
whether a number is NaN.

Add a new pattern for converting `std.cmpf ord|uno` to spv.IsNan
and bumped the pattern converting to spv.Ordered/spv.Unordered
to a higher benefit. The SPIR-V target environment will properly
select between these two patterns.

Reviewed By: mravishankar

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

3 years ago[flang] Remove some needless operations in expr rewriting
peter klausler [Thu, 21 Jan 2021 22:38:42 +0000 (14:38 -0800)]
[flang] Remove some needless operations in expr rewriting

Expressions emitted to module files and error messages
sometimes contain conversions of integer results of inquiry
intrinsics; these are usually not needed, and can conflict
with "int" in the user's namespace.  Improve folding so that
these conversions don't appear, and do some other clean-up
in adjacent code.

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

3 years ago[mlir][spirv] Fix script for availability autogen and refresh ops
Lei Zhang [Fri, 22 Jan 2021 18:03:59 +0000 (13:03 -0500)]
[mlir][spirv] Fix script for availability autogen and refresh ops

Previously we only autogen the availability for ops that are
direct instantiating `SPV_Op` and expected other subclasses of
`SPV_Op` to define aggregated availability for all ops. This is
quite error prone and we can miss capabilities for certain ops.
Also it's arguable to have multiple levels of subclasses and try
to deduplicate too much: having the availability directly in the
op can be quite explicit and clear. A few extra lines of
declarative code is fine.

Reviewed By: mravishankar

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

3 years ago[LLDB] Fix how ObjCBOOLSummaryProvider deals with BOOL
Shafik Yaghmour [Fri, 22 Jan 2021 18:04:04 +0000 (10:04 -0800)]
[LLDB] Fix how ObjCBOOLSummaryProvider deals with BOOL

ObjCBOOLSummaryProvider was incorrectly treating BOOL as unsigned and this is now fixed.
Also adding tests for one bit bit-fields of BOOL and unsigned char.

3 years ago[mlir] Add coro intrinsics operations to LLVM dialect
Eugene Zhulenev [Fri, 22 Jan 2021 17:11:26 +0000 (09:11 -0800)]
[mlir] Add coro intrinsics operations to LLVM dialect

This PR only has coro intrinsics needed for the Async to LLVM lowering. Will add other intrinsics as needed in the followup PRs.

Reviewed By: mehdi_amini

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

3 years ago[llvm-mca] Adding local lit config file for X86 targets
Wolfgang Pieb [Fri, 22 Jan 2021 17:51:59 +0000 (09:51 -0800)]
[llvm-mca] Adding local lit config file for X86 targets

3 years ago[libc++] Fix broken build when merging libc++abi into libc++ on Apple
Louis Dionne [Fri, 22 Jan 2021 17:39:17 +0000 (12:39 -0500)]
[libc++] Fix broken build when merging libc++abi into libc++ on Apple

3 years ago[OpenMP] libomp: properly initialize buckets in __kmp_dephash_extend
Joseph Schuchart [Fri, 22 Jan 2021 17:29:31 +0000 (20:29 +0300)]
[OpenMP] libomp: properly initialize buckets in __kmp_dephash_extend

The buckets are initialized in __kmp_dephash_create but when they are extended
the memory is allocated but not NULL'd, potentially leaving some buckets
uninitialized after all entries have been copied into the new allocation.
This commit makes sure the buckets are properly initialized with NULL before
copying the entries.

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

3 years ago[ELF] --wrap: retain __wrap_foo if foo is defined in an object/bitcode file
Fangrui Song [Fri, 22 Jan 2021 17:20:29 +0000 (09:20 -0800)]
[ELF] --wrap: retain __wrap_foo if foo is defined in an object/bitcode file

If foo is referenced in any object file, bitcode file or shared object,
`__wrap_foo` should be retained as the redirection target of sym
(f96ff3c0f8ebd941b3f6b345164c3d858b781484).

If the object file defining foo has foo references, we cannot easily distinguish
the case from cases where foo is not referenced (we haven't scanned
relocations). Retain `__wrap_foo` because we choose to wrap sym references
regardless of whether sym is defined to keep non-LTO/LTO/relocatable links' behaviors similar
https://sourceware.org/bugzilla/show_bug.cgi?id=26358 .

If foo is defined in a shared object, `__wrap_foo` can still be omitted
(`wrap-dynamic-undef.s`).

Reviewed By: andrewng

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

3 years ago[mlir][StandardOps] Fix typos in the td file.
Hanhan Wang [Fri, 22 Jan 2021 17:02:44 +0000 (09:02 -0800)]
[mlir][StandardOps] Fix typos in the td file.

- Fix arguments name for subview and subtensor.
- Fix a typo in a comment of subtensor's method.

Reviewed By: nicolasvasilache

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

3 years ago[MLIR] Add support for extracting an integer sample point (if one exists) from an...
Arjun P [Fri, 22 Jan 2021 15:34:05 +0000 (21:04 +0530)]
[MLIR] Add support for extracting an integer sample point (if one exists) from an unbounded FlatAffineConstraints.

With this, we have complete support for finding integer sample points in FlatAffineConstraints.

Reviewed By: ftynse

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

3 years ago[HIP] Support __managed__ attribute
Yaxun (Sam) Liu [Thu, 15 Oct 2020 12:38:46 +0000 (08:38 -0400)]
[HIP] Support __managed__ attribute

This patch implements codegen for __managed__ variable attribute for HIP.

Diagnostics will be added later.

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

3 years ago[SystemZ][z/OS] Fix No such file or directory expression error
Abhina Sreeskantharajan [Fri, 22 Jan 2021 16:41:36 +0000 (11:41 -0500)]
[SystemZ][z/OS] Fix No such file or directory expression error

On z/OS, the following error message is not matched correctly in lit tests. This patch updates the CHECK expression to match the end period successfully.
```
EDC5129I No such file or directory.
```

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

3 years ago[X86][AVX] canonicalizeLaneShuffleWithRepeatedOps - handle vperm2x128(movddup(x)...
Simon Pilgrim [Fri, 22 Jan 2021 16:05:19 +0000 (16:05 +0000)]
[X86][AVX] canonicalizeLaneShuffleWithRepeatedOps - handle vperm2x128(movddup(x),movddup(y)) cases

Fold vperm2x128(movddup(x),movddup(y)) -> movddup(vperm2x128(x,y))

3 years ago[X86][AVX] canonicalizeLaneShuffleWithRepeatedOps - handle unary vperm2x128(permute...
Simon Pilgrim [Fri, 22 Jan 2021 15:47:06 +0000 (15:47 +0000)]
[X86][AVX] canonicalizeLaneShuffleWithRepeatedOps - handle unary vperm2x128(permute/shift(x,c),undef) cases

Fold vperm2x128(permute/shift(x,c),undef) -> permute/shift(vperm2x128(x,undef),c)

3 years ago[X86][AVX] combineTargetShuffle - simplify the X86ISD::VPERM2X128 subvector matching
Simon Pilgrim [Fri, 22 Jan 2021 15:20:11 +0000 (15:20 +0000)]
[X86][AVX] combineTargetShuffle - simplify the X86ISD::VPERM2X128 subvector matching

Simplify vperm2x128(concat(X,Y),concat(Z,W)) folding.

Use collectConcatOps / ISD::INSERT_SUBVECTOR to find the source subvectors instead of hardcoded immediate matching.

3 years ago[flang] Fix typo in error message
Peter Steinfeld [Fri, 22 Jan 2021 15:09:23 +0000 (07:09 -0800)]
[flang] Fix typo in error message

The title says it all.

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

3 years ago[LoopUnswitch] Fix logic to avoid unswitching with atomic loads.
Florian Hahn [Fri, 22 Jan 2021 15:03:17 +0000 (15:03 +0000)]
[LoopUnswitch] Fix logic to avoid unswitching with atomic loads.

The existing code did not deal with atomic loads correctly. Such loads
are represented as MemoryDefs. Bail out on any MemoryAccess that is not
a MemoryUse.

3 years ago[LoopUnswitch] Add test cases with atomic loads & call
Florian Hahn [Fri, 22 Jan 2021 15:00:31 +0000 (15:00 +0000)]
[LoopUnswitch] Add test cases with atomic loads & call

3 years ago[coro.async] Make sure we process async coroutines
Arnold Schwaighofer [Thu, 21 Jan 2021 16:41:37 +0000 (08:41 -0800)]
[coro.async] Make sure we process async coroutines

Because we were not looking for the llvm.coro.id.async intrinsic in the
early coro pass which triggers follow-up passes we relied on the
llvm.coro.end intrinsic being present. This might not be the case in
functions that end in unreachable code.

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

3 years ago[libomptarget][devicertl] Drop templated atomic functions
Jon Chesterfield [Fri, 22 Jan 2021 14:48:22 +0000 (14:48 +0000)]
[libomptarget][devicertl] Drop templated atomic functions

[libomptarget][devicertl] Drop templated atomic functions

The five __kmpc_atomic templates are instantiated a total of seven times.
This change replaces the template with explictly typed functions, which
have the same prototype for amdgcn and nvptx, and implements them with
the same code presently in use.

Rolls in the accepted but not yet landed D95085.

The unsigned long long type can be replaced with uint64_t when replacing
the cuda function. Until then, clang warns on casting a pointer to one to
a pointer to the other.

Reviewed By: tianshilei1992

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

3 years agoRevert "[NFCI-ish][SimplifyCFG] FoldBranchToCommonDest(): really don't deal with...
Roman Lebedev [Fri, 22 Jan 2021 14:37:11 +0000 (17:37 +0300)]
Revert "[NFCI-ish][SimplifyCFG] FoldBranchToCommonDest(): really don't deal with uncond branches"

Does not build in XCode:
http://green.lab.llvm.org/green/job/clang-stage1-RA/17963/consoleFull#-1704658317a1ca8a51-895e-46c6-af87-ce24fa4cd561

This reverts commit aabed3718ae25476c0f6b7e70c83ba4658f00e5c.

3 years ago[InstCombine] Fold `(~x) | y` --> `~(x & (~y))` iff it is free to do so
Roman Lebedev [Fri, 22 Jan 2021 09:58:45 +0000 (12:58 +0300)]
[InstCombine] Fold `(~x) | y` --> `~(x & (~y))` iff it is free to do so

Iff we know we can get rid of the inversions in the new pattern,
we can thus get rid of the inversion in the old pattern,
this decreasing instruction count.

Note that we could position this transformation as just hoisting
of the `not` (still, iff y is freely negatible), but the test changes
show a number of regressions, so let's not do that.

3 years ago[InstCombine] Fold `(~x) & y` --> `~(x | (~y))` iff it is free to do so
Roman Lebedev [Fri, 22 Jan 2021 09:57:52 +0000 (12:57 +0300)]
[InstCombine] Fold `(~x) & y` --> `~(x | (~y))` iff it is free to do so

Iff we know we can get rid of the inversions in the new pattern,
we can thus get rid of the inversion in the old pattern,
this decreasing instruction count.

3 years ago[NFC][InstCombine] Add tests for `(~x) &/| y` --> `~(x |/& (~y))` fold
Roman Lebedev [Fri, 22 Jan 2021 09:54:16 +0000 (12:54 +0300)]
[NFC][InstCombine] Add tests for `(~x) &/| y` --> `~(x |/& (~y))` fold

Iff y is free to invert, and the users of the expression can be updated,
we can undo De-Morgan fold, and immediately get rid of the `not` op.

3 years ago[NFC][InstCombine] Extract freelyInvertAllUsersOf() out of canonicalizeICmpPredicate()
Roman Lebedev [Fri, 22 Jan 2021 09:51:40 +0000 (12:51 +0300)]
[NFC][InstCombine] Extract freelyInvertAllUsersOf() out of canonicalizeICmpPredicate()

I'd like to use it in an upcoming fold.

3 years ago[NFC][SimplifyCFG] FoldBranchToCommonDest(): extract the actual transform into helper...
Roman Lebedev [Thu, 21 Jan 2021 18:32:20 +0000 (21:32 +0300)]
[NFC][SimplifyCFG] FoldBranchToCommonDest(): extract the actual transform into helper function

I'm intentionally structuring it this way, so that the actual fold only
does the fold, and no legality/correctness checks, all of which must be
done by the caller. This allows for the fold code to be more compact
and more easily grokable.

3 years ago[NFC][SimplifyCFG] FoldBranchToCommonDest(): extract check for destination sharing...
Roman Lebedev [Thu, 21 Jan 2021 18:24:06 +0000 (21:24 +0300)]
[NFC][SimplifyCFG] FoldBranchToCommonDest(): extract check for destination sharing into a helper function

As a follow-up, i'll extract the actual transform into a function,
and this helper will be called from both places,
so this avoids code duplication.

3 years ago[NFC][SimplifyCFG] FoldBranchToCommonDest(): somewhat better structure weight updatin...
Roman Lebedev [Thu, 21 Jan 2021 17:49:26 +0000 (20:49 +0300)]
[NFC][SimplifyCFG] FoldBranchToCommonDest(): somewhat better structure weight updating code

Hoist the successor updating out of the code that deals with branch
weight updating, and hoist the 'has weights' check from the latter,
making code more consistent and easier to follow.

3 years ago[NFC][SimplifyCFG] FoldBranchToCommonDest(): unclutter Cond/CondInPred handling
Roman Lebedev [Thu, 21 Jan 2021 17:21:55 +0000 (20:21 +0300)]
[NFC][SimplifyCFG] FoldBranchToCommonDest(): unclutter Cond/CondInPred handling

We don't need those variables, we can just get the final value directly.

3 years ago[NFCI-ish][SimplifyCFG] FoldBranchToCommonDest(): really don't deal with uncond branches
Roman Lebedev [Thu, 21 Jan 2021 20:23:52 +0000 (23:23 +0300)]
[NFCI-ish][SimplifyCFG] FoldBranchToCommonDest(): really don't deal with uncond branches

While we already ignore uncond branches, we could still potentially
end up with a conditional branches with identical destinations
due to the visitation order, or because we were called as an utility.
But if we have such a disguised uncond branch,
we still probably shouldn't deal with it here.

3 years ago[SimplifyCFG] FoldBranchToCommonDest(): don't deal with unconditional branches
Roman Lebedev [Thu, 21 Jan 2021 16:45:41 +0000 (19:45 +0300)]
[SimplifyCFG] FoldBranchToCommonDest(): don't deal with unconditional branches

The case where BB ends with an unconditional branch,
and has a single predecessor w/ conditional branch
to BB and a single successor of BB is exactly the pattern
SpeculativelyExecuteBB() transform deals with.
(and in this case they both allow speculating only a single instruction)

Well, or FoldTwoEntryPHINode(), if the final block
has only those two predecessors.

Here, in FoldBranchToCommonDest(), only a weird subset of that
transform is supported, and it's glued on the side in a weird way.
  In particular, it took me a bit to understand that the Cond
isn't actually a branch condition in that case, but just the value
we allow to speculate (otherwise it reads as a miscompile to me).
  Additionally, this only supports for the speculated instruction
to be an ICmp.

So let's just unclutter FoldBranchToCommonDest(), and leave
this transform up to SpeculativelyExecuteBB(). As far as i can tell,
this shouldn't really impact optimization potential, but if it does,
improving SpeculativelyExecuteBB() will be more beneficial anyways.

Notably, this only affects a single test,
but EarlyCSE should have run beforehand in the pipeline,
and then FoldTwoEntryPHINode() would have caught it.

This reverts commit rL158392 / commit d33f4efbfdef6ffccf212ab3e40a7673589085fd.

3 years ago[clang][ASTImporter] Add support for importing CXXFoldExpr.
Balázs Kéri [Fri, 22 Jan 2021 11:39:21 +0000 (12:39 +0100)]
[clang][ASTImporter] Add support for importing CXXFoldExpr.

Reviewed By: shafik, martong

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

3 years ago[ARM] Disable sign extended SSAT pattern recognition.
David Green [Fri, 22 Jan 2021 14:07:48 +0000 (14:07 +0000)]
[ARM] Disable sign extended SSAT pattern recognition.

I may have given bad advice, and skipping sext_inreg when matching SSAT
patterns is not valid on it's own. It at least needs to sext_inreg the
input again, but as far as I can tell is still only valid based on
demanded bits. For the moment disable that part of the combine,
hopefully reimplementing it in the future more correctly.

3 years agoAvoid fragile type lookups in GDB pretty printer
Moritz Sichert [Mon, 11 Jan 2021 14:55:20 +0000 (15:55 +0100)]
Avoid fragile type lookups in GDB pretty printer

Instead of using the type llvm::StringMapEntry<{stringified_value_type}>
use only the base class llvm::StringMapEntryBase and calculate the
offsets of the member variables manually. The approach with stringifying
the name of the value type is pretty fragile as it can easily break with
local and dependent types.

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

3 years ago[LTO] Add support for existing Config::Freestanding option.
Florian Hahn [Fri, 22 Jan 2021 13:13:54 +0000 (13:13 +0000)]
[LTO] Add support for existing Config::Freestanding option.

lto::Config has a field to control whether the build is "freestanding"
(no builtins) or not, but it is not hooked up to the code actually
running the passes.

This patch adds support for the flag to both the code that runs
optimization with the new and old pass managers, by explicitly adding a
TargetLibraryInfo instance. If Freestanding is true, all library functions
are disabled.

Reviewed By: steven_wu

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

3 years ago[clangd] Inject context provider rather than config into ClangdServer. NFC
Sam McCall [Wed, 20 Jan 2021 21:34:24 +0000 (22:34 +0100)]
[clangd] Inject context provider rather than config into ClangdServer. NFC

This is a step towards allowing CDB behavior to being configurable.

Previously ClangdServer itself created the configs and installed them into
contexts. This was natural as it knows how to deal with resulting diagnostics.

However this prevents config being used in CDB, which must be created before
ClangdServer. So we extract the context provider (config loader) as a separate
object, which publishes diagnostics to a ClangdServer::Callbacks itself.

Now initialization looks like:
 - First create the config::Provider
 - Then create the ClangdLSPServer, passing config provider
 - Next, create the context provider, passing config provider + diagnostic callbacks
 - now create the CDB, passing context provider
 - finally create ClangdServer, passing CDB, context provider, and diagnostic callbacks

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

3 years ago[clangd][SwapIndex] ensure that the old index is alive while we are using it via...
Aleksandr Platonov [Fri, 22 Jan 2021 13:24:01 +0000 (16:24 +0300)]
[clangd][SwapIndex] ensure that the old index is alive while we are using it via the function returned by `SwapIndex::indexedFiles()` call

Without this patch the old index could be freed, but there still could be tries to access it via the function returned by `SwapIndex::indexedFiles()` call.
This leads to hard to reproduce clangd crashes at code completion.
This patch keeps the old index alive until the function returned by `SwapIndex::indexedFiles()` call is alive.

Reviewed By: sammccall

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

3 years ago[X86][AVX] combineX86ShufflesRecursively - attempt to constant fold before widening...
Simon Pilgrim [Fri, 22 Jan 2021 12:52:01 +0000 (12:52 +0000)]
[X86][AVX] combineX86ShufflesRecursively - attempt to constant fold before widening shuffle inputs

combineX86ShufflesConstants/canonicalizeShuffleMaskWithHorizOp can both handle/earlyout shuffles with inputs of different widths, so delay widening as late as possible to make it easier to match constant folds etc.

The plan is to eventually move the widening inside combineX86ShuffleChain so that we don't create any new nodes unless we successfully combine the shuffles.

3 years ago[SLP] do not traverse constant uses
Anton Rapetov [Fri, 22 Jan 2021 12:57:34 +0000 (07:57 -0500)]
[SLP] do not traverse constant uses

Walking the use list of a Constant (particularly, ConstantData)
is not scalable, since a given constant may be used by many
instructinos in many functions in many modules.

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

3 years ago[clang][Tooling] Get rid of a hack in SymbolOccurrences, NFCI
Mikhail Maltsev [Fri, 22 Jan 2021 13:01:41 +0000 (13:01 +0000)]
[clang][Tooling] Get rid of a hack in SymbolOccurrences, NFCI

The class `SymbolOccurrences` can store either a single `SourceRange`
in-place or multiple `SourceRanges` on the heap. In the latter case
the number of source ranges is stored in the internal representation
of the beginning `SourceLocation` of the in-place `SourceRange`
object.

This change gets rid of such hack by placing `SourceRange` in a union
which holds either a valid `SourceRange` or an `unsigned int` (a number
of ranges).

The change also adds `static_assert`s that check that `SourceRange` and
`SourceLocation` are trivially destructible (this is required for the
current patch and for D94237 which has already been committed).

Reviewed By: MarkMurrayARM, simon_tatham

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

3 years agoDon't delete default constructor of PathDiagnosticConsumerOptions
Moritz Sichert [Fri, 27 Nov 2020 11:26:46 +0000 (12:26 +0100)]
Don't delete default constructor of PathDiagnosticConsumerOptions

This type is used as an aggregate, i.e. it has no member functions.
Starting with C++20 types with deleted default constructors are not
aggregate types anymore which means that aggregate initialization will
not work for this class anymore. This leads to a compile error in
clang::AnalyzerOptions::getDiagOpts() for example.

Also set the boolean flags to false by default to avoid undefined
behavior. Previously this was prevented by deleting the default
constructor, now we explicitly initialize them.

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

3 years agoRevert "[clang] Suppress "follow-up" diagnostics on recovery call expressions."
Haojian Wu [Fri, 22 Jan 2021 11:15:05 +0000 (12:15 +0100)]
Revert "[clang] Suppress "follow-up" diagnostics on recovery call expressions."

This reverts commit efa9aaad703e6b150980ed1a74b4e7c9da7d85a2 and adds a
crash test.

The commit caused a crash in CodeGen with -fms-compatibility, see
https://bugs.llvm.org/show_bug.cgi?id=48690.

3 years ago[NFC] Add CMakeUserPresets.json filename to .gitignore
Balazs Benics [Fri, 22 Jan 2021 11:45:29 +0000 (12:45 +0100)]
[NFC] Add CMakeUserPresets.json filename to .gitignore

CMake 3.19 introduced the `presets`.
Quoting the documentation:
> `CMakePresets.json` may be checked into a version control system, and
> `CMakeUserPresets.json` **should NOT be checked in**.

We will ignore the `CMakeUserPresets.json` file if that is present
at the root of a subproject.

Reviewed By: dblaikie

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

3 years ago[DAG] Commute shuffle(splat(A,u), shuffle(C,D)) -> shuffle'(shuffle(C,D), splat(A,u))
Simon Pilgrim [Fri, 22 Jan 2021 11:43:18 +0000 (11:43 +0000)]
[DAG] Commute shuffle(splat(A,u), shuffle(C,D)) -> shuffle'(shuffle(C,D), splat(A,u))

We only merge shuffles if the inner (LHS) shuffle is a non-splat, so commute these shuffles to improve merging of multiple shuffles.

3 years ago[X86][SSE] Don't fold shuffle(binop(),binop()) -> binop(shuffle(),shuffle()) if the...
Simon Pilgrim [Fri, 22 Jan 2021 10:57:22 +0000 (10:57 +0000)]
[X86][SSE] Don't fold shuffle(binop(),binop()) -> binop(shuffle(),shuffle()) if the shuffle are splats

rGbe69e66b1cd8 added the fold, but DAGCombiner.visitVECTOR_SHUFFLE doesn't merge shuffles if the inner shuffle is a splat, so we need to bail.

The non-fast-horiz-ops paths see some minor regressions, we might be able to improve on this after lowering to target shuffles.

Fix PR48823

3 years ago[ARM] Adjust isSaturatingConditional to return a new SDValue. NFC
David Green [Fri, 22 Jan 2021 11:11:36 +0000 (11:11 +0000)]
[ARM] Adjust isSaturatingConditional to return a new SDValue. NFC

This replaces the isSaturatingConditional function with
LowerSaturatingConditional that directly returns a new SSAT or
USAT SDValue, instead of returning true and the components of it.

3 years ago[clangd] Add documentation for building and testing clangd
Kadir Cetinkaya [Tue, 10 Nov 2020 18:20:52 +0000 (19:20 +0100)]
[clangd] Add documentation for building and testing clangd

Adds minimal cmake configuration required to build and test clangd,
while telling target names. Should be helpful for people unfamiliar with the
LLVM repo.

See https://github.com/clangd/clangd/issues/579 for a request.

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

3 years ago[ARM] Add new and regenerate SSAT tests. NFC
David Green [Fri, 22 Jan 2021 10:42:36 +0000 (10:42 +0000)]
[ARM] Add new and regenerate SSAT tests. NFC

Some of these new tests should be creating SSAT. They will be fixed in a
followup.

3 years ago[IR] Optimize adding attribute to AttributeList (NFC)
Nikita Popov [Fri, 22 Jan 2021 09:38:36 +0000 (10:38 +0100)]
[IR] Optimize adding attribute to AttributeList (NFC)

When adding an enum attribute to an AttributeList, avoid going
through an AttrBuilder and instead directly add the attribute to
the correct set. Going through AttrBuilder is expensive, because
it requires all string attributes to be reconstructed.

This can be further improved by inserting the attribute at the
right position and using the AttributeSetNode::getSorted() API.

This recovers the small compile-time regression from D94633.

3 years ago[gn build] Port 8214982b5042
LLVM GN Syncbot [Fri, 22 Jan 2021 10:24:45 +0000 (10:24 +0000)]
[gn build] Port 8214982b5042

3 years ago[AMDGPU] Implement mir parseCustomPseudoSourceValue
Sebastian Neubauer [Thu, 21 Jan 2021 17:12:27 +0000 (18:12 +0100)]
[AMDGPU] Implement mir parseCustomPseudoSourceValue

Allow parsing generated mir with custom pseudo source value tokens.
Also rename pseudo source values to have more meaningful names.

Relands ba7dcd8542ab, which had memory leaks.

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

3 years ago[X86][SSE] Add PR48823 HSUB test case
Simon Pilgrim [Fri, 22 Jan 2021 10:04:58 +0000 (10:04 +0000)]
[X86][SSE] Add PR48823 HSUB test case

3 years ago[X86][SSE] Add v16i8 02_20_uu_uu_uu_uu_uu_uu_uu_uu_uu_uu_uu_uu_uu_uu shuffle test
Simon Pilgrim [Thu, 21 Jan 2021 14:55:45 +0000 (14:55 +0000)]
[X86][SSE] Add v16i8 02_20_uu_uu_uu_uu_uu_uu_uu_uu_uu_uu_uu_uu_uu_uu shuffle test

3 years agoFix build failure caused by 2e080eb00ad76654313e0e119bb7fa0ffe2f9866
David Sherwood [Fri, 22 Jan 2021 09:56:26 +0000 (09:56 +0000)]
Fix build failure caused by 2e080eb00ad76654313e0e119bb7fa0ffe2f9866

3 years ago[JITLink][ELF/x86-64] Add support for weak and hidden symbols.
Lang Hames [Fri, 22 Jan 2021 09:04:18 +0000 (20:04 +1100)]
[JITLink][ELF/x86-64] Add support for weak and hidden symbols.

3 years ago[LegacyPM] Update InversedLastUser on the fly. NFC.
Jay Foad [Fri, 27 Nov 2020 17:32:01 +0000 (17:32 +0000)]
[LegacyPM] Update InversedLastUser on the fly. NFC.

This speeds up setLastUser enough to give a 5% to 10% speed up on
trivial invocations of opt and llc, as measured by:

perf stat -r 100 opt -S -o /dev/null -O3 /dev/null
perf stat -r 100 llc -march=amdgcn /dev/null -filetype null

Don't dump last use information unless -debug-pass=Details to avoid
printing lots of spam that will break some existing lit tests. Before
this patch, dumping last use information was broken anyway, because it
used InversedLastUser before it had been populated.

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

3 years ago[SVE] Add support for scalable vectorization of loops with selects and cmps
David Sherwood [Tue, 19 Jan 2021 15:38:03 +0000 (15:38 +0000)]
[SVE] Add support for scalable vectorization of loops with selects and cmps

I have removed an unnecessary assert in LoopVectorizationCostModel::getInstructionCost
that prevented a cost being calculated for select instructions when using
scalable vectors. In addition, I have changed AArch64TTIImpl::getCmpSelInstrCost
to only do special cost calculations for fixed width vectors and fall
back to the base version for scalable vectors.

I have added a simple cost model test for cmps and selects:

  test/Analysis/CostModel/sve-cmpsel.ll

and some simple tests that show we vectorize loops with cmp and select:

  test/Transforms/LoopVectorize/AArch64/sve-basic-vec.ll

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

3 years ago[APSInt][NFC] Clean up doxygen comments
Sven van Haastregt [Fri, 22 Jan 2021 09:23:41 +0000 (09:23 +0000)]
[APSInt][NFC] Clean up doxygen comments

Add a Doxygen class comment and clean up other Doxygen comments in
this file while we're at it.

3 years ago[AMDGPU] Fix the inconsistency in soffset for MUBUF stack accesses.
Christudasan Devadasan [Fri, 15 Jan 2021 10:32:29 +0000 (16:02 +0530)]
[AMDGPU] Fix the inconsistency in soffset for MUBUF stack accesses.

During instruction selection, there is an inconsistency in choosing
the initial soffset value. With certain early passes, this value is
getting modified and that brought additional fixup during
eliminateFrameIndex to work for all cases. This whole transformation
looks trivial and can be handled better.

This patch clearly defines the initial value for soffset and keeps it
unchanged before eliminateFrameIndex. The initial value must be zero
for MUBUF with a frame index. The non-frame index MUBUF forms that
use a raw offset from SP will have the stack register for soffset.
During frame elimination, the soffset remains zero for entry functions
with zero dynamic allocas and no callsites, or else is updated to the
appropriate frame/stack register.

Also, did some code clean up and made all asserts around soffset
stricter to match.

Reviewed By: scott.linder

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

3 years ago[RISCV] Fix intrinsic CodeGen test cases for vrgather
ShihPo Hung [Fri, 22 Jan 2021 07:26:32 +0000 (23:26 -0800)]
[RISCV] Fix intrinsic CodeGen test cases for vrgather

1. Op2 type in vrgather.vx should be XLEN instead of SEW
2. Add double type in vrgather-rv32 cases.

Reviewed By: craig.topper

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

3 years ago[clang][cli] Port visibility LangOptions to marshalling system
Jan Svoboda [Fri, 22 Jan 2021 08:13:34 +0000 (09:13 +0100)]
[clang][cli] Port visibility LangOptions to marshalling system

This patch introduces Clang-specific MarshallingInfoVisibility TableGen class.

Reviewed By: dexonsmith

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

3 years ago[TargetLowering] Use getBoolConstant instead of assuming zero or one for boolean...
Craig Topper [Fri, 22 Jan 2021 08:19:13 +0000 (00:19 -0800)]
[TargetLowering] Use getBoolConstant instead of assuming zero or one for boolean contents.

Noticed while I was touching other nearby code. I don't have a
test where this matters because the targets I work on
use zero or one boolean contents. And the tests cases I've seen
this fire on happen before type legalization where the result type
is MVT::i1 so the distinction doesn't matter.

3 years agoNFC: Remove simple_ilist comment mentioning ilist/iplist allocating
Nathan Lanza [Fri, 22 Jan 2021 08:22:50 +0000 (03:22 -0500)]
NFC: Remove simple_ilist comment mentioning ilist/iplist allocating

Allocation was removed from ilist in 2016 in the git commit
b5da00533510.

Reviewed By: dexonsmith

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

3 years agoUpdate filename to workers.py file in documentation
Douglas Yung [Fri, 22 Jan 2021 08:18:09 +0000 (00:18 -0800)]
Update filename to workers.py file in documentation

Commit be9f322e8dc530a56f03356aad31fa9031b27e26 moved the list of workers from
slaves.py to workers.py, but the documentation in "How To Add A Builder" was
never updated and now references a non-existing file. This fixes that.

Reviewed By: gkistanova

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

3 years ago[AMDGPU] Test clean up (NFC)
Christudasan Devadasan [Fri, 22 Jan 2021 07:24:16 +0000 (12:54 +0530)]
[AMDGPU] Test clean up (NFC)

3 years ago[TargetLowering] Simplify some code in SimplifySetCC that tries to handle SIGN_EXTEND...
Craig Topper [Fri, 22 Jan 2021 07:21:05 +0000 (23:21 -0800)]
[TargetLowering] Simplify some code in SimplifySetCC that tries to handle SIGN_EXTEND_INREG operand types that should never happen. NFCI

There was code to handle the first operand being different than
the result type. And code to handle first operand having the
same type as the type to extend from. This should never happen
for a correctly formed SIGN_EXTEND_INREG. I've replace the
code with asserts.

I also noticed we created the same APInt twice so I've reused it.

3 years ago[AArch64][GlobalISel] Implement widenScalar for signed overflow
Cassie Jones [Fri, 22 Jan 2021 06:55:00 +0000 (22:55 -0800)]
[AArch64][GlobalISel] Implement widenScalar for signed overflow

Implement widening for G_SADDO and G_SSUBO. Previously it was only
implemented for G_UADDO and G_USUBO. Also add legalize-add/sub tests for
narrow overflowing add/sub on AArch64.

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

3 years ago[mlir][StandardToSPIRV] Add support for lowering uitofp to SPIR-V
Hanhan Wang [Fri, 22 Jan 2021 06:20:18 +0000 (22:20 -0800)]
[mlir][StandardToSPIRV] Add support for lowering uitofp to SPIR-V

- Extend spirv::ConstantOp::getZero/One to handle float, vector of int, and vector of float.
- Refactor ZeroExtendI1Pattern to use getZero/One methods.
- Add one more test for lowering std.zexti which extends vector<4xi1> to vector<4xi64>.

Reviewed By: antiagainst

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

3 years ago[mlir][Linalg] Introduce linalg.pad_tensor op.
Hanhan Wang [Fri, 22 Jan 2021 06:08:51 +0000 (22:08 -0800)]
[mlir][Linalg] Introduce linalg.pad_tensor op.

`linalg.pad_tensor` is an operation that pads the `source` tensor
with given `low` and `high` padding config.

Example 1:

```mlir
  %pad_value = ... : f32
  %1 = linalg.pad_tensor %0 low[1, 2] high[2, 3] {
  ^bb0(%arg0 : index, %arg1 : index):
    linalg.yield %pad_value : f32
  } : tensor<?x?xf32> to tensor<?x?xf32>
```

Example 2:
```mlir
  %pad_value = ... : f32
  %1 = linalg.pad_tensor %arg0 low[2, %arg1, 3, 3] high[3, 3, %arg1, 2] {
  ^bb0(%arg2: index, %arg3: index, %arg4: index, %arg5: index):
    linalg.yield %pad_value : f32
  } : tensor<1x2x2x?xf32> to tensor<6x?x?x?xf32>
```

Reviewed By: nicolasvasilache

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

3 years ago[test] Make incorrect-exit-count.ll work under NPM
Arthur Eubanks [Fri, 22 Jan 2021 05:45:32 +0000 (21:45 -0800)]
[test] Make incorrect-exit-count.ll work under NPM

3 years ago[NewPM][opt] Run the "default" AA pipeline by default
Arthur Eubanks [Thu, 21 Jan 2021 00:53:03 +0000 (16:53 -0800)]
[NewPM][opt] Run the "default" AA pipeline by default

We tend to assume that the AA pipeline is by default the default AA
pipeline and it's confusing when it's empty instead.

PR48779

Initially reverted due to BasicAA running analyses in an unspecified
order (multiple function calls as parameters), fixed by fetching
analyses before the call to construct BasicAA.

Reviewed By: asbirlea

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

3 years ago[JITLink][ELF/x86-64] Range check 32-bit relocs.
Lang Hames [Fri, 22 Jan 2021 04:38:45 +0000 (15:38 +1100)]
[JITLink][ELF/x86-64] Range check 32-bit relocs.

Also switch to using little_<b> / ulittle_<b> types to write results for
consistency with MachO.

3 years ago[ASTReader] Allow controlling separately whether validation should be disabled for...
Argyrios Kyrtzidis [Thu, 21 Jan 2021 19:19:34 +0000 (11:19 -0800)]
[ASTReader] Allow controlling separately whether validation should be disabled for a PCH vs a module file

This addresses an issue with how the PCH preable works, specifically:

1. When using a PCH/preamble the module hash changes and a different cache directory is used
2. When the preamble is used, PCH & PCM validation is disabled.

Due to combination of #1 and #2, reparsing with preamble enabled can end up loading a stale module file before a header change and using it without updating it because validation is disabled and it doesn’t check that the header has changed and the module file is out-of-date.

rdar://72611253

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

3 years ago[NFC] Disallow unused prefixes under llvm/test
Mircea Trofin [Thu, 21 Jan 2021 02:37:22 +0000 (18:37 -0800)]
[NFC] Disallow unused prefixes under llvm/test

This patch sets the default for llvm tests, with the exception of tests
under Reduce, because quite a few of them use 'FileCheck' as parameter
to a tool, and including a flag as that parameter would complicate
matters.

The rest of the patch undo-es the lit.local.cfg changes we progressively
introduced as temporary measure to avoid regressions under various
directories.

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

3 years ago[AMDGPU][Inliner] Remove amdgpu-inline and add a new TTI inline hook
Arthur Eubanks [Wed, 6 Jan 2021 05:11:21 +0000 (21:11 -0800)]
[AMDGPU][Inliner] Remove amdgpu-inline and add a new TTI inline hook

Having a custom inliner doesn't really fit in with the new PM's
pipeline. It's also extra technical debt.

amdgpu-inline only does a couple of custom things compared to the normal
inliner:
1) It disables inlining if the number of BBs in a function would exceed
   some limit
2) It increases the threshold if there are pointers to private arrays(?)

These can all be handled as TTI inliner hooks.
There already exists a hook for backends to multiply the inlining
threshold.

This way we can remove the custom amdgpu-inline pass.

This caused inline-hint.ll to fail, and after some investigation, it
looks like getInliningThresholdMultiplier() was previously getting
applied twice in amdgpu-inline (https://reviews.llvm.org/D62707 fixed it
not applying at all, so some later inliner change must have fixed
something), so I had to change the threshold in the test.

Reviewed By: rampitec

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

3 years agoRevert "[NewPM][opt] Run the "default" AA pipeline by default"
Arthur Eubanks [Fri, 22 Jan 2021 04:16:34 +0000 (20:16 -0800)]
Revert "[NewPM][opt] Run the "default" AA pipeline by default"

This reverts commit be611431cd1f5c826a55b531db92a63e84323866.

Other/new-pm-lto-defaults.ll failing

3 years ago[mlir] Enable passing crash reproducer stream factory method
Jacques Pienaar [Thu, 21 Jan 2021 15:00:13 +0000 (07:00 -0800)]
[mlir] Enable passing crash reproducer stream factory method

Add factory to create streams for logging the reproducer. Allows for more general logging (beyond file) and logging the configuration/module separately (logged in order, configuration before module).

Also enable querying filename of ToolOutputFile.

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

3 years ago[llvm] Use isDigit (NFC)
Kazu Hirata [Fri, 22 Jan 2021 03:59:50 +0000 (19:59 -0800)]
[llvm] Use isDigit (NFC)

3 years ago[llvm] Don't include StringSwitch.h where unnecessary (NFC)
Kazu Hirata [Fri, 22 Jan 2021 03:59:48 +0000 (19:59 -0800)]
[llvm] Don't include StringSwitch.h where unnecessary (NFC)

3 years ago[CodeGen] Use llvm::append_range (NFC)
Kazu Hirata [Fri, 22 Jan 2021 03:59:46 +0000 (19:59 -0800)]
[CodeGen] Use llvm::append_range (NFC)

3 years ago[NewPM][opt] Run the "default" AA pipeline by default
Arthur Eubanks [Thu, 21 Jan 2021 00:53:03 +0000 (16:53 -0800)]
[NewPM][opt] Run the "default" AA pipeline by default

We tend to assume that the AA pipeline is by default the default AA
pipeline and it's confusing when it's empty instead.

PR48779

Reviewed By: asbirlea

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

3 years ago[RISCV] Correct DWARF number for vector registers.
Hsiangkai Wang [Fri, 15 Jan 2021 03:07:59 +0000 (11:07 +0800)]
[RISCV] Correct DWARF number for vector registers.

The DWARF numbers of vector registers are already defined in
riscv-elf-psabi. The DWARF number for vector is start from 96.
Correct the DWARF numbers of vector registers.

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

3 years ago[RISCV] Don't create LMUL=8 pseudo instructions for ternary widening arithmetic instr...
Craig Topper [Fri, 22 Jan 2021 01:51:29 +0000 (17:51 -0800)]
[RISCV] Don't create LMUL=8 pseudo instructions for ternary widening arithmetic instructions

These instructions produce 2*SEW result so the input can't have
an LMUL=8 or the result would need a non-existant LMUL=16. So
only create pseudos for LMUL up to 4.

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

3 years ago[AArch64][GlobalISel] Make G_USUBO legal and select it.
Cassie Jones [Fri, 22 Jan 2021 02:48:09 +0000 (18:48 -0800)]
[AArch64][GlobalISel] Make G_USUBO legal and select it.

The expansion for wide subtractions includes G_USUBO.

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

3 years ago[RISCV] Add intrinsics for RVV1.0 VFRSQRTE7 & VFRECE7
ShihPo Hung [Thu, 21 Jan 2021 02:45:33 +0000 (18:45 -0800)]
[RISCV] Add intrinsics for RVV1.0 VFRSQRTE7 & VFRECE7

Reviewed By: craig.topper, frasercrmck

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

3 years ago[RISCV] Add intrinsics for vector unordered indexed load in RVV 1.0
ShihPo Hung [Tue, 19 Jan 2021 09:07:34 +0000 (01:07 -0800)]
[RISCV] Add intrinsics for vector unordered indexed load in RVV 1.0

Add unordered indexed load: vluxei

Reviewed By: craig.topper

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

3 years ago[RISCV] Add intrinsics for RVV 1.0 vrgatherei16
ShihPo Hung [Tue, 19 Jan 2021 02:44:59 +0000 (18:44 -0800)]
[RISCV] Add intrinsics for RVV 1.0 vrgatherei16

Reviewed By: craig.topper

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

3 years ago[Inlining] Delete redundant optnone/alwaysinline check
Xun Li [Fri, 22 Jan 2021 02:38:10 +0000 (18:38 -0800)]
[Inlining] Delete redundant optnone/alwaysinline check

The same check is done in InlineCost: https://github.com/llvm/llvm-project/blob/8b0bd54d0ec968df28ccc58bbb537a7b7c074ef2/llvm/lib/Analysis/InlineCost.cpp#L2537-L2552
Also, doing a check on the callee here is confusing, because anything that deals with callee should be done in the inner loop where we proecss all calls from the same caller.

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

3 years ago[PowerPC] Duplicate inherited heuristic from base scheduler
Qiu Chaofan [Fri, 22 Jan 2021 02:00:28 +0000 (10:00 +0800)]
[PowerPC] Duplicate inherited heuristic from base scheduler

PowerPC has its custom scheduler heuristic. It calls parent classes'
tryCandidate in override version, but the function returns void, so this
way doesn't actually help. This patch duplicates code from base scheduler
into PPC machine scheduler class, which does what we wanted.

Reviewed By: steven.zhang

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

3 years ago[AMDGPU] Test case demonstrating issues with generation of .debug_frame
RamNalamothu [Fri, 22 Jan 2021 01:54:06 +0000 (07:24 +0530)]
[AMDGPU] Test case demonstrating issues with generation of .debug_frame

This test case demonstrates that the Call Frame Information generation is
totally biased towards whether exceptions are enabled or not. Currently
LLVM does not generate CFI i.e. a .debug_frame for debug purpose even
if --force-dwarf-frame-section is enabled unless exceptions are enabled.

Reviewed By: scott.linder

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

3 years ago[CodeGen][ObjC] Fix broken IR generated when there is a nil receiver
Akira Hatanaka [Fri, 22 Jan 2021 01:38:46 +0000 (17:38 -0800)]
[CodeGen][ObjC] Fix broken IR generated when there is a nil receiver
check

This patch fixes a bug in emitARCOperationAfterCall where it inserts the
fall-back call after a bitcast instruction and then replaces the
bitcast's operand with the result of the fall-back call. The generated
IR without this patch looks like this:

msgSend.call:                                     ; preds = %entry
  %call = call i8* bitcast (i8* (i8*, i8*, ...)* @objc_msgSend
  br label %msgSend.cont

msgSend.null-receiver:                            ; preds = %entry
  call void @llvm.objc.release(i8* %4)
  br label %msgSend.cont

msgSend.cont:
  %8 = phi i8* [ %call, %msgSend.call ], [ null, %msgSend.null-receiver ]
  %9 = bitcast i8* %10 to %0*
  %10 = call i8* @llvm.objc.retain(i8* %8)

Notice that `%9 = bitcast i8* %10` to %0* is taking operand %10 which is
defined after it.

To fix the bug, this patch modifies the insert point to point to the
bitcast instruction so that the fall-back call is inserted before the
bitcast. In addition, it teaches the function to look at phi
instructions that are generated when there is a check for a null
receiver and insert the retainRV/claimRV instruction right after the
call instead of inserting a fall-back call right after the phi
instruction.

rdar://73360225

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

3 years ago[mlir] Support FuncOpSignatureConversion for more FunctionLike ops.
mikeurbach [Tue, 19 Jan 2021 02:20:25 +0000 (19:20 -0700)]
[mlir] Support FuncOpSignatureConversion for more FunctionLike ops.

This extracts the implementation of getType, setType, and getBody from
FunctionSupport.h into the mlir::impl namespace and defines them
generically in FunctionSupport.cpp. This allows them to be used
elsewhere for any FunctionLike ops that use FunctionType for their
type signature.

Using the new helpers, FuncOpSignatureConversion is generalized to
work with all such FunctionLike ops. Convenience helpers are added to
configure the pattern for a given concrete FunctionLike op type.

Reviewed By: rriddle

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

3 years ago[llvm-mca] Addressing build failures due to missing override specifiers
Wolfgang Pieb [Fri, 22 Jan 2021 01:30:59 +0000 (17:30 -0800)]
[llvm-mca] Addressing build failures due to missing override specifiers

3 years ago[RISCV] Add a VL output to vleff intrinsics.
Craig Topper [Fri, 22 Jan 2021 01:08:41 +0000 (17:08 -0800)]
[RISCV] Add a VL output to vleff intrinsics.

The fault-only-first-load instructions can reduce VL if an element
other than element 0 triggers a memory fault. This can be used to
vectorize loops with data dependent exit conditions like strcmp or
strlen.

This patch adds a VL output to these intrinsics so that the new
VL value can be captured by software. This will be expanded to
'csrr gpr, vl' after the vleff instruction during SelectionDAG.

By doing this with one intrinsic we are able to guarantee that the
csrr reads the VL value produced by the vleff instruction. Having
it as a separate intrinsic would make it impossible to guarantee
ordering without making every other vector intrinsic have side
effects.

The intrinsics are expanded during lowering into two ISD nodes
that are glued together. These ISD nodes will go
through isel separately, but should maintain the glue so that they
get emitted adjacently by InstrEmitter.

I've only ran the chain through the vleff instruction, allowing
the READ_VL to be deleted if it is unused.

Reviewed By: HsiangKai

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

3 years ago[NFC] [TargetRegisterInfo] add another API to get srcreg through copy.
Chen Zheng [Tue, 19 Jan 2021 02:55:11 +0000 (21:55 -0500)]
[NFC] [TargetRegisterInfo] add another API to get srcreg through copy.

Reviewed By: nemanjai, jsji

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

3 years ago[flang] Fix bogus error message with binding
peter klausler [Thu, 21 Jan 2021 22:54:53 +0000 (14:54 -0800)]
[flang] Fix bogus error message with binding

ProcedureDesignator::GetInterfaceSymbol() needs to return
the procedure bound to a bindings.

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

3 years ago[libcxx] Check return value for asprintf()
Brad Smith [Fri, 22 Jan 2021 00:39:52 +0000 (19:39 -0500)]
[libcxx] Check return value for asprintf()

local __libcpp_asprintf_l() -> libc asprintf() was inspecting the pointer (with
indeterminate value) for failure, rather than the return value of -1.

Reviewed By: ldionne

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

3 years ago[flang] Allow NULL() actual argument for pointer dummy
peter klausler [Thu, 21 Jan 2021 22:50:57 +0000 (14:50 -0800)]
[flang] Allow NULL() actual argument for pointer dummy

Fixes a bogus error message about an actual argument not being an
object.

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