platform/upstream/llvm.git
3 years ago[X86][AVX] Fold extract_subvector(VSRLI/VSHLI(x,32)) -> VSRLI/VSHLI(extract_subvector...
Simon Pilgrim [Wed, 20 Jan 2021 14:19:18 +0000 (14:19 +0000)]
[X86][AVX] Fold extract_subvector(VSRLI/VSHLI(x,32)) -> VSRLI/VSHLI(extract_subvector(x),32)

As discussed on D56387, if we're shifting to extract the upper/lower half of a vXi64 vector then we're actually better off performing this at the subvector level as its very likely to fold into something.

combineConcatVectorOps can perform this in reverse if necessary.

3 years ago[TableGen] Improve algorithm for inheriting class template args and fields
Paul C. Anagnostopoulos [Fri, 8 Jan 2021 14:44:27 +0000 (09:44 -0500)]
[TableGen] Improve algorithm for inheriting class template args and fields

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

3 years ago[AArch64] Add support for the GNU ILP32 ABI
Amanieu d'Antras [Wed, 20 Jan 2021 13:30:47 +0000 (13:30 +0000)]
[AArch64] Add support for the GNU ILP32 ABI

Add the aarch64[_be]-*-gnu_ilp32 targets to support the GNU ILP32 ABI for AArch64.

The needed codegen changes were mostly already implemented in D61259, which added support for the watchOS ILP32 ABI. The main changes are:
- Wiring up the new target to enable ILP32 codegen and MC.
- ILP32 va_list support.
- ILP32 TLSDESC relocation support.

There was existing MC support for ELF ILP32 relocations from D25159 which could be enabled by passing "-target-abi ilp32" to llvm-mc. This was changed to check for "gnu_ilp32" in the target triple instead. This shouldn't cause any issues since the existing support was slightly broken: it was generating ELF64 objects instead of the ELF32 object files expected by the GNU ILP32 toolchain.

This target has been tested by running the full rustc testsuite on a big-endian ILP32 system based on the GCC ILP32 toolchain.

Reviewed By: kristof.beyls

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

3 years ago[SCEV] Add a test with wrong exit counts. (NFC)
Mindong Chen [Wed, 20 Jan 2021 12:26:16 +0000 (20:26 +0800)]
[SCEV] Add a test with wrong exit counts. (NFC)

This patch pre-commits a test case with wrong exit count
analysis for D92367.

Reviewed by: mkazantsev

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

3 years ago[PM] Avoid duplicates in the Used/Preserved/Required sets
Bjorn Pettersson [Mon, 11 Jan 2021 12:08:38 +0000 (13:08 +0100)]
[PM] Avoid duplicates in the Used/Preserved/Required sets

The pass analysis uses "sets" implemented using a SmallVector type
to keep track of Used, Preserved, Required and RequiredTransitive
passes. When having nested analyses we could end up with duplicates
in those sets, as there was no checks to see if a pass already
existed in the "set" before pushing to the vectors. This idea with
this patch is to avoid such duplicates by avoiding pushing elements
that already is contained when adding elements to those sets.

To align with the above PMDataManager::collectRequiredAndUsedAnalyses
is changed to skip adding both the Required and RequiredTransitive
passes to its result vectors (since RequiredTransitive always is
a subset of Required we ended up with duplicates when traversing
both sets).

Main goal with this is to avoid spending time verifying the same
analysis mulitple times in PMDataManager::verifyPreservedAnalysis
when iterating over the Preserved "set". It is assumed that removing
duplicates from a "set" shouldn't have any other negative impact
(I have not seen any problems so far). If this ends up causing
problems one could do some uniqueness filtering of the vector being
traversed in verifyPreservedAnalysis instead.

Reviewed By: foad

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

3 years ago[clangd] Extend find-refs to include overrides.
Haojian Wu [Fri, 8 Jan 2021 10:56:30 +0000 (11:56 +0100)]
[clangd] Extend find-refs to include overrides.

find-references on `virtual void meth^od() = 0` will include override references.

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

3 years agoFix cuda-runner tests.
Christian Sigg [Wed, 20 Jan 2021 12:11:03 +0000 (13:11 +0100)]
Fix cuda-runner tests.

3 years ago[AArch64] Add missing "flagm" feature to the .arch_extension directive.
Mark Murray [Tue, 19 Jan 2021 09:58:43 +0000 (09:58 +0000)]
[AArch64] Add missing "flagm" feature to the .arch_extension directive.

Depends on D94970

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

3 years ago[AArch64] Add missing "pauth" feature to the .arch_extension directive.
Mark Murray [Mon, 18 Jan 2021 17:23:47 +0000 (17:23 +0000)]
[AArch64] Add missing "pauth" feature to the .arch_extension directive.

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

3 years ago[clangd] Fix division by zero when computing scores
Kadir Cetinkaya [Fri, 15 Jan 2021 10:12:11 +0000 (11:12 +0100)]
[clangd] Fix division by zero when computing scores

NameMatch could be a float close to zero, in such cases we were
dividing by zero and moreover propogating a "NaN" to clients, which is invalid
per JSON.

This fixes the issue by only using Quality scores whenever the NameMatch is low,
as we do in CodeCompletion ranking.

Fixes https://github.com/clangd/clangd/issues/648.

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

3 years ago[llvm-symbolizer][doc] Reorder --relativenames in options list
James Henderson [Tue, 12 Jan 2021 10:11:49 +0000 (10:11 +0000)]
[llvm-symbolizer][doc] Reorder --relativenames in options list

This puts it in alphabetical order, matching the rest of the list.

Reviewed by: MaskRay, saugustine

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

3 years ago[LV] Add test cases with multiple exits which require versioning.
Florian Hahn [Wed, 20 Jan 2021 11:43:59 +0000 (11:43 +0000)]
[LV] Add test cases with multiple exits which require versioning.

This adds some test coverage for
caafdf07bbccbe89219539e2b56043c2a98358f1, which relaxed an assertion
to only require a unique exit block.

3 years ago[LLD][ELF] Correct test temporary file paths
Jeremy Morse [Wed, 20 Jan 2021 11:43:27 +0000 (11:43 +0000)]
[LLD][ELF] Correct test temporary file paths

In 8031785f4a7ebd the temporary object being built was moved to %t/main.o,
but not all run lines were updated to reflect this. Observe the failure
on this buildbot:

  http://lab.llvm.org:8011/#/builders/5/builds/3646/steps/9/logs/stdio

It might pass locally for some people due to a stale %t.o hanging around
the build directory.

3 years agoAdded check if there are regions that do not implement the RegionBranchOpInterface.
Julian Gross [Wed, 13 Jan 2021 10:13:41 +0000 (11:13 +0100)]
Added check if there are regions that do not implement the RegionBranchOpInterface.

Add a check if regions do not implement the RegionBranchOpInterface. This is not
allowed in the current deallocation steps. Furthermore, we handle edge-cases,
where a single region is attached and the parent operation has no results.

This fixes: https://bugs.llvm.org/show_bug.cgi?id=48575

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

3 years ago[mlir] Link mlir_runner_utils statically into cuda/rocm-runtime-wrappers.
Christian Sigg [Mon, 11 Jan 2021 12:04:09 +0000 (13:04 +0100)]
[mlir] Link mlir_runner_utils statically into cuda/rocm-runtime-wrappers.

The runtime-wrappers depend on LLVMSupport, pulling in static initialization code (e.g. command line arguments). Dynamically loading multiple such libraries results in ODR violoations.

So far this has not been an issue, but in D94421, I would like to load both the async-runtime and the cuda-runtime-wrappers as part of a cuda-runner integration test. When doing this, code that asserts that an option category is only registered once fails (note that I've only experienced this in Google's bazel where the async-runtime depends on LLVMSupport, but a similar issue would happen in cmake if more than one runtime-wrapper starts to depend on LLVMSupport).

The underlying issue is that we have a mix of static and dynamic linking. If all dependencies were loaded as shared objects (i.e. if LLVMSupport was linked dynamically to the runtime wrappers), each dependency would only get loaded once. However, linking dependencies dynamically would require special attention to paths (one could dynamically load the dependencies first given explicit paths). The simpler approach seems to be to link all dependencies statically into a single shared object.

This change basically applies the same logic that we have in the c_runner_utils: we have a shared object target that can be loaded dynamically, and we have a static library target that can be linked to other runtime-wrapper shared object targets.

Reviewed By: herhut

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

3 years ago[PostRASched] Regenerate Whole Test with update_llc_test_checks.py
Arun R [Wed, 20 Jan 2021 11:00:15 +0000 (16:30 +0530)]
[PostRASched] Regenerate Whole Test with update_llc_test_checks.py

Reviewed by xbolva00

Reviewers: llvm-commits, MatzeB, craig.topper, kparzysz, efriedma, pengfei, wxiao3, xbolva00

Subscribers: llvm-commits, xbolva00

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

3 years ago[Coroutine] Remain alignment information when merging frame variables
Chuanqi Xu [Wed, 20 Jan 2021 10:54:46 +0000 (18:54 +0800)]
[Coroutine] Remain alignment information when merging frame variables

Summary: This is to address bug48712.
The solution in this patch is that when we want to merge two variable a
into the storage frame of variable b only if the alignment of a is
multiple of b.
There may be other strategies. But now I think they are hard to handle
and benefit little. Or we can implement them in the future.

Test-plan: check-llvm

Reviewers: jmorse, lxfind, junparser

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

3 years ago[AMDGPU][GlobalISel] Avoid selecting S_PACK with constants
Mirko Brkusanin [Wed, 20 Jan 2021 10:38:05 +0000 (11:38 +0100)]
[AMDGPU][GlobalISel] Avoid selecting S_PACK with constants

If constants are hidden behind G_ANYEXT we can treat them same way as G_SEXT.
For that purpose we extend getConstantVRegValWithLookThrough with option
to handle G_ANYEXT same way as G_SEXT.

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

3 years ago[clangd] Retire some flags for uncontroversial, stable features.
Sam McCall [Thu, 14 Jan 2021 22:50:35 +0000 (23:50 +0100)]
[clangd] Retire some flags for uncontroversial, stable features.

And mark a couple to be retired afther the next release branch.

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

3 years ago[clangd] Remove the recovery-ast options.
Sam McCall [Thu, 14 Jan 2021 22:27:32 +0000 (23:27 +0100)]
[clangd] Remove the recovery-ast options.

These force a couple of flags or that are now on by default.
So the flags don't currently do anything unless the compile command has
-fno-recovery-ast explicitly.

(For turning recovery *off* for debugging we can inject the flag with config)

This leaves the command-line flags around with no effect, I'm planning to add
a "retired flag" mechanism shortly in a separate patch.

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

3 years ago[clangd] Move DirBasedCDB broadcasting onto its own thread.
Sam McCall [Wed, 13 Jan 2021 14:31:20 +0000 (15:31 +0100)]
[clangd] Move DirBasedCDB broadcasting onto its own thread.

This is on the critical path (it blocks getting the compile command for
the first file).

It's not trivially fast: it involves processing all filenames in the CDB
and doing some IO to look for shadowing CDBs.

And we may make this slower soon - making CDB configurable implies evaluating
the config for each listed to see which ones really are owned by the
broadcasted CDB.

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

3 years ago[clangd] Allow CDBs to have background work to block on.
Sam McCall [Wed, 13 Jan 2021 15:50:44 +0000 (16:50 +0100)]
[clangd] Allow CDBs to have background work to block on.

In preparation for moving DirectoryBasedCompilationDatabase broadcasting off
the main thread.

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

3 years ago[Test Commit] This is a test commit for https://reviews.llvm.org/D94904
Arun R [Wed, 20 Jan 2021 09:44:01 +0000 (15:14 +0530)]
[Test Commit] This is a test commit for https://reviews.llvm.org/D94904

D94904 Reviewed by xbolva00

Reviewers for D94904: llvm-commits, MatzeB, craig.topper, kparzysz, efriedma, pengfei, wxiao3, xbolva00

Subscribers for D94904: llvm-commits, xbolva00

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

3 years ago[clang][cli] Port more options to new parsing system
Jan Svoboda [Tue, 12 Jan 2021 13:04:06 +0000 (14:04 +0100)]
[clang][cli] Port more options to new parsing system

This patch adds marshalling information to more options.

Reviewed By: dexonsmith

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

3 years ago[AMDGPU][MC] Add tfe disassembler support MIMG opcodes
Petar Avramovic [Wed, 20 Jan 2021 09:09:59 +0000 (10:09 +0100)]
[AMDGPU][MC] Add tfe disassembler support MIMG opcodes

With tfe on there can be a vgpr write to vdata+1.
Add tablegen support for 5 register vdata store.
This is required for 4 register vdata store with tfe.

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

3 years ago[GlobalISel] Add missing operand update when copy is required
Gabriel Hjort Ã…kerlund [Wed, 20 Jan 2021 09:06:42 +0000 (10:06 +0100)]
[GlobalISel] Add missing operand update when copy is required

When constraining an operand register using constrainOperandRegClass(),
the function may emit a COPY in case the provided register class does
not match the current operand register class. However, the operand
itself is not updated to make use of the COPY, thereby resulting in
incorrect code. This patch fixes that bug by updating the machine
operand accordingly.

Reviewed By: dsanders

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

3 years ago[lldb][docs] Expand CSS fix for LLDB doc tables
Raphael Isemann [Wed, 20 Jan 2021 09:29:08 +0000 (10:29 +0100)]
[lldb][docs] Expand CSS fix for LLDB doc tables

Apparently the sphinx version on the server doesn't place <p> tags in the
table cells, so the previous fix from commit 7fce3b240b6b313b1becf19ddf3f2a90
didn't fix the bug for that sphinx version. Just expand the CSS workaround
to all <td> tags.

3 years ago[NFC][InstructionCost] Use InstructionCost in lib/Transforms/IPO/IROutliner.cpp
David Sherwood [Mon, 11 Jan 2021 16:56:10 +0000 (16:56 +0000)]
[NFC][InstructionCost] Use InstructionCost in lib/Transforms/IPO/IROutliner.cpp

In places where we call a TTI.getXXCost() function I have changed
the code to use InstructionCost instead of unsigned. This is in
preparation for later on when we will change the TTI interfaces
to return InstructionCost.

See this patch for the introduction of the type: https://reviews.llvm.org/D91174
See this thread for context: http://lists.llvm.org/pipermail/llvm-dev/2020-November/146408.html

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

3 years ago[lldb][docs] Filter out 'thisown' attribute and inheritance boilerplate
Raphael Isemann [Wed, 20 Jan 2021 08:06:38 +0000 (09:06 +0100)]
[lldb][docs] Filter out 'thisown' attribute and inheritance boilerplate

This patch implements a filter that post-processes some of the generated RST sources
of the Python API docs. I mainly want to avoid two things:

1. Filter out all the inheritance boilerplate that just keeps mentioning for
every class that it inherits from the builtin 'object'. There is no inheritance
in the SB API.

2. More importantly, removes the SWIG generated `thisown` attribute from the
public documentation. I don't think we want users to mess with that attribute
and this is probably causing more confusion than it would help anyone. It also
makes the documentation for some smaller classes more verbose than necessary.

This patch just uses the sphinx event for reading source and removes the parts
that we don't want in documentation.

Reviewed By: JDevlieghere

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

3 years ago[lldb][docs] Remove -webkit-hyphens in table cells so that table widths are correct...
Raphael Isemann [Wed, 20 Jan 2021 08:05:09 +0000 (09:05 +0100)]
[lldb][docs] Remove -webkit-hyphens in table cells so that table widths are correct on Safari

The tables in the new LLDB documentation currently are less wide than their
contents. The reason for that seems to be the `-webkit-hyphens: auto` property
that sphinx is setting for all `p` tags. The `p` tags in the generated Python
documentation seem to trigger some Safari layout issue, so Safari is calculating
the cell width to be smaller than it should be (which ends up looking like this
{F15104344} ).

This patch just sets that property back to the browser default `manual`. Not
sure if that's the proper workaround, but I clicked around on the website with
the changed CSS and nothing looked funny (which is I believe how webdev unit
testing works).

Reviewed By: JDevlieghere

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

3 years ago[X86] Add segment and address-size override prefixes
Bill Wendling [Thu, 14 Jan 2021 09:51:04 +0000 (01:51 -0800)]
[X86] Add segment and address-size override prefixes

X86 allows for the "addr32" and "addr16" address size override prefixes.
Also, these and the segment override prefixes should be recognized as
valid prefixes.

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

3 years ago[RISCV] Implement vlseg intrinsics.
Hsiangkai Wang [Thu, 31 Dec 2020 09:14:15 +0000 (17:14 +0800)]
[RISCV] Implement vlseg intrinsics.

For Zvlsseg, we need continuous vector registers for the values. We need
to define new register classes for the different combinations of (number
of fields and LMUL). For example,

when the number of fields(NF) = 3, LMUL = 2, the values will be assigned
to (V0M2, V2M2, V4M2), (V2M2, V4M2, V6M2), (V4M2, V6M2, V8M2), ...

We define the vlseg intrinsics with multiple outputs. There is no way to
describe the codegen patterns with multiple outputs in the tablegen
files. We do the codegen in RISCVISelDAGToDAG and use EXTRACT_SUBREG to
extract the values of output.

The multiple scalable vector values will be put into a struct. This
patch is depended on the support for scalable vector struct.

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

3 years ago[ELF] --wrap: Produce a dynamic symbol for undefined __wrap_
Fangrui Song [Wed, 20 Jan 2021 05:23:57 +0000 (21:23 -0800)]
[ELF] --wrap: Produce a dynamic symbol for undefined __wrap_

```
// a.s
jmp fcntl
// b.s
.globl fcntl
fcntl:
  ret
```

`ld.lld -shared --wrap=fcntl a.o b.o` has an `R_X86_64_JUMP_SLOT` referencing
the index 0 undefined symbol, which will cause a glibc `symbol lookup error` at
runtime. This is because `__wrap_fcntl` is not in .dynsym

We use an approximation `!wrap->isUndefined()`, which doesn't set
`isUsedInRegularObj` of `__wrap_fcntl` when `fcntl` is referenced and
`__wrap_fcntl` is undefined.

Fix this by using `sym->referenced`.

3 years ago[ELF][test] Improve --wrap tests
Fangrui Song [Wed, 20 Jan 2021 05:05:16 +0000 (21:05 -0800)]
[ELF][test] Improve --wrap tests

3 years ago[mlir][sparse] add narrower choices for pointers/indices
Aart Bik [Wed, 20 Jan 2021 02:34:26 +0000 (18:34 -0800)]
[mlir][sparse] add narrower choices for pointers/indices

Use cases with 16- or even 8-bit pointer/index structures have been identified.

Reviewed By: penpornk

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

3 years ago[llvm] Use llvm::all_of (NFC)
Kazu Hirata [Wed, 20 Jan 2021 04:19:17 +0000 (20:19 -0800)]
[llvm] Use llvm::all_of (NFC)

3 years ago[llvm] Use llvm::any_of (NFC)
Kazu Hirata [Wed, 20 Jan 2021 04:19:15 +0000 (20:19 -0800)]
[llvm] Use llvm::any_of (NFC)

3 years ago[llvm] Use llvm::find (NFC)
Kazu Hirata [Wed, 20 Jan 2021 04:19:14 +0000 (20:19 -0800)]
[llvm] Use llvm::find (NFC)

3 years ago[SimplifyCFG] Reapply update_test_checks.py (NFC)
Juneyoung Lee [Wed, 20 Jan 2021 03:41:30 +0000 (12:41 +0900)]
[SimplifyCFG] Reapply update_test_checks.py (NFC)

3 years ago[RISCV] refactor VPatBinary (NFC)
ShihPo Hung [Tue, 19 Jan 2021 07:58:36 +0000 (23:58 -0800)]
[RISCV] refactor VPatBinary (NFC)

Make it easier to reuse for intrinsic vrgatherei16
which needs to encode both LMUL & EMUL in the instruction name,
like PseudoVRGATHEREI16_VV_M1_M1 and PseudoVRGATHEREI16_VV_M1_M2.

Reviewed By: craig.topper

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

3 years agoAllow nonnull/align attribute to accept poison
Juneyoung Lee [Wed, 13 Jan 2021 02:43:38 +0000 (11:43 +0900)]
Allow nonnull/align attribute to accept poison

Currently LLVM is relying on ValueTracking's `isKnownNonZero` to attach `nonnull`, which can return true when the value is poison.
To make the semantics of `nonnull` consistent with the behavior of `isKnownNonZero`, this makes the semantics of `nonnull` to accept poison, and return poison if the input pointer isn't null.
This makes many transformations like below legal:

```
%p = gep inbounds %x, 1 ; % p is non-null pointer or poison
call void @f(%p)        ; instcombine converts this to call void @f(nonnull %p)
```

Instead, this semantics makes propagation of `nonnull` to caller illegal.
The reason is that, passing poison to `nonnull` does not immediately raise UB anymore, so such program is still well defined, if the callee does not use the argument.
Having `noundef` attribute there re-allows this.

```
define void @f(i8* %p) {       ; functionattr cannot mark %p nonnull here anymore
  call void @g(i8* nonnull %p) ; .. because @g never raises UB if it never uses %p.
  ret void
}
```

Another attribute that needs to be updated is `align`. This patch updates the semantics of align to accept poison as well.

Reviewed By: jdoerfert

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

3 years ago[llvm-profgen][NFC] Fix the incorrect computation of callsite sample count
wlei [Wed, 20 Jan 2021 00:20:11 +0000 (16:20 -0800)]
[llvm-profgen][NFC] Fix the incorrect computation of callsite sample count

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

3 years ago[llvm-link] Improve link time for bitcode archives [NFC]
Sergey Dmitriev [Wed, 20 Jan 2021 00:40:52 +0000 (16:40 -0800)]
[llvm-link] Improve link time for bitcode archives [NFC]

Linking large bitcode archives currently takes a lot of time with llvm-link,
this patch adds couple improvements which reduce link time for archives
- Use one Linker instance for archive instead of recreating it for each member
- Lazy load archive members

Reviewed By: tra, jdoerfert

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

3 years ago[mlir][python] Swap shape and element_type order for MemRefType.
Stella Laurenzo [Wed, 20 Jan 2021 00:02:02 +0000 (16:02 -0800)]
[mlir][python] Swap shape and element_type order for MemRefType.

* Matches how all of the other shaped types are declared.
* No super principled reason fro this ordering beyond that it makes the one that was different be like the rest.
* Also matches ordering of things like ndarray, et al.

Reviewed By: ftynse, nicolasvasilache

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

3 years ago[gn build] fix libcxx gn file with libcxx_abi_namespace set
Nico Weber [Wed, 20 Jan 2021 00:02:40 +0000 (19:02 -0500)]
[gn build] fix libcxx gn file with libcxx_abi_namespace set

3 years ago[gn build] (manually) port 933518fff82c
Nico Weber [Tue, 19 Jan 2021 23:51:39 +0000 (18:51 -0500)]
[gn build] (manually) port 933518fff82c

3 years ago[xray] Honor xray-never function-instrument attribute
Ian Levesque [Thu, 15 Oct 2020 02:18:30 +0000 (22:18 -0400)]
[xray] Honor xray-never function-instrument attribute

function-instrument=xray-never wasn't actually honored before. We were
getting lucky that it worked because CodeGenFunction would omit the
other xray attributes when a function was annotated with
xray_never_instrument. This patch adds proper support.

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

3 years agoFix Wmissing-field-initializers warnings.
Wei Mi [Tue, 19 Jan 2021 23:26:52 +0000 (15:26 -0800)]
Fix Wmissing-field-initializers warnings.

3 years ago[SampleFDO] Add the support to split the function profiles with context into
Wei Mi [Wed, 6 Jan 2021 07:24:43 +0000 (23:24 -0800)]
[SampleFDO] Add the support to split the function profiles with context into
separate sections.

For ThinLTO, all the function profiles without context has been annotated to
outline functions if possible in prelink phase. In postlink phase, profile
annotation in postlink phase is only meaningful for function profile with
context. If the profile is large, it is better to split the profile into two
parts, one with context and one without, so the profile reading in postlink
phase only has to read the part with context. To have the profile splitting,
we extend the ExtBinary format to support different section arrangement. It
will be flexible to add other section layout in the future without the need
to create new class inheriting from ExtBinary class.

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

3 years agoImplement constant folding for DivFOp
Jackson Fellows [Tue, 19 Jan 2021 22:41:45 +0000 (22:41 +0000)]
Implement constant folding for DivFOp

Add a constant folder for DivFOp. Analogous to existing folders for
AddFOp, SubFOp, and MulFOp. Matches the behavior of existing LLVM
constant folding (https://github.com/llvm/llvm-project/blob/999f5da6b3088fa4c0bb9d05b358d015ca74c71f/llvm/lib/IR/ConstantFold.cpp#L1432).

Reviewed By: ftynse

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

3 years agoRevert "[WebAssembly] call_indirect issues table number relocs"
Sam Clegg [Tue, 19 Jan 2021 22:29:05 +0000 (14:29 -0800)]
Revert "[WebAssembly] call_indirect issues table number relocs"

This reverts commit 418df4a6ab35d343cc0f2608c90a73dd9b8d0ab1.

This change broke emscripten tests, I believe because it started
generating 5-byte a wide table index in the call_indirect instruction.
Neither v8 nor wabt seem to be able to handle that.  The spec
currently says that this is single 0x0 byte and:

"In future versions of WebAssembly, the zero byte occurring in the
encoding of the call_indirectcall_indirect instruction may be used to
index additional tables."

So we need to revisit this change.  For backwards compat I guess
we need to guarantee that __indirect_function_table is always at
address zero.   We could also consider making this a single-byte
relocation with and assert if have more than 127 tables (for now).

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

3 years agoAdd API to retrieve a clade kind from ASTNodeKind
Stephen Kelly [Sun, 17 Jan 2021 16:22:41 +0000 (16:22 +0000)]
Add API to retrieve a clade kind from ASTNodeKind

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

3 years agoRemove unused functions.
Eric Christopher [Tue, 19 Jan 2021 22:31:31 +0000 (14:31 -0800)]
Remove unused functions.

3 years agoRemove TypedMatcherOps from VariantValue
Stephen Kelly [Sun, 17 Jan 2021 16:26:02 +0000 (16:26 +0000)]
Remove TypedMatcherOps from VariantValue

It provides no features or advantage over ASTNodeKind-based handling.

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

3 years ago[msabi] Mangle a template argument referring to array-to-pointer decay
Richard Smith [Tue, 19 Jan 2021 22:37:10 +0000 (14:37 -0800)]
[msabi] Mangle a template argument referring to array-to-pointer decay
applied to an array the same as the array itself.

This follows MS ABI, and corrects a regression from the implementation
of generalized non-type template parameters, where we "forgot" how to
mangle this case.

3 years ago[RISCV] Remove NotHasStdExtZbb predicate from zext.h/sext.b/sext.h InstAliases. NFC
Craig Topper [Tue, 19 Jan 2021 22:31:42 +0000 (14:31 -0800)]
[RISCV] Remove NotHasStdExtZbb predicate from zext.h/sext.b/sext.h InstAliases. NFC

NotHasStdExtZbb doesn't have an AssemblerPredicate associated with it
so it didn't do anything. We don't need it either because the sorting
rules in tablegen prioritize by number of predicates. So the
dedicated instructions in the B extension that have predicates
will be prioritized automatically.

3 years ago[ASTMatchers] Allow use of mapAnyOf in more contexts
Stephen Kelly [Sat, 16 Jan 2021 14:25:11 +0000 (14:25 +0000)]
[ASTMatchers] Allow use of mapAnyOf in more contexts

Add an operator overload to ArgumentAdaptingMatcherFunc to allow use of
mapAnyOf within hasAncestor, hasParent etc.

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

3 years ago[lldb/test] Skip TestProcessAttach: test_attach_to_process_from_different_dir_by_id...
Stella Stamenova [Tue, 19 Jan 2021 22:09:09 +0000 (14:09 -0800)]
[lldb/test] Skip TestProcessAttach: test_attach_to_process_from_different_dir_by_id on Windows

This test is flakey on Windows and on failure it hangs causing the test suite to fail and future builds (on the buildbot, especially) to fail because they cannot re-write the files that are currently in use

3 years ago[mlir][splitting std] move 2 more ops to `tensor`
Sean Silva [Fri, 15 Jan 2021 02:28:48 +0000 (18:28 -0800)]
[mlir][splitting std] move 2 more ops to `tensor`

- DynamicTensorFromElementsOp
- TensorFromElements

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

3 years ago[ASTMatchers] NFC Rearrange declarations to allow more arg adapting
Stephen Kelly [Tue, 19 Jan 2021 20:50:54 +0000 (20:50 +0000)]
[ASTMatchers] NFC Rearrange declarations to allow more arg adapting

3 years ago[mlir][python] Add facility for extending generated python ODS.
Stella Laurenzo [Tue, 19 Jan 2021 21:16:16 +0000 (13:16 -0800)]
[mlir][python] Add facility for extending generated python ODS.

* This isn't exclusive with other mechanisms for more ODS centric op definitions, but based on discussions, we feel that we will always benefit from a python escape hatch, and that is the most natural way to write things that don't fit the mold.
* I suspect this facility needs further tweaking, and once it settles, I'll document it and add more tests.
* Added extensions for linalg, since it is unusable without them and continued to evolve my e2e example.

Reviewed By: ftynse

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

3 years ago[lld][WebAssembly] Don't defined indirect function table in relocatable output
Sam Clegg [Tue, 19 Jan 2021 20:10:15 +0000 (12:10 -0800)]
[lld][WebAssembly] Don't defined indirect function table in relocatable output

Object files (and the output --relocatable) should never define
__indirect_function_table.  It should always be linker synthesized
with the final output executable.

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

3 years agoRevert "DR2064: decltype(E) is only a dependent type if E is type-dependent, not
Richard Smith [Tue, 19 Jan 2021 19:54:06 +0000 (11:54 -0800)]
Revert "DR2064: decltype(E) is only a dependent type if E is type-dependent, not
if E is merely instantiation-dependent."

This change leaves us unable to distinguish between different function
templates that differ in only instantiation-dependent ways, for example

template<typename T> decltype(int(T())) f();
template<typename T> decltype(int(T(0))) f();

We'll need substantially better support for types that are
instantiation-dependent but not dependent before we can go ahead with
this change.

This reverts commit e3065ce238475ec202c707f4c58d90df171626ca.

3 years agoEnsure we don't strip the ConstantExpr carrying a non-type template
Richard Smith [Tue, 19 Jan 2021 20:09:12 +0000 (12:09 -0800)]
Ensure we don't strip the ConstantExpr carrying a non-type template
argument's value off it during substitution.

3 years ago[libc] Extend the current fenv functions to aarch64.
Siva Chandra [Fri, 15 Jan 2021 09:34:58 +0000 (01:34 -0800)]
[libc] Extend the current fenv functions to aarch64.

This change does not try to move the common parts of x86 and aarch64 and
build few abstractions over them. While this is possible, x86 story
needs a bit of cleanup, especially around manipulation of the mxcsr
register. Moreover, on x86 one can raise exceptions without performing
exception raising operations. So, all of this can be done in follow up
patches.

Reviewed By: lntue

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

3 years ago[OPENMP]Do not use OMP_MAP_TARGET_PARAM for data movement directives.
Alexey Bataev [Tue, 19 Jan 2021 20:22:53 +0000 (12:22 -0800)]
[OPENMP]Do not use OMP_MAP_TARGET_PARAM for data movement directives.

OMP_MAP_TARGET_PARAM flag is used to mark the data that shoud be passed
as arguments to the target kernels, nothing else. But the compiler still
marks the data with OMP_MAP_TARGET_PARAM flags even if the data is
passed to the data movement directives, like target data, target update
etc. This flag is just ignored for this directives and the compiler does
not need to emit it.

Reviewed By: cchen

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

3 years ago[polly][NewPM][test] Fix polly tests under -enable-new-pm
Arthur Eubanks [Thu, 7 Jan 2021 22:01:04 +0000 (14:01 -0800)]
[polly][NewPM][test] Fix polly tests under -enable-new-pm

In preparation for turning on opt's -enable-new-pm by default, this pins
uses of passes via the legacy "opt -passname" with pass names beginning
with "polly-" and "polyhedral-info" to the legacy PM. Many of these
tests use -analyze, which isn't supported in the new PM.

(This doesn't affect uses of "opt -passes=passname").

rL240766 accidentally removed `-polly-prepare` in
phi_not_grouped_at_top.ll, and it also doesn't use the output of
-analyze.

Reviewed By: Meinersbur

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

3 years ago[NFC] Disallow unused prefixes under Other
Mircea Trofin [Sat, 16 Jan 2021 02:19:56 +0000 (18:19 -0800)]
[NFC] Disallow unused prefixes under Other

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

3 years agoRevert "[SLP]Merge reorder and reuse shuffles."
Alexey Bataev [Tue, 19 Jan 2021 19:19:09 +0000 (11:19 -0800)]
Revert "[SLP]Merge reorder and reuse shuffles."

This reverts commit 438682de6a38ac97f89fa38faf5c8dc9b09cd9ad to fix the
bug with the reducing size of the resulting vector for the entry node
with multiple users.

3 years ago[NFC] cleanup noalias2.ll test
Jeroen Dobbelaere [Tue, 19 Jan 2021 19:45:35 +0000 (20:45 +0100)]
[NFC] cleanup noalias2.ll test

D75825 and D75828 modified llvm/test/Transforms/Inline/noalias2.ll to handle llvm.assume. The checking though was broken.
The NO_ASSUME has been replaced by a normal CHECK; the ASSUME rules were never triggered and have been removed.
The test checks have been regenerated.

Reviewed By: nikic

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

3 years agoRevert "[PDB] Defer relocating .debug$S until commit time and parallelize it"
Mitch Phillips [Tue, 19 Jan 2021 19:20:23 +0000 (11:20 -0800)]
Revert "[PDB] Defer relocating .debug$S until commit time and parallelize it"

This reverts commit 6529d7c5a45b1b9588e512013b02f891d71bc134.

Reason: Broke the ASan buildbots.
http://lab.llvm.org:8011/#/builders/99/builds/1567

3 years ago[flang] Refine WhyNotModifiable()
peter klausler [Sat, 16 Jan 2021 00:59:52 +0000 (16:59 -0800)]
[flang] Refine WhyNotModifiable()

The utility routine WhyNotModifiable() needed to become more
aware of the use of pointers in data-refs; the targets of
pointer components are sometimes modifiable even when the
leftmost ("base") symbol of a data-ref is not.

Added a new unit test for WhyNotModifiable() that uses internal
READ statements (mostly), since I/O semantic checking uses
WhyNotModifiable() for all its definability checking.

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

3 years ago[ELF] Support R_PPC64_ADDR16_HIGH
Fangrui Song [Tue, 19 Jan 2021 19:42:52 +0000 (11:42 -0800)]
[ELF] Support R_PPC64_ADDR16_HIGH

R_PPC64_ADDR16_HI represents bits 16-31 of a 32-bit value
R_PPC64_ADDR16_HIGH represents bits 16-31 of a 64-bit value.

In the Linux kernel, `LOAD_REG_IMMEDIATE_SYM` defined in `arch/powerpc/include/asm/ppc_asm.h`
uses @l, @high, @higher, @highest to load the 64-bit value of a symbol.

Fixes https://github.com/ClangBuiltLinux/linux/issues/1260

3 years ago[ELF] Error for out-of-range R_PPC64_ADDR16_HA, R_PPC64_ADDR16_HI and their friends
Fangrui Song [Tue, 19 Jan 2021 19:16:27 +0000 (11:16 -0800)]
[ELF] Error for out-of-range R_PPC64_ADDR16_HA, R_PPC64_ADDR16_HI and their friends

There are no tests for REL16_* and TPREL16_*.

3 years ago[ELF] Improve R_PPC64_ADDR* relocation tests
Fangrui Song [Tue, 19 Jan 2021 19:32:53 +0000 (11:32 -0800)]
[ELF] Improve R_PPC64_ADDR* relocation tests

3 years ago[llvm] Protect signpost map with a mutex
Jonas Devlieghere [Tue, 19 Jan 2021 19:37:45 +0000 (11:37 -0800)]
[llvm] Protect signpost map with a mutex

Use a mutex to protect concurrent access to the signpost map. This fixes
nondeterministic crashes in LLDB that appeared after using signposts in
the timer implementation.

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

3 years ago[libc++][P1679] add string contains
Wim Leflere [Tue, 19 Jan 2021 19:33:30 +0000 (14:33 -0500)]
[libc++][P1679] add string contains

C++23 string contains implementation and tests

Paper: https://wg21.link/P1679R3
Standard (string): https://eel.is/c++draft/string.contains
Standard (string_view): https://eel.is/c++draft/string.view.ops#lib:contains,basic_string_view

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

3 years ago[ScalarizeMaskedMemIntrin] Add missing dependency
Mariya Podchishchaeva [Mon, 18 Jan 2021 15:53:08 +0000 (18:53 +0300)]
[ScalarizeMaskedMemIntrin] Add missing dependency

The pass has dependency on 'TargetTransformInfoWrapperPass', but the
corresponding call to INITIALIZE_PASS_DEPENDENCY was missing.

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

3 years agoReapply [InstCombine] Replace one-use select operand based on condition
Nikita Popov [Sat, 16 Jan 2021 11:41:35 +0000 (12:41 +0100)]
Reapply [InstCombine] Replace one-use select operand based on condition

Relative to the original change, this adds a check that the
instruction on which we're replacing operands is safe to speculatively
execute, because that's what we're effectively doing. We're executing
the instruction with the replaced operand, which is fine if it's pure,
but not fine if can cause side-effects or UB (aka is not speculatable).

Additionally, we cannot (generally) replace operands in phi nodes,
as these may refer to a different loop iteration. This is also covered
by the speculation check.

-----

InstCombine already performs a fold where X == Y ? f(X) : Z is
transformed to X == Y ? f(Y) : Z if f(Y) simplifies. However,
if f(X) only has one use, then we can always directly replace the
use inside the instruction. To actually be profitable, limit it to
the case where Y is a non-expr constant.

This could be further extended to replace uses further up a one-use
instruction chain, but for now this only looks one level up.

Among other things, this also subsumes D94860.

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

3 years ago[InstCombine] Add additional tests for select operand replacement (NFC)
Nikita Popov [Tue, 19 Jan 2021 19:11:20 +0000 (20:11 +0100)]
[InstCombine] Add additional tests for select operand replacement (NFC)

In particular, add tests for speculatable and non-speculatable
instructions.

3 years ago[wasm][LLD] Rename --lto-new-pass-manager to --no-lto-legacy-pass-manager
Arthur Eubanks [Mon, 14 Dec 2020 23:03:28 +0000 (15:03 -0800)]
[wasm][LLD] Rename --lto-new-pass-manager to --no-lto-legacy-pass-manager

This follows a similar ELF change.

Reviewed By: MaskRay, sbc100

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

3 years ago[RISCV] Add DAG combine to turn (setcc X, 1, setne) -> (setcc X, 0, seteq) if we...
Craig Topper [Tue, 19 Jan 2021 18:58:49 +0000 (10:58 -0800)]
[RISCV] Add DAG combine to turn (setcc X, 1, setne) -> (setcc X, 0, seteq) if we can prove X is 0/1.

If we are able to compare with 0 instead of 1, we might be able
to fold the setcc into a beqz/bnez.

Often these setccs start life as an xor that gets converted to
a setcc by DAG combiner's rebuildSetcc. I looked into a detecting
(xor X, 1) and converting to (seteq X, 0) based on boolean contents
being 0/1 in rebuildSetcc instead of using computeKnownBits. It was
very perturbing to AMDGPU tests which I didn't look closely at.
It had a few changes on a couple other targets, but didn't seem
to be much if any improvement.

Reviewed By: lenary

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

3 years ago[Clang][OpenMP] Fixed an issue that clang crashed when compiling OpenMP program in...
Shilei Tian [Tue, 19 Jan 2021 19:18:35 +0000 (14:18 -0500)]
[Clang][OpenMP] Fixed an issue that clang crashed when compiling OpenMP program in device only mode without host IR

D94745 rewrites the `deviceRTLs` using OpenMP and compiles it by directly
calling the device compilation. `clang` crashes because entry in
`OffloadEntriesDeviceGlobalVar` is unintialized. Current design supposes the
device compilation can only be invoked after host compilation with the host IR
such that `clang` can initialize `OffloadEntriesDeviceGlobalVar` from host IR.
This avoids us using device compilation directly, especially when we only have
code wrapped into `declare target` which are all device code. The same issue
also exists for `OffloadEntriesInfoManager`.

In this patch, we simply initialized an entry if it is not in the maps. Not sure
we need an option to tell the device compiler that it is invoked standalone.

Reviewed By: jdoerfert

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

3 years ago[libc++] Make LIBCXX_ENABLE_FILESYSTEM fully consistent
Louis Dionne [Mon, 18 Jan 2021 17:18:18 +0000 (12:18 -0500)]
[libc++] Make LIBCXX_ENABLE_FILESYSTEM fully consistent

Previously, LIBCXX_ENABLE_FILESYSTEM controlled only whether the filesystem
support was compiled into libc++'s library. This commit promotes the
setting to a first-class option like LIBCXX_ENABLE_LOCALIZATION, where
the whole library is aware of the setting and features that depend on
<filesystem> won't be provided at all. The test suite is also properly
annotated such that tests that depend on <filesystem> are disabled when
the library doesn't support it.

This is an alternative to https://llvm.org/D94824, but also an improvement
along the lines of LIBCXX_ENABLE_LOCALIZATION that I had been wanting to
make for a while.

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

3 years ago[libc++] Unbreak the debug mode
Louis Dionne [Thu, 14 Jan 2021 21:27:53 +0000 (16:27 -0500)]
[libc++] Unbreak the debug mode

When the Debug mode is enabled, we disable extern declarations because we
don't want to use the functions compiled in the library, which might not
have had the debug mode enabled when built. However, some extern declarations
need to be kept, because code correctness depends on it.

31e820378b8a removed those declarations, which had the unintended
consequence of breaking the debug build. This commit fixes that by
re-introducing a separate macro for the required extern declarations,
and adds a comment so that we don't fall into that trap in the future.

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

3 years agoAdd bounds checking assertions to APValue, NFC
Reid Kleckner [Tue, 19 Jan 2021 19:03:18 +0000 (11:03 -0800)]
Add bounds checking assertions to APValue, NFC

These checks help find llvm.org/pr48582 without ASan

3 years agoConsider ASan messages interesting for creduce
Reid Kleckner [Tue, 19 Jan 2021 19:00:33 +0000 (11:00 -0800)]
Consider ASan messages interesting for creduce

Helped me reduce llvm.org/pr48582

3 years ago[noalias.decl] Look through llvm.experimental.noalias.scope.decl
Jeroen Dobbelaere [Tue, 19 Jan 2021 19:04:52 +0000 (20:04 +0100)]
[noalias.decl] Look through llvm.experimental.noalias.scope.decl

Just like llvm.assume, there are a lot of cases where we can just ignore llvm.experimental.noalias.scope.decl.

Reviewed By: nikic

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

3 years ago[www] Fix background color in table cell.
Richard Smith [Tue, 19 Jan 2021 19:04:08 +0000 (11:04 -0800)]
[www] Fix background color in table cell.

3 years ago[Hexagon] Fix segment start to adjust for gaps between segments
Brendon Cahoon [Tue, 19 Jan 2021 18:42:29 +0000 (12:42 -0600)]
[Hexagon] Fix segment start to adjust for gaps between segments

The Hexagon Vector Combine pass genertes stores for a complete
aligned vector. The start of each section is a multiple of the
vector size, so that value is passed to normalize to compute
the offset of the stores in the section.  The first store may
not occur at offset 0 when there is a gap between sections.

3 years ago[clangd] Use ASTSignals in Heuristics CC Ranking.
Utkarsh Saxena [Mon, 18 Jan 2021 20:01:46 +0000 (21:01 +0100)]
[clangd] Use ASTSignals in Heuristics CC Ranking.

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

3 years ago[AMDGPU] Simpler names for arch-specific ttmp registers. NFC.
Jay Foad [Tue, 19 Jan 2021 16:15:23 +0000 (16:15 +0000)]
[AMDGPU] Simpler names for arch-specific ttmp registers. NFC.

Rename the *_gfx9_gfx10 ttmp registers to *_gfx9plus for simplicity,
and use the corresponding isGFX9Plus predicate to decide when to use
them instead of the old *_vi versions.

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

3 years agoFix buildbot after cfc60730179042a93cb9cb338982e71d20707a24
Jessica Paquette [Tue, 19 Jan 2021 18:38:04 +0000 (10:38 -0800)]
Fix buildbot after cfc60730179042a93cb9cb338982e71d20707a24

Windows buildbots were not happy with using find_if + instructionsWithoutDebug.

In cfc60730179042a9, instructionsWithoutDebug is not technically necessary. So,
just iterate over the block directly.

http://lab.llvm.org:8011/#/builders/127/builds/4732/steps/7/logs/stdio

3 years ago[GlobalISel] Combine (a[0]) | (a[1] << k1) | ...| (a[m] << kn) into a wide load
Jessica Paquette [Fri, 18 Dec 2020 20:56:14 +0000 (12:56 -0800)]
[GlobalISel] Combine (a[0]) | (a[1] << k1) | ...|  (a[m] << kn) into a wide load

This is a restricted version of the combine in `DAGCombiner::MatchLoadCombine`.
(See D27861)

This tries to recognize patterns like below (assuming a little-endian target):

```
s8* x = ...
s32 val = a[0] | (a[1] << 8) | (a[2] << 16) | (a[3] << 24)
->
s32 val = *((i32)a)

s8* x = ...
s32 val = a[3] | (a[2] << 8) | (a[1] << 16) | (a[0] << 24)
->
s32 val = BSWAP(*((s32)a))
```

(This patch also handles the big-endian target case as well, in which the first
example above has a BSWAP, and the second example above does not.)

To recognize the pattern, this searches from the last G_OR in the expression
tree.

E.g.

```
    Reg   Reg
     \    /
      OR_1   Reg
       \    /
        OR_2
          \     Reg
           .. /
          Root
```

Each non-OR register in the tree is put in a list. Each register in the list is
then checked to see if it's an appropriate load + shift logic.

If every register is a load + potentially a shift, the combine checks if those
loads + shifts, when OR'd together, are equivalent to a wide load (possibly with
a BSWAP.)

To simplify things, this patch

(1) Only handles G_ZEXTLOADs (which appear to be the common case)
(2) Only works in a single MachineBasicBlock
(3) Only handles G_SHL as the bit twiddling to stick the small load into a
    specific location

An IR example of this is here: https://godbolt.org/z/4sP9Pj (lifted from
test/CodeGen/AArch64/load-combine.ll)

At -Os on AArch64, this is a 0.5% code size improvement for CTMark/sqlite3,
and a 0.4% improvement for CTMark/7zip-benchmark.

Also fix a bug in `isPredecessor` which caused it to fail whenever `DefMI` was
the first instruction in the block.

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

3 years ago[RISCV] Add ISel patterns for scalable mask exts & truncs
Fraser Cormack [Wed, 13 Jan 2021 12:27:05 +0000 (12:27 +0000)]
[RISCV] Add ISel patterns for scalable mask exts & truncs

Original patch by @rogfer01.

This patch adds support for sign-, zero-, and any-extension from
scalable mask vector types to integer vector types, as well as
truncation in the opposite direction.

Authored-by: Roger Ferrer Ibanez <rofirrim@gmail.com>
Co-Authored-by: Fraser Cormack <fraser@codeplay.com>
Reviewed By: craig.topper

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

3 years ago[SystemZ][z/OS] Fix Permission denied pattern matching
Abhina Sreeskantharajan [Tue, 19 Jan 2021 18:04:27 +0000 (13:04 -0500)]
[SystemZ][z/OS] Fix Permission denied pattern matching

On z/OS, the error message "EDC5111I Permission denied." is not matched correctly in lit tests. This patch updates the check expression to match successfully.

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

3 years ago[Polly] Update isl to isl-0.23-61-g24e8cd12.
Michael Kruse [Tue, 19 Jan 2021 16:28:43 +0000 (10:28 -0600)]
[Polly] Update isl to isl-0.23-61-g24e8cd12.

This fixes llvm.org/PR48554

Some test cases had to be updated because the hash function for
union_maps have been changed which affects the output order.

3 years ago[lldb][docs] Update .htaccess to redirect from old SB API documentation to new one
Raphael Isemann [Tue, 19 Jan 2021 17:57:32 +0000 (18:57 +0100)]
[lldb][docs] Update .htaccess to redirect from old SB API documentation to new one

This is mostly SEO so that the new API can take over the old API when people
search for the different SB* classes. Sadly epydoc decided to throw in a -class
prefix behind all the class file names, so we can't just overwrite the old files
with the newly generated ones.

Reviewed By: JDevlieghere

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

3 years ago[ARM] Expand vXi1 VSELECT's
David Green [Tue, 19 Jan 2021 17:56:50 +0000 (17:56 +0000)]
[ARM] Expand vXi1 VSELECT's

We have no lowering for VSELECT vXi1, vXi1, vXi1, so mark them as
expanded to turn them into a series of logical operations.

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

3 years ago[lldb][docs] Add a doc page for enums and constants
Raphael Isemann [Tue, 19 Jan 2021 17:53:52 +0000 (18:53 +0100)]
[lldb][docs] Add a doc page for enums and constants

Enums and constants are currently missing in the new LLDB Python API docs.

In theory we could just let them be autogenerated like the SB API classes, but sadly the generated documentation
suffers from a bunch of problems. Most of these problems come from the way SWIG is representing enums, which is
done by translating every single enum case into its own constant. This has a bunch of nasty effects:

* Because SWIG throws away the enum types, we can't actually reference the enum type itself in the API. Also because automodapi is impossible to script, this can't be fixed in post (at least without running like sed over the output files).
* The lack of enum types also causes that every enum *case* has its own full doc page. Having a full doc page that just shows a single enum case is pointless and it really slows down sphinx.
* There is no SWIG code for the enums, so there is also no place to write documentation strings for them. Also there is no support for copying the doxygen strings (which would be in the wrong format, but better than nothing) for enums (let alone our defines), so we can't really document all this code.
* Because the enum cases are just forwards to the native lldb module (which we mock), automodapi actually takes the `Mock` docstrings and adds it to every single enum case.

I don't see any way to solve this via automodapi or SWIG. The most reasonable way to solve this is IMHO to write a simple Clang tool
that just parses our enum/constant headers and emits an *.rst file that we check in. This way we can do all the LLDB-specific enum case and constant
grouping that we need to make a readable documentation page.

As we're without any real documentation until I get around to write that tool, I wrote a doc page for the enums/constants as a stop gap measure.
Most of this is done by just grepping our enum header and then manually cleaning up all the artifacts and copying the few doc strings we have.

Reviewed By: JDevlieghere

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