Changes

Summary

  1. [WebAssembly] Ignore filters in Emscripten EH landingpads (details)
  2. [mlir] Add Python bindings for vector dialect (details)
  3. [mlir][Linalg] Drop spurious usage of OperationFolder (details)
  4. [CodeGen] Add support for widening INSERT_SUBVECTOR operands (details)
  5. [RISCV] Add legality check for vectorizing reduction (details)
  6. [X86][AVX] Don't scrub pointer math in avx-vperm2x128.ll (details)
  7. libsanitizer: Guard cyclades inclusion in sanitizer (details)
  8. [NFC][SimplifyCFG] Autogenerate checklines in a few tests for ease of updates (details)
  9. [NFC][PruneEH] Autogenerate checklines in a few tests for ease of updates (details)
  10. [NFC][CHR] Autogenerate checklines in a few tests for ease of updates (details)
  11. [llvm-objcopy] Refactor CopyConfig structure. (details)
  12. [gn build] Port 081c62501e4f (details)
  13. [AArch64] Add extra codegen tests. NFC (details)
  14. [llvm-strip] Add support for '--' for delimiting options from input files (details)
  15. [NFC][Coroutines] Autogenerate a few tests for ease of further updates (details)
  16. Reapply "[clang][deps] Support inferred modules" (details)
  17. [llvm][sve] Lowering for VLS MLOAD/MSTORE (details)
Commit 412a3381f721452fb6cd33bc30e7700102639e3f by aheejin
[WebAssembly] Ignore filters in Emscripten EH landingpads

We have been handling filters and landingpads incorrectly all along. We
pass clauses' (catches') types to `__cxa_find_matching_catch` in JS glue
code, which returns the thrown pointer and sets the selector using
`setTempRet0()`.

We apparently have been doing the same for filters' (exception specs')
types; we pass them to `__cxa_find_matching_catch` just the same way as
clauses. And `__cxa_find_matching_catch` treats all given types as
clauses. So it is a little surprising; maybe we intended to do something
from the JS side and didn't end up doing?

So anyway, I don't think supporting exception specs in Emscripten EH is
a priority, but this can actually cause incorrect results for normal
catches when functions are inlined and the inlined spec type has a
parent-child relationship with the catch's type.

---

The below is an example of a bug that can happen when inlining and class
hierarchy is mixed. If you are busy you can skip this part:
```
struct A {};
struct B : A {};

void bar() throw (B) { throw B(); }

void foo() {
  try {
    bar();
  } catch (A &) {
    fputs ("Expected result\n", stdout);
  }
}
```

In the unoptimized code, `bar`'s landingpad will have a filter for `B`
and `foo`'s landingpad will have a clause for `A`. But when `bar` is
inlined into `foo`, `foo`'s landingpad has both a filter for `B` and a
clause for `A`, and it passes the both types to
`__cxa_find_matching_catch`:
```
__cxa_find_matching_catch(typeinfo for B, typeinfo for A)
```
`__cxa_find_matching_catch` thinks both are clauses, and looks at the
first type `B`, which belongs to a filter. And the thrown type is `B`,
so it thinks the first type `B` is caught. But this makes it return an
incorrect selector, because it is supposed to catch the exception using
the second type `A`, which is a parent of `B`. As a result, the `foo` in
the example program above does not print "Expected result" but just
throws the exception to the caller. (This wouldn't have happened if `A`
and `B` are completely disjoint types, such as `float` and `int`)

Fixes https://bugs.llvm.org/show_bug.cgi?id=50357.

Reviewed By: dschuff, kripken

Differential Revision: https://reviews.llvm.org/D102795
The file was modifiedllvm/test/CodeGen/WebAssembly/lower-em-exceptions.ll
The file was modifiedllvm/lib/Target/WebAssembly/WebAssemblyLowerEmscriptenEHSjLj.cpp
Commit 4cd1b66dffb06695b4eaf725df8c402347e39bf0 by springerm
[mlir] Add Python bindings for vector dialect

Also add a minimal test case for vector.print.

Differential Revision: https://reviews.llvm.org/D102826
The file was addedmlir/python/mlir/dialects/VectorOps.td
The file was modifiedmlir/python/mlir/dialects/CMakeLists.txt
The file was addedmlir/test/python/dialects/vector.py
The file was addedmlir/python/mlir/dialects/vector.py
Commit ef33c6e3ceb01ee573b70f63bf12c2dcdf84f26a by nicolas.vasilache
[mlir][Linalg] Drop spurious usage of OperationFolder

Instead, use createOrFold builders which result in more static information available.

Differential Revision: https://reviews.llvm.org/D102832
The file was modifiedmlir/include/mlir/Dialect/Linalg/EDSC/FoldedIntrinsics.h
The file was modifiedmlir/include/mlir/Dialect/Linalg/Utils/Utils.h
The file was modifiedmlir/test/Dialect/Linalg/transform-patterns.mlir
The file was modifiedmlir/test/lib/Dialect/Linalg/TestLinalgTransforms.cpp
The file was modifiedmlir/lib/Dialect/Linalg/Transforms/Promotion.cpp
The file was modifiedmlir/include/mlir/Dialect/Linalg/Transforms/Transforms.h
Commit d07d5c1b061bf7139e32b954d64259b7fe829953 by david.sherwood
[CodeGen] Add support for widening INSERT_SUBVECTOR operands

When attempting to return something like a <vscale x 1 x i32>
type from a function we end up trying to widen the vector by
inserting a <vscale x 1 x i32> subvector into an undefined
<vscale x 4 x i32> vector. However, during legalisation we
then attempt to widen the INSERT_SUBVECTOR operands and hit
an error in WidenVectorOperand.

This patch adds a new WidenVecOp_INSERT_SUBVECTOR function
that currently only supports inserting subvectors into undefined
vectors.

Differential Revision: https://reviews.llvm.org/D102501
The file was modifiedllvm/test/CodeGen/AArch64/sve-vector-splat.ll
The file was modifiedllvm/lib/CodeGen/SelectionDAG/LegalizeTypes.h
The file was modifiedllvm/test/CodeGen/AArch64/sve-insert-vector.ll
The file was modifiedllvm/lib/CodeGen/SelectionDAG/LegalizeVectorTypes.cpp
Commit 1595994b2825a396f650dd8dab8c72a3d71cbc8e by luke957
[RISCV] Add legality check for vectorizing reduction

Check if it is legal to vectorize reduction.

Reviewed By: frasercrmck

Differential Revision: https://reviews.llvm.org/D99509
The file was modifiedllvm/lib/Target/RISCV/RISCVTargetTransformInfo.h
The file was addedllvm/test/Transforms/LoopVectorize/RISCV/scalable-reductions.ll
Commit 10e88972ee2be2cbb6967ec6dadebd38dcf3f022 by llvm-dev
[X86][AVX] Don't scrub pointer math in avx-vperm2x128.ll

This will make it easier to track address offsets in folded loads/broadcasts of subvectors
The file was modifiedllvm/test/CodeGen/X86/avx-vperm2x128.ll
Commit f7c5351552387bd43f6ca3631016d7f0dfe0f135 by tamar.christina
libsanitizer: Guard cyclades inclusion in sanitizer

The Linux kernel has removed the interface to cyclades from
the latest kernel headers[1] due to them being orphaned for the
past 13 years.

libsanitizer uses this header when compiling against glibc, but
glibcs itself doesn't seem to have any references to cyclades.

Further more it seems that the driver is broken in the kernel and
the firmware doesn't seem to be available anymore.

As such since this is breaking the build of libsanitizer (and so the
GCC bootstrap[2]) I propose to remove this.

[1] https://lkml.org/lkml/2021/3/2/153
[2] https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100379

Reviewed By: eugenis

Differential Revision: https://reviews.llvm.org/D102059
The file was modifiedcompiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.h
The file was modifiedcompiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cpp
The file was modifiedcompiler-rt/lib/sanitizer_common/sanitizer_common_interceptors_ioctl.inc
Commit 8294e94ad3e0d580f4aafc2534b53feb50da066e by lebedev.ri
[NFC][SimplifyCFG] Autogenerate checklines in a few tests for ease of updates
The file was modifiedllvm/test/Transforms/SimplifyCFG/unprofitable-pr.ll
The file was modifiedllvm/test/Transforms/SimplifyCFG/fold-branch-to-common-dest-two-preds-cost.ll
Commit 7e3d0a5d0f375307e681a79606baa1008b40f6a4 by lebedev.ri
[NFC][PruneEH] Autogenerate checklines in a few tests for ease of updates
The file was modifiedllvm/test/Transforms/PruneEH/ipo-nounwind.ll
Commit eeeeff0d7bbb0b881213be24c0e33de6b755fe64 by lebedev.ri
[NFC][CHR] Autogenerate checklines in a few tests for ease of updates
The file was modifiedllvm/test/Transforms/PGOProfile/chr.ll
Commit 081c62501e4f0aad4ab31de52f871f98403073ad by a.v.lapshin
[llvm-objcopy] Refactor CopyConfig structure.

This patch prepares llvm-objcopy to move its implementation
into a separate library. To make it possible it is necessary
to minimize internal dependencies.

Differential Revision: https://reviews.llvm.org/D99055
The file was modifiedllvm/tools/llvm-objcopy/llvm-objcopy.h
The file was addedllvm/tools/llvm-objcopy/ConfigManager.h
The file was modifiedllvm/tools/llvm-objcopy/wasm/WasmObjcopy.h
The file was modifiedllvm/tools/llvm-objcopy/MachO/MachOObjcopy.cpp
The file was modifiedllvm/tools/llvm-objcopy/COFF/COFFObjcopy.cpp
The file was modifiedllvm/tools/llvm-objcopy/ELF/ELFObjcopy.cpp
The file was addedllvm/tools/llvm-objcopy/wasm/WasmConfig.h
The file was addedllvm/tools/llvm-objcopy/MachO/MachOConfig.h
The file was removedllvm/tools/llvm-objcopy/CopyConfig.h
The file was modifiedllvm/tools/llvm-objcopy/COFF/COFFObjcopy.h
The file was addedllvm/tools/llvm-objcopy/CommonConfig.h
The file was modifiedllvm/tools/llvm-objcopy/CMakeLists.txt
The file was addedllvm/tools/llvm-objcopy/ConfigManager.cpp
The file was removedllvm/tools/llvm-objcopy/ELF/ELFConfig.cpp
The file was modifiedllvm/tools/llvm-objcopy/llvm-objcopy.cpp
The file was modifiedllvm/tools/llvm-objcopy/wasm/WasmObjcopy.cpp
The file was removedllvm/tools/llvm-objcopy/CopyConfig.cpp
The file was modifiedllvm/tools/llvm-objcopy/ELF/ELFObjcopy.h
The file was modifiedllvm/tools/llvm-objcopy/MachO/MachOObjcopy.h
The file was addedllvm/tools/llvm-objcopy/COFF/COFFConfig.h
The file was addedllvm/tools/llvm-objcopy/MultiFormatConfig.h
The file was modifiedllvm/tools/llvm-objcopy/ELF/Object.h
The file was modifiedllvm/tools/llvm-objcopy/ELF/ELFConfig.h
Commit 2d8cb8205ab77dd5f1396ed46c62d4799f5a46b9 by llvmgnsyncbot
[gn build] Port 081c62501e4f
The file was modifiedllvm/utils/gn/secondary/llvm/tools/llvm-objcopy/BUILD.gn
Commit 0f88328867f4a309a558d1064e2cbb936e240629 by david.green
[AArch64] Add extra codegen tests. NFC

This adds some extra codegen tests for abs and hadd, regenerating some
of the existing tests with updated check lines.
The file was modifiedllvm/test/CodeGen/AArch64/arm64-vabs.ll
The file was modifiedllvm/test/CodeGen/AArch64/neg-abs.ll
The file was modifiedllvm/test/CodeGen/AArch64/arm64-vhadd.ll
Commit 1fb5278882e4abf7172b9f6d66404c8febe38ea6 by serguei.n.dmitriev
[llvm-strip] Add support for '--' for delimiting options from input files

This will allow to use llvm-strip with file names that begin with dashes.

Reviewed By: jhenderson

Differential Revision: https://reviews.llvm.org/D102825
The file was modifiedllvm/test/tools/llvm-objcopy/dash-dash.test
The file was modifiedllvm/tools/llvm-objcopy/ConfigManager.cpp
The file was modifiedllvm/test/tools/llvm-objcopy/tool-help-message.test
Commit 4a35c51c655852d03de6da6ccf743d40a935b293 by lebedev.ri
[NFC][Coroutines] Autogenerate a few tests for ease of further updates
The file was modifiedllvm/test/Transforms/Coroutines/coro-retcon-value.ll
The file was modifiedllvm/test/Transforms/Coroutines/coro-retcon-resume-values.ll
The file was modifiedllvm/test/Transforms/Coroutines/coro-retcon-once-value.ll
The file was modifiedllvm/test/Transforms/Coroutines/coro-retcon-alloca.ll
The file was modifiedllvm/test/Transforms/Coroutines/coro-retcon.ll
The file was modifiedllvm/test/Transforms/Coroutines/coro-swifterror.ll
Commit 7defab082070adf3d04b326ba160b029394edc7c by Jan Svoboda
Reapply "[clang][deps] Support inferred modules"

This reverts commit 76b8754d and ensures the PCM files are created in the correct directory (not in the current working directory).
The file was addedclang/test/ClangScanDeps/Inputs/frameworks/module.modulemap
The file was addedclang/test/ClangScanDeps/Inputs/frameworks/Inferred.framework/Frameworks/Sub.framework/Headers/Sub.h
The file was addedclang/test/ClangScanDeps/Inputs/frameworks/System.framework/Headers/System.h
The file was addedclang/test/ClangScanDeps/Inputs/modules_inferred_cdb.json
The file was addedclang/utils/module-deps-to-rsp.py
The file was addedclang/test/ClangScanDeps/modules-inferred-explicit-build.m
The file was addedclang/test/ClangScanDeps/Inputs/frameworks/Inferred.framework/Headers/Inferred.h
The file was modifiedclang/test/ClangScanDeps/modules-full.cpp
The file was addedclang/test/ClangScanDeps/modules-inferred.m
The file was modifiedclang/lib/Tooling/DependencyScanning/ModuleDepCollector.cpp
The file was addedclang/test/ClangScanDeps/Inputs/frameworks/System.framework/Modules/module.modulemap
Commit bf3b6cf9208166cc5a2980f56265d8123f0e09bf by david.truby
[llvm][sve] Lowering for VLS MLOAD/MSTORE

This adds custom lowering for the MLOAD and MSTORE ISD nodes when
passed fixed length vectors in SVE. This is done by converting the
vectors to VLA vectors and using the VLA code generation.

Fixed length extending loads and truncating stores currently produce
correct code, but do not use the built in extend/truncate in the
load and store instructions. This will be fixed in a future patch.

Differential Revision: https://reviews.llvm.org/D101834
The file was addedllvm/test/CodeGen/AArch64/sve-fixed-length-masked-loads.ll
The file was modifiedllvm/lib/Target/AArch64/AArch64ISelLowering.cpp
The file was modifiedllvm/lib/Target/AArch64/AArch64ISelLowering.h
The file was modifiedllvm/lib/Target/AArch64/AArch64TargetTransformInfo.h
The file was addedllvm/test/CodeGen/AArch64/sve-fixed-length-masked-stores.ll